mirror of
https://github.com/immich-app/immich.git
synced 2026-05-18 03:10:24 +03:00
refactor: proper layer archtecture
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:immich_mobile/constants/enums.dart';
|
||||
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
||||
import 'package:immich_mobile/domain/services/quick_action.service.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/action_button_order.repository.dart';
|
||||
import 'package:immich_mobile/utils/action_button.utils.dart';
|
||||
|
||||
void main() {
|
||||
group('QuickActionService', () {
|
||||
late QuickActionService service;
|
||||
|
||||
setUp(() {
|
||||
// Use repository with default behavior for testing
|
||||
service = const QuickActionService(ActionButtonOrderRepository());
|
||||
});
|
||||
|
||||
test('buildQuickActionTypes should respect custom order', () {
|
||||
final remoteAsset = RemoteAsset(
|
||||
id: 'test-id',
|
||||
name: 'test.jpg',
|
||||
checksum: 'checksum',
|
||||
type: AssetType.image,
|
||||
ownerId: 'owner-id',
|
||||
createdAt: DateTime.now(),
|
||||
updatedAt: DateTime.now(),
|
||||
);
|
||||
|
||||
final context = ActionButtonContext(
|
||||
asset: remoteAsset,
|
||||
isOwner: true,
|
||||
isArchived: false,
|
||||
isTrashEnabled: true,
|
||||
isInLockedView: false,
|
||||
currentAlbum: null,
|
||||
advancedTroubleshooting: false,
|
||||
isStacked: false,
|
||||
source: ActionSource.viewer,
|
||||
);
|
||||
|
||||
final customOrder = [
|
||||
ActionButtonType.archive,
|
||||
ActionButtonType.share,
|
||||
ActionButtonType.edit,
|
||||
ActionButtonType.delete,
|
||||
];
|
||||
|
||||
final types = service.buildQuickActionTypes(context, quickActionOrder: customOrder);
|
||||
|
||||
expect(types.length, lessThanOrEqualTo(QuickActionService.defaultQuickActionLimit));
|
||||
expect(types.first, ActionButtonType.archive);
|
||||
expect(types[1], ActionButtonType.share);
|
||||
});
|
||||
|
||||
test('buildQuickActionTypes should resolve archive to unarchive when archived', () {
|
||||
final remoteAsset = RemoteAsset(
|
||||
id: 'test-id',
|
||||
name: 'test.jpg',
|
||||
checksum: 'checksum',
|
||||
type: AssetType.image,
|
||||
ownerId: 'owner-id',
|
||||
createdAt: DateTime.now(),
|
||||
updatedAt: DateTime.now(),
|
||||
);
|
||||
|
||||
final context = ActionButtonContext(
|
||||
asset: remoteAsset,
|
||||
isOwner: true,
|
||||
isArchived: true, // archived
|
||||
isTrashEnabled: true,
|
||||
isInLockedView: false,
|
||||
currentAlbum: null,
|
||||
advancedTroubleshooting: false,
|
||||
isStacked: false,
|
||||
source: ActionSource.viewer,
|
||||
);
|
||||
|
||||
final customOrder = [ActionButtonType.archive];
|
||||
|
||||
final types = service.buildQuickActionTypes(context, quickActionOrder: customOrder);
|
||||
|
||||
expect(types.contains(ActionButtonType.unarchive), isTrue);
|
||||
expect(types.contains(ActionButtonType.archive), isFalse);
|
||||
});
|
||||
|
||||
test('buildQuickActionTypes should filter types that shouldShow returns false', () {
|
||||
final localAsset = LocalAsset(
|
||||
id: 'local-id',
|
||||
name: 'test.jpg',
|
||||
checksum: 'checksum',
|
||||
type: AssetType.image,
|
||||
createdAt: DateTime.now(),
|
||||
updatedAt: DateTime.now(),
|
||||
);
|
||||
|
||||
final context = ActionButtonContext(
|
||||
asset: localAsset,
|
||||
isOwner: true,
|
||||
isArchived: false,
|
||||
isTrashEnabled: true,
|
||||
isInLockedView: false,
|
||||
currentAlbum: null,
|
||||
advancedTroubleshooting: false,
|
||||
isStacked: false,
|
||||
source: ActionSource.viewer,
|
||||
);
|
||||
|
||||
final customOrder = [
|
||||
ActionButtonType.archive, // should not show for local-only asset
|
||||
ActionButtonType.share,
|
||||
];
|
||||
|
||||
final types = service.buildQuickActionTypes(context, quickActionOrder: customOrder);
|
||||
|
||||
expect(types.contains(ActionButtonType.archive), isFalse);
|
||||
expect(types.contains(ActionButtonType.share), isTrue);
|
||||
});
|
||||
|
||||
test('buildQuickActionTypes should respect limit', () {
|
||||
final remoteAsset = RemoteAsset(
|
||||
id: 'test-id',
|
||||
name: 'test.jpg',
|
||||
checksum: 'checksum',
|
||||
type: AssetType.image,
|
||||
ownerId: 'owner-id',
|
||||
createdAt: DateTime.now(),
|
||||
updatedAt: DateTime.now(),
|
||||
);
|
||||
|
||||
final context = ActionButtonContext(
|
||||
asset: remoteAsset,
|
||||
isOwner: true,
|
||||
isArchived: false,
|
||||
isTrashEnabled: true,
|
||||
isInLockedView: false,
|
||||
currentAlbum: null,
|
||||
advancedTroubleshooting: false,
|
||||
isStacked: false,
|
||||
source: ActionSource.viewer,
|
||||
);
|
||||
|
||||
final types = service.buildQuickActionTypes(
|
||||
context,
|
||||
quickActionOrder: QuickActionService.defaultQuickActionOrder,
|
||||
limit: 2,
|
||||
);
|
||||
|
||||
expect(types.length, 2);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -3,6 +3,8 @@ import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:immich_mobile/constants/enums.dart';
|
||||
import 'package:immich_mobile/domain/models/album/album.model.dart';
|
||||
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
||||
import 'package:immich_mobile/domain/services/quick_action.service.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/action_button_order.repository.dart';
|
||||
import 'package:immich_mobile/presentation/widgets/action_buttons/archive_action_button.widget.dart';
|
||||
import 'package:immich_mobile/presentation/widgets/action_buttons/edit_image_action_button.widget.dart';
|
||||
import 'package:immich_mobile/presentation/widgets/action_buttons/share_action_button.widget.dart';
|
||||
@@ -1029,7 +1031,8 @@ void main() {
|
||||
source: ActionSource.viewer,
|
||||
);
|
||||
|
||||
final quickActions = ActionButtonBuilder.buildQuickActions(
|
||||
final quickActionService = const QuickActionService(ActionButtonOrderRepository());
|
||||
final quickActionTypes = quickActionService.buildQuickActionTypes(
|
||||
context,
|
||||
quickActionOrder: const [
|
||||
ActionButtonType.archive,
|
||||
@@ -1039,7 +1042,9 @@ void main() {
|
||||
],
|
||||
);
|
||||
|
||||
expect(quickActions.length, ActionButtonBuilder.defaultQuickActionLimit);
|
||||
final quickActions = ActionButtonBuilder.buildQuickActions(context, quickActionTypes: quickActionTypes);
|
||||
|
||||
expect(quickActions.length, QuickActionService.defaultQuickActionLimit);
|
||||
expect(quickActions.first, isA<ArchiveActionButton>());
|
||||
expect(quickActions[1], isA<ShareActionButton>());
|
||||
expect(quickActions[2], isA<EditImageActionButton>());
|
||||
|
||||
Reference in New Issue
Block a user