64 lines
1.8 KiB
Dart
64 lines
1.8 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:social_app/app/services/session_scope_manager.dart';
|
|
import 'package:social_app/data/cache/cache_scope.dart';
|
|
import 'package:social_app/data/cache/cache_store.dart';
|
|
|
|
class _RecordingHybridCacheStore extends HybridCacheStore {
|
|
_RecordingHybridCacheStore()
|
|
: super(memory: MemoryCacheStore(), persistent: PersistentCacheStore());
|
|
|
|
final List<String> clearedPrefixes = <String>[];
|
|
|
|
@override
|
|
Future<void> clearByPrefix(String prefix) async {
|
|
clearedPrefixes.add(prefix);
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
late _RecordingHybridCacheStore cacheStore;
|
|
late SessionScopeManager manager;
|
|
|
|
setUp(() {
|
|
cacheStore = _RecordingHybridCacheStore();
|
|
manager = SessionScopeManager(cacheStore: cacheStore);
|
|
CacheScope.resetProvider();
|
|
});
|
|
|
|
tearDown(() {
|
|
CacheScope.resetProvider();
|
|
});
|
|
|
|
test('activate configures stable user scope token', () async {
|
|
await manager.activate('u-1');
|
|
|
|
expect(CacheScope.token(), 'user:u-1');
|
|
expect(cacheStore.clearedPrefixes, isEmpty);
|
|
});
|
|
|
|
test('activate clears previous user cache when switching user', () async {
|
|
await manager.activate('u-1');
|
|
await manager.activate('u-2');
|
|
|
|
expect(cacheStore.clearedPrefixes, ['cache:user:u-1:']);
|
|
expect(CacheScope.token(), 'user:u-2');
|
|
});
|
|
|
|
test('activate does not clear cache when user is unchanged', () async {
|
|
await manager.activate('u-1');
|
|
await manager.activate('u-1');
|
|
|
|
expect(cacheStore.clearedPrefixes, isEmpty);
|
|
expect(CacheScope.token(), 'user:u-1');
|
|
});
|
|
|
|
test('clearActiveUserScope clears current user cache', () async {
|
|
await manager.activate('u-1');
|
|
|
|
await manager.clearActiveUserScope();
|
|
|
|
expect(cacheStore.clearedPrefixes, ['cache:user:u-1:']);
|
|
expect(() => CacheScope.token(), throwsStateError);
|
|
});
|
|
}
|