Skip to content

Commit b29eb74

Browse files
authored
Chore: rememberDevice API Unit Test suite (#5108)
chore: add rememberdevice unit test
1 parent 4ec9c63 commit b29eb74

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
import 'package:amplify_auth_cognito_dart/amplify_auth_cognito_dart.dart';
5+
import 'package:amplify_auth_cognito_dart/src/credentials/cognito_keys.dart';
6+
import 'package:amplify_auth_cognito_dart/src/credentials/device_metadata_repository.dart';
7+
import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart';
8+
import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart';
9+
import 'package:amplify_auth_cognito_test/common/mock_clients.dart';
10+
import 'package:amplify_auth_cognito_test/common/mock_config.dart';
11+
import 'package:amplify_auth_cognito_test/common/mock_secure_storage.dart';
12+
import 'package:amplify_core/amplify_core.dart';
13+
import 'package:test/test.dart';
14+
15+
enum DeviceState { untracked, tracked, remembered }
16+
17+
void main() {
18+
AmplifyLogger().logLevel = LogLevel.verbose;
19+
20+
final userPoolKeys = CognitoUserPoolKeys(userPoolConfig);
21+
final identityPoolKeys = CognitoIdentityPoolKeys(identityPoolConfig);
22+
final testAuthRepo = AmplifyAuthProviderRepository();
23+
final mockUpdateDeviceStatusResponse = UpdateDeviceStatusResponse();
24+
25+
late DeviceMetadataRepository repo;
26+
late AmplifyAuthCognitoDart plugin;
27+
late CognitoAuthStateMachine stateMachine;
28+
late MockSecureStorage secureStorage;
29+
30+
Future<DeviceState> getDeviceState() async {
31+
final secrets = await repo.get(username);
32+
if (secrets == null) {
33+
return DeviceState.untracked;
34+
}
35+
return secrets.deviceStatus == DeviceRememberedStatusType.remembered
36+
? DeviceState.remembered
37+
: DeviceState.tracked;
38+
}
39+
40+
group('rememberDevice', () {
41+
setUp(() async {
42+
secureStorage = MockSecureStorage();
43+
seedStorage(
44+
secureStorage,
45+
userPoolKeys: userPoolKeys,
46+
identityPoolKeys: identityPoolKeys,
47+
deviceKeys: CognitoDeviceKeys(userPoolConfig, username),
48+
);
49+
plugin = AmplifyAuthCognitoDart(
50+
secureStorageFactory: (_) => secureStorage,
51+
);
52+
stateMachine = plugin.stateMachine;
53+
await plugin.configure(
54+
config: mockConfig,
55+
authProviderRepo: testAuthRepo,
56+
);
57+
final mockIdp = MockCognitoIdentityProviderClient(
58+
forgetDevice: () async {},
59+
updateDeviceStatus: () async => mockUpdateDeviceStatusResponse,
60+
);
61+
stateMachine.addInstance<CognitoIdentityProviderClient>(mockIdp);
62+
repo = stateMachine.getOrCreate<DeviceMetadataRepository>();
63+
});
64+
65+
tearDown(() async {
66+
await plugin.close();
67+
});
68+
69+
test('rememberDevice changes the device state from tracked to remembered',
70+
() async {
71+
expect(await getDeviceState(), DeviceState.tracked);
72+
await plugin.rememberDevice();
73+
expect(await getDeviceState(), DeviceState.remembered);
74+
});
75+
76+
test(
77+
'rememberDevice throws a DeviceNotTrackedException when device is forgotten',
78+
() async {
79+
await plugin.forgetDevice();
80+
await expectLater(
81+
plugin.rememberDevice,
82+
throwsA(isA<DeviceNotTrackedException>()),
83+
);
84+
});
85+
});
86+
}

0 commit comments

Comments
 (0)