mirror of
https://github.com/immich-app/immich.git
synced 2026-07-28 14:47:30 -07:00
80 lines
2.7 KiB
Dart
80 lines
2.7 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:immich_mobile/domain/services/asset.service.dart';
|
|
import 'package:mocktail/mocktail.dart';
|
|
|
|
import '../../infrastructure/repository.mock.dart';
|
|
import '../../repository.mocks.dart';
|
|
import '../mocks.dart';
|
|
|
|
void main() {
|
|
late AssetService sut;
|
|
late RepositoryMocks mocks;
|
|
late MockAssetApiRepository apiRepository;
|
|
late MockRemoteAssetRepository remoteRepository;
|
|
late MockRemoteExifRepository exifRepository;
|
|
|
|
setUp(() {
|
|
mocks = RepositoryMocks();
|
|
apiRepository = mocks.assetApi.api;
|
|
remoteRepository = mocks.remoteAsset.repo;
|
|
exifRepository = mocks.remoteExif.repo;
|
|
|
|
sut = AssetService(
|
|
remoteRepository: remoteRepository,
|
|
exifRepository: exifRepository,
|
|
localRepository: MockDriftLocalAssetRepository(),
|
|
apiRepository: apiRepository,
|
|
);
|
|
});
|
|
|
|
group('AssetService.updateDateTime', () {
|
|
const ids = ['asset_id_1'];
|
|
|
|
test('sends the picked value to the api with its offset intact', () async {
|
|
const picked = '2026-06-10T19:15:00.000+06:00';
|
|
await sut.update(ids, dateTime: const .some(picked));
|
|
|
|
verify(() => apiRepository.update(ids, dateTimeOriginal: const .some(picked))).called(1);
|
|
verify(() => remoteRepository.update(ids, createdAt: .some(DateTime.parse(picked)))).called(1);
|
|
verify(
|
|
() => exifRepository.update(
|
|
ids,
|
|
dateTimeOriginal: .some(DateTime.parse(picked)),
|
|
timeZone: const .some('UTC+06:00'),
|
|
),
|
|
).called(1);
|
|
});
|
|
|
|
test('handles negative offsets', () async {
|
|
const picked = '2026-01-05T08:00:00.000-05:30';
|
|
await sut.update(ids, dateTime: const .some(picked));
|
|
|
|
verify(() => remoteRepository.update(ids, createdAt: .some(DateTime.parse(picked)))).called(1);
|
|
verify(
|
|
() => exifRepository.update(
|
|
ids,
|
|
dateTimeOriginal: .some(DateTime.parse(picked)),
|
|
timeZone: const .some('UTC-05:30'),
|
|
),
|
|
).called(1);
|
|
});
|
|
|
|
test('writes no timezone when the value has no offset', () async {
|
|
const picked = '2026-06-10T13:15:00.000Z';
|
|
await sut.update(ids, dateTime: const .some(picked));
|
|
|
|
verify(() => remoteRepository.update(ids, createdAt: .some(DateTime.parse(picked)))).called(1);
|
|
verify(
|
|
() => exifRepository.update(ids, dateTimeOriginal: .some(DateTime.parse(picked)), timeZone: const .none()),
|
|
).called(1);
|
|
});
|
|
|
|
test('is a no-op when there are no asset ids', () async {
|
|
await sut.update(const [], dateTime: const .some('2026-06-10T19:15:00.000+06:00'));
|
|
|
|
verifyZeroInteractions(apiRepository);
|
|
verifyZeroInteractions(remoteRepository);
|
|
});
|
|
});
|
|
}
|