immich/mobile/test/services/action.service_test.dart
Adam Gastineau 225ca9ab8d
chore(mobile): use Drift @DriftAccessor() and collapse some providers (#30693)
* chore(mobile): use Drift @DriftAccessor() and collapse some providers

* Fix import order

* Required formatting
2026-08-17 14:43:32 -07:00

73 lines
2.5 KiB
Dart

import 'package:drift/drift.dart' as drift;
import 'package:drift/native.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:immich_mobile/domain/services/store.service.dart';
import 'package:immich_mobile/entities/store.entity.dart';
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
import 'package:immich_mobile/infrastructure/repositories/store.repository.dart';
import 'package:immich_mobile/services/action.service.dart';
import 'package:mocktail/mocktail.dart';
import '../infrastructure/repository.mock.dart';
import '../repository.mocks.dart';
void main() {
late ActionService sut;
late MockAssetApiRepository assetApiRepository;
late MockRemoteAssetRepository remoteAssetRepository;
late Drift db;
setUpAll(() async {
TestWidgetsFlutterBinding.ensureInitialized();
debugDefaultTargetPlatformOverride = TargetPlatform.android;
db = Drift(drift.DatabaseConnection(NativeDatabase.memory(), closeStreamsSynchronously: true));
await StoreService.init(storeRepository: StoreRepository(db));
});
tearDownAll(() async {
debugDefaultTargetPlatformOverride = null;
await Store.clear();
await db.close();
});
setUp(() {
assetApiRepository = MockAssetApiRepository();
remoteAssetRepository = MockRemoteAssetRepository();
sut = ActionService(assetApiRepository, remoteAssetRepository);
});
tearDown(() async {
await Store.clear();
});
group('ActionService.updateRating', () {
const assetId = 'asset_id_1';
test('calls both repositories with the given rating', () async {
when(() => assetApiRepository.updateRating(assetId, 3)).thenAnswer((_) async {});
when(() => remoteAssetRepository.updateRating(assetId, 3)).thenAnswer((_) async {});
final result = await sut.updateRating(assetId, 3);
expect(result, isTrue);
verify(() => assetApiRepository.updateRating(assetId, 3)).called(1);
verify(() => remoteAssetRepository.updateRating(assetId, 3)).called(1);
});
test('calls both repositories with null to clear rating', () async {
when(() => assetApiRepository.updateRating(assetId, null)).thenAnswer((_) async {});
when(() => remoteAssetRepository.updateRating(assetId, null)).thenAnswer((_) async {});
final result = await sut.updateRating(assetId, null);
expect(result, isTrue);
verify(() => assetApiRepository.updateRating(assetId, null)).called(1);
verify(() => remoteAssetRepository.updateRating(assetId, null)).called(1);
});
});
}