import 'package:flutter_test/flutter_test.dart'; import 'package:immich_mobile/entities/album.entity.dart'; import 'package:immich_mobile/services/entity.service.dart'; import 'package:mocktail/mocktail.dart'; import '../fixtures/asset.stub.dart'; import '../fixtures/user.stub.dart'; import '../repository.mocks.dart'; void main() { late EntityService sut; late MockAssetRepository assetRepository; late MockUserRepository userRepository; setUp(() { assetRepository = MockAssetRepository(); userRepository = MockUserRepository(); sut = EntityService(assetRepository, userRepository); }); group('fillAlbumWithDatabaseEntities', () { test('remote album with owner, thumbnail, sharedUsers and assets', () async { final Album album = Album( name: "album-with-two-assets-and-two-users", localId: "album-with-two-assets-and-two-users-local", remoteId: "album-with-two-assets-and-two-users-remote", createdAt: DateTime(2001), modifiedAt: DateTime(2010), shared: true, activityEnabled: true, startDate: DateTime(2019), endDate: DateTime(2020), ) ..remoteThumbnailAssetId = AssetStub.image1.remoteId ..assets.addAll([AssetStub.image1, AssetStub.image1]) ..owner.value = UserStub.user1 ..sharedUsers.addAll([UserStub.admin, UserStub.admin]); when(() => userRepository.get(album.ownerId!)) .thenAnswer((_) async => UserStub.admin); when(() => assetRepository.getByRemoteId(AssetStub.image1.remoteId!)) .thenAnswer((_) async => AssetStub.image1); when(() => userRepository.getByIds(any())) .thenAnswer((_) async => [UserStub.user1, UserStub.user2]); when(() => assetRepository.getAllByRemoteId(any())) .thenAnswer((_) async => [AssetStub.image1, AssetStub.image2]); await sut.fillAlbumWithDatabaseEntities(album); expect(album.owner.value, UserStub.admin); expect(album.thumbnail.value, AssetStub.image1); expect(album.remoteUsers.toSet(), {UserStub.user1, UserStub.user2}); expect(album.remoteAssets.toSet(), {AssetStub.image1, AssetStub.image2}); }); test('remote album without any info', () async { makeEmptyAlbum() => Album( name: "album-without-info", localId: "album-without-info-local", remoteId: "album-without-info-remote", createdAt: DateTime(2001), modifiedAt: DateTime(2010), shared: false, activityEnabled: false, ); final album = makeEmptyAlbum(); await sut.fillAlbumWithDatabaseEntities(album); verifyNoMoreInteractions(assetRepository); verifyNoMoreInteractions(userRepository); expect(album, makeEmptyAlbum()); }); }); }