feat: 결재·마스터 실연동 업데이트
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
|
||||
import 'package:superport_v2/core/network/api_client.dart';
|
||||
import 'package:superport_v2/features/masters/group/data/repositories/group_repository_remote.dart';
|
||||
|
||||
class _MockApiClient extends Mock implements ApiClient {}
|
||||
|
||||
void main() {
|
||||
late ApiClient apiClient;
|
||||
late GroupRepositoryRemote repository;
|
||||
|
||||
setUpAll(() {
|
||||
registerFallbackValue(Options());
|
||||
registerFallbackValue(CancelToken());
|
||||
});
|
||||
|
||||
setUp(() {
|
||||
apiClient = _MockApiClient();
|
||||
repository = GroupRepositoryRemote(apiClient: apiClient);
|
||||
});
|
||||
|
||||
test('include 옵션이 쿼리 파라미터에 반영된다', () async {
|
||||
when(
|
||||
() => apiClient.get<Map<String, dynamic>>(
|
||||
any(),
|
||||
query: any(named: 'query'),
|
||||
options: any(named: 'options'),
|
||||
cancelToken: any(named: 'cancelToken'),
|
||||
),
|
||||
).thenAnswer(
|
||||
(_) async => Response<Map<String, dynamic>>(
|
||||
data: {
|
||||
'items': [
|
||||
{
|
||||
'id': 1,
|
||||
'group_name': '관리자',
|
||||
'is_default': true,
|
||||
'is_active': true,
|
||||
},
|
||||
],
|
||||
},
|
||||
requestOptions: RequestOptions(path: '/api/v1/groups'),
|
||||
statusCode: 200,
|
||||
),
|
||||
);
|
||||
|
||||
await repository.list(includePermissions: true, includeEmployees: true);
|
||||
|
||||
final captured = verify(
|
||||
() => apiClient.get<Map<String, dynamic>>(
|
||||
captureAny(),
|
||||
query: captureAny(named: 'query'),
|
||||
options: any(named: 'options'),
|
||||
cancelToken: any(named: 'cancelToken'),
|
||||
),
|
||||
).captured;
|
||||
final path = captured[0] as String;
|
||||
final query = captured[1] as Map<String, dynamic>;
|
||||
|
||||
expect(path, equals('/api/v1/groups'));
|
||||
expect(query['include'], 'permissions,employees');
|
||||
});
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user