Files

64 lines
1.8 KiB
Dart
Raw Permalink Normal View History

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);
});
}