feat: 重构会话管理与提醒通知系统

This commit is contained in:
qzl
2026-03-31 18:26:36 +08:00
parent a8c262e9c7
commit 9a231dae9e
31 changed files with 650 additions and 223 deletions
@@ -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);
});
}