결재 및 마스터 모듈을 v4 API 계약에 맞게 조정

This commit is contained in:
JiWoong Sul
2025-10-16 17:27:20 +09:00
parent d5c99627db
commit 9e2244f260
34 changed files with 1394 additions and 330 deletions

View File

@@ -22,6 +22,52 @@ void main() {
repository = ApprovalRepositoryRemote(apiClient: apiClient);
});
test('list는 신규 필터 파라미터를 전달한다', () async {
const path = '/api/v1/approvals';
when(
() => apiClient.get<Map<String, dynamic>>(
path,
query: any(named: 'query'),
options: any(named: 'options'),
cancelToken: any(named: 'cancelToken'),
),
).thenAnswer(
(_) async => Response<Map<String, dynamic>>(
data: {'items': const [], 'page': 1, 'page_size': 20, 'total': 0},
statusCode: 200,
requestOptions: RequestOptions(path: path),
),
);
await repository.list(
page: 2,
pageSize: 50,
transactionId: 10,
approvalStatusId: 5,
requestedById: 7,
includeSteps: true,
includeHistories: true,
);
final captured = verify(
() => apiClient.get<Map<String, dynamic>>(
captureAny(),
query: captureAny(named: 'query'),
options: any(named: 'options'),
cancelToken: any(named: 'cancelToken'),
),
).captured;
expect(captured.first, equals(path));
final query = captured[1] as Map<String, dynamic>;
expect(query['page'], 2);
expect(query['page_size'], 50);
expect(query['transaction_id'], 10);
expect(query['approval_status_id'], 5);
expect(query['requested_by_id'], 7);
expect(query['include'], 'steps,histories');
});
Map<String, dynamic> buildStep({
required int id,
required int order,
@@ -147,4 +193,52 @@ void main() {
expect(result.histories.length, 2);
expect(result.histories.last.id, 91001);
});
test('fetchDetail은 include 파라미터를 steps,histories로 조합한다', () async {
const path = '/api/v1/approvals/1';
when(
() => apiClient.get<Map<String, dynamic>>(
path,
query: any(named: 'query'),
options: any(named: 'options'),
cancelToken: any(named: 'cancelToken'),
),
).thenAnswer(
(_) async => Response<Map<String, dynamic>>(
data: {
'data': {
'id': 1,
'approval_no': 'AP-1',
'status': {'id': 1, 'status_name': '대기'},
'current_step': {'id': 2, 'step_order': 1},
'requester': {
'id': 3,
'employee_no': 'EMP-3',
'employee_name': '신청자',
},
'requested_at': '2024-01-01T00:00:00Z',
'steps': const [],
'histories': const [],
},
},
statusCode: 200,
requestOptions: RequestOptions(path: path),
),
);
await repository.fetchDetail(1, includeSteps: true, includeHistories: true);
final query =
verify(
() => apiClient.get<Map<String, dynamic>>(
any(),
query: captureAny(named: 'query'),
options: any(named: 'options'),
cancelToken: any(named: 'cancelToken'),
),
).captured.first
as Map<String, dynamic>;
expect(query['include'], 'steps,histories');
});
}