diff --git a/integration_test/matrix_service_test.dart b/integration_test/matrix_service_test.dart index 1fbe026d9..7594ddf6d 100644 --- a/integration_test/matrix_service_test.dart +++ b/integration_test/matrix_service_test.dart @@ -13,6 +13,7 @@ import 'package:lotti/database/database.dart'; import 'package:lotti/database/logging_db.dart'; import 'package:lotti/database/settings_db.dart'; import 'package:lotti/get_it.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/sync/matrix/matrix_service.dart'; import 'package:lotti/sync/secure_storage.dart'; import 'package:lotti/sync/vector_clock.dart'; @@ -39,6 +40,18 @@ void main() { // create separate databases for each simulated device & suppress warning drift.driftRuntimeOptions.dontWarnAboutMultipleDatabases = true; + + final mockUpdateNotifications = MockUpdateNotifications(); + + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); + + when(() => mockUpdateNotifications.notifyUpdate(DatabaseType.journal)) + .thenAnswer((_) {}); + + getIt.registerSingleton(mockUpdateNotifications); + final aliceDb = JournalDb(overriddenFilename: 'alice_db.sqlite'); final bobDb = JournalDb(overriddenFilename: 'bob_db.sqlite'); diff --git a/lib/blocs/journal/journal_page_cubit.dart b/lib/blocs/journal/journal_page_cubit.dart index 1b3969443..cb629bee2 100644 --- a/lib/blocs/journal/journal_page_cubit.dart +++ b/lib/blocs/journal/journal_page_cubit.dart @@ -12,6 +12,7 @@ import 'package:lotti/database/database.dart'; import 'package:lotti/database/fts5_db.dart'; import 'package:lotti/database/settings_db.dart'; import 'package:lotti/get_it.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/utils/platform.dart'; import 'package:rxdart/rxdart.dart'; import 'package:visibility_detector/visibility_detector.dart'; @@ -101,14 +102,12 @@ class JournalPageCubit extends Cubit { } }); } else { - _db - .watchJournalCount() + _updateNotifications.updateStream .throttleTime( - const Duration(seconds: 2), - leading: false, - trailing: true, - ) - .where(makeDuplicateFilter()) + const Duration(seconds: 1), + leading: false, + trailing: true, + ) .listen((_) { if (_isVisible) { refreshQuery(); @@ -121,6 +120,7 @@ class JournalPageCubit extends Cubit { static const selectedEntryTypesKey = 'SELECTED_ENTRY_TYPES'; final JournalDb _db = getIt(); + final UpdateNotifications _updateNotifications = getIt(); bool _isVisible = false; static const _pageSize = 50; Set _selectedEntryTypes = entryTypes.toSet(); @@ -308,6 +308,7 @@ class JournalPageCubit extends Cubit { .first; final isLastPage = newItems.length < _pageSize; + if (isLastPage) { state.pagingController.appendLastPage(newItems); } else { @@ -315,8 +316,10 @@ class JournalPageCubit extends Cubit { state.pagingController.appendPage(newItems, nextPageKey); } final finished = DateTime.now(); - final duration = finished.difference(start); - debugPrint('_fetchPage $showTasks duration $duration'); + final duration = finished.difference(start).inMicroseconds / 1000; + debugPrint( + '_fetchPage ${showTasks ? 'TASK' : 'JOURNAL'} duration $duration ms', + ); } catch (error) { state.pagingController.error = error; } diff --git a/lib/database/database.dart b/lib/database/database.dart index 2db2dd7fa..8066b0f59 100644 --- a/lib/database/database.dart +++ b/lib/database/database.dart @@ -1,10 +1,8 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; import 'package:collection/collection.dart'; import 'package:drift/drift.dart'; -import 'package:drift/native.dart'; import 'package:enum_to_string/enum_to_string.dart'; import 'package:flutter/foundation.dart'; import 'package:lotti/classes/entity_definitions.dart'; @@ -15,13 +13,10 @@ import 'package:lotti/database/common.dart'; import 'package:lotti/database/conversions.dart'; import 'package:lotti/database/logging_db.dart'; import 'package:lotti/get_it.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/sync/vector_clock.dart'; import 'package:lotti/utils/file_utils.dart'; import 'package:lotti/widgets/journal/entry_tools.dart'; -import 'package:path/path.dart' as p; -import 'package:path_provider/path_provider.dart'; -import 'package:sqlite3/sqlite3.dart'; -import 'package:sqlite3_flutter_libs/sqlite3_flutter_libs.dart'; part 'database.g.dart'; @@ -40,35 +35,14 @@ class JournalDb extends _$JournalDb { this.inMemoryDatabase = false, String? overriddenFilename, }) : super( - _openConnection( + openDbConnection( overriddenFilename ?? journalDbFileName, inMemoryDatabase: inMemoryDatabase, ), ); - static LazyDatabase _openConnection( - String fileName, { - bool inMemoryDatabase = false, - }) { - return LazyDatabase(() async { - if (inMemoryDatabase) { - return NativeDatabase.memory(); - } - - final dbFolder = await getApplicationDocumentsDirectory(); - final file = File(p.join(dbFolder.path, fileName)); - - if (Platform.isAndroid) { - await applyWorkaroundToOpenSqlite3OnOldAndroidVersions(); - } - - sqlite3.tempDirectory = (await getTemporaryDirectory()).path; - - return NativeDatabase.createInBackground(file); - }); - } - bool inMemoryDatabase = false; + final UpdateNotifications _updateNotifications = getIt(); @override int get schemaVersion => 19; @@ -749,6 +723,7 @@ class JournalDb extends _$JournalDb { dashboard: upsertDashboardDefinition, categoryDefinition: upsertCategoryDefinition, ); + _updateNotifications.notifyUpdate(DatabaseType.journal); return linesAffected; } } diff --git a/lib/get_it.dart b/lib/get_it.dart index a0597faf9..2f2bad7f6 100644 --- a/lib/get_it.dart +++ b/lib/get_it.dart @@ -12,6 +12,7 @@ import 'package:lotti/logic/ai/ai_logic.dart'; import 'package:lotti/logic/health_import.dart'; import 'package:lotti/logic/persistence_logic.dart'; import 'package:lotti/services/asr_service.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/services/editor_state_service.dart'; import 'package:lotti/services/entities_cache_service.dart'; import 'package:lotti/services/link_service.dart'; @@ -29,10 +30,8 @@ Future registerSingletons() async { getIt ..registerSingleton(Fts5Db()) ..registerSingleton(LoggingDb()) + ..registerSingleton(UpdateNotifications()) ..registerSingleton(JournalDb()) - // ..registerSingleton( - // DatabaseUpdateNotifications(), - // ) ..registerSingleton(EditorDb()) ..registerSingleton(TagsService()) ..registerSingleton(EntitiesCacheService()) diff --git a/lib/services/db_notification.dart b/lib/services/db_notification.dart index 0aa099593..1e5bf8ad8 100644 --- a/lib/services/db_notification.dart +++ b/lib/services/db_notification.dart @@ -1,21 +1,20 @@ -import 'package:flutter/foundation.dart'; -import 'package:lotti/database/database.dart'; -import 'package:lotti/get_it.dart'; +import 'dart:async'; -class DatabaseUpdateNotifications { - DatabaseUpdateNotifications() { - listen(); - } +enum DatabaseType { + journal, + setting, + sync, + logging, +} + +class UpdateNotifications { + UpdateNotifications(); + + final _updateStreamController = StreamController.broadcast(); - final JournalDb _journalDb = getIt(); + Stream get updateStream => _updateStreamController.stream; - void listen() { - _journalDb.countJournalEntries().watch().listen((event) async { - final start = DateTime.now(); - final count = await _journalDb.countJournalEntries().getSingle(); - final end = DateTime.now(); - final duration = end.difference(start).inMicroseconds / 1000; - debugPrint('DatabaseUpdateNotifications $count - $duration ms'); - }); + void notifyUpdate(DatabaseType databaseType) { + _updateStreamController.add(databaseType); } } diff --git a/pubspec.yaml b/pubspec.yaml index 33a6ebc54..3e8c4eb34 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: lotti description: Achieve your goals and keep your data private with Lotti. publish_to: 'none' -version: 0.9.459+2496 +version: 0.9.459+2498 msix_config: display_name: LottiApp diff --git a/test/blocs/journal/entry_cubit_test.dart b/test/blocs/journal/entry_cubit_test.dart index 190182e6a..15a50c7d8 100644 --- a/test/blocs/journal/entry_cubit_test.dart +++ b/test/blocs/journal/entry_cubit_test.dart @@ -9,6 +9,7 @@ import 'package:lotti/database/settings_db.dart'; import 'package:lotti/database/sync_db.dart'; import 'package:lotti/get_it.dart'; import 'package:lotti/logic/persistence_logic.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/services/editor_state_service.dart'; import 'package:lotti/services/time_service.dart'; import 'package:lotti/services/vector_clock_service.dart'; @@ -28,6 +29,12 @@ void main() { var vcMockNext = '1'; setUpAll(() { + final mockUpdateNotifications = MockUpdateNotifications(); + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); + getIt.registerSingleton(mockUpdateNotifications); + final secureStorageMock = MockSecureStorage(); final settingsDb = SettingsDb(inMemoryDatabase: true); final mockTimeService = MockTimeService(); diff --git a/test/blocs/journal/journal_page_cubit_test.dart b/test/blocs/journal/journal_page_cubit_test.dart index 8dd85f6be..4fe7527c6 100644 --- a/test/blocs/journal/journal_page_cubit_test.dart +++ b/test/blocs/journal/journal_page_cubit_test.dart @@ -10,6 +10,7 @@ import 'package:lotti/database/settings_db.dart'; import 'package:lotti/database/sync_db.dart'; import 'package:lotti/get_it.dart'; import 'package:lotti/logic/persistence_logic.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/services/editor_state_service.dart'; import 'package:lotti/services/time_service.dart'; import 'package:lotti/services/vector_clock_service.dart'; @@ -23,6 +24,7 @@ import '../../test_data/sync_config_test_data.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); + final mockUpdateNotifications = MockUpdateNotifications(); group('JournalPageCubit Tests - ', () { var vcMockNext = '1'; @@ -32,6 +34,10 @@ void main() { final settingsDb = SettingsDb(inMemoryDatabase: true); final mockTimeService = MockTimeService(); + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); + when(() => secureStorageMock.readValue(hostKey)) .thenAnswer((_) async => 'some_host'); @@ -46,6 +52,7 @@ void main() { }); getIt + ..registerSingleton(mockUpdateNotifications) ..registerSingleton(settingsDb) ..registerSingleton(SyncDatabase(inMemoryDatabase: true)) ..registerSingleton(JournalDb(inMemoryDatabase: true)) diff --git a/test/database/database_test.dart b/test/database/database_test.dart index 0a84a47b4..2f57162c7 100644 --- a/test/database/database_test.dart +++ b/test/database/database_test.dart @@ -3,7 +3,12 @@ import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:lotti/database/database.dart'; import 'package:lotti/database/journal_db/config_flags.dart'; +import 'package:lotti/get_it.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/utils/consts.dart'; +import 'package:mocktail/mocktail.dart'; + +import '../mocks/mocks.dart'; final expectedActiveFlagNames = { privateFlag, @@ -63,14 +68,22 @@ final expectedMacFlags = { void main() { JournalDb? db; + final mockUpdateNotifications = MockUpdateNotifications(); group('Database Tests - ', () { setUp(() async { + getIt.registerSingleton(mockUpdateNotifications); + db = JournalDb(inMemoryDatabase: true); await initConfigFlags(db!, inMemoryDatabase: true); + + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); }); tearDown(() async { await db?.close(); + getIt.unregister(); }); test( diff --git a/test/logic/persistence_logic_test.dart b/test/logic/persistence_logic_test.dart index 3a7b6ee32..ddc5cd123 100644 --- a/test/logic/persistence_logic_test.dart +++ b/test/logic/persistence_logic_test.dart @@ -15,6 +15,7 @@ import 'package:lotti/database/sync_db.dart'; import 'package:lotti/get_it.dart'; import 'package:lotti/logic/ai/ai_logic.dart'; import 'package:lotti/logic/persistence_logic.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/services/notification_service.dart'; import 'package:lotti/services/tags_service.dart'; import 'package:lotti/services/vector_clock_service.dart'; @@ -36,6 +37,7 @@ void main() { registerFallbackValue(FakeJournalEntity()); final mockNotificationService = MockNotificationService(); + final mockUpdateNotifications = MockUpdateNotifications(); final mockAiLogic = MockAiLogic(); final mockFts5Db = MockFts5Db(); @@ -49,6 +51,8 @@ void main() { setUpAll(() async { setFakeDocumentsPath(); + getIt.registerSingleton(mockUpdateNotifications); + final settingsDb = SettingsDb(inMemoryDatabase: true); final journalDb = JournalDb(inMemoryDatabase: true); await initConfigFlags(journalDb, inMemoryDatabase: true); @@ -66,6 +70,10 @@ void main() { when(mockNotificationService.updateBadge).thenAnswer((_) async {}); + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); + when(() => mockFts5Db.insertText(any())).thenAnswer((_) async {}); when( diff --git a/test/mocks/mocks.dart b/test/mocks/mocks.dart index 2a2260a1a..a5a70771f 100644 --- a/test/mocks/mocks.dart +++ b/test/mocks/mocks.dart @@ -19,6 +19,7 @@ import 'package:lotti/logic/ai/ai_logic.dart'; import 'package:lotti/logic/health_import.dart'; import 'package:lotti/logic/persistence_logic.dart'; import 'package:lotti/services/asr_service.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/services/editor_state_service.dart'; import 'package:lotti/services/entities_cache_service.dart'; import 'package:lotti/services/link_service.dart'; @@ -115,6 +116,8 @@ class MockEditorStateService extends Mock implements EditorStateService {} class MockLinkService extends Mock implements LinkService {} +class MockUpdateNotifications extends Mock implements UpdateNotifications {} + class MockEntryCubit extends MockBloc implements EntryCubit {} diff --git a/test/pages/journal/infinite_journal_page_test.dart b/test/pages/journal/infinite_journal_page_test.dart index 945f4559e..e2b6733f5 100644 --- a/test/pages/journal/infinite_journal_page_test.dart +++ b/test/pages/journal/infinite_journal_page_test.dart @@ -15,6 +15,7 @@ import 'package:lotti/get_it.dart'; import 'package:lotti/logic/persistence_logic.dart'; import 'package:lotti/pages/journal/infinite_journal_page.dart'; import 'package:lotti/services/asr_service.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/services/entities_cache_service.dart'; import 'package:lotti/services/tags_service.dart'; import 'package:lotti/services/time_service.dart'; @@ -39,6 +40,7 @@ void main() { final mockSettingsDb = MockSettingsDb(); var mockPersistenceLogic = MockPersistenceLogic(); final mockEntitiesCacheService = MockEntitiesCacheService(); + final mockUpdateNotifications = MockUpdateNotifications(); final entryTypeStrings = entryTypes.toList(); @@ -100,6 +102,7 @@ void main() { getIt ..registerSingleton(await getApplicationDocumentsDirectory()) ..registerSingleton(MockLoggingDb()) + ..registerSingleton(mockUpdateNotifications) ..registerSingleton(mockSettingsDb) ..registerSingleton(MockAsrService()) ..registerSingleton(mockTagsService) @@ -115,6 +118,10 @@ void main() { (_) => Stream>.fromIterable([[]]), ); + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); + when(mockJournalDb.watchConfigFlags).thenAnswer( (_) => Stream>.fromIterable([ { diff --git a/test/themes/themes_service_test.dart b/test/themes/themes_service_test.dart index 00d5130f2..f7b0032df 100644 --- a/test/themes/themes_service_test.dart +++ b/test/themes/themes_service_test.dart @@ -1,15 +1,24 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:lotti/database/database.dart'; import 'package:lotti/get_it.dart'; +import 'package:lotti/services/db_notification.dart'; +import 'package:mocktail/mocktail.dart'; + +import '../mocks/mocks.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); group('ThemesService test -', () { setUpAll(() { - final db = JournalDb(inMemoryDatabase: true); + final mockUpdateNotifications = MockUpdateNotifications(); + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); - getIt.registerSingleton(db); + getIt + ..registerSingleton(mockUpdateNotifications) + ..registerSingleton(JournalDb(inMemoryDatabase: true)); }); tearDownAll(() async { await getIt.reset(); diff --git a/test/themes/utils_test.dart b/test/themes/utils_test.dart index 24139d959..20d1c16a3 100644 --- a/test/themes/utils_test.dart +++ b/test/themes/utils_test.dart @@ -2,8 +2,12 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:lotti/classes/tag_type_definitions.dart'; import 'package:lotti/database/database.dart'; import 'package:lotti/get_it.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/themes/colors.dart'; import 'package:lotti/themes/utils.dart'; +import 'package:mocktail/mocktail.dart'; + +import '../mocks/mocks.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -11,9 +15,14 @@ void main() { group('Theme Utils test -', () { setUpAll(() { - final db = JournalDb(inMemoryDatabase: true); + final mockUpdateNotifications = MockUpdateNotifications(); + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); - getIt.registerSingleton(db); + getIt + ..registerSingleton(mockUpdateNotifications) + ..registerSingleton(JournalDb(inMemoryDatabase: true)); }); tearDownAll(() async { await getIt.reset(); diff --git a/test/widgets/journal/editor/editor_widget_test.dart b/test/widgets/journal/editor/editor_widget_test.dart index 6f757a70b..462afdc8b 100644 --- a/test/widgets/journal/editor/editor_widget_test.dart +++ b/test/widgets/journal/editor/editor_widget_test.dart @@ -10,6 +10,7 @@ import 'package:lotti/database/editor_db.dart'; import 'package:lotti/database/logging_db.dart'; import 'package:lotti/get_it.dart'; import 'package:lotti/logic/persistence_logic.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/services/editor_state_service.dart'; import 'package:lotti/services/tags_service.dart'; import 'package:lotti/services/time_service.dart'; @@ -27,7 +28,13 @@ void main() { final mockTimeService = MockTimeService(); setUpAll(() { + final mockUpdateNotifications = MockUpdateNotifications(); + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); + getIt + ..registerSingleton(mockUpdateNotifications) ..registerSingleton(LoggingDb(inMemoryDatabase: true)) ..registerSingleton(MockVectorClockService()) ..registerSingleton(JournalDb(inMemoryDatabase: true)) diff --git a/test/widgets/journal/entry_details/entry_datetime_widget_test.dart b/test/widgets/journal/entry_details/entry_datetime_widget_test.dart index 04100ce88..b0716a03f 100644 --- a/test/widgets/journal/entry_details/entry_datetime_widget_test.dart +++ b/test/widgets/journal/entry_details/entry_datetime_widget_test.dart @@ -4,6 +4,7 @@ import 'package:lotti/blocs/journal/entry_cubit.dart'; import 'package:lotti/blocs/journal/entry_state.dart'; import 'package:lotti/database/database.dart'; import 'package:lotti/get_it.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/services/tags_service.dart'; import 'package:lotti/widgets/journal/entry_details/entry_datetime_widget.dart'; import 'package:lotti/widgets/journal/entry_tools.dart'; @@ -18,7 +19,13 @@ void main() { final entryCubit = MockEntryCubit(); setUpAll(() { + final mockUpdateNotifications = MockUpdateNotifications(); + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); + getIt + ..registerSingleton(mockUpdateNotifications) ..registerSingleton(JournalDb(inMemoryDatabase: true)) ..registerSingleton(TagsService()); diff --git a/test/widgets/journal/entry_details/entry_detail_footer_test.dart b/test/widgets/journal/entry_details/entry_detail_footer_test.dart index 90d931b36..90fe207a7 100644 --- a/test/widgets/journal/entry_details/entry_detail_footer_test.dart +++ b/test/widgets/journal/entry_details/entry_detail_footer_test.dart @@ -7,6 +7,7 @@ import 'package:lotti/blocs/journal/entry_state.dart'; import 'package:lotti/classes/journal_entities.dart'; import 'package:lotti/database/database.dart'; import 'package:lotti/get_it.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/services/tags_service.dart'; import 'package:lotti/services/time_service.dart'; import 'package:lotti/widgets/journal/entry_details/entry_detail_footer.dart'; @@ -23,7 +24,13 @@ void main() { final mockTimeService = MockTimeService(); setUpAll(() { + final mockUpdateNotifications = MockUpdateNotifications(); + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); + getIt + ..registerSingleton(mockUpdateNotifications) ..registerSingleton(JournalDb(inMemoryDatabase: true)) ..registerSingleton(TagsService()) ..registerSingleton(mockTimeService); diff --git a/test/widgets/journal/entry_details/entry_detail_header_test.dart b/test/widgets/journal/entry_details/entry_detail_header_test.dart index 4f10e8a5c..17f18ee56 100644 --- a/test/widgets/journal/entry_details/entry_detail_header_test.dart +++ b/test/widgets/journal/entry_details/entry_detail_header_test.dart @@ -5,6 +5,7 @@ import 'package:lotti/blocs/journal/entry_cubit.dart'; import 'package:lotti/blocs/journal/entry_state.dart'; import 'package:lotti/database/database.dart'; import 'package:lotti/get_it.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/services/link_service.dart'; import 'package:lotti/services/tags_service.dart'; import 'package:lotti/widgets/journal/entry_details/entry_detail_header.dart'; @@ -20,7 +21,13 @@ void main() { final entryCubit = MockEntryCubit(); setUpAll(() { + final mockUpdateNotifications = MockUpdateNotifications(); + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); + getIt + ..registerSingleton(mockUpdateNotifications) ..registerSingleton(JournalDb(inMemoryDatabase: true)) ..registerSingleton(MockLinkService()) ..registerSingleton(TagsService()); diff --git a/test/widgets/journal/entry_details/share_button_widget_test.dart b/test/widgets/journal/entry_details/share_button_widget_test.dart index ea3a62805..d5c0b4f4e 100644 --- a/test/widgets/journal/entry_details/share_button_widget_test.dart +++ b/test/widgets/journal/entry_details/share_button_widget_test.dart @@ -6,6 +6,7 @@ import 'package:lotti/blocs/journal/entry_cubit.dart'; import 'package:lotti/blocs/journal/entry_state.dart'; import 'package:lotti/database/database.dart'; import 'package:lotti/get_it.dart'; +import 'package:lotti/services/db_notification.dart'; import 'package:lotti/services/tags_service.dart'; import 'package:lotti/widgets/journal/entry_details/share_button_widget.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; @@ -24,7 +25,13 @@ void main() { setUpAll(() async { setFakeDocumentsPath(); + final mockUpdateNotifications = MockUpdateNotifications(); + when(() => mockUpdateNotifications.updateStream).thenAnswer( + (_) => Stream.fromIterable([]), + ); + getIt + ..registerSingleton(mockUpdateNotifications) ..registerSingleton(await getApplicationDocumentsDirectory()) ..registerSingleton(JournalDb(inMemoryDatabase: true)) ..registerSingleton(TagsService());