diff --git a/build.yaml b/build.yaml new file mode 100644 index 0000000..8f44bc7 --- /dev/null +++ b/build.yaml @@ -0,0 +1,10 @@ +targets: + $default: + builders: + reflectable_builder: + generate_for: + - example/**.dart + - test/**.dart + - lib/**.dart + options: + formatted: true diff --git a/lib/src/directus_api.dart b/lib/src/directus_api.dart index b76a582..096a8c8 100644 --- a/lib/src/directus_api.dart +++ b/lib/src/directus_api.dart @@ -2,12 +2,15 @@ import 'dart:convert'; import 'package:directus_api_manager/directus_api_manager.dart'; import 'package:http/http.dart'; +import 'package:http_parser/http_parser.dart'; abstract class IDirectusAPI { bool get hasLoggedInUser; bool get shouldRefreshToken; String? get accessToken; + set accessToken(String? value); String? get currentAuthToken; + String? get refreshToken; set refreshToken(String? value); String get baseUrl; @@ -69,6 +72,7 @@ abstract class IDirectusAPI { PreparedRequest prepareLoginRequest(String username, String password, {String? oneTimePassword}); + DirectusLoginResult parseLoginResponse(Response response); PreparedRequest prepareUserInviteRequest(String email, String roleId); @@ -117,6 +121,8 @@ class DirectusAPI implements IDirectusAPI { String get baseUrl => _baseURL; String? _accessToken; + @override + set accessToken(String? value) => _accessToken = value; String? _refreshToken; @override set refreshToken(String? value) => _refreshToken = value; diff --git a/lib/src/directus_api_manager_base.dart b/lib/src/directus_api_manager_base.dart index 018d832..e816614 100644 --- a/lib/src/directus_api_manager_base.dart +++ b/lib/src/directus_api_manager_base.dart @@ -61,6 +61,8 @@ class DirectusApiManager implements IDirectusApiManager { bool get shouldRefreshToken => _api.shouldRefreshToken; @override String? get accessToken => _api.accessToken; + @override + set accessToken(String? value) => _api.accessToken = value; @override String? get refreshToken => _api.refreshToken; diff --git a/lib/src/idirectus_api_manager.dart b/lib/src/idirectus_api_manager.dart index 80f88dd..ddad9f2 100644 --- a/lib/src/idirectus_api_manager.dart +++ b/lib/src/idirectus_api_manager.dart @@ -89,6 +89,7 @@ abstract class IDirectusApiManager { required T Function(Response) jsonConverter}); bool get shouldRefreshToken; String? get accessToken; + set accessToken(String? value); String? get refreshToken; Future tryAndRefreshToken(); String get webSocketBaseUrl; diff --git a/lib/test/mock_directus_api_manager.dart b/lib/test/mock_directus_api_manager.dart index c614409..cc45ef6 100644 --- a/lib/test/mock_directus_api_manager.dart +++ b/lib/test/mock_directus_api_manager.dart @@ -290,4 +290,18 @@ class MockDirectusApiManager extends IDirectusApiManager with MockMixin { void discardCurrentUserCache() { addCall(named: "discardCurrentUserCache"); } + + @override + Future loginDirectusUserWithProvider( + {required String provider}) { + addCall( + named: "loginDirectusUserWithProvider", + arguments: {"provider": provider}); + return Future.value(popNextReturnedObject()); + } + + @override + set accessToken(String? value) { + addCall(named: "set accessToken", arguments: {"value": value}); + } } diff --git a/pubspec.yaml b/pubspec.yaml index daf8940..3c7eace 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,6 +8,7 @@ environment: dependencies: http: ">=0.13.4 <2.0.0" + http_parser: ">=4.0.0 <5.0.0" reflectable: ^5.1.0 web_socket_channel: ^3.0.3 extension_dart_tools: ^1.4.1 diff --git a/test/directus_api_manager_base_test.dart b/test/directus_api_manager_base_test.dart index 86ad0ea..827cf93 100644 --- a/test/directus_api_manager_base_test.dart +++ b/test/directus_api_manager_base_test.dart @@ -28,6 +28,12 @@ void main() { ); }); + test("Set access token", () { + sut.accessToken = "NEW.ACCESS.TOKEN"; + expect(mockDirectusApi.calledFunctions, contains("set accessToken")); + expect(mockDirectusApi.receivedObjects["value"], "NEW.ACCESS.TOKEN"); + }); + test('Empty manager does not have a logged in user', () async { final mockClient = MockHTTPClient(); final sut = diff --git a/test/directus_api_test.dart b/test/directus_api_test.dart index 0be5230..2c8aaac 100644 --- a/test/directus_api_test.dart +++ b/test/directus_api_test.dart @@ -32,6 +32,15 @@ void main() { }); }); + group("DirectusAPI Setter", () { + test("Set access token", () { + final sut = DirectusAPI("http://api.com"); + expect(sut.accessToken, isNull); + sut.accessToken = "NEW.ACCESS.TOKEN"; + expect(sut.accessToken, "NEW.ACCESS.TOKEN"); + }); + }); + group("DirectusAPI Data Management", () { test('Get list of items request', () { final sut = makeAuthenticatedDirectusAPI(); diff --git a/test/mock/mock_directus_api.dart b/test/mock/mock_directus_api.dart index b2231fc..faefc70 100644 --- a/test/mock/mock_directus_api.dart +++ b/test/mock/mock_directus_api.dart @@ -347,4 +347,10 @@ class MockDirectusApi with MockMixin implements IDirectusAPI { addReceivedObject(lastname, name: "lastname"); return nextReturnedRequest; } + + @override + set accessToken(String? value) { + addCalledFunction(named: "set accessToken"); + addReceivedObject(value, name: "value"); + } }