import 'package:flutter_test/flutter_test.dart'; import 'package:jinzhi_flutter_app/common/storage/secure_identity_storage.dart'; import 'package:jinzhi_flutter_app/common/storage/storage_keys.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { setUp(() => SharedPreferences.setMockInitialValues({})); test( 'migrates a legacy SharedPreferences token into secure storage', () async { SharedPreferences.setMockInitialValues({ storageLegacyAccessToken: ' legacy ', }); final preferences = await SharedPreferences.getInstance(); final secure = _MemorySecureStorage(); final storage = SecureIdentityStorage(preferences, secureStorage: secure); expect(await storage.restoreAccessToken(), 'legacy'); expect(await secure.read('access_token'), 'legacy'); expect(preferences.containsKey(storageLegacyAccessToken), isFalse); expect(preferences.getBool(storageAuthSessionActive), isTrue); }, ); test( 'migrates the previous secure jwt key when no current token exists', () async { final preferences = await SharedPreferences.getInstance(); final secure = _MemorySecureStorage({'jwt_token': 'secure-legacy'}); final storage = SecureIdentityStorage(preferences, secureStorage: secure); expect(await storage.restoreAccessToken(), 'secure-legacy'); expect(await secure.read('access_token'), 'secure-legacy'); expect(await secure.read('jwt_token'), isNull); }, ); } class _MemorySecureStorage implements SecureKeyValueStorage { _MemorySecureStorage([Map? initial]) : _values = {...?initial}; final Map _values; @override Future delete(String key) async => _values.remove(key); @override Future read(String key) async => _values[key]; @override Future write(String key, String value) async { _values[key] = value; } }