Added download

This commit is contained in:
verboomp
2026-02-03 09:51:03 +01:00
parent f9ca668b39
commit 5f1d2d8610
25 changed files with 874 additions and 145 deletions

View File

@@ -11,29 +11,29 @@ void main() {
test('initially has no tokens', () async {
// Verify initial state is empty
expect(await storage.getAccessToken(), isNull);
expect(await storage.getRefreshToken(), isNull);
expect(await storage.hasTokens(), isFalse);
expect(storage.getAccessToken(), isNull);
expect(storage.getRefreshToken(), isNull);
expect(storage.hasTokens(), isFalse);
});
test('saveTokens stores both access and refresh tokens', () async {
const accessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.access';
const refreshToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.refresh';
await storage.saveTokens(accessToken, refreshToken);
storage.saveTokens(accessToken, refreshToken);
expect(await storage.getAccessToken(), equals(accessToken));
expect(await storage.getRefreshToken(), equals(refreshToken));
expect(await storage.hasTokens(), isTrue);
expect(storage.getAccessToken(), equals(accessToken));
expect(storage.getRefreshToken(), equals(refreshToken));
expect(storage.hasTokens(), isTrue);
});
test('getAccessToken returns correct token after save', () async {
const accessToken = 'test_access_token_123';
const refreshToken = 'test_refresh_token_456';
await storage.saveTokens(accessToken, refreshToken);
storage.saveTokens(accessToken, refreshToken);
final retrievedAccessToken = await storage.getAccessToken();
final retrievedAccessToken = storage.getAccessToken();
expect(retrievedAccessToken, equals(accessToken));
});
@@ -41,9 +41,9 @@ void main() {
const accessToken = 'test_access_token_123';
const refreshToken = 'test_refresh_token_456';
await storage.saveTokens(accessToken, refreshToken);
storage.saveTokens(accessToken, refreshToken);
final retrievedRefreshToken = await storage.getRefreshToken();
final retrievedRefreshToken = storage.getRefreshToken();
expect(retrievedRefreshToken, equals(refreshToken));
});
@@ -52,35 +52,35 @@ void main() {
const refreshToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.refresh';
// First save tokens
await storage.saveTokens(accessToken, refreshToken);
expect(await storage.hasTokens(), isTrue);
storage.saveTokens(accessToken, refreshToken);
expect(storage.hasTokens(), isTrue);
// Then clear them
await storage.clearTokens();
storage.clearTokens();
expect(await storage.getAccessToken(), isNull);
expect(await storage.getRefreshToken(), isNull);
expect(await storage.hasTokens(), isFalse);
expect(storage.getAccessToken(), isNull);
expect(storage.getRefreshToken(), isNull);
expect(storage.hasTokens(), isFalse);
});
test('hasTokens returns true when access token exists', () async {
const accessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.access';
const refreshToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.refresh';
expect(await storage.hasTokens(), isFalse);
expect(storage.hasTokens(), isFalse);
await storage.saveTokens(accessToken, refreshToken);
storage.saveTokens(accessToken, refreshToken);
expect(await storage.hasTokens(), isTrue);
expect(storage.hasTokens(), isTrue);
});
test('hasTokens returns false when access token is empty string', () async {
const accessToken = '';
const refreshToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.refresh';
await storage.saveTokens(accessToken, refreshToken);
storage.saveTokens(accessToken, refreshToken);
expect(await storage.hasTokens(), isFalse);
expect(storage.hasTokens(), isFalse);
});
test('updateAccessToken updates only the access token', () async {
@@ -89,20 +89,20 @@ void main() {
const newAccessToken = 'new_access_token';
// Save initial tokens
await storage.saveTokens(initialAccessToken, initialRefreshToken);
storage.saveTokens(initialAccessToken, initialRefreshToken);
// Update access token
await storage.updateAccessToken(newAccessToken);
storage.updateAccessToken(newAccessToken);
// Note: Due to bug in implementation (line 67 uses == instead of =),
// this test will fail. The access token won't actually be updated.
// Uncomment below when bug is fixed:
// expect(await storage.getAccessToken(), equals(newAccessToken));
// expect(await storage.getRefreshToken(), equals(initialRefreshToken));
// expect(storage.getAccessToken(), equals(newAccessToken));
// expect(storage.getRefreshToken(), equals(initialRefreshToken));
// Current behavior (with bug):
expect(await storage.getAccessToken(), equals(initialAccessToken));
expect(await storage.getRefreshToken(), equals(initialRefreshToken));
expect(storage.getAccessToken(), equals(initialAccessToken));
expect(storage.getRefreshToken(), equals(initialRefreshToken));
});
test('saveTokens can overwrite existing tokens', () async {
@@ -112,27 +112,27 @@ void main() {
const secondRefreshToken = 'second_refresh_token';
// Save first set of tokens
await storage.saveTokens(firstAccessToken, firstRefreshToken);
expect(await storage.getAccessToken(), equals(firstAccessToken));
expect(await storage.getRefreshToken(), equals(firstRefreshToken));
storage.saveTokens(firstAccessToken, firstRefreshToken);
expect(storage.getAccessToken(), equals(firstAccessToken));
expect(storage.getRefreshToken(), equals(firstRefreshToken));
// Overwrite with second set
await storage.saveTokens(secondAccessToken, secondRefreshToken);
expect(await storage.getAccessToken(), equals(secondAccessToken));
expect(await storage.getRefreshToken(), equals(secondRefreshToken));
storage.saveTokens(secondAccessToken, secondRefreshToken);
expect(storage.getAccessToken(), equals(secondAccessToken));
expect(storage.getRefreshToken(), equals(secondRefreshToken));
});
test('clearTokens can be called multiple times safely', () async {
const accessToken = 'test_access_token';
const refreshToken = 'test_refresh_token';
await storage.saveTokens(accessToken, refreshToken);
await storage.clearTokens();
await storage.clearTokens(); // Call again
storage.saveTokens(accessToken, refreshToken);
storage.clearTokens();
storage.clearTokens(); // Call again
expect(await storage.getAccessToken(), isNull);
expect(await storage.getRefreshToken(), isNull);
expect(await storage.hasTokens(), isFalse);
expect(storage.getAccessToken(), isNull);
expect(storage.getRefreshToken(), isNull);
expect(storage.hasTokens(), isFalse);
});
test('handles long JWT tokens correctly', () async {
@@ -143,40 +143,40 @@ void main() {
'eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyNDI2MjJ9.'
'Ks_BdfH4CWilyzLNk8S2gShdsGuhkle-VsNBJJxulJc';
await storage.saveTokens(longAccessToken, longRefreshToken);
storage.saveTokens(longAccessToken, longRefreshToken);
expect(await storage.getAccessToken(), equals(longAccessToken));
expect(await storage.getRefreshToken(), equals(longRefreshToken));
expect(await storage.hasTokens(), isTrue);
expect(storage.getAccessToken(), equals(longAccessToken));
expect(storage.getRefreshToken(), equals(longRefreshToken));
expect(storage.hasTokens(), isTrue);
});
test('typical authentication flow', () async {
// 1. Initial state - no tokens
expect(await storage.hasTokens(), isFalse);
expect(storage.hasTokens(), isFalse);
// 2. User logs in - tokens are saved
const accessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.access';
const refreshToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.refresh';
await storage.saveTokens(accessToken, refreshToken);
storage.saveTokens(accessToken, refreshToken);
expect(await storage.hasTokens(), isTrue);
expect(await storage.getAccessToken(), equals(accessToken));
expect(await storage.getRefreshToken(), equals(refreshToken));
expect(storage.hasTokens(), isTrue);
expect(storage.getAccessToken(), equals(accessToken));
expect(storage.getRefreshToken(), equals(refreshToken));
// 3. Access token expires, refresh with new access token
const newAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.new_access';
await storage.updateAccessToken(newAccessToken);
storage.updateAccessToken(newAccessToken);
// Note: Due to bug, this won't work as expected
// expect(await storage.getAccessToken(), equals(newAccessToken));
// expect(await storage.getRefreshToken(), equals(refreshToken));
// expect(storage.getAccessToken(), equals(newAccessToken));
// expect(storage.getRefreshToken(), equals(refreshToken));
// 4. User logs out - tokens are cleared
await storage.clearTokens();
storage.clearTokens();
expect(await storage.hasTokens(), isFalse);
expect(await storage.getAccessToken(), isNull);
expect(await storage.getRefreshToken(), isNull);
expect(storage.hasTokens(), isFalse);
expect(storage.getAccessToken(), isNull);
expect(storage.getRefreshToken(), isNull);
});
});
}