import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:mockito/annotations.dart'; import 'package:pocketbase_sync/pocketbase_sync.dart'; // Generate Mocks @GenerateNiceMocks([MockSpec()]) import 'multi_sync_test.mocks.dart'; // Test Models class ModelA {} class ModelB {} void main() { late PocketBaseMultiSyncManager multiManager; late MockPocketBaseSyncManager mockManagerA; late MockPocketBaseSyncManager mockManagerB; setUp(() { multiManager = PocketBaseMultiSyncManager(); mockManagerA = MockPocketBaseSyncManager(); mockManagerB = MockPocketBaseSyncManager(); }); test('Register and Retrieve Manager', () { multiManager.register(mockManagerA); expect(multiManager.managerFor(), equals(mockManagerA)); expect(() => multiManager.managerFor(), throwsStateError); }); test('SyncAll calls sync on all managers', () async { multiManager.register(mockManagerA); multiManager.register(mockManagerB); await multiManager.sync(); verify(mockManagerA.sync()).called(1); verify(mockManagerB.sync()).called(1); }); test('SyncAll continues even if one manager fails', () async { multiManager.register(mockManagerA); multiManager.register(mockManagerB); when(mockManagerA.sync()).thenThrow(Exception('Sync Failed')); await multiManager.sync(); verify(mockManagerA.sync()).called(1); verify(mockManagerB.sync()).called(1); // Should still execute }); }