Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
targets:
$default:
builders:
reflectable_builder:
generate_for:
- example/**.dart
- test/**.dart
- lib/**.dart
options:
formatted: true
5 changes: 5 additions & 0 deletions lib/src/directus_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ 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;
Expand Down Expand Up @@ -70,6 +72,7 @@ abstract class IDirectusAPI {

PreparedRequest prepareLoginRequest(String username, String password,
{String? oneTimePassword});

DirectusLoginResult parseLoginResponse(Response response);

PreparedRequest prepareUserInviteRequest(String email, String roleId);
Expand Down Expand Up @@ -114,6 +117,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;
Expand Down
29 changes: 14 additions & 15 deletions lib/src/directus_api_manager_base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -257,21 +259,18 @@ class DirectusApiManager implements IDirectusApiManager {
_currentUserLock = completer.future;

try {
if (cachedCurrentUser == null && await hasLoggedInUser()) {
cachedCurrentUser = await _sendRequest(
requestIdentifier: _currentUserRequestIdentifier,
canSaveResponseToCache: canSaveResponseToCache,
canUseCacheForResponse: canUseCacheForResponse,
canUseOldCachedResponseAsFallback:
canUseOldCachedResponseAsFallback,
maxCacheAge: maxCacheAge,
prepareRequest: () =>
_api.prepareGetCurrentUserRequest(fields: fields),
parseResponse: (response) {
final parsedJson = _api.parseGetSpecificItemResponse(response);
return DirectusUser(parsedJson);
});
}
cachedCurrentUser ??= await _sendRequest(
requestIdentifier: _currentUserRequestIdentifier,
canSaveResponseToCache: canSaveResponseToCache,
canUseCacheForResponse: canUseCacheForResponse,
canUseOldCachedResponseAsFallback: canUseOldCachedResponseAsFallback,
maxCacheAge: maxCacheAge,
prepareRequest: () =>
_api.prepareGetCurrentUserRequest(fields: fields),
parseResponse: (response) {
final parsedJson = _api.parseGetSpecificItemResponse(response);
return DirectusUser(parsedJson);
});
} catch (error) {
print(error);
}
Expand Down
1 change: 1 addition & 0 deletions lib/src/idirectus_api_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ abstract class IDirectusApiManager {
required T Function(Response) jsonConverter});
bool get shouldRefreshToken;
String? get accessToken;
set accessToken(String? value);
String? get refreshToken;
Future<bool> tryAndRefreshToken();
String get webSocketBaseUrl;
Expand Down
14 changes: 14 additions & 0 deletions lib/test/mock_directus_api_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -274,4 +274,18 @@ class MockDirectusApiManager extends IDirectusApiManager with MockMixin {
void discardCurrentUserCache() {
addCall(named: "discardCurrentUserCache");
}

@override
Future<DirectusLoginResult> 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});
}
}
16 changes: 4 additions & 12 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: directus_api_manager
description: Communicate with a Directus server using its REST API.
version: 1.14.2
version: 1.14.3
repository: https://github.com/maxbritto/directus_api_manager

environment:
Expand All @@ -9,22 +9,14 @@ environment:
dependencies:
http: ">=0.13.4 <2.0.0"
http_parser: ^4.0.2
reflectable: ">=4.0.1 <6.0.0"
reflectable: ">=4.0.1 <6.0.0"
web_socket_channel: ^3.0.3
extension_dart_tools: ^1.4.1
meta: "^1.15.0"
mutex: ^3.1.0

dev_dependencies:
reflectable_builder: any
build_runner: any
lints: ^6.0.0
test: ^1.27.0

targets:
$default:
builders:
reflectable:
generate_for:
- example/directus_api_manager_example.dart
options:
formatted: true
test: ^1.26.3
6 changes: 6 additions & 0 deletions test/directus_api_manager_base_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand Down
9 changes: 9 additions & 0 deletions test/directus_api_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
6 changes: 6 additions & 0 deletions test/mock/mock_directus_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -331,4 +331,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");
}
}