feat: 결재·마스터 실연동 업데이트

This commit is contained in:
JiWoong Sul
2025-10-14 18:10:24 +09:00
parent 1325109fba
commit 8067416c09
66 changed files with 2129 additions and 222 deletions

View File

@@ -2,12 +2,18 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:superport_v2/core/common/models/paginated_result.dart';
import 'package:superport_v2/core/permissions/permission_manager.dart';
import 'package:superport_v2/features/masters/group/domain/entities/group.dart';
import 'package:superport_v2/features/masters/group/domain/repositories/group_repository.dart';
import 'package:superport_v2/features/masters/group/presentation/controllers/group_controller.dart';
import 'package:superport_v2/features/masters/group_permission/domain/entities/group_permission.dart';
import 'package:superport_v2/features/masters/group_permission/domain/repositories/group_permission_repository.dart';
class _MockGroupRepository extends Mock implements GroupRepository {}
class _MockGroupPermissionRepository extends Mock
implements GroupPermissionRepository {}
class _FakeGroupInput extends Fake implements GroupInput {}
void main() {
@@ -126,6 +132,65 @@ void main() {
expect(controller.statusFilter, GroupStatusFilter.activeOnly);
});
group('permission sync', () {
late _MockGroupPermissionRepository permissionRepository;
late PermissionManager permissionManager;
setUp(() {
permissionRepository = _MockGroupPermissionRepository();
permissionManager = PermissionManager();
when(
() => permissionRepository.list(
page: any(named: 'page'),
pageSize: any(named: 'pageSize'),
groupId: any(named: 'groupId'),
menuId: any(named: 'menuId'),
isActive: any(named: 'isActive'),
includeDeleted: any(named: 'includeDeleted'),
),
).thenAnswer(
(_) async => PaginatedResult<GroupPermission>(
items: const <GroupPermission>[],
page: 1,
pageSize: 200,
total: 0,
),
);
});
test('그룹 생성 후 권한 동기화를 시도한다', () async {
when(() => repository.create(any())).thenAnswer((_) async => sampleGroup);
when(
() => repository.list(
page: any(named: 'page'),
pageSize: any(named: 'pageSize'),
query: any(named: 'query'),
isDefault: any(named: 'isDefault'),
isActive: any(named: 'isActive'),
),
).thenAnswer((_) async => createResult());
final controllerWithSync = GroupController(
repository: repository,
permissionRepository: permissionRepository,
permissionManager: permissionManager,
);
await controllerWithSync.create(GroupInput(groupName: '신규 그룹'));
verify(
() => permissionRepository.list(
page: any(named: 'page'),
pageSize: any(named: 'pageSize'),
groupId: sampleGroup.id,
menuId: any(named: 'menuId'),
isActive: any(named: 'isActive'),
includeDeleted: any(named: 'includeDeleted'),
),
).called(greaterThanOrEqualTo(1));
});
});
group('mutations', () {
setUp(() {
when(