feat: 重构会话管理与提醒通知系统
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user