refactor: remote album repository test to use context (#26481)

* refactor: remote album repository test to use context

* refactor: medium repo context (#26482)

* refactor: medium repo context

* store userId in closure

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>

---------

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
shenlong
2026-02-24 18:55:07 +05:30
committed by GitHub
parent 55ee9f76da
commit 4b8f90aa55
3 changed files with 375 additions and 449 deletions

View File

@@ -2,12 +2,15 @@ import 'dart:math';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:immich_mobile/domain/models/album/album.model.dart';
import 'package:immich_mobile/domain/models/album/local_album.model.dart';
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
import 'package:immich_mobile/domain/models/user.model.dart';
import 'package:immich_mobile/infrastructure/entities/local_album.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/local_album_asset.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/local_asset.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/remote_album.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/remote_album_asset.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/remote_asset.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/remote_asset_cloud_id.entity.drift.dart';
import 'package:immich_mobile/infrastructure/entities/user.entity.drift.dart';
@@ -17,21 +20,9 @@ import 'package:uuid/uuid.dart';
class MediumRepositoryContext {
final Drift db;
late UserEntityData user;
final Random _random = Random();
MediumRepositoryContext._()
: db = Drift(DatabaseConnection(NativeDatabase.memory(), closeStreamsSynchronously: true));
static Future<MediumRepositoryContext> create() async {
final ctx = MediumRepositoryContext._();
await ctx.setup();
return ctx;
}
Future<void> setup() async {
user = await insertUser();
}
MediumRepositoryContext() : db = Drift(DatabaseConnection(NativeDatabase.memory(), closeStreamsSynchronously: true));
Future<void> dispose() async {
await db.close();
@@ -53,7 +44,7 @@ class MediumRepositoryContext {
return Value(fallback);
}
Future<UserEntityData> insertUser({
Future<UserEntityData> newUser({
String? id,
String? email,
AvatarColor? avatarColor,
@@ -75,50 +66,7 @@ class MediumRepositoryContext {
);
}
Future<LocalAssetEntityData> insertLocalAsset({
String? id,
String? name,
String? checksum,
Option<String>? checksumOption,
DateTime? createdAt,
AssetType? type,
bool? isFavorite,
String? iCloudId,
DateTime? adjustmentTime,
Option<DateTime>? adjustmentTimeOption,
double? latitude,
double? longitude,
int? width,
int? height,
int? durationInSeconds,
int? orientation,
DateTime? updatedAt,
}) async {
id = id ?? const Uuid().v4();
return db
.into(db.localAssetEntity)
.insertReturning(
LocalAssetEntityCompanion(
id: Value(id),
name: Value(name ?? 'local_$id.jpg'),
height: Value(height ?? _random.nextInt(1000)),
width: Value(width ?? _random.nextInt(1000)),
durationInSeconds: Value(durationInSeconds ?? 0),
orientation: Value(orientation ?? 0),
updatedAt: Value(updatedAt ?? DateTime.now()),
checksum: _resolveUndefined(checksum, checksumOption, const Uuid().v4()),
createdAt: Value(createdAt ?? DateTime.now()),
type: Value(type ?? AssetType.image),
isFavorite: Value(isFavorite ?? false),
iCloudId: Value(iCloudId ?? const Uuid().v4()),
adjustmentTime: _resolveUndefined(adjustmentTime, adjustmentTimeOption, DateTime.now()),
latitude: Value(latitude ?? _random.nextDouble() * 180 - 90),
longitude: Value(longitude ?? _random.nextDouble() * 360 - 180),
),
);
}
Future<RemoteAssetEntityData> insertRemoteAsset({
Future<RemoteAssetEntityData> newRemoteAsset({
String? id,
String? checksum,
String? ownerId,
@@ -166,7 +114,7 @@ class MediumRepositoryContext {
);
}
Future<RemoteAssetCloudIdEntityData> insertRemoteAssetCloudId({
Future<RemoteAssetCloudIdEntityData> newRemoteAssetCloudId({
String? id,
String? cloudId,
DateTime? createdAt,
@@ -189,7 +137,85 @@ class MediumRepositoryContext {
);
}
Future<LocalAlbumEntityData> insertLocalAlbum({
Future<RemoteAlbumEntityData> newRemoteAlbum({
String? id,
String? name,
String? ownerId,
DateTime? createdAt,
DateTime? updatedAt,
String? description,
bool? isActivityEnabled,
AlbumAssetOrder? order,
String? thumbnailAssetId,
}) async {
id = id ?? const Uuid().v4();
return db
.into(db.remoteAlbumEntity)
.insertReturning(
RemoteAlbumEntityCompanion(
id: Value(id),
name: Value(name ?? 'remote_album_$id'),
ownerId: Value(ownerId ?? const Uuid().v4()),
createdAt: Value(createdAt ?? DateTime.now()),
updatedAt: Value(updatedAt ?? DateTime.now()),
description: Value(description ?? 'Description for album $id'),
isActivityEnabled: Value(isActivityEnabled ?? false),
order: Value(order ?? AlbumAssetOrder.asc),
thumbnailAssetId: Value(thumbnailAssetId),
),
);
}
Future<void> insertRemoteAlbumAsset({required String albumId, required String assetId}) {
return db
.into(db.remoteAlbumAssetEntity)
.insert(RemoteAlbumAssetEntityCompanion.insert(albumId: albumId, assetId: assetId));
}
Future<LocalAssetEntityData> newLocalAsset({
String? id,
String? name,
String? checksum,
Option<String>? checksumOption,
DateTime? createdAt,
AssetType? type,
bool? isFavorite,
String? iCloudId,
DateTime? adjustmentTime,
Option<DateTime>? adjustmentTimeOption,
double? latitude,
double? longitude,
int? width,
int? height,
int? durationInSeconds,
int? orientation,
DateTime? updatedAt,
}) async {
id = id ?? const Uuid().v4();
return db
.into(db.localAssetEntity)
.insertReturning(
LocalAssetEntityCompanion(
id: Value(id),
name: Value(name ?? 'local_$id.jpg'),
height: Value(height ?? _random.nextInt(1000)),
width: Value(width ?? _random.nextInt(1000)),
durationInSeconds: Value(durationInSeconds ?? 0),
orientation: Value(orientation ?? 0),
updatedAt: Value(updatedAt ?? DateTime.now()),
checksum: _resolveUndefined(checksum, checksumOption, const Uuid().v4()),
createdAt: Value(createdAt ?? DateTime.now()),
type: Value(type ?? AssetType.image),
isFavorite: Value(isFavorite ?? false),
iCloudId: Value(iCloudId ?? const Uuid().v4()),
adjustmentTime: _resolveUndefined(adjustmentTime, adjustmentTimeOption, DateTime.now()),
latitude: Value(latitude ?? _random.nextDouble() * 180 - 90),
longitude: Value(longitude ?? _random.nextDouble() * 360 - 180),
),
);
}
Future<LocalAlbumEntityData> newLocalAlbum({
String? id,
String? name,
DateTime? updatedAt,
@@ -212,7 +238,7 @@ class MediumRepositoryContext {
);
}
Future<void> insertLocalAlbumAsset({required String albumId, required String assetId}) {
Future<void> newLocalAlbumAsset({required String albumId, required String assetId}) {
return db
.into(db.localAlbumAssetEntity)
.insert(LocalAlbumAssetEntityCompanion.insert(albumId: albumId, assetId: assetId));