Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions src/entities/batch-job-log/api/batchJobLogApi.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { beforeEach, describe, expect, it, vi } from 'vitest';

const apiClientMock = vi.hoisted(() => ({
get: vi.fn(),
post: vi.fn(),
}));

vi.mock('@/shared/api', async (importOriginal) => {
const actual = await importOriginal<typeof import('@/shared/api')>();
return { ...actual, apiClient: apiClientMock };
});

import { fetchBatchJobLogs } from './batchJobLogApi';

describe('배치 작업 로그 조회 API', () => {
beforeEach(() => {
vi.clearAllMocks();
});

it('페이지 크기를 백엔드 Pageable 이름인 size로 변환해 전송한다', async () => {
apiClientMock.get.mockResolvedValue({
data: { data: [], meta: { page: 2, totalCount: 12, totalPages: 2 } },
});

await fetchBatchJobLogs({ page: 2, pageSize: 10, status: 'FAILED' });

expect(apiClientMock.get).toHaveBeenCalledWith('/v1/admin/batch-job-logs', {
params: { page: 2, size: 10, status: 'FAILED' },
});
});

it('응답 meta와 요청 pageSize로 PageResult를 구성한다', async () => {
apiClientMock.get.mockResolvedValue({
data: { data: [], meta: { page: 1, totalCount: 12, totalPages: 2 } },
});

const result = await fetchBatchJobLogs({ page: 1, pageSize: 10 });

expect(result).toEqual({ items: [], page: 1, pageSize: 10, totalCount: 12 });
});
});
7 changes: 5 additions & 2 deletions src/entities/batch-job-log/api/batchJobLogApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,14 @@ export interface BatchJobLogSearchParams extends PageParams {
export async function fetchBatchJobLogs(
params: BatchJobLogSearchParams,
): Promise<PageResult<BatchJobLogDto>> {
// 백엔드는 Spring Pageable이라 페이지 크기를 `size`라는 이름으로만 받는다(policyApi #126 관례).
// `pageSize` 그대로 보내면 조용히 무시되어 @PageableDefault(size=20)로 응답해 페이지 이동이 어긋난다.
const { pageSize, ...filters } = params;
const response = await apiClient.get<ApiPageEnvelope<BatchJobLogDto>>(
'/v1/admin/batch-job-logs',
{ params },
{ params: { ...filters, size: pageSize } },
);
return toPageResult(response.data, params.pageSize);
return toPageResult(response.data, pageSize);
}

// 관리자 대시보드의 "수동 강제 동기화" 버튼이 호출한다. 비동기로 전체 동기화를 시작시키고 202를
Expand Down
Loading