From 3add5acff319a1215458f32f83a9a2457ff8eccc Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Thu, 27 Oct 2022 22:30:13 -0600 Subject: [PATCH 01/12] Fixing test --- lib/src/common/model/misc.dart | 12 +- lib/src/common/model/repos_releases.dart | 1 + lib/src/common/model/repos_releases.g.dart | 2 +- pubspec.yaml | 10 +- test/src/mocks.dart | 4 +- test/src/mocks.mocks.dart | 644 ++++++++++++++++----- test/unit/common/model/misc_test.dart | 51 +- 7 files changed, 543 insertions(+), 181 deletions(-) diff --git a/lib/src/common/model/misc.dart b/lib/src/common/model/misc.dart index ad693d34..adf7b2be 100644 --- a/lib/src/common/model/misc.dart +++ b/lib/src/common/model/misc.dart @@ -44,10 +44,14 @@ class RateLimit { /// /// API docs: https://developer.github.com/v3/rate_limit/ factory RateLimit.fromRateLimitResponse(Map response) { - final rateJson = response['rate'] as Map; - final limit = rateJson['limit'] as int?; - final remaining = rateJson['remaining'] as int?; - final resets = DateTime.fromMillisecondsSinceEpoch(rateJson['reset']!); + final rateJson = response['rate'] == null + ? null + : response['rate'] as Map; + final limit = rateJson?['limit'] as int?; + final remaining = rateJson?['remaining'] as int?; + final resets = rateJson?['reset'] == null + ? null + : DateTime.fromMillisecondsSinceEpoch(rateJson?['reset']); return RateLimit(limit, remaining, resets); } diff --git a/lib/src/common/model/repos_releases.dart b/lib/src/common/model/repos_releases.dart index 4656dd1c..30a80172 100644 --- a/lib/src/common/model/repos_releases.dart +++ b/lib/src/common/model/repos_releases.dart @@ -175,6 +175,7 @@ class CreateRelease { String? discussionCategoryName; + @JsonKey(defaultValue: false) bool generateReleaseNotes = false; CreateRelease(this.tagName); diff --git a/lib/src/common/model/repos_releases.g.dart b/lib/src/common/model/repos_releases.g.dart index bcaec1ee..2e0998e7 100644 --- a/lib/src/common/model/repos_releases.g.dart +++ b/lib/src/common/model/repos_releases.g.dart @@ -101,7 +101,7 @@ CreateRelease _$CreateReleaseFromJson(Map json) => ..isDraft = json['draft'] as bool? ..isPrerelease = json['prerelease'] as bool? ..discussionCategoryName = json['discussion_category_name'] as String? - ..generateReleaseNotes = json['generate_release_notes'] as bool; + ..generateReleaseNotes = json['generate_release_notes'] as bool? ?? false; Map _$CreateReleaseToJson(CreateRelease instance) => { diff --git a/pubspec.yaml b/pubspec.yaml index 77f1f627..de98fee0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,12 +4,12 @@ description: A high-level GitHub API Client Library that uses Github's v3 API homepage: https://github.com/SpinlockLabs/github.dart environment: - sdk: '>=2.14.0 <3.0.0' + sdk: '>=2.17.0 <3.0.0' dependencies: http: ^0.13.0 http_parser: ^4.0.0 - json_annotation: ^4.4.0 + json_annotation: ^4.7.0 meta: ^1.3.0 dev_dependencies: @@ -19,9 +19,9 @@ dev_dependencies: collection: ^1.15.0 dependency_validator: json_serializable: ^6.0.0 - lints: ^1.0.0 - mockito: ^5.0.0 + lints: ^2.0.0 + mockito: ^5.3.0 pub_semver: - test: ^1.16.0 + test: #^1.16.0 yaml: ^3.0.0 yaml_edit: diff --git a/test/src/mocks.dart b/test/src/mocks.dart index 8add5505..a32bb7eb 100644 --- a/test/src/mocks.dart +++ b/test/src/mocks.dart @@ -1,5 +1,5 @@ import 'package:github/src/common.dart'; import 'package:mockito/annotations.dart'; -@GenerateMocks([GitHub]) -void main() {} +@GenerateNiceMocks([MockSpec()]) +import 'mocks.mocks.dart'; diff --git a/test/src/mocks.mocks.dart b/test/src/mocks.mocks.dart index c381f58a..0b989c63 100644 --- a/test/src/mocks.mocks.dart +++ b/test/src/mocks.mocks.dart @@ -1,7 +1,8 @@ -// Mocks generated by Mockito 5.2.0 from annotations +// Mocks generated by Mockito 5.3.2 from annotations // in github/test/src/mocks.dart. // Do not manually edit this file. +// ignore_for_file: no_leading_underscores_for_library_prefixes import 'dart:async' as _i4; import 'package:github/src/common.dart' as _i3; @@ -17,246 +18,571 @@ import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: prefer_const_constructors // ignore_for_file: unnecessary_parenthesis // ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class -class _FakeClient_0 extends _i1.Fake implements _i2.Client {} +class _FakeClient_0 extends _i1.SmartFake implements _i2.Client { + _FakeClient_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeActivityService_1 extends _i1.Fake implements _i3.ActivityService {} +class _FakeActivityService_1 extends _i1.SmartFake + implements _i3.ActivityService { + _FakeActivityService_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeAuthorizationsService_2 extends _i1.Fake - implements _i3.AuthorizationsService {} +class _FakeAuthorizationsService_2 extends _i1.SmartFake + implements _i3.AuthorizationsService { + _FakeAuthorizationsService_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeGistsService_3 extends _i1.Fake implements _i3.GistsService {} +class _FakeGistsService_3 extends _i1.SmartFake implements _i3.GistsService { + _FakeGistsService_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeGitService_4 extends _i1.Fake implements _i3.GitService {} +class _FakeGitService_4 extends _i1.SmartFake implements _i3.GitService { + _FakeGitService_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeIssuesService_5 extends _i1.Fake implements _i3.IssuesService {} +class _FakeIssuesService_5 extends _i1.SmartFake implements _i3.IssuesService { + _FakeIssuesService_5( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeMiscService_6 extends _i1.Fake implements _i3.MiscService {} +class _FakeMiscService_6 extends _i1.SmartFake implements _i3.MiscService { + _FakeMiscService_6( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeOrganizationsService_7 extends _i1.Fake - implements _i3.OrganizationsService {} +class _FakeOrganizationsService_7 extends _i1.SmartFake + implements _i3.OrganizationsService { + _FakeOrganizationsService_7( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakePullRequestsService_8 extends _i1.Fake - implements _i3.PullRequestsService {} +class _FakePullRequestsService_8 extends _i1.SmartFake + implements _i3.PullRequestsService { + _FakePullRequestsService_8( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeRepositoriesService_9 extends _i1.Fake - implements _i3.RepositoriesService {} +class _FakeRepositoriesService_9 extends _i1.SmartFake + implements _i3.RepositoriesService { + _FakeRepositoriesService_9( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeSearchService_10 extends _i1.Fake implements _i3.SearchService {} +class _FakeSearchService_10 extends _i1.SmartFake implements _i3.SearchService { + _FakeSearchService_10( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeUrlShortenerService_11 extends _i1.Fake - implements _i3.UrlShortenerService {} +class _FakeUrlShortenerService_11 extends _i1.SmartFake + implements _i3.UrlShortenerService { + _FakeUrlShortenerService_11( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeUsersService_12 extends _i1.Fake implements _i3.UsersService {} +class _FakeUsersService_12 extends _i1.SmartFake implements _i3.UsersService { + _FakeUsersService_12( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeChecksService_13 extends _i1.Fake implements _i3.ChecksService {} +class _FakeChecksService_13 extends _i1.SmartFake implements _i3.ChecksService { + _FakeChecksService_13( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeResponse_14 extends _i1.Fake implements _i2.Response {} +class _FakeResponse_14 extends _i1.SmartFake implements _i2.Response { + _FakeResponse_14( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} /// A class which mocks [GitHub]. /// /// See the documentation for Mockito's code generation for more information. class MockGitHub extends _i1.Mock implements _i3.GitHub { - MockGitHub() { - _i1.throwOnMissingStub(this); - } - @override - set auth(_i3.Authentication? _auth) => - super.noSuchMethod(Invocation.setter(#auth, _auth), - returnValueForMissingStub: null); + set auth(_i3.Authentication? _auth) => super.noSuchMethod( + Invocation.setter( + #auth, + _auth, + ), + returnValueForMissingStub: null, + ); @override - String get endpoint => - (super.noSuchMethod(Invocation.getter(#endpoint), returnValue: '') - as String); + String get endpoint => (super.noSuchMethod( + Invocation.getter(#endpoint), + returnValue: '', + returnValueForMissingStub: '', + ) as String); @override - _i2.Client get client => (super.noSuchMethod(Invocation.getter(#client), - returnValue: _FakeClient_0()) as _i2.Client); + _i2.Client get client => (super.noSuchMethod( + Invocation.getter(#client), + returnValue: _FakeClient_0( + this, + Invocation.getter(#client), + ), + returnValueForMissingStub: _FakeClient_0( + this, + Invocation.getter(#client), + ), + ) as _i2.Client); @override - _i3.ActivityService get activity => - (super.noSuchMethod(Invocation.getter(#activity), - returnValue: _FakeActivityService_1()) as _i3.ActivityService); + _i3.ActivityService get activity => (super.noSuchMethod( + Invocation.getter(#activity), + returnValue: _FakeActivityService_1( + this, + Invocation.getter(#activity), + ), + returnValueForMissingStub: _FakeActivityService_1( + this, + Invocation.getter(#activity), + ), + ) as _i3.ActivityService); @override - _i3.AuthorizationsService get authorizations => - (super.noSuchMethod(Invocation.getter(#authorizations), - returnValue: _FakeAuthorizationsService_2()) - as _i3.AuthorizationsService); + _i3.AuthorizationsService get authorizations => (super.noSuchMethod( + Invocation.getter(#authorizations), + returnValue: _FakeAuthorizationsService_2( + this, + Invocation.getter(#authorizations), + ), + returnValueForMissingStub: _FakeAuthorizationsService_2( + this, + Invocation.getter(#authorizations), + ), + ) as _i3.AuthorizationsService); @override - _i3.GistsService get gists => (super.noSuchMethod(Invocation.getter(#gists), - returnValue: _FakeGistsService_3()) as _i3.GistsService); + _i3.GistsService get gists => (super.noSuchMethod( + Invocation.getter(#gists), + returnValue: _FakeGistsService_3( + this, + Invocation.getter(#gists), + ), + returnValueForMissingStub: _FakeGistsService_3( + this, + Invocation.getter(#gists), + ), + ) as _i3.GistsService); @override - _i3.GitService get git => (super.noSuchMethod(Invocation.getter(#git), - returnValue: _FakeGitService_4()) as _i3.GitService); + _i3.GitService get git => (super.noSuchMethod( + Invocation.getter(#git), + returnValue: _FakeGitService_4( + this, + Invocation.getter(#git), + ), + returnValueForMissingStub: _FakeGitService_4( + this, + Invocation.getter(#git), + ), + ) as _i3.GitService); @override - _i3.IssuesService get issues => - (super.noSuchMethod(Invocation.getter(#issues), - returnValue: _FakeIssuesService_5()) as _i3.IssuesService); + _i3.IssuesService get issues => (super.noSuchMethod( + Invocation.getter(#issues), + returnValue: _FakeIssuesService_5( + this, + Invocation.getter(#issues), + ), + returnValueForMissingStub: _FakeIssuesService_5( + this, + Invocation.getter(#issues), + ), + ) as _i3.IssuesService); @override - _i3.MiscService get misc => (super.noSuchMethod(Invocation.getter(#misc), - returnValue: _FakeMiscService_6()) as _i3.MiscService); + _i3.MiscService get misc => (super.noSuchMethod( + Invocation.getter(#misc), + returnValue: _FakeMiscService_6( + this, + Invocation.getter(#misc), + ), + returnValueForMissingStub: _FakeMiscService_6( + this, + Invocation.getter(#misc), + ), + ) as _i3.MiscService); @override _i3.OrganizationsService get organizations => (super.noSuchMethod( - Invocation.getter(#organizations), - returnValue: _FakeOrganizationsService_7()) as _i3.OrganizationsService); + Invocation.getter(#organizations), + returnValue: _FakeOrganizationsService_7( + this, + Invocation.getter(#organizations), + ), + returnValueForMissingStub: _FakeOrganizationsService_7( + this, + Invocation.getter(#organizations), + ), + ) as _i3.OrganizationsService); @override _i3.PullRequestsService get pullRequests => (super.noSuchMethod( - Invocation.getter(#pullRequests), - returnValue: _FakePullRequestsService_8()) as _i3.PullRequestsService); + Invocation.getter(#pullRequests), + returnValue: _FakePullRequestsService_8( + this, + Invocation.getter(#pullRequests), + ), + returnValueForMissingStub: _FakePullRequestsService_8( + this, + Invocation.getter(#pullRequests), + ), + ) as _i3.PullRequestsService); @override _i3.RepositoriesService get repositories => (super.noSuchMethod( - Invocation.getter(#repositories), - returnValue: _FakeRepositoriesService_9()) as _i3.RepositoriesService); + Invocation.getter(#repositories), + returnValue: _FakeRepositoriesService_9( + this, + Invocation.getter(#repositories), + ), + returnValueForMissingStub: _FakeRepositoriesService_9( + this, + Invocation.getter(#repositories), + ), + ) as _i3.RepositoriesService); @override - _i3.SearchService get search => - (super.noSuchMethod(Invocation.getter(#search), - returnValue: _FakeSearchService_10()) as _i3.SearchService); + _i3.SearchService get search => (super.noSuchMethod( + Invocation.getter(#search), + returnValue: _FakeSearchService_10( + this, + Invocation.getter(#search), + ), + returnValueForMissingStub: _FakeSearchService_10( + this, + Invocation.getter(#search), + ), + ) as _i3.SearchService); @override _i3.UrlShortenerService get urlShortener => (super.noSuchMethod( - Invocation.getter(#urlShortener), - returnValue: _FakeUrlShortenerService_11()) as _i3.UrlShortenerService); + Invocation.getter(#urlShortener), + returnValue: _FakeUrlShortenerService_11( + this, + Invocation.getter(#urlShortener), + ), + returnValueForMissingStub: _FakeUrlShortenerService_11( + this, + Invocation.getter(#urlShortener), + ), + ) as _i3.UrlShortenerService); @override - _i3.UsersService get users => (super.noSuchMethod(Invocation.getter(#users), - returnValue: _FakeUsersService_12()) as _i3.UsersService); + _i3.UsersService get users => (super.noSuchMethod( + Invocation.getter(#users), + returnValue: _FakeUsersService_12( + this, + Invocation.getter(#users), + ), + returnValueForMissingStub: _FakeUsersService_12( + this, + Invocation.getter(#users), + ), + ) as _i3.UsersService); @override - _i3.ChecksService get checks => - (super.noSuchMethod(Invocation.getter(#checks), - returnValue: _FakeChecksService_13()) as _i3.ChecksService); + _i3.ChecksService get checks => (super.noSuchMethod( + Invocation.getter(#checks), + returnValue: _FakeChecksService_13( + this, + Invocation.getter(#checks), + ), + returnValueForMissingStub: _FakeChecksService_13( + this, + Invocation.getter(#checks), + ), + ) as _i3.ChecksService); @override - _i4.Future getJSON(String? path, - {int? statusCode, - void Function(_i2.Response)? fail, - Map? headers, - Map? params, - _i3.JSONConverter? convert, - String? preview}) => + _i4.Future getJSON( + String? path, { + int? statusCode, + void Function(_i2.Response)? fail, + Map? headers, + Map? params, + _i3.JSONConverter? convert, + String? preview, + }) => (super.noSuchMethod( - Invocation.method(#getJSON, [ - path - ], { + Invocation.method( + #getJSON, + [path], + { #statusCode: statusCode, #fail: fail, #headers: headers, #params: params, #convert: convert, - #preview: preview - }), - returnValue: Future.value(null)) as _i4.Future); + #preview: preview, + }, + ), + returnValue: _i4.Future.value(null), + returnValueForMissingStub: _i4.Future.value(null), + ) as _i4.Future); @override - _i4.Future postJSON(String? path, - {int? statusCode, - void Function(_i2.Response)? fail, - Map? headers, - Map? params, - _i3.JSONConverter? convert, - dynamic body, - String? preview}) => + _i4.Future postJSON( + String? path, { + int? statusCode, + void Function(_i2.Response)? fail, + Map? headers, + Map? params, + _i3.JSONConverter? convert, + dynamic body, + String? preview, + }) => (super.noSuchMethod( - Invocation.method(#postJSON, [ - path - ], { + Invocation.method( + #postJSON, + [path], + { #statusCode: statusCode, #fail: fail, #headers: headers, #params: params, #convert: convert, #body: body, - #preview: preview - }), - returnValue: Future.value(null)) as _i4.Future); + #preview: preview, + }, + ), + returnValue: _i4.Future.value(null), + returnValueForMissingStub: _i4.Future.value(null), + ) as _i4.Future); @override - _i4.Future putJSON(String? path, - {int? statusCode, - void Function(_i2.Response)? fail, - Map? headers, - Map? params, - _i3.JSONConverter? convert, - dynamic body, - String? preview}) => + _i4.Future putJSON( + String? path, { + int? statusCode, + void Function(_i2.Response)? fail, + Map? headers, + Map? params, + _i3.JSONConverter? convert, + dynamic body, + String? preview, + }) => (super.noSuchMethod( - Invocation.method(#putJSON, [ - path - ], { + Invocation.method( + #putJSON, + [path], + { #statusCode: statusCode, #fail: fail, #headers: headers, #params: params, #convert: convert, #body: body, - #preview: preview - }), - returnValue: Future.value(null)) as _i4.Future); + #preview: preview, + }, + ), + returnValue: _i4.Future.value(null), + returnValueForMissingStub: _i4.Future.value(null), + ) as _i4.Future); @override - _i4.Future patchJSON(String? path, - {int? statusCode, - void Function(_i2.Response)? fail, - Map? headers, - Map? params, - _i3.JSONConverter? convert, - dynamic body, - String? preview}) => + _i4.Future patchJSON( + String? path, { + int? statusCode, + void Function(_i2.Response)? fail, + Map? headers, + Map? params, + _i3.JSONConverter? convert, + dynamic body, + String? preview, + }) => (super.noSuchMethod( - Invocation.method(#patchJSON, [ - path - ], { + Invocation.method( + #patchJSON, + [path], + { #statusCode: statusCode, #fail: fail, #headers: headers, #params: params, #convert: convert, #body: body, - #preview: preview - }), - returnValue: Future.value(null)) as _i4.Future); + #preview: preview, + }, + ), + returnValue: _i4.Future.value(null), + returnValueForMissingStub: _i4.Future.value(null), + ) as _i4.Future); @override - _i4.Future requestJson(String? method, String? path, - {int? statusCode, - void Function(_i2.Response)? fail, - Map? headers, - Map? params, - _i3.JSONConverter? convert, - dynamic body, - String? preview}) => + _i4.Future requestJson( + String? method, + String? path, { + int? statusCode, + void Function(_i2.Response)? fail, + Map? headers, + Map? params, + _i3.JSONConverter? convert, + dynamic body, + String? preview, + }) => (super.noSuchMethod( - Invocation.method(#requestJson, [ + Invocation.method( + #requestJson, + [ method, - path - ], { + path, + ], + { #statusCode: statusCode, #fail: fail, #headers: headers, #params: params, #convert: convert, #body: body, - #preview: preview - }), - returnValue: Future.value(null)) as _i4.Future); + #preview: preview, + }, + ), + returnValue: _i4.Future.value(null), + returnValueForMissingStub: _i4.Future.value(null), + ) as _i4.Future); @override - _i4.Future<_i2.Response> request(String? method, String? path, - {Map? headers, - Map? params, - dynamic body, - int? statusCode, - void Function(_i2.Response)? fail, - String? preview}) => + _i4.Future<_i2.Response> request( + String? method, + String? path, { + Map? headers, + Map? params, + dynamic body, + int? statusCode, + void Function(_i2.Response)? fail, + String? preview, + }) => (super.noSuchMethod( - Invocation.method(#request, [ - method, - path - ], { - #headers: headers, - #params: params, - #body: body, - #statusCode: statusCode, - #fail: fail, - #preview: preview - }), - returnValue: Future<_i2.Response>.value(_FakeResponse_14())) - as _i4.Future<_i2.Response>); + Invocation.method( + #request, + [ + method, + path, + ], + { + #headers: headers, + #params: params, + #body: body, + #statusCode: statusCode, + #fail: fail, + #preview: preview, + }, + ), + returnValue: _i4.Future<_i2.Response>.value(_FakeResponse_14( + this, + Invocation.method( + #request, + [ + method, + path, + ], + { + #headers: headers, + #params: params, + #body: body, + #statusCode: statusCode, + #fail: fail, + #preview: preview, + }, + ), + )), + returnValueForMissingStub: + _i4.Future<_i2.Response>.value(_FakeResponse_14( + this, + Invocation.method( + #request, + [ + method, + path, + ], + { + #headers: headers, + #params: params, + #body: body, + #statusCode: statusCode, + #fail: fail, + #preview: preview, + }, + ), + )), + ) as _i4.Future<_i2.Response>); @override - void handleStatusCode(_i2.Response? response) => - super.noSuchMethod(Invocation.method(#handleStatusCode, [response]), - returnValueForMissingStub: null); + void handleStatusCode(_i2.Response? response) => super.noSuchMethod( + Invocation.method( + #handleStatusCode, + [response], + ), + returnValueForMissingStub: null, + ); @override - void dispose() => super.noSuchMethod(Invocation.method(#dispose, []), - returnValueForMissingStub: null); + void dispose() => super.noSuchMethod( + Invocation.method( + #dispose, + [], + ), + returnValueForMissingStub: null, + ); } diff --git a/test/unit/common/model/misc_test.dart b/test/unit/common/model/misc_test.dart index e5bb9a4d..a7cbf3c2 100644 --- a/test/unit/common/model/misc_test.dart +++ b/test/unit/common/model/misc_test.dart @@ -6,16 +6,47 @@ import 'package:test/test.dart'; void main() { group('RateLimit', () { test('fromRateLimitResponse', () { - // This is a truncated version of the response - const rateLimitJson = '''{ - "resources": { - "rate": { - "limit": 5000, - "remaining": 4999, - "reset": 1372700873, - "used": 1 - } - }'''; + const rateLimitJson = ''' +{ + "resources": { + "core": { + "limit": 5000, + "remaining": 4999, + "reset": 1372700873, + "used": 1 + }, + "search": { + "limit": 30, + "remaining": 18, + "reset": 1372697452, + "used": 12 + }, + "graphql": { + "limit": 5000, + "remaining": 4993, + "reset": 1372700389, + "used": 7 + }, + "integration_manifest": { + "limit": 5000, + "remaining": 4999, + "reset": 1551806725, + "used": 1 + }, + "code_scanning_upload": { + "limit": 500, + "remaining": 499, + "reset": 1551806725, + "used": 1 + } + }, + "rate": { + "limit": 5000, + "remaining": 4999, + "reset": 1372700873, + "used": 1 + } +}'''; final rateLimit = RateLimit.fromRateLimitResponse(jsonDecode(rateLimitJson)); From 437abf70af6d300e961277ff7ad8b6d3ba83fa9f Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Fri, 28 Oct 2022 10:31:17 -0600 Subject: [PATCH 02/12] get some tests running in CI --- .github/workflows/tests.yml | 4 +- test/git_test.dart | 596 ++++++++++++++++++------------------ test/src/mocks.dart | 5 - test/src/mocks.mocks.dart | 588 ----------------------------------- 4 files changed, 300 insertions(+), 893 deletions(-) delete mode 100644 test/src/mocks.dart delete mode 100644 test/src/mocks.mocks.dart diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b0ca36a3..7d7a75dd 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -12,7 +12,7 @@ jobs: - uses: dart-lang/setup-dart@v1 - name: Install dependencies run: dart pub get - # - name: Unit tests - # run: dart test test + - name: Unit tests + run: dart test test # - name: Integration tests # run: dart test integration_test diff --git a/test/git_test.dart b/test/git_test.dart index d6e19bdb..7ff1846e 100644 --- a/test/git_test.dart +++ b/test/git_test.dart @@ -6,305 +6,305 @@ import 'package:http/http.dart' as http; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; -import 'src/mocks.mocks.dart'; +//import 'src/mocks.mocks.dart'; void main() { - late MockGitHub github; - late GitService git; - late RepositorySlug repo; - const someSha = 'someSHA'; - - setUp(() { - github = MockGitHub(); - git = GitService(github); - repo = RepositorySlug('o', 'n'); - }); - - group('getBlob()', () { - test('constructs correct path', () { - git.getBlob(repo, 'sh'); - - verify(github.getJSON('/repos/o/n/git/blobs/sh', - convert: (dynamic i) => GitBlob.fromJson(i), - statusCode: StatusCodes.OK)); - }); - }); - - group('createBlob()', () { - test('constructs correct path', () { - var blob = CreateGitBlob('bbb', 'utf-8'); - git.createBlob(repo, blob); - - verify(github.postJSON( - '/repos/o/n/git/blobs', - convert: (dynamic i) => GitBlob.fromJson(i), - statusCode: StatusCodes.CREATED, - body: GitHubJson.encode(blob), - )); - }); - - test('creates valid JSON body', () { - var blob = CreateGitBlob('bbb', 'utf-8'); - - git.createBlob(repo, blob); - final body = captureSentBody(github)!; - expect(body['content'], equals('bbb')); - expect(body['encoding'], equals('utf-8')); - }); - }); - - group('getCommit()', () { - test('constructs correct path', () { - git.getCommit(repo, 'sh'); - - verify(github.getJSON('/repos/o/n/git/commits/sh', - convert: (dynamic i) => GitCommit.fromJson(i), - statusCode: StatusCodes.OK)); - }); - }); - - group('createCommit()', () { - test('constructs correct path', () { - final commit = CreateGitCommit('aMessage', 'aTreeSha'); - git.createCommit(repo, commit); - - verify(github.postJSON( - '/repos/o/n/git/commits', - convert: (dynamic i) => GitCommit.fromJson(i), - statusCode: StatusCodes.CREATED, - body: GitHubJson.encode(commit), - )); - }); - - test('creates valid JSON body', () { - // given - const date = '2014-10-02T15:21:29Z'; - - final commit = CreateGitCommit('aMessage', 'aTreeSha') - ..parents = ['parentSha1', 'parentSha2'] - ..committer = GitCommitUser('cName', 'cEmail', DateTime.parse(date)) - ..author = GitCommitUser('aName', 'aEmail', DateTime.parse(date)); - - // when - git.createCommit(repo, commit); - - // then - final body = captureSentBody(github)!; - expect(body['message'], equals('aMessage')); - expect(body['tree'], equals('aTreeSha')); - expect(body['parents'], equals(['parentSha1', 'parentSha2'])); - expect(body['committer']['name'], equals('cName')); - expect(body['committer']['email'], equals('cEmail')); - expect(body['committer']['date'], equals(date)); - expect(body['author']['name'], equals('aName')); - expect(body['author']['email'], equals('aEmail')); - expect(body['author']['date'], equals(date)); - }); - }); - - group('getReference()', () { - test('constructs correct path', () { - git.getReference(repo, 'heads/b'); - - verify(github.getJSON('/repos/o/n/git/refs/heads/b', - convert: (dynamic i) => GitReference.fromJson(i), - statusCode: StatusCodes.OK)); - }); - }); - - group('createReference()', () { - const someRef = 'refs/heads/b'; - test('constructs correct path', () { - git.createReference(repo, someRef, someSha); - - verify(github.postJSON('/repos/o/n/git/refs', - convert: (dynamic i) => GitReference.fromJson(i), - statusCode: StatusCodes.CREATED, - body: GitHubJson.encode({'ref': someRef, 'sha': someSha}))); - }); - - test('creates valid JSON body', () { - git.createReference(repo, someRef, someSha); - - final body = captureSentBody(github)!; - expect(body['ref'], equals(someRef)); - expect(body['sha'], equals(someSha)); - }); - }); - - group('editReference()', () { - test('constructs correct path', () { - // given - final expectedResponse = http.Response('{}', 200); - - when(github.request(any, any, body: any, headers: any)) - .thenReturn(Future.value(expectedResponse)); - - // when - git.editReference(repo, 'heads/b', someSha); - - // then - verify(github.request('PATCH', '/repos/o/n/git/refs/heads/b', - headers: any, body: any)); - }); - - test('creates valid JSON body', () { - // given - final expectedResponse = http.Response('{}', 200); - when(github.request(any, any, body: any, headers: any)) - .thenReturn(Future.value(expectedResponse)); - - // when - git.editReference(repo, 'heads/b', someSha, force: true); - - // then - final captured = verify(github.request( - any, - any, - body: captureAny, - headers: captureAny, - )).captured; - - final body = jsonDecode(captured[0]); - final headers = captured[1]; - - expect(body['sha'], equals(someSha)); - expect(body['force'], equals(true)); - expect(headers['content-length'], equals('30')); - }); - }); - - group('deleteReference()', () { - test('constructs correct path', () { - // given - final expectedResponse = http.Response('{}', 200); - when(github.request(any, any)).thenReturn(Future.value(expectedResponse)); - - // when - git.deleteReference(repo, 'heads/b'); - - // then - verify(github.request('DELETE', '/repos/o/n/git/refs/heads/b')); - }); - }); - - group('getTag()', () { - test('constructs correct path', () { - git.getTag(repo, someSha); - - verify(github.getJSON('/repos/o/n/git/tags/someSHA', - convert: (dynamic i) => GitTag.fromJson(i), - statusCode: StatusCodes.OK)); - }); - }); - - group('createTag()', () { - final createGitTag = CreateGitTag('v0.0.1', 'a message', someSha, 'commit', - GitCommitUser('aName', 'aEmail', DateTime.now())); - - test('constructs correct path', () { - git.createTag(repo, createGitTag); - - verify(github.postJSON('/repos/o/n/git/tags', - convert: (dynamic i) => GitTag.fromJson(i), - statusCode: StatusCodes.CREATED, - body: GitHubJson.encode(createGitTag))); - }); - - test('creates valid JSON body', () { - git.createTag(repo, createGitTag); - - final body = captureSentBody(github)!; - expect(body['tag'], equals('v0.0.1')); - expect(body['message'], equals('a message')); - expect(body['object'], equals(someSha)); - expect(body['type'], equals('commit')); - expect(body['tagger']['name'], equals('aName')); - }); - }); - - group('getTree()', () { - test('constructs correct path', () { - git.getTree(repo, 'sh'); - - verify(github.getJSON('/repos/o/n/git/trees/sh', - convert: (dynamic j) => GitTree.fromJson(j), - statusCode: StatusCodes.OK)); - }); - }); - - group('getTree(recursive: true)', () { - test('constructs correct path', () { - git.getTree(repo, 'sh', recursive: true); - - verify(github.getJSON('/repos/o/n/git/trees/sh?recursive=1', - convert: (dynamic j) => GitTree.fromJson(j), - statusCode: StatusCodes.OK)); - }); - }); - - group('createTree()', () { - test('constructs correct path', () { - final createGitTree = CreateGitTree([]); - git.createTree(repo, createGitTree); - - verify(github.postJSON('/repos/o/n/git/trees', - convert: (dynamic j) => GitTree.fromJson(j), - statusCode: StatusCodes.CREATED, - body: GitHubJson.encode(createGitTree))); - }); - - test('with sha creates valid JSON body', () { - // given - var treeEntry = CreateGitTreeEntry('file.rb', '100644', 'blob', - sha: '44b4fc6d56897b048c772eb4087f854f46256132'); - - final tree = CreateGitTree([treeEntry]); - - // when - git.createTree(repo, tree); - - // then - final body = captureSentBody(github)!; - expect(body['tree'], isNotNull); - expect(body['tree'][0]['path'], equals('file.rb')); - expect(body['tree'][0]['mode'], equals('100644')); - expect(body['tree'][0]['type'], equals('blob')); - expect(body['tree'][0]['sha'], - equals('44b4fc6d56897b048c772eb4087f854f46256132')); - expect(body['tree'][0]['content'], isNull); - }); - - test('with content creates valid JSON body', () { - // given - var treeEntry = CreateGitTreeEntry('file.rb', '100644', 'blob', - content: 'some file content'); - - final tree = CreateGitTree([treeEntry]); - - // when - git.createTree(repo, tree); - - // then - final body = captureSentBody(github)!; - expect(body['tree'], isNotNull); - expect(body['tree'][0]['path'], equals('file.rb')); - expect(body['tree'][0]['mode'], equals('100644')); - expect(body['tree'][0]['type'], equals('blob')); - expect(body['tree'][0]['sha'], isNull); - expect(body['tree'][0]['content'], equals('some file content')); - }); - }); + // late MockGitHub github; + // late GitService git; + // late RepositorySlug repo; + // const someSha = 'someSHA'; + + // setUp(() { + // github = MockGitHub(); + // git = GitService(github); + // repo = RepositorySlug('o', 'n'); + // }); + + // group('getBlob()', () { + // test('constructs correct path', () { + // git.getBlob(repo, 'sh'); + + // verify(github.getJSON('/repos/o/n/git/blobs/sh', + // convert: (dynamic i) => GitBlob.fromJson(i), + // statusCode: StatusCodes.OK)); + // }); + // }); + + // group('createBlob()', () { + // test('constructs correct path', () { + // var blob = CreateGitBlob('bbb', 'utf-8'); + // git.createBlob(repo, blob); + + // verify(github.postJSON( + // '/repos/o/n/git/blobs', + // convert: (dynamic i) => GitBlob.fromJson(i), + // statusCode: StatusCodes.CREATED, + // body: GitHubJson.encode(blob), + // )); + // }); + + // test('creates valid JSON body', () { + // var blob = CreateGitBlob('bbb', 'utf-8'); + + // git.createBlob(repo, blob); + // final body = captureSentBody(github)!; + // expect(body['content'], equals('bbb')); + // expect(body['encoding'], equals('utf-8')); + // }); + // }); + + // group('getCommit()', () { + // test('constructs correct path', () { + // git.getCommit(repo, 'sh'); + + // verify(github.getJSON('/repos/o/n/git/commits/sh', + // convert: (dynamic i) => GitCommit.fromJson(i), + // statusCode: StatusCodes.OK)); + // }); + // }); + + // group('createCommit()', () { + // test('constructs correct path', () { + // final commit = CreateGitCommit('aMessage', 'aTreeSha'); + // git.createCommit(repo, commit); + + // verify(github.postJSON( + // '/repos/o/n/git/commits', + // convert: (dynamic i) => GitCommit.fromJson(i), + // statusCode: StatusCodes.CREATED, + // body: GitHubJson.encode(commit), + // )); + // }); + + // test('creates valid JSON body', () { + // // given + // const date = '2014-10-02T15:21:29Z'; + + // final commit = CreateGitCommit('aMessage', 'aTreeSha') + // ..parents = ['parentSha1', 'parentSha2'] + // ..committer = GitCommitUser('cName', 'cEmail', DateTime.parse(date)) + // ..author = GitCommitUser('aName', 'aEmail', DateTime.parse(date)); + + // // when + // git.createCommit(repo, commit); + + // // then + // final body = captureSentBody(github)!; + // expect(body['message'], equals('aMessage')); + // expect(body['tree'], equals('aTreeSha')); + // expect(body['parents'], equals(['parentSha1', 'parentSha2'])); + // expect(body['committer']['name'], equals('cName')); + // expect(body['committer']['email'], equals('cEmail')); + // expect(body['committer']['date'], equals(date)); + // expect(body['author']['name'], equals('aName')); + // expect(body['author']['email'], equals('aEmail')); + // expect(body['author']['date'], equals(date)); + // }); + // }); + + // group('getReference()', () { + // test('constructs correct path', () { + // git.getReference(repo, 'heads/b'); + + // verify(github.getJSON('/repos/o/n/git/refs/heads/b', + // convert: (dynamic i) => GitReference.fromJson(i), + // statusCode: StatusCodes.OK)); + // }); + // }); + + // group('createReference()', () { + // const someRef = 'refs/heads/b'; + // test('constructs correct path', () { + // git.createReference(repo, someRef, someSha); + + // verify(github.postJSON('/repos/o/n/git/refs', + // convert: (dynamic i) => GitReference.fromJson(i), + // statusCode: StatusCodes.CREATED, + // body: GitHubJson.encode({'ref': someRef, 'sha': someSha}))); + // }); + + // test('creates valid JSON body', () { + // git.createReference(repo, someRef, someSha); + + // final body = captureSentBody(github)!; + // expect(body['ref'], equals(someRef)); + // expect(body['sha'], equals(someSha)); + // }); + // }); + + // group('editReference()', () { + // test('constructs correct path', () { + // // given + // final expectedResponse = http.Response('{}', 200); + + // when(github.request(any, any, body: any, headers: any)) + // .thenReturn(Future.value(expectedResponse)); + + // // when + // git.editReference(repo, 'heads/b', someSha); + + // // then + // verify(github.request('PATCH', '/repos/o/n/git/refs/heads/b', + // headers: any, body: any)); + // }); + + // test('creates valid JSON body', () { + // // given + // final expectedResponse = http.Response('{}', 200); + // when(github.request(any, any, body: any, headers: any)) + // .thenReturn(Future.value(expectedResponse)); + + // // when + // git.editReference(repo, 'heads/b', someSha, force: true); + + // // then + // final captured = verify(github.request( + // any, + // any, + // body: captureAny, + // headers: captureAny, + // )).captured; + + // final body = jsonDecode(captured[0]); + // final headers = captured[1]; + + // expect(body['sha'], equals(someSha)); + // expect(body['force'], equals(true)); + // expect(headers['content-length'], equals('30')); + // }); + // }); + + // group('deleteReference()', () { + // test('constructs correct path', () { + // // given + // final expectedResponse = http.Response('{}', 200); + // when(github.request(any, any)).thenReturn(Future.value(expectedResponse)); + + // // when + // git.deleteReference(repo, 'heads/b'); + + // // then + // verify(github.request('DELETE', '/repos/o/n/git/refs/heads/b')); + // }); + // }); + + // group('getTag()', () { + // test('constructs correct path', () { + // git.getTag(repo, someSha); + + // verify(github.getJSON('/repos/o/n/git/tags/someSHA', + // convert: (dynamic i) => GitTag.fromJson(i), + // statusCode: StatusCodes.OK)); + // }); + // }); + + // group('createTag()', () { + // final createGitTag = CreateGitTag('v0.0.1', 'a message', someSha, 'commit', + // GitCommitUser('aName', 'aEmail', DateTime.now())); + + // test('constructs correct path', () { + // git.createTag(repo, createGitTag); + + // verify(github.postJSON('/repos/o/n/git/tags', + // convert: (dynamic i) => GitTag.fromJson(i), + // statusCode: StatusCodes.CREATED, + // body: GitHubJson.encode(createGitTag))); + // }); + + // test('creates valid JSON body', () { + // git.createTag(repo, createGitTag); + + // final body = captureSentBody(github)!; + // expect(body['tag'], equals('v0.0.1')); + // expect(body['message'], equals('a message')); + // expect(body['object'], equals(someSha)); + // expect(body['type'], equals('commit')); + // expect(body['tagger']['name'], equals('aName')); + // }); + // }); + + // group('getTree()', () { + // test('constructs correct path', () { + // git.getTree(repo, 'sh'); + + // verify(github.getJSON('/repos/o/n/git/trees/sh', + // convert: (dynamic j) => GitTree.fromJson(j), + // statusCode: StatusCodes.OK)); + // }); + // }); + + // group('getTree(recursive: true)', () { + // test('constructs correct path', () { + // git.getTree(repo, 'sh', recursive: true); + + // verify(github.getJSON('/repos/o/n/git/trees/sh?recursive=1', + // convert: (dynamic j) => GitTree.fromJson(j), + // statusCode: StatusCodes.OK)); + // }); + // }); + + // group('createTree()', () { + // test('constructs correct path', () { + // final createGitTree = CreateGitTree([]); + // git.createTree(repo, createGitTree); + + // verify(github.postJSON('/repos/o/n/git/trees', + // convert: (dynamic j) => GitTree.fromJson(j), + // statusCode: StatusCodes.CREATED, + // body: GitHubJson.encode(createGitTree))); + // }); + + // test('with sha creates valid JSON body', () { + // // given + // var treeEntry = CreateGitTreeEntry('file.rb', '100644', 'blob', + // sha: '44b4fc6d56897b048c772eb4087f854f46256132'); + + // final tree = CreateGitTree([treeEntry]); + + // // when + // git.createTree(repo, tree); + + // // then + // final body = captureSentBody(github)!; + // expect(body['tree'], isNotNull); + // expect(body['tree'][0]['path'], equals('file.rb')); + // expect(body['tree'][0]['mode'], equals('100644')); + // expect(body['tree'][0]['type'], equals('blob')); + // expect(body['tree'][0]['sha'], + // equals('44b4fc6d56897b048c772eb4087f854f46256132')); + // expect(body['tree'][0]['content'], isNull); + // }); + + // test('with content creates valid JSON body', () { + // // given + // var treeEntry = CreateGitTreeEntry('file.rb', '100644', 'blob', + // content: 'some file content'); + + // final tree = CreateGitTree([treeEntry]); + + // // when + // git.createTree(repo, tree); + + // // then + // final body = captureSentBody(github)!; + // expect(body['tree'], isNotNull); + // expect(body['tree'][0]['path'], equals('file.rb')); + // expect(body['tree'][0]['mode'], equals('100644')); + // expect(body['tree'][0]['type'], equals('blob')); + // expect(body['tree'][0]['sha'], isNull); + // expect(body['tree'][0]['content'], equals('some file content')); + // }); + // }); } -Map? captureSentBody(MockGitHub github) { - final bodyString = verify(github.postJSON( - any, - convert: any, - statusCode: any, - body: captureAny, - )).captured.single; - - final body = jsonDecode(bodyString) as Map?; - return body; -} +// Map? captureSentBody(MockGitHub github) { +// final bodyString = verify(github.postJSON( +// any, +// convert: any, +// statusCode: any, +// body: captureAny, +// )).captured.single; + +// final body = jsonDecode(bodyString) as Map?; +// return body; +// } diff --git a/test/src/mocks.dart b/test/src/mocks.dart deleted file mode 100644 index a32bb7eb..00000000 --- a/test/src/mocks.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:github/src/common.dart'; -import 'package:mockito/annotations.dart'; - -@GenerateNiceMocks([MockSpec()]) -import 'mocks.mocks.dart'; diff --git a/test/src/mocks.mocks.dart b/test/src/mocks.mocks.dart deleted file mode 100644 index 0b989c63..00000000 --- a/test/src/mocks.mocks.dart +++ /dev/null @@ -1,588 +0,0 @@ -// Mocks generated by Mockito 5.3.2 from annotations -// in github/test/src/mocks.dart. -// Do not manually edit this file. - -// ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i4; - -import 'package:github/src/common.dart' as _i3; -import 'package:http/http.dart' as _i2; -import 'package:mockito/mockito.dart' as _i1; - -// ignore_for_file: type=lint -// ignore_for_file: avoid_redundant_argument_values -// ignore_for_file: avoid_setters_without_getters -// ignore_for_file: comment_references -// ignore_for_file: implementation_imports -// ignore_for_file: invalid_use_of_visible_for_testing_member -// ignore_for_file: prefer_const_constructors -// ignore_for_file: unnecessary_parenthesis -// ignore_for_file: camel_case_types -// ignore_for_file: subtype_of_sealed_class - -class _FakeClient_0 extends _i1.SmartFake implements _i2.Client { - _FakeClient_0( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeActivityService_1 extends _i1.SmartFake - implements _i3.ActivityService { - _FakeActivityService_1( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeAuthorizationsService_2 extends _i1.SmartFake - implements _i3.AuthorizationsService { - _FakeAuthorizationsService_2( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeGistsService_3 extends _i1.SmartFake implements _i3.GistsService { - _FakeGistsService_3( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeGitService_4 extends _i1.SmartFake implements _i3.GitService { - _FakeGitService_4( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeIssuesService_5 extends _i1.SmartFake implements _i3.IssuesService { - _FakeIssuesService_5( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeMiscService_6 extends _i1.SmartFake implements _i3.MiscService { - _FakeMiscService_6( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeOrganizationsService_7 extends _i1.SmartFake - implements _i3.OrganizationsService { - _FakeOrganizationsService_7( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakePullRequestsService_8 extends _i1.SmartFake - implements _i3.PullRequestsService { - _FakePullRequestsService_8( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeRepositoriesService_9 extends _i1.SmartFake - implements _i3.RepositoriesService { - _FakeRepositoriesService_9( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeSearchService_10 extends _i1.SmartFake implements _i3.SearchService { - _FakeSearchService_10( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeUrlShortenerService_11 extends _i1.SmartFake - implements _i3.UrlShortenerService { - _FakeUrlShortenerService_11( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeUsersService_12 extends _i1.SmartFake implements _i3.UsersService { - _FakeUsersService_12( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeChecksService_13 extends _i1.SmartFake implements _i3.ChecksService { - _FakeChecksService_13( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -class _FakeResponse_14 extends _i1.SmartFake implements _i2.Response { - _FakeResponse_14( - Object parent, - Invocation parentInvocation, - ) : super( - parent, - parentInvocation, - ); -} - -/// A class which mocks [GitHub]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockGitHub extends _i1.Mock implements _i3.GitHub { - @override - set auth(_i3.Authentication? _auth) => super.noSuchMethod( - Invocation.setter( - #auth, - _auth, - ), - returnValueForMissingStub: null, - ); - @override - String get endpoint => (super.noSuchMethod( - Invocation.getter(#endpoint), - returnValue: '', - returnValueForMissingStub: '', - ) as String); - @override - _i2.Client get client => (super.noSuchMethod( - Invocation.getter(#client), - returnValue: _FakeClient_0( - this, - Invocation.getter(#client), - ), - returnValueForMissingStub: _FakeClient_0( - this, - Invocation.getter(#client), - ), - ) as _i2.Client); - @override - _i3.ActivityService get activity => (super.noSuchMethod( - Invocation.getter(#activity), - returnValue: _FakeActivityService_1( - this, - Invocation.getter(#activity), - ), - returnValueForMissingStub: _FakeActivityService_1( - this, - Invocation.getter(#activity), - ), - ) as _i3.ActivityService); - @override - _i3.AuthorizationsService get authorizations => (super.noSuchMethod( - Invocation.getter(#authorizations), - returnValue: _FakeAuthorizationsService_2( - this, - Invocation.getter(#authorizations), - ), - returnValueForMissingStub: _FakeAuthorizationsService_2( - this, - Invocation.getter(#authorizations), - ), - ) as _i3.AuthorizationsService); - @override - _i3.GistsService get gists => (super.noSuchMethod( - Invocation.getter(#gists), - returnValue: _FakeGistsService_3( - this, - Invocation.getter(#gists), - ), - returnValueForMissingStub: _FakeGistsService_3( - this, - Invocation.getter(#gists), - ), - ) as _i3.GistsService); - @override - _i3.GitService get git => (super.noSuchMethod( - Invocation.getter(#git), - returnValue: _FakeGitService_4( - this, - Invocation.getter(#git), - ), - returnValueForMissingStub: _FakeGitService_4( - this, - Invocation.getter(#git), - ), - ) as _i3.GitService); - @override - _i3.IssuesService get issues => (super.noSuchMethod( - Invocation.getter(#issues), - returnValue: _FakeIssuesService_5( - this, - Invocation.getter(#issues), - ), - returnValueForMissingStub: _FakeIssuesService_5( - this, - Invocation.getter(#issues), - ), - ) as _i3.IssuesService); - @override - _i3.MiscService get misc => (super.noSuchMethod( - Invocation.getter(#misc), - returnValue: _FakeMiscService_6( - this, - Invocation.getter(#misc), - ), - returnValueForMissingStub: _FakeMiscService_6( - this, - Invocation.getter(#misc), - ), - ) as _i3.MiscService); - @override - _i3.OrganizationsService get organizations => (super.noSuchMethod( - Invocation.getter(#organizations), - returnValue: _FakeOrganizationsService_7( - this, - Invocation.getter(#organizations), - ), - returnValueForMissingStub: _FakeOrganizationsService_7( - this, - Invocation.getter(#organizations), - ), - ) as _i3.OrganizationsService); - @override - _i3.PullRequestsService get pullRequests => (super.noSuchMethod( - Invocation.getter(#pullRequests), - returnValue: _FakePullRequestsService_8( - this, - Invocation.getter(#pullRequests), - ), - returnValueForMissingStub: _FakePullRequestsService_8( - this, - Invocation.getter(#pullRequests), - ), - ) as _i3.PullRequestsService); - @override - _i3.RepositoriesService get repositories => (super.noSuchMethod( - Invocation.getter(#repositories), - returnValue: _FakeRepositoriesService_9( - this, - Invocation.getter(#repositories), - ), - returnValueForMissingStub: _FakeRepositoriesService_9( - this, - Invocation.getter(#repositories), - ), - ) as _i3.RepositoriesService); - @override - _i3.SearchService get search => (super.noSuchMethod( - Invocation.getter(#search), - returnValue: _FakeSearchService_10( - this, - Invocation.getter(#search), - ), - returnValueForMissingStub: _FakeSearchService_10( - this, - Invocation.getter(#search), - ), - ) as _i3.SearchService); - @override - _i3.UrlShortenerService get urlShortener => (super.noSuchMethod( - Invocation.getter(#urlShortener), - returnValue: _FakeUrlShortenerService_11( - this, - Invocation.getter(#urlShortener), - ), - returnValueForMissingStub: _FakeUrlShortenerService_11( - this, - Invocation.getter(#urlShortener), - ), - ) as _i3.UrlShortenerService); - @override - _i3.UsersService get users => (super.noSuchMethod( - Invocation.getter(#users), - returnValue: _FakeUsersService_12( - this, - Invocation.getter(#users), - ), - returnValueForMissingStub: _FakeUsersService_12( - this, - Invocation.getter(#users), - ), - ) as _i3.UsersService); - @override - _i3.ChecksService get checks => (super.noSuchMethod( - Invocation.getter(#checks), - returnValue: _FakeChecksService_13( - this, - Invocation.getter(#checks), - ), - returnValueForMissingStub: _FakeChecksService_13( - this, - Invocation.getter(#checks), - ), - ) as _i3.ChecksService); - @override - _i4.Future getJSON( - String? path, { - int? statusCode, - void Function(_i2.Response)? fail, - Map? headers, - Map? params, - _i3.JSONConverter? convert, - String? preview, - }) => - (super.noSuchMethod( - Invocation.method( - #getJSON, - [path], - { - #statusCode: statusCode, - #fail: fail, - #headers: headers, - #params: params, - #convert: convert, - #preview: preview, - }, - ), - returnValue: _i4.Future.value(null), - returnValueForMissingStub: _i4.Future.value(null), - ) as _i4.Future); - @override - _i4.Future postJSON( - String? path, { - int? statusCode, - void Function(_i2.Response)? fail, - Map? headers, - Map? params, - _i3.JSONConverter? convert, - dynamic body, - String? preview, - }) => - (super.noSuchMethod( - Invocation.method( - #postJSON, - [path], - { - #statusCode: statusCode, - #fail: fail, - #headers: headers, - #params: params, - #convert: convert, - #body: body, - #preview: preview, - }, - ), - returnValue: _i4.Future.value(null), - returnValueForMissingStub: _i4.Future.value(null), - ) as _i4.Future); - @override - _i4.Future putJSON( - String? path, { - int? statusCode, - void Function(_i2.Response)? fail, - Map? headers, - Map? params, - _i3.JSONConverter? convert, - dynamic body, - String? preview, - }) => - (super.noSuchMethod( - Invocation.method( - #putJSON, - [path], - { - #statusCode: statusCode, - #fail: fail, - #headers: headers, - #params: params, - #convert: convert, - #body: body, - #preview: preview, - }, - ), - returnValue: _i4.Future.value(null), - returnValueForMissingStub: _i4.Future.value(null), - ) as _i4.Future); - @override - _i4.Future patchJSON( - String? path, { - int? statusCode, - void Function(_i2.Response)? fail, - Map? headers, - Map? params, - _i3.JSONConverter? convert, - dynamic body, - String? preview, - }) => - (super.noSuchMethod( - Invocation.method( - #patchJSON, - [path], - { - #statusCode: statusCode, - #fail: fail, - #headers: headers, - #params: params, - #convert: convert, - #body: body, - #preview: preview, - }, - ), - returnValue: _i4.Future.value(null), - returnValueForMissingStub: _i4.Future.value(null), - ) as _i4.Future); - @override - _i4.Future requestJson( - String? method, - String? path, { - int? statusCode, - void Function(_i2.Response)? fail, - Map? headers, - Map? params, - _i3.JSONConverter? convert, - dynamic body, - String? preview, - }) => - (super.noSuchMethod( - Invocation.method( - #requestJson, - [ - method, - path, - ], - { - #statusCode: statusCode, - #fail: fail, - #headers: headers, - #params: params, - #convert: convert, - #body: body, - #preview: preview, - }, - ), - returnValue: _i4.Future.value(null), - returnValueForMissingStub: _i4.Future.value(null), - ) as _i4.Future); - @override - _i4.Future<_i2.Response> request( - String? method, - String? path, { - Map? headers, - Map? params, - dynamic body, - int? statusCode, - void Function(_i2.Response)? fail, - String? preview, - }) => - (super.noSuchMethod( - Invocation.method( - #request, - [ - method, - path, - ], - { - #headers: headers, - #params: params, - #body: body, - #statusCode: statusCode, - #fail: fail, - #preview: preview, - }, - ), - returnValue: _i4.Future<_i2.Response>.value(_FakeResponse_14( - this, - Invocation.method( - #request, - [ - method, - path, - ], - { - #headers: headers, - #params: params, - #body: body, - #statusCode: statusCode, - #fail: fail, - #preview: preview, - }, - ), - )), - returnValueForMissingStub: - _i4.Future<_i2.Response>.value(_FakeResponse_14( - this, - Invocation.method( - #request, - [ - method, - path, - ], - { - #headers: headers, - #params: params, - #body: body, - #statusCode: statusCode, - #fail: fail, - #preview: preview, - }, - ), - )), - ) as _i4.Future<_i2.Response>); - @override - void handleStatusCode(_i2.Response? response) => super.noSuchMethod( - Invocation.method( - #handleStatusCode, - [response], - ), - returnValueForMissingStub: null, - ); - @override - void dispose() => super.noSuchMethod( - Invocation.method( - #dispose, - [], - ), - returnValueForMissingStub: null, - ); -} From 95deca1e0777bdb16b406150484e1d2bdaf4164c Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Fri, 28 Oct 2022 10:35:34 -0600 Subject: [PATCH 03/12] update images to 2.17 --- .github/workflows/dart.yml | 2 +- .github/workflows/release_unreleased_prs.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index 798e95c2..09a82a22 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest container: - image: dart:2.14 + image: dart:2.17 steps: - uses: actions/checkout@v1 diff --git a/.github/workflows/release_unreleased_prs.yml b/.github/workflows/release_unreleased_prs.yml index c3afb5dd..a087b032 100644 --- a/.github/workflows/release_unreleased_prs.yml +++ b/.github/workflows/release_unreleased_prs.yml @@ -12,7 +12,7 @@ jobs: release: if: github.event.pull_request.merged == true || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest - container: dart:2.14.4 + container: dart:2.17.7 permissions: contents: write From f622e8374f536402d2af6b9dd681ee940b315e48 Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Fri, 28 Oct 2022 10:39:59 -0600 Subject: [PATCH 04/12] add testing matrix --- .github/workflows/tests.yml | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7d7a75dd..6dbe4820 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -6,13 +6,19 @@ on: branches: [ master ] jobs: test: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + sdk: [2.17, stable] steps: - - uses: actions/checkout@v2 - - uses: dart-lang/setup-dart@v1 - - name: Install dependencies - run: dart pub get - - name: Unit tests - run: dart test test - # - name: Integration tests - # run: dart test integration_test + - uses: actions/checkout@v2 + - uses: dart-lang/setup-dart@v1.3 + with: + sdk: ${{ matrix.sdk }} + - name: Install dependencies + run: dart pub get + - name: Unit tests + run: dart test test + # - name: Integration tests + # run: dart test integration_test From 1e9ed773069363050463c7df7348a34fbb7dd3c3 Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Fri, 28 Oct 2022 10:42:58 -0600 Subject: [PATCH 05/12] use the full version number --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6dbe4820..a69b458f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] - sdk: [2.17, stable] + sdk: [2.17.7, stable] steps: - uses: actions/checkout@v2 - uses: dart-lang/setup-dart@v1.3 From 38120ce6f72a25ae46e3e5050e6e373219c04ce6 Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Fri, 28 Oct 2022 10:46:12 -0600 Subject: [PATCH 06/12] tweak --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a69b458f..699df686 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,6 +19,6 @@ jobs: - name: Install dependencies run: dart pub get - name: Unit tests - run: dart test test + run: dart test test -r github # - name: Integration tests # run: dart test integration_test From fa63f54b9ee853e8ced02dfc521dcbc4764db553 Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Mon, 31 Oct 2022 00:58:14 -0600 Subject: [PATCH 07/12] lots of test fixes - added a makefile - added ocktokit scenarios - fixed up git_test.dart - actually run tests in CI --- .github/workflows/dart.yml | 5 +- .github/workflows/tests.yml | 4 +- Makefile | 20 + dart_test.yaml | 15 + pubspec.yaml | 1 + test/assets/responses/nocked_responses.dart | 1474 +++++++++++++++++++ test/code_search_test.dart | 21 - test/git_test.dart | 489 +++--- test/scenarios_test.dart | 141 ++ 9 files changed, 1839 insertions(+), 331 deletions(-) create mode 100644 Makefile create mode 100644 dart_test.yaml create mode 100644 test/assets/responses/nocked_responses.dart delete mode 100644 test/code_search_test.dart create mode 100644 test/scenarios_test.dart diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index 09a82a22..119546e2 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -4,12 +4,9 @@ on: [push] jobs: build: - runs-on: ubuntu-latest - container: image: dart:2.17 - steps: - uses: actions/checkout@v1 - name: Install dependencies @@ -17,6 +14,6 @@ jobs: - name: Dart Analyzer run: dart analyze - name: Check Dart Format - run: dart format --set-exit-if-changed -o none lib test tool example && echo Dart Format 👍 || echo Files needed Dart formatting 😢 + run: dart format --set-exit-if-changed -o none lib test tool example integration_test && echo Dart Format 👍 || echo Files needed Dart formatting 😢 - name: Check if Publishable run: dart pub publish --dry-run diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 699df686..13cb1045 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,7 +9,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-latest] sdk: [2.17.7, stable] steps: - uses: actions/checkout@v2 @@ -19,6 +19,6 @@ jobs: - name: Install dependencies run: dart pub get - name: Unit tests - run: dart test test -r github + run: make test # - name: Integration tests # run: dart test integration_test diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..c146167b --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +.DEFAULT_GOAL := help +SHELL=/bin/bash -o pipefail + +# Cite: https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html +.PHONY: help +help: ## Display this help page + @grep -E '^[a-zA-Z0-9/_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' + +.PHONY: fixtures +fixtures: ## Run octokit-fixtures-server for scenario tests + @npx octokit-fixtures-server & + +.PHONY: stop +stop: ## Stop the fixtures server + @killall node + +.PHONY: test +test: fixtures ## Run tests + @dart test -P all + make stop \ No newline at end of file diff --git a/dart_test.yaml b/dart_test.yaml new file mode 100644 index 00000000..04f3491b --- /dev/null +++ b/dart_test.yaml @@ -0,0 +1,15 @@ +tags: + scenarios: + skip: | + Not run by default when running dart test. To run: + npx octokit-fixtures-server + dart test -P scenarios + or run all tests with: + make test + +presets: + scenarios: + include_tags: scenarios + run_skipped: true + all: + run_skipped: true \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index de98fee0..7b316b71 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -21,6 +21,7 @@ dev_dependencies: json_serializable: ^6.0.0 lints: ^2.0.0 mockito: ^5.3.0 + nock: ^1.0.0 pub_semver: test: #^1.16.0 yaml: ^3.0.0 diff --git a/test/assets/responses/nocked_responses.dart b/test/assets/responses/nocked_responses.dart new file mode 100644 index 00000000..6feb9465 --- /dev/null +++ b/test/assets/responses/nocked_responses.dart @@ -0,0 +1,1474 @@ +var getBlob = ''' +{ + "content": "Q29udGVudCBvZiB0aGUgYmxvYg==", + "encoding": "base64", + "url": "https://api.github.com/repos/octocat/example/git/blobs/3a0f86fb8db8eea7ccbb9a95f325ddbedfb25e15", + "sha": "3a0f86fb8db8eea7ccbb9a95f325ddbedfb25e15", + "size": 19, + "node_id": "Q29udGVudCBvZiB0aGUgYmxvYg==" +}'''; + +var createBlob = ''' +{ + "url": "https://api.github.com/repos/octocat/example/git/blobs/3a0f86fb8db8eea7ccbb9a95f325ddbedfb25e15", + "sha": "3a0f86fb8db8eea7ccbb9a95f325ddbedfb25e15", + "content": "bbb", + "encoding": "utf-8" +}'''; + +var getCommit = ''' +{ + "sha": "7638417db6d59f3c431d3e1f261cc637155684cd", + "node_id": "MDY6Q29tbWl0NmRjYjA5YjViNTc4NzVmMzM0ZjYxYWViZWQ2OTVlMmU0MTkzZGI1ZQ==", + "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/7638417db6d59f3c431d3e1f261cc637155684cd", + "html_url": "https://github.com/octocat/Hello-World/commit/7638417db6d59f3c431d3e1f261cc637155684cd", + "author": { + "date": "2014-11-07T22:01:45Z", + "name": "Monalisa Octocat", + "email": "octocat@github.com" + }, + "committer": { + "date": "2014-11-07T22:01:45Z", + "name": "Monalisa Octocat", + "email": "octocat@github.com" + }, + "message": "added readme, because im a good github citizen", + "tree": { + "url": "https://api.github.com/repos/octocat/Hello-World/git/trees/691272480426f78a0138979dd3ce63b77f706feb", + "sha": "691272480426f78a0138979dd3ce63b77f706feb" + }, + "parents": [ + { + "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/1acc419d4d6a9ce985db7be48c6349a0475975b5", + "sha": "1acc419d4d6a9ce985db7be48c6349a0475975b5", + "html_url": "https://github.com/octocat/Hello-World/commit/7638417db6d59f3c431d3e1f261cc637155684cd" + } + ], + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } +}'''; + +var createCommit = ''' +{ + "sha": "7638417db6d59f3c431d3e1f261cc637155684cd", + "node_id": "MDY6Q29tbWl0NzYzODQxN2RiNmQ1OWYzYzQzMWQzZTFmMjYxY2M2MzcxNTU2ODRjZA==", + "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/7638417db6d59f3c431d3e1f261cc637155684cd", + "author": { + "date": "2014-11-07T22:01:45Z", + "name": "Monalisa Octocat", + "email": "octocat@github.com" + }, + "committer": { + "date": "2014-11-07T22:01:45Z", + "name": "Monalisa Octocat", + "email": "octocat@github.com" + }, + "message": "aMessage", + "tree": { + "url": "https://api.github.com/repos/octocat/Hello-World/git/trees/827efc6d56897b048c772eb4087f854f46256132", + "sha": "aTreeSha" + }, + "parents": [ + { + "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/7d1b31e74ee336d15cbd21741bc88a537ed063a0", + "sha": "7d1b31e74ee336d15cbd21741bc88a537ed063a0", + "html_url": "https://github.com/octocat/Hello-World/commit/7d1b31e74ee336d15cbd21741bc88a537ed063a0" + } + ], + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + }, + "html_url": "https://github.com/octocat/Hello-World/commit/7638417db6d59f3c431d3e1f261cc637155684cd" +}'''; + +var getReference = '''{ + "ref": "refs/heads/b", + "node_id": "MDM6UmVmcmVmcy9oZWFkcy9mZWF0dXJlQQ==", + "url": "https://api.github.com/repos/octocat/Hello-World/git/refs/heads/featureA", + "object": { + "type": "commit", + "sha": "aa218f56b14c9653891f9e74264a383fa43fefbd", + "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/aa218f56b14c9653891f9e74264a383fa43fefbd" + } +}'''; + +var createReference = '''{ + "ref": "refs/heads/b", + "node_id": "MDM6UmVmcmVmcy9oZWFkcy9mZWF0dXJlQQ==", + "url": "https://api.github.com/repos/octocat/Hello-World/git/refs/heads/featureA", + "object": { + "type": "commit", + "sha": "aa218f56b14c9653891f9e74264a383fa43fefbd", + "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/aa218f56b14c9653891f9e74264a383fa43fefbd" + } +}'''; + +var getTag = '''{ + "node_id": "MDM6VGFnOTQwYmQzMzYyNDhlZmFlMGY5ZWU1YmM3YjJkNWM5ODU4ODdiMTZhYw==", + "tag": "v0.0.1", + "sha": "940bd336248efae0f9ee5bc7b2d5c985887b16ac", + "url": "https://api.github.com/repos/octocat/Hello-World/git/tags/940bd336248efae0f9ee5bc7b2d5c985887b16ac", + "message": "initial version", + "tagger": { + "name": "Monalisa Octocat", + "email": "octocat@github.com", + "date": "2014-11-07T22:01:45Z" + }, + "object": { + "type": "commit", + "sha": "c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c", + "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c" + }, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } +}'''; + +var createTag = '''{ + "node_id": "MDM6VGFnOTQwYmQzMzYyNDhlZmFlMGY5ZWU1YmM3YjJkNWM5ODU4ODdiMTZhYw==", + "tag": "v0.0.1", + "sha": "940bd336248efae0f9ee5bc7b2d5c985887b16ac", + "url": "https://api.github.com/repos/octocat/Hello-World/git/tags/940bd336248efae0f9ee5bc7b2d5c985887b16ac", + "message": "initial version", + "tagger": { + "name": "Monalisa Octocat", + "email": "octocat@github.com", + "date": "2014-11-07T22:01:45Z" + }, + "object": { + "type": "commit", + "sha": "c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c", + "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/c3d0be41ecbe669545ee3e94d31ed9a4bc91ee3c" + }, + "verification": { + "verified": false, + "reason": "unsigned", + "signature": null, + "payload": null + } +}'''; + +var createTree = '''{ + "sha": "44b4fc6d56897b048c772eb4087f854f46256132", + "url": "https://api.github.com/repos/octocat/Hello-World/trees/44b4fc6d56897b048c772eb4087f854f46256132", + "tree": [ + { + "path": "file.rb", + "mode": "100644", + "type": "blob", + "size": 132, + "sha": "44b4fc6d56897b048c772eb4087f854f46256132", + "url": "https://api.github.com/repos/octocat/Hello-World/git/blobs/44b4fc6d56897b048c772eb4087f854f46256132" + } + ], + "truncated": true +}'''; + +var searchResults = '''{ + "total_count": 17, + "incomplete_results": false, + "items": [ + { + "name": "search.dart", + "path": "lib/src/common/model/search.dart", + "sha": "c61f39e54eeef0b20d132d2c3ea48bcd3b0d34a9", + "url": "https://api.github.com/repositories/22344823/contents/lib/src/common/model/search.dart?ref=27929ddc731393422327dddee0aaa56d0164c775", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/c61f39e54eeef0b20d132d2c3ea48bcd3b0d34a9", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/27929ddc731393422327dddee0aaa56d0164c775/lib/src/common/model/search.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "search_service.dart", + "path": "lib/src/common/search_service.dart", + "sha": "e98344a6f07d4d9ba1d5b1045354c6a8d3a5323f", + "url": "https://api.github.com/repositories/22344823/contents/lib/src/common/search_service.dart?ref=11a83b4fc9558b7f8c47fdced01c7a8dac3c65b2", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/e98344a6f07d4d9ba1d5b1045354c6a8d3a5323f", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/11a83b4fc9558b7f8c47fdced01c7a8dac3c65b2/lib/src/common/search_service.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "search.dart", + "path": "example/search.dart", + "sha": "9ca8b0ac2bfe0ce4afe2d49713ba639146f1ee1a", + "url": "https://api.github.com/repositories/22344823/contents/example/search.dart?ref=4875e4b34ade7f5e36443cd5a2716fe83d9360a2", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/9ca8b0ac2bfe0ce4afe2d49713ba639146f1ee1a", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/4875e4b34ade7f5e36443cd5a2716fe83d9360a2/example/search.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "emoji.dart", + "path": "example/emoji.dart", + "sha": "7604d4619400b6b2a19ab11baa60dfa6fa08843e", + "url": "https://api.github.com/repositories/22344823/contents/example/emoji.dart?ref=4875e4b34ade7f5e36443cd5a2716fe83d9360a2", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/7604d4619400b6b2a19ab11baa60dfa6fa08843e", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/4875e4b34ade7f5e36443cd5a2716fe83d9360a2/example/emoji.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "search.html", + "path": "example/search.html", + "sha": "16f41b72e4e6135c63aaf923be50a6c87ec80126", + "url": "https://api.github.com/repositories/22344823/contents/example/search.html?ref=4875e4b34ade7f5e36443cd5a2716fe83d9360a2", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/16f41b72e4e6135c63aaf923be50a6c87ec80126", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/4875e4b34ade7f5e36443cd5a2716fe83d9360a2/example/search.html", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "mocks.mocks.dart", + "path": "test/src/mocks.mocks.dart", + "sha": "c381f58a8641b8814afd65b6b7a39384035e2ae3", + "url": "https://api.github.com/repositories/22344823/contents/test/src/mocks.mocks.dart?ref=7056f9c2bf17c5f437e6cb32012a7d16f9ed3278", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/c381f58a8641b8814afd65b6b7a39384035e2ae3", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/7056f9c2bf17c5f437e6cb32012a7d16f9ed3278/test/src/mocks.mocks.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "emoji.html", + "path": "example/emoji.html", + "sha": "bdafb143dd918a4872e982b3f876c32aaf9877b2", + "url": "https://api.github.com/repositories/22344823/contents/example/emoji.html?ref=4875e4b34ade7f5e36443cd5a2716fe83d9360a2", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/bdafb143dd918a4872e982b3f876c32aaf9877b2", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/4875e4b34ade7f5e36443cd5a2716fe83d9360a2/example/emoji.html", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "index.html", + "path": "example/index.html", + "sha": "81e054e8a613cb2932f905e42c3dc2e294e551ac", + "url": "https://api.github.com/repositories/22344823/contents/example/index.html?ref=c72b46031fcd326820cbc5bb0c3b4b1c15e075e4", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/81e054e8a613cb2932f905e42c3dc2e294e551ac", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/c72b46031fcd326820cbc5bb0c3b4b1c15e075e4/example/index.html", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "readme.md", + "path": "example/readme.md", + "sha": "0781c2ba3898ee16123d9b63a7685d588f3f7511", + "url": "https://api.github.com/repositories/22344823/contents/example/readme.md?ref=4875e4b34ade7f5e36443cd5a2716fe83d9360a2", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/0781c2ba3898ee16123d9b63a7685d588f3f7511", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/4875e4b34ade7f5e36443cd5a2716fe83d9360a2/example/readme.md", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "CHANGELOG.md", + "path": "CHANGELOG.md", + "sha": "5de4e987d591c1f71b8f94311671fa8edb38ca6b", + "url": "https://api.github.com/repositories/22344823/contents/CHANGELOG.md?ref=f90446459e2723baecc16f8ac725b5147bd915ab", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/5de4e987d591c1f71b8f94311671fa8edb38ca6b", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/f90446459e2723baecc16f8ac725b5147bd915ab/CHANGELOG.md", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "github.dart", + "path": "lib/src/common/github.dart", + "sha": "e715c2a9b4439c24f00b00071cc86db63c426f1e", + "url": "https://api.github.com/repositories/22344823/contents/lib/src/common/github.dart?ref=921269ba8f803ba47470c624460c23c289b3291b", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/e715c2a9b4439c24f00b00071cc86db63c426f1e", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/921269ba8f803ba47470c624460c23c289b3291b/lib/src/common/github.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "common.dart", + "path": "lib/src/common.dart", + "sha": "f8be345ced35b7320355e04663f7504cb0a502b6", + "url": "https://api.github.com/repositories/22344823/contents/lib/src/common.dart?ref=4875e4b34ade7f5e36443cd5a2716fe83d9360a2", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/f8be345ced35b7320355e04663f7504cb0a502b6", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/4875e4b34ade7f5e36443cd5a2716fe83d9360a2/lib/src/common.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "search.dart", + "path": "test/experiment/search.dart", + "sha": "1fffe4dd40ca49cff3f96d248a1740ac67e6a602", + "url": "https://api.github.com/repositories/22344823/contents/test/experiment/search.dart?ref=4875e4b34ade7f5e36443cd5a2716fe83d9360a2", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/1fffe4dd40ca49cff3f96d248a1740ac67e6a602", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/4875e4b34ade7f5e36443cd5a2716fe83d9360a2/test/experiment/search.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "code_search_test.dart", + "path": "test/code_search_test.dart", + "sha": "3d60cf6329a298d99d8b074009c2a8fd3c39a470", + "url": "https://api.github.com/repositories/22344823/contents/test/code_search_test.dart?ref=4875e4b34ade7f5e36443cd5a2716fe83d9360a2", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/3d60cf6329a298d99d8b074009c2a8fd3c39a470", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/4875e4b34ade7f5e36443cd5a2716fe83d9360a2/test/code_search_test.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "xplat_browser.dart", + "path": "lib/src/browser/xplat_browser.dart", + "sha": "79aeeb174148ae38f6a26d2297356b160e504b6b", + "url": "https://api.github.com/repositories/22344823/contents/lib/src/browser/xplat_browser.dart?ref=4875e4b34ade7f5e36443cd5a2716fe83d9360a2", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/79aeeb174148ae38f6a26d2297356b160e504b6b", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/4875e4b34ade7f5e36443cd5a2716fe83d9360a2/lib/src/browser/xplat_browser.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "release_notes.dart", + "path": "example/release_notes.dart", + "sha": "867474ee071b0b026fcf64cd2409830279c8b2db", + "url": "https://api.github.com/repositories/22344823/contents/example/release_notes.dart?ref=921269ba8f803ba47470c624460c23c289b3291b", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/867474ee071b0b026fcf64cd2409830279c8b2db", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/921269ba8f803ba47470c624460c23c289b3291b/example/release_notes.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + }, + { + "name": "release_unreleased_prs.dart", + "path": "tool/release_unreleased_prs.dart", + "sha": "aca8dae11ec0a26804761ea302934829bf70b4c9", + "url": "https://api.github.com/repositories/22344823/contents/tool/release_unreleased_prs.dart?ref=7056f9c2bf17c5f437e6cb32012a7d16f9ed3278", + "git_url": "https://api.github.com/repositories/22344823/git/blobs/aca8dae11ec0a26804761ea302934829bf70b4c9", + "html_url": "https://github.com/SpinlockLabs/github.dart/blob/7056f9c2bf17c5f437e6cb32012a7d16f9ed3278/tool/release_unreleased_prs.dart", + "repository": { + "id": 22344823, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjM0NDgyMw==", + "name": "github.dart", + "full_name": "SpinlockLabs/github.dart", + "private": false, + "owner": { + "login": "SpinlockLabs", + "id": 26679435, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjI2Njc5NDM1", + "avatar_url": "https://avatars.githubusercontent.com/u/26679435?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpinlockLabs", + "html_url": "https://github.com/SpinlockLabs", + "followers_url": "https://api.github.com/users/SpinlockLabs/followers", + "following_url": "https://api.github.com/users/SpinlockLabs/following{/other_user}", + "gists_url": "https://api.github.com/users/SpinlockLabs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpinlockLabs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpinlockLabs/subscriptions", + "organizations_url": "https://api.github.com/users/SpinlockLabs/orgs", + "repos_url": "https://api.github.com/users/SpinlockLabs/repos", + "events_url": "https://api.github.com/users/SpinlockLabs/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpinlockLabs/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/SpinlockLabs/github.dart", + "description": "GitHub Client Library for Dart", + "fork": false, + "url": "https://api.github.com/repos/SpinlockLabs/github.dart", + "forks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/forks", + "keys_url": "https://api.github.com/repos/SpinlockLabs/github.dart/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpinlockLabs/github.dart/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpinlockLabs/github.dart/teams", + "hooks_url": "https://api.github.com/repos/SpinlockLabs/github.dart/hooks", + "issue_events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpinlockLabs/github.dart/events", + "assignees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpinlockLabs/github.dart/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/tags", + "blobs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpinlockLabs/github.dart/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpinlockLabs/github.dart/languages", + "stargazers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/stargazers", + "contributors_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contributors", + "subscribers_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscribers", + "subscription_url": "https://api.github.com/repos/SpinlockLabs/github.dart/subscription", + "commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpinlockLabs/github.dart/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpinlockLabs/github.dart/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpinlockLabs/github.dart/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpinlockLabs/github.dart/merges", + "archive_url": "https://api.github.com/repos/SpinlockLabs/github.dart/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpinlockLabs/github.dart/downloads", + "issues_url": "https://api.github.com/repos/SpinlockLabs/github.dart/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpinlockLabs/github.dart/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpinlockLabs/github.dart/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpinlockLabs/github.dart/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpinlockLabs/github.dart/labels{/name}", + "releases_url": "https://api.github.com/repos/SpinlockLabs/github.dart/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpinlockLabs/github.dart/deployments" + }, + "score": 1.0 + } + ] +}'''; diff --git a/test/code_search_test.dart b/test/code_search_test.dart deleted file mode 100644 index 3d60cf63..00000000 --- a/test/code_search_test.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'dart:io'; -import 'package:github/github.dart'; - -Future main() async { - print('Searching ...'); - final github = GitHub(); - - final resultsStream = github.search.code( - 'github', - repo: 'SpinlockLabs/github.dart', - perPage: 5, - pages: 1, - ); - final results = await resultsStream.first; - print('${results.totalCount} results'); - var k = 1; - for (final i in results.items!) { - print('${k++} ${i.path}'); - } - exit(0); -} diff --git a/test/git_test.dart b/test/git_test.dart index 7ff1846e..2eaff028 100644 --- a/test/git_test.dart +++ b/test/git_test.dart @@ -1,310 +1,191 @@ -import 'dart:async'; -import 'dart:convert'; - -import 'package:github/src/common.dart'; -import 'package:http/http.dart' as http; -import 'package:mockito/mockito.dart'; +import 'dart:io'; +import 'package:github/github.dart'; +import 'package:nock/nock.dart'; import 'package:test/test.dart'; -//import 'src/mocks.mocks.dart'; - -void main() { - // late MockGitHub github; - // late GitService git; - // late RepositorySlug repo; - // const someSha = 'someSHA'; - - // setUp(() { - // github = MockGitHub(); - // git = GitService(github); - // repo = RepositorySlug('o', 'n'); - // }); - - // group('getBlob()', () { - // test('constructs correct path', () { - // git.getBlob(repo, 'sh'); - - // verify(github.getJSON('/repos/o/n/git/blobs/sh', - // convert: (dynamic i) => GitBlob.fromJson(i), - // statusCode: StatusCodes.OK)); - // }); - // }); - - // group('createBlob()', () { - // test('constructs correct path', () { - // var blob = CreateGitBlob('bbb', 'utf-8'); - // git.createBlob(repo, blob); - - // verify(github.postJSON( - // '/repos/o/n/git/blobs', - // convert: (dynamic i) => GitBlob.fromJson(i), - // statusCode: StatusCodes.CREATED, - // body: GitHubJson.encode(blob), - // )); - // }); - - // test('creates valid JSON body', () { - // var blob = CreateGitBlob('bbb', 'utf-8'); - - // git.createBlob(repo, blob); - // final body = captureSentBody(github)!; - // expect(body['content'], equals('bbb')); - // expect(body['encoding'], equals('utf-8')); - // }); - // }); - - // group('getCommit()', () { - // test('constructs correct path', () { - // git.getCommit(repo, 'sh'); - - // verify(github.getJSON('/repos/o/n/git/commits/sh', - // convert: (dynamic i) => GitCommit.fromJson(i), - // statusCode: StatusCodes.OK)); - // }); - // }); - - // group('createCommit()', () { - // test('constructs correct path', () { - // final commit = CreateGitCommit('aMessage', 'aTreeSha'); - // git.createCommit(repo, commit); - - // verify(github.postJSON( - // '/repos/o/n/git/commits', - // convert: (dynamic i) => GitCommit.fromJson(i), - // statusCode: StatusCodes.CREATED, - // body: GitHubJson.encode(commit), - // )); - // }); - - // test('creates valid JSON body', () { - // // given - // const date = '2014-10-02T15:21:29Z'; - - // final commit = CreateGitCommit('aMessage', 'aTreeSha') - // ..parents = ['parentSha1', 'parentSha2'] - // ..committer = GitCommitUser('cName', 'cEmail', DateTime.parse(date)) - // ..author = GitCommitUser('aName', 'aEmail', DateTime.parse(date)); - - // // when - // git.createCommit(repo, commit); - - // // then - // final body = captureSentBody(github)!; - // expect(body['message'], equals('aMessage')); - // expect(body['tree'], equals('aTreeSha')); - // expect(body['parents'], equals(['parentSha1', 'parentSha2'])); - // expect(body['committer']['name'], equals('cName')); - // expect(body['committer']['email'], equals('cEmail')); - // expect(body['committer']['date'], equals(date)); - // expect(body['author']['name'], equals('aName')); - // expect(body['author']['email'], equals('aEmail')); - // expect(body['author']['date'], equals(date)); - // }); - // }); - - // group('getReference()', () { - // test('constructs correct path', () { - // git.getReference(repo, 'heads/b'); - - // verify(github.getJSON('/repos/o/n/git/refs/heads/b', - // convert: (dynamic i) => GitReference.fromJson(i), - // statusCode: StatusCodes.OK)); - // }); - // }); - - // group('createReference()', () { - // const someRef = 'refs/heads/b'; - // test('constructs correct path', () { - // git.createReference(repo, someRef, someSha); - - // verify(github.postJSON('/repos/o/n/git/refs', - // convert: (dynamic i) => GitReference.fromJson(i), - // statusCode: StatusCodes.CREATED, - // body: GitHubJson.encode({'ref': someRef, 'sha': someSha}))); - // }); - - // test('creates valid JSON body', () { - // git.createReference(repo, someRef, someSha); - - // final body = captureSentBody(github)!; - // expect(body['ref'], equals(someRef)); - // expect(body['sha'], equals(someSha)); - // }); - // }); - - // group('editReference()', () { - // test('constructs correct path', () { - // // given - // final expectedResponse = http.Response('{}', 200); - - // when(github.request(any, any, body: any, headers: any)) - // .thenReturn(Future.value(expectedResponse)); - - // // when - // git.editReference(repo, 'heads/b', someSha); - - // // then - // verify(github.request('PATCH', '/repos/o/n/git/refs/heads/b', - // headers: any, body: any)); - // }); - - // test('creates valid JSON body', () { - // // given - // final expectedResponse = http.Response('{}', 200); - // when(github.request(any, any, body: any, headers: any)) - // .thenReturn(Future.value(expectedResponse)); +import 'assets/responses/nocked_responses.dart' as nocked; - // // when - // git.editReference(repo, 'heads/b', someSha, force: true); +const fakeApiUrl = 'http://fake.api.github.com'; +const date = '2014-10-02T15:21:29Z'; - // // then - // final captured = verify(github.request( - // any, - // any, - // body: captureAny, - // headers: captureAny, - // )).captured; - - // final body = jsonDecode(captured[0]); - // final headers = captured[1]; - - // expect(body['sha'], equals(someSha)); - // expect(body['force'], equals(true)); - // expect(headers['content-length'], equals('30')); - // }); - // }); - - // group('deleteReference()', () { - // test('constructs correct path', () { - // // given - // final expectedResponse = http.Response('{}', 200); - // when(github.request(any, any)).thenReturn(Future.value(expectedResponse)); - - // // when - // git.deleteReference(repo, 'heads/b'); - - // // then - // verify(github.request('DELETE', '/repos/o/n/git/refs/heads/b')); - // }); - // }); - - // group('getTag()', () { - // test('constructs correct path', () { - // git.getTag(repo, someSha); - - // verify(github.getJSON('/repos/o/n/git/tags/someSHA', - // convert: (dynamic i) => GitTag.fromJson(i), - // statusCode: StatusCodes.OK)); - // }); - // }); - - // group('createTag()', () { - // final createGitTag = CreateGitTag('v0.0.1', 'a message', someSha, 'commit', - // GitCommitUser('aName', 'aEmail', DateTime.now())); - - // test('constructs correct path', () { - // git.createTag(repo, createGitTag); - - // verify(github.postJSON('/repos/o/n/git/tags', - // convert: (dynamic i) => GitTag.fromJson(i), - // statusCode: StatusCodes.CREATED, - // body: GitHubJson.encode(createGitTag))); - // }); - - // test('creates valid JSON body', () { - // git.createTag(repo, createGitTag); - - // final body = captureSentBody(github)!; - // expect(body['tag'], equals('v0.0.1')); - // expect(body['message'], equals('a message')); - // expect(body['object'], equals(someSha)); - // expect(body['type'], equals('commit')); - // expect(body['tagger']['name'], equals('aName')); - // }); - // }); - - // group('getTree()', () { - // test('constructs correct path', () { - // git.getTree(repo, 'sh'); - - // verify(github.getJSON('/repos/o/n/git/trees/sh', - // convert: (dynamic j) => GitTree.fromJson(j), - // statusCode: StatusCodes.OK)); - // }); - // }); - - // group('getTree(recursive: true)', () { - // test('constructs correct path', () { - // git.getTree(repo, 'sh', recursive: true); - - // verify(github.getJSON('/repos/o/n/git/trees/sh?recursive=1', - // convert: (dynamic j) => GitTree.fromJson(j), - // statusCode: StatusCodes.OK)); - // }); - // }); - - // group('createTree()', () { - // test('constructs correct path', () { - // final createGitTree = CreateGitTree([]); - // git.createTree(repo, createGitTree); - - // verify(github.postJSON('/repos/o/n/git/trees', - // convert: (dynamic j) => GitTree.fromJson(j), - // statusCode: StatusCodes.CREATED, - // body: GitHubJson.encode(createGitTree))); - // }); - - // test('with sha creates valid JSON body', () { - // // given - // var treeEntry = CreateGitTreeEntry('file.rb', '100644', 'blob', - // sha: '44b4fc6d56897b048c772eb4087f854f46256132'); - - // final tree = CreateGitTree([treeEntry]); - - // // when - // git.createTree(repo, tree); - - // // then - // final body = captureSentBody(github)!; - // expect(body['tree'], isNotNull); - // expect(body['tree'][0]['path'], equals('file.rb')); - // expect(body['tree'][0]['mode'], equals('100644')); - // expect(body['tree'][0]['type'], equals('blob')); - // expect(body['tree'][0]['sha'], - // equals('44b4fc6d56897b048c772eb4087f854f46256132')); - // expect(body['tree'][0]['content'], isNull); - // }); - - // test('with content creates valid JSON body', () { - // // given - // var treeEntry = CreateGitTreeEntry('file.rb', '100644', 'blob', - // content: 'some file content'); - - // final tree = CreateGitTree([treeEntry]); - - // // when - // git.createTree(repo, tree); - - // // then - // final body = captureSentBody(github)!; - // expect(body['tree'], isNotNull); - // expect(body['tree'][0]['path'], equals('file.rb')); - // expect(body['tree'][0]['mode'], equals('100644')); - // expect(body['tree'][0]['type'], equals('blob')); - // expect(body['tree'][0]['sha'], isNull); - // expect(body['tree'][0]['content'], equals('some file content')); - // }); - // }); +GitHub createGithub() { + return GitHub( + endpoint: fakeApiUrl, + auth: + Authentication.withToken('0000000000000000000000000000000000000001')); } -// Map? captureSentBody(MockGitHub github) { -// final bodyString = verify(github.postJSON( -// any, -// convert: any, -// statusCode: any, -// body: captureAny, -// )).captured.single; - -// final body = jsonDecode(bodyString) as Map?; -// return body; -// } +void main() { + late GitHub github; + late GitService git; + late RepositorySlug repo; + const someSha = 'someSHA'; + + setUpAll(nock.init); + + setUp(() { + nock.cleanAll(); + github = createGithub(); + git = GitService(github); + repo = RepositorySlug('o', 'n'); + }); + tearDown(nock.cleanAll); + + test('getBlob()', () async { + nock(fakeApiUrl).get('/repos/o/n/git/blobs/sh').reply(200, nocked.getBlob); + final blob = await git.getBlob(repo, 'sh'); + expect(blob.sha, '3a0f86fb8db8eea7ccbb9a95f325ddbedfb25e15'); + expect(nock.pendingMocks.isEmpty, true); + }); + + test('createBlob()', () async { + nock(fakeApiUrl) + .post('/repos/o/n/git/blobs', '{"content":"bbb","encoding":"utf-8"}') + .reply(201, nocked.createBlob); + var blob = await git.createBlob(repo, CreateGitBlob('bbb', 'utf-8')); + expect(blob.content, 'bbb'); + expect(blob.encoding, 'utf-8'); + }); + + test('getCommit()', () async { + nock(fakeApiUrl) + .get('/repos/o/n/git/commits/sh') + .reply(200, nocked.getCommit); + var commit = await git.getCommit(repo, 'sh'); + expect(commit.sha, '7638417db6d59f3c431d3e1f261cc637155684cd'); + }); + + test('createCommit()', () async { + nock(fakeApiUrl) + .post('/repos/o/n/git/commits', + '{"message":"aMessage","tree":"aTreeSha","parents":["parentSha1","parentSha2"],"committer":{"name":"cName","email":"cEmail","date":"2014-10-02T15:21:29Z"},"author":{"name":"aName","email":"aEmail","date":"2014-10-02T15:21:29Z"}}') + .reply(201, nocked.createCommit); + + var commit = await git.createCommit( + repo, + CreateGitCommit('aMessage', 'aTreeSha') + ..parents = ['parentSha1', 'parentSha2'] + ..committer = GitCommitUser('cName', 'cEmail', DateTime.parse(date)) + ..author = GitCommitUser('aName', 'aEmail', DateTime.parse(date))); + expect(commit.message, 'aMessage'); + expect(commit.tree!.sha, 'aTreeSha'); + }); + + test('getReference()', () async { + nock(fakeApiUrl) + .get('/repos/o/n/git/refs/heads/b') + .reply(200, nocked.getReference); + var ref = await git.getReference(repo, 'heads/b'); + expect(ref.ref, 'refs/heads/b'); + }); + + test('createReference()', () async { + const someRef = 'refs/heads/b'; + nock(fakeApiUrl) + .post('/repos/o/n/git/refs', '{"ref":"refs/heads/b","sha":"someSHA"}') + .reply(201, nocked.createReference); + var ref = await git.createReference(repo, someRef, someSha); + expect(ref.ref, someRef); + }); + + test('editReference()', () async { + nock(fakeApiUrl) + .patch('/repos/o/n/git/refs/heads/b', '{"sha":"someSHA","force":true}') + .reply(200, '{}'); + + await git.editReference(repo, 'heads/b', someSha, force: true); + }); + + test('deleteReference()', () async { + nock(fakeApiUrl).delete('/repos/o/n/git/refs/heads/b').reply(200, '{}'); + await git.deleteReference(repo, 'heads/b'); + }); + + test('getTag()', () async { + nock(fakeApiUrl) + .get('/repos/o/n/git/tags/someSHA') + .reply(200, nocked.getTag); + await git.getTag(repo, someSha); + }); + + test('createTag()', () async { + nock(fakeApiUrl) + .post('/repos/o/n/git/tags', + '{"tag":"v0.0.1","message":"initial version","object":"someSHA","type":"commit","tagger":{"name":"Monalisa Octocat","email":"octocat@github.com","date":"$date"}}') + .reply(201, nocked.createTag); + + final createGitTag = CreateGitTag( + 'v0.0.1', + 'initial version', + someSha, + 'commit', + GitCommitUser( + 'Monalisa Octocat', 'octocat@github.com', DateTime.parse(date))); + + var tag = await git.createTag(repo, createGitTag); + + expect(tag.tag, 'v0.0.1'); + expect(tag.message, 'initial version'); + expect(tag.tagger?.name, 'Monalisa Octocat'); + }); + + test('getTree()', () async { + nock(fakeApiUrl) + .get('/repos/o/n/git/trees/sh?recursive=1') + .reply(200, '{}'); + await git.getTree(repo, 'sh', recursive: true); + }); + + test('createTree()', () async { + nock(fakeApiUrl) + .post('/repos/o/n/git/trees', + '{"tree":[{"path":"file.rb","mode":"100644","type":"blob","sha":"44b4fc6d56897b048c772eb4087f854f46256132"}]}') + .reply(201, nocked.createTree); + + var createTree = CreateGitTree([ + CreateGitTreeEntry('file.rb', '100644', 'blob', + sha: '44b4fc6d56897b048c772eb4087f854f46256132') + ]); + + var tree = await git.createTree(repo, createTree); + var entry = tree.entries?.first; + expect(entry?.path, 'file.rb'); + expect(entry?.mode, '100644'); + expect(entry?.type, 'blob'); + expect(entry?.sha, '44b4fc6d56897b048c772eb4087f854f46256132'); + + nock(fakeApiUrl) + .post('/repos/o/n/git/trees', + '{"tree":[{"path":"file.rb","mode":"100644","type":"blob","content":"content"}]}') + .reply(201, nocked.createTree); + + createTree = CreateGitTree( + [CreateGitTreeEntry('file.rb', '100644', 'blob', content: 'content')]); + + tree = await git.createTree(repo, createTree); + entry = tree.entries?.first; + expect(entry?.path, 'file.rb'); + expect(entry?.mode, '100644'); + expect(entry?.type, 'blob'); + expect(entry?.sha, '44b4fc6d56897b048c772eb4087f854f46256132'); + }); + + test('code search', () async { + nock(fakeApiUrl) + .get( + '/search/code?q=search%20repo%3ASpinlockLabs%2Fgithub.dart%20in%3Afile&per_page=20&page=1') + .reply(200, nocked.searchResults); + + final results = (await github.search + .code( + 'search', + repo: 'SpinlockLabs/github.dart', + perPage: 20, + pages: 1, + ) + .toList()) + .first; + expect(results.totalCount, 17); + expect(results.items?.length, 17); + }); +} diff --git a/test/scenarios_test.dart b/test/scenarios_test.dart new file mode 100644 index 00000000..8d02b702 --- /dev/null +++ b/test/scenarios_test.dart @@ -0,0 +1,141 @@ +@Tags(['scenarios']) +@TestOn('vm') + +import 'dart:convert'; + +import 'package:github/github.dart'; +import 'package:http/http.dart' as http; +import 'package:test/test.dart'; + +final defaultFixtureServerUri = Uri.parse('http://localhost:3000/fixtures'); + +/// All folder names at @octokit/fixtures/scenarios/api.github.com +/// are valid values for [scenario]. +Future createGithubWithScenario(String scenario, + {Uri? fixtureServerUri}) async { + fixtureServerUri ??= defaultFixtureServerUri; + + // send a request to the fixtures server to get load a fixture + var resp = await http.post(fixtureServerUri, + headers: {'Content-Type': 'application/json'}, + body: '{"scenario": "$scenario"}'); + if (resp.statusCode < 200 || resp.statusCode >= 300) { + throw Exception( + 'Error loading scenario: $scenario\n${resp.statusCode}\n${resp.body}'); + } + var j = json.decode(resp.body); + return GitHub( + endpoint: j['url'], + auth: + Authentication.withToken('0000000000000000000000000000000000000001')); +} + +/// Run scenario tests against ockokits fixtures-server +/// https://github.com/octokit/fixtures-server +/// +/// These tests are a port of the rest.js ocktokit tests from +/// https://github.com/octokit/rest.js/tree/master/test/scenarios +/// +/// The fixture server must be running before running these tests +/// The easiest way is to install node and then run +/// npx octokit-fixtures-server +void main() { + // test('____', () async { + // var gh = await createGithubWithScenario('____'); + // // todo do test + // }); + + test('add-and-remove-repository-collaborator', () async { + var gh = await createGithubWithScenario( + 'add-and-remove-repository-collaborator'); + // todo do test + }, skip: true); + test('add-labels-to-issue', () async { + var gh = await createGithubWithScenario('add-labels-to-issue'); + // todo do test + }, skip: true); + test('branch-protection', () async { + var gh = await createGithubWithScenario('branch-protection'); + // todo do test + }, skip: true); + test('create-file', () async { + var gh = await createGithubWithScenario('create-file'); + // todo do test + }, skip: true); + + test('create-status', () async { + var gh = await createGithubWithScenario('create-status'); + // todo do test + }, skip: true); + test('errors', () async { + var gh = await createGithubWithScenario('errors'); + // todo do test + }, skip: true); + test('get-archive', () async { + var gh = await createGithubWithScenario('get-archive'); + // todo do test + }, skip: true); + test('get-content', () async { + var gh = await createGithubWithScenario('get-content'); + // todo do test + }, skip: true); + + test('get-organization', () async { + var gh = await createGithubWithScenario('get-organization'); + var org = await gh.organizations.get('octokit-fixture-org'); + expect(org.login, 'octokit-fixture-org'); + }); + + test('get-repository', () async { + var gh = await createGithubWithScenario('get-repository'); + // todo do test + }, skip: true); + test('get-root', () async { + var gh = await createGithubWithScenario('get-root'); + // todo do test + }, skip: true); + test('git-refs', () async { + var gh = await createGithubWithScenario('git-refs'); + // todo do test + }, skip: true); + test('labels', () async { + var gh = await createGithubWithScenario('labels'); + // todo do test + }, skip: true); + test('lock-issue', () async { + var gh = await createGithubWithScenario('lock-issue'); + // todo do test + }, skip: true); + test('mark-notifications-as-read', () async { + var gh = await createGithubWithScenario('mark-notifications-as-read'); + // todo do test + }, skip: true); + test('markdown', () async { + var gh = await createGithubWithScenario('markdown'); + // todo do test + }, skip: true); + test('paginate-issues', () async { + var gh = await createGithubWithScenario('paginate-issues'); + // todo do test + }, skip: true); + test('project-cards', () async { + var gh = await createGithubWithScenario('project-cards'); + // todo do test + }, skip: true); + test('release-assets-conflict', () async { + var gh = await createGithubWithScenario('release-assets-conflict'); + // todo do test + }, skip: true); + test('release-assets', () async { + var gh = await createGithubWithScenario('release-assets'); + // todo do test + }, skip: true); + test('rename-repository', () async { + var gh = await createGithubWithScenario('rename-repository'); + // todo do test + }, skip: true); + test('search-issues', () async { + var gh = await createGithubWithScenario('search-issues'); + // todo do test + }, skip: true); +} From c0390a9e8065d71046628413fb8ab8bc3d4f26cc Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Mon, 31 Oct 2022 01:01:22 -0600 Subject: [PATCH 08/12] run just unit tests for now --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 13cb1045..2a31ff96 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,6 +19,6 @@ jobs: - name: Install dependencies run: dart pub get - name: Unit tests - run: make test + run: dart test # - name: Integration tests # run: dart test integration_test From b7e74b1520e86c3c5de6f461cd4e1ebf6901fcd9 Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Mon, 31 Oct 2022 08:12:05 -0600 Subject: [PATCH 09/12] separate out the bump to dart 2.17 --- pubspec.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index 7b316b71..ed60fc15 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,12 +4,12 @@ description: A high-level GitHub API Client Library that uses Github's v3 API homepage: https://github.com/SpinlockLabs/github.dart environment: - sdk: '>=2.17.0 <3.0.0' + sdk: '>=2.14.0 <3.0.0' dependencies: http: ^0.13.0 http_parser: ^4.0.0 - json_annotation: ^4.7.0 + json_annotation: ^4.4.0 meta: ^1.3.0 dev_dependencies: @@ -19,10 +19,10 @@ dev_dependencies: collection: ^1.15.0 dependency_validator: json_serializable: ^6.0.0 - lints: ^2.0.0 - mockito: ^5.3.0 + lints: ^1.0.0 + mockito: ^5.0.0 nock: ^1.0.0 - pub_semver: - test: #^1.16.0 + pub_semver: ^2.0.0 + test: ^1.16.0 yaml: ^3.0.0 yaml_edit: From cfdfa97a1876ea561d5ecca72b54fc7730a45acf Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Mon, 31 Oct 2022 08:19:46 -0600 Subject: [PATCH 10/12] test with Dart 2.14 --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2a31ff96..6e1cb6e5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - sdk: [2.17.7, stable] + sdk: [2.14.4, 2.17.7, stable] # Test with at least the declared minimum Dart version steps: - uses: actions/checkout@v2 - uses: dart-lang/setup-dart@v1.3 From f55e133eeb70d52d96f2095c399af577fb095d29 Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Mon, 31 Oct 2022 08:23:22 -0600 Subject: [PATCH 11/12] add a todo and remove commented code --- test/scenarios_test.dart | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test/scenarios_test.dart b/test/scenarios_test.dart index 8d02b702..f31d3a8f 100644 --- a/test/scenarios_test.dart +++ b/test/scenarios_test.dart @@ -39,12 +39,11 @@ Future createGithubWithScenario(String scenario, /// The fixture server must be running before running these tests /// The easiest way is to install node and then run /// npx octokit-fixtures-server +/// +/// TODO(robrbecker) Implement a fixture-server "light" in Dart +/// directly using nock so we can remove the dependency on node +/// and running a server in order to run tests void main() { - // test('____', () async { - // var gh = await createGithubWithScenario('____'); - // // todo do test - // }); - test('add-and-remove-repository-collaborator', () async { var gh = await createGithubWithScenario( 'add-and-remove-repository-collaborator'); From e6d5aebf1079da782e2c680d8dae471f2b3fc6ae Mon Sep 17 00:00:00 2001 From: Rob Becker Date: Mon, 31 Oct 2022 08:23:54 -0600 Subject: [PATCH 12/12] format --- test/scenarios_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/scenarios_test.dart b/test/scenarios_test.dart index f31d3a8f..6486553d 100644 --- a/test/scenarios_test.dart +++ b/test/scenarios_test.dart @@ -39,7 +39,7 @@ Future createGithubWithScenario(String scenario, /// The fixture server must be running before running these tests /// The easiest way is to install node and then run /// npx octokit-fixtures-server -/// +/// /// TODO(robrbecker) Implement a fixture-server "light" in Dart /// directly using nock so we can remove the dependency on node /// and running a server in order to run tests