결재 및 마스터 모듈을 v4 API 계약에 맞게 조정
This commit is contained in:
@@ -8,6 +8,8 @@ import 'package:superport_v2/features/approvals/domain/entities/approval_proceed
|
||||
import 'package:superport_v2/features/approvals/domain/repositories/approval_repository.dart';
|
||||
import 'package:superport_v2/features/approvals/domain/repositories/approval_template_repository.dart';
|
||||
import 'package:superport_v2/features/approvals/presentation/controllers/approval_controller.dart';
|
||||
import 'package:superport_v2/features/inventory/lookups/domain/entities/lookup_item.dart';
|
||||
import 'package:superport_v2/features/inventory/lookups/domain/repositories/inventory_lookup_repository.dart';
|
||||
|
||||
/// ApprovalRepository 모킹 클래스.
|
||||
class _MockApprovalRepository extends Mock implements ApprovalRepository {}
|
||||
@@ -26,6 +28,9 @@ class _MockApprovalTemplateRepository extends Mock
|
||||
class _FakeStepAssignmentInput extends Fake
|
||||
implements ApprovalStepAssignmentInput {}
|
||||
|
||||
class _MockInventoryLookupRepository extends Mock
|
||||
implements InventoryLookupRepository {}
|
||||
|
||||
void main() {
|
||||
late ApprovalController controller;
|
||||
late _MockApprovalRepository repository;
|
||||
@@ -90,10 +95,9 @@ void main() {
|
||||
() => repository.list(
|
||||
page: any(named: 'page'),
|
||||
pageSize: any(named: 'pageSize'),
|
||||
query: any(named: 'query'),
|
||||
status: any(named: 'status'),
|
||||
from: any(named: 'from'),
|
||||
to: any(named: 'to'),
|
||||
transactionId: any(named: 'transactionId'),
|
||||
approvalStatusId: any(named: 'approvalStatusId'),
|
||||
requestedById: any(named: 'requestedById'),
|
||||
includeHistories: any(named: 'includeHistories'),
|
||||
includeSteps: any(named: 'includeSteps'),
|
||||
),
|
||||
@@ -110,11 +114,13 @@ void main() {
|
||||
|
||||
// 검색어/상태/기간 필터가 Repository 호출에 반영되는지 확인한다.
|
||||
test('필터 전달을 검증한다', () async {
|
||||
controller.updateQuery('TRX');
|
||||
controller.updateTransactionFilter(55);
|
||||
controller.updateStatusFilter(ApprovalStatusFilter.approved);
|
||||
final from = DateTime(2024, 4, 1);
|
||||
final to = DateTime(2024, 4, 30);
|
||||
controller.updateDateRange(from, to);
|
||||
controller.updateRequestedByFilter(
|
||||
id: 77,
|
||||
name: '상신자',
|
||||
employeeNo: 'EMP077',
|
||||
);
|
||||
|
||||
await controller.fetch(page: 3);
|
||||
|
||||
@@ -122,10 +128,9 @@ void main() {
|
||||
() => repository.list(
|
||||
page: 3,
|
||||
pageSize: 20,
|
||||
query: 'TRX',
|
||||
status: 'approved',
|
||||
from: from,
|
||||
to: to,
|
||||
transactionId: 55,
|
||||
approvalStatusId: null,
|
||||
requestedById: 77,
|
||||
includeHistories: false,
|
||||
includeSteps: false,
|
||||
),
|
||||
@@ -138,10 +143,9 @@ void main() {
|
||||
() => repository.list(
|
||||
page: any(named: 'page'),
|
||||
pageSize: any(named: 'pageSize'),
|
||||
query: any(named: 'query'),
|
||||
status: any(named: 'status'),
|
||||
from: any(named: 'from'),
|
||||
to: any(named: 'to'),
|
||||
transactionId: any(named: 'transactionId'),
|
||||
approvalStatusId: any(named: 'approvalStatusId'),
|
||||
requestedById: any(named: 'requestedById'),
|
||||
includeHistories: any(named: 'includeHistories'),
|
||||
includeSteps: any(named: 'includeSteps'),
|
||||
),
|
||||
@@ -151,6 +155,46 @@ void main() {
|
||||
|
||||
expect(controller.errorMessage, isNotNull);
|
||||
});
|
||||
|
||||
test('상태 룩업 로드 후 status ID를 전달한다', () async {
|
||||
final lookupRepository = _MockInventoryLookupRepository();
|
||||
final ctrl = ApprovalController(
|
||||
approvalRepository: repository,
|
||||
templateRepository: templateRepository,
|
||||
lookupRepository: lookupRepository,
|
||||
);
|
||||
when(
|
||||
() => lookupRepository.fetchApprovalStatuses(
|
||||
activeOnly: any(named: 'activeOnly'),
|
||||
),
|
||||
).thenAnswer(
|
||||
(_) async => [
|
||||
LookupItem(
|
||||
id: 5,
|
||||
name: '승인완료',
|
||||
code: 'approved',
|
||||
isDefault: false,
|
||||
isActive: true,
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
await ctrl.loadStatusLookups();
|
||||
ctrl.updateStatusFilter(ApprovalStatusFilter.approved);
|
||||
await ctrl.fetch();
|
||||
|
||||
verify(
|
||||
() => repository.list(
|
||||
page: 1,
|
||||
pageSize: 20,
|
||||
transactionId: null,
|
||||
approvalStatusId: 5,
|
||||
requestedById: null,
|
||||
includeHistories: false,
|
||||
includeSteps: false,
|
||||
),
|
||||
).called(1);
|
||||
});
|
||||
});
|
||||
|
||||
group('selectApproval', () {
|
||||
@@ -304,10 +348,9 @@ void main() {
|
||||
() => repository.list(
|
||||
page: any(named: 'page'),
|
||||
pageSize: any(named: 'pageSize'),
|
||||
query: any(named: 'query'),
|
||||
status: any(named: 'status'),
|
||||
from: any(named: 'from'),
|
||||
to: any(named: 'to'),
|
||||
transactionId: any(named: 'transactionId'),
|
||||
approvalStatusId: any(named: 'approvalStatusId'),
|
||||
requestedById: any(named: 'requestedById'),
|
||||
includeHistories: any(named: 'includeHistories'),
|
||||
includeSteps: any(named: 'includeSteps'),
|
||||
),
|
||||
@@ -471,10 +514,9 @@ void main() {
|
||||
() => repository.list(
|
||||
page: any(named: 'page'),
|
||||
pageSize: any(named: 'pageSize'),
|
||||
query: any(named: 'query'),
|
||||
status: any(named: 'status'),
|
||||
from: any(named: 'from'),
|
||||
to: any(named: 'to'),
|
||||
transactionId: any(named: 'transactionId'),
|
||||
approvalStatusId: any(named: 'approvalStatusId'),
|
||||
requestedById: any(named: 'requestedById'),
|
||||
includeHistories: any(named: 'includeHistories'),
|
||||
includeSteps: any(named: 'includeSteps'),
|
||||
),
|
||||
@@ -571,15 +613,19 @@ void main() {
|
||||
});
|
||||
|
||||
test('필터 초기화', () {
|
||||
controller.updateQuery('abc');
|
||||
controller.updateTransactionFilter(42);
|
||||
controller.updateStatusFilter(ApprovalStatusFilter.rejected);
|
||||
controller.updateDateRange(DateTime(2024, 1, 1), DateTime(2024, 1, 31));
|
||||
controller.updateRequestedByFilter(
|
||||
id: 11,
|
||||
name: '요청자',
|
||||
employeeNo: 'EMP011',
|
||||
);
|
||||
|
||||
controller.clearFilters();
|
||||
|
||||
expect(controller.query, isEmpty);
|
||||
expect(controller.transactionIdFilter, isNull);
|
||||
expect(controller.statusFilter, ApprovalStatusFilter.all);
|
||||
expect(controller.fromDate, isNull);
|
||||
expect(controller.toDate, isNull);
|
||||
expect(controller.requestedById, isNull);
|
||||
expect(controller.requestedByName, isNull);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user