결재 단계 편집 다이얼로그 구현

This commit is contained in:
JiWoong Sul
2025-09-25 17:57:29 +09:00
parent 6d6781f552
commit 8a6ad1e81b
17 changed files with 1689 additions and 42 deletions

View File

@@ -3,6 +3,7 @@ import 'package:mocktail/mocktail.dart';
import 'package:superport_v2/core/common/models/paginated_result.dart';
import 'package:superport_v2/features/approvals/domain/entities/approval.dart';
import 'package:superport_v2/features/approvals/step/domain/entities/approval_step_input.dart';
import 'package:superport_v2/features/approvals/step/domain/entities/approval_step_record.dart';
import 'package:superport_v2/features/approvals/step/domain/repositories/approval_step_repository.dart';
import 'package:superport_v2/features/approvals/step/presentation/controllers/approval_step_controller.dart';
@@ -11,6 +12,12 @@ class _MockApprovalStepRepository extends Mock
implements ApprovalStepRepository {}
void main() {
setUpAll(() {
registerFallbackValue(
ApprovalStepInput(approvalId: 1, stepOrder: 1, approverId: 1),
);
});
late ApprovalStepController controller;
late _MockApprovalStepRepository repository;
@@ -142,4 +149,76 @@ void main() {
expect(detail, isNull);
expect(controller.errorMessage, isNotNull);
});
test('createStep 성공 시 생성된 레코드를 반환한다', () async {
when(() => repository.create(any())).thenAnswer((_) async => sampleRecord);
when(
() => repository.list(
page: any(named: 'page'),
pageSize: any(named: 'pageSize'),
query: any(named: 'query'),
statusId: any(named: 'statusId'),
approverId: any(named: 'approverId'),
approvalId: any(named: 'approvalId'),
),
).thenAnswer((_) async => createResult([sampleRecord]));
final result = await controller.createStep(
ApprovalStepInput(approvalId: 10, stepOrder: 1, approverId: 21),
);
expect(result, isNotNull);
expect(controller.errorMessage, isNull);
verify(() => repository.create(any())).called(1);
});
test('createStep 실패 시 null을 반환하고 에러를 기록한다', () async {
when(() => repository.create(any())).thenThrow(Exception('fail'));
final result = await controller.createStep(
ApprovalStepInput(approvalId: 10, stepOrder: 1, approverId: 21),
);
expect(result, isNull);
expect(controller.errorMessage, isNotNull);
});
test('updateStep 성공 시 수정된 레코드를 반환한다', () async {
when(
() => repository.update(any(), any()),
).thenAnswer((_) async => sampleRecord);
when(
() => repository.list(
page: any(named: 'page'),
pageSize: any(named: 'pageSize'),
query: any(named: 'query'),
statusId: any(named: 'statusId'),
approverId: any(named: 'approverId'),
approvalId: any(named: 'approvalId'),
),
).thenAnswer((_) async => createResult([sampleRecord]));
final result = await controller.updateStep(
100,
ApprovalStepInput(stepOrder: 2, approverId: 25, approvalId: 10),
);
expect(result, isNotNull);
expect(controller.errorMessage, isNull);
verify(() => repository.update(100, any())).called(1);
});
test('updateStep 실패 시 null을 반환한다', () async {
when(() => repository.update(any(), any())).thenThrow(Exception('fail'));
final result = await controller.updateStep(
100,
ApprovalStepInput(stepOrder: 2, approverId: 25, approvalId: 10),
);
expect(result, isNull);
expect(controller.errorMessage, isNotNull);
});
}