import 'package:flutter_test/flutter_test.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/modules/backup/models/backup_album.model.dart'; import 'package:immich_mobile/modules/backup/models/duplicated_asset.model.dart'; import 'package:immich_mobile/shared/models/album.dart'; import 'package:immich_mobile/shared/models/android_device_asset.dart'; import 'package:immich_mobile/shared/models/asset.dart'; import 'package:immich_mobile/shared/models/etag.dart'; import 'package:immich_mobile/shared/models/exif_info.dart'; import 'package:immich_mobile/shared/models/ios_device_asset.dart'; import 'package:immich_mobile/shared/models/logger_message.model.dart'; import 'package:immich_mobile/shared/models/store.dart'; import 'package:immich_mobile/shared/models/user.dart'; import 'package:isar/isar.dart'; import 'package:mocktail/mocktail.dart'; // Listener Mock to test when a provider notifies its listeners class ListenerMock extends Mock { // ignore: avoid-declaring-call-method void call(T? previous, T next); } final class TestUtils { const TestUtils._(); /// Downloads Isar binaries (if required) and initializes a new Isar db static Future initIsar() async { await Isar.initializeIsarCore(download: true); final db = await Isar.open( [ StoreValueSchema, ExifInfoSchema, AssetSchema, AlbumSchema, UserSchema, BackupAlbumSchema, DuplicatedAssetSchema, LoggerMessageSchema, ETagSchema, AndroidDeviceAssetSchema, IOSDeviceAssetSchema, ], maxSizeMiB: 256, directory: ".", ); // Clear and close db on test end addTearDown(() async { await db.writeTxn(() => db.clear()); await db.close(); }); return db; } /// Creates a new ProviderContainer to test Riverpod providers static ProviderContainer createContainer({ ProviderContainer? parent, List overrides = const [], List? observers, }) { final container = ProviderContainer( parent: parent, overrides: overrides, observers: observers, ); // Dispose on test end addTearDown(container.dispose); return container; } }