106 lines
4.1 KiB
TypeScript
106 lines
4.1 KiB
TypeScript
// File: frontend/lib/services/__tests__/rfa.service.test.ts
|
|
// Change Log:
|
|
// - 2026-06-13: Initial creation - unit tests for rfaService
|
|
|
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
import apiClient from '@/lib/api/client';
|
|
import { rfaService } from '../rfa.service';
|
|
|
|
// Mock apiClient
|
|
vi.mock('@/lib/api/client', () => ({
|
|
default: {
|
|
get: vi.fn(),
|
|
post: vi.fn(),
|
|
put: vi.fn(),
|
|
delete: vi.fn(),
|
|
},
|
|
}));
|
|
|
|
describe('rfaService', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
describe('getAll', () => {
|
|
it('ควรดึงรายการ RFA ทั้งหมดพร้อม params', async () => {
|
|
const mockResponse = { data: [{ publicId: 'uuid-1', subject: 'Test RFA' }] };
|
|
vi.mocked(apiClient.get).mockResolvedValue(mockResponse);
|
|
const searchParams = { search: 'Test' };
|
|
const result = await rfaService.getAll(searchParams);
|
|
expect(apiClient.get).toHaveBeenCalledWith('/rfas', { params: searchParams });
|
|
expect(result).toEqual(mockResponse.data);
|
|
});
|
|
});
|
|
|
|
describe('getByUuid', () => {
|
|
it('ควรดึงรายละเอียด RFA ตาม uuid', async () => {
|
|
const mockResponse = { data: { publicId: 'uuid-1', subject: 'Test RFA' } };
|
|
vi.mocked(apiClient.get).mockResolvedValue(mockResponse);
|
|
const result = await rfaService.getByUuid('uuid-1');
|
|
expect(apiClient.get).toHaveBeenCalledWith('/rfas/uuid-1');
|
|
expect(result).toEqual(mockResponse.data);
|
|
});
|
|
});
|
|
|
|
describe('create', () => {
|
|
it('ควรสร้าง RFA ใหม่', async () => {
|
|
const mockResponse = { data: { publicId: 'uuid-1', subject: 'Test RFA' } };
|
|
vi.mocked(apiClient.post).mockResolvedValue(mockResponse);
|
|
const createDto = {
|
|
projectId: 'uuid-proj',
|
|
contractId: 'uuid-cont',
|
|
disciplineId: 'uuid-disp',
|
|
rfaTypeId: 'uuid-type',
|
|
subject: 'Test RFA',
|
|
toOrganizationId: 'uuid-org',
|
|
};
|
|
const result = await rfaService.create(createDto as any);
|
|
expect(apiClient.post).toHaveBeenCalledWith('/rfas', createDto);
|
|
expect(result).toEqual(mockResponse.data);
|
|
});
|
|
});
|
|
|
|
describe('submit', () => {
|
|
it('ควรส่ง RFA เข้า workflow', async () => {
|
|
const mockResponse = { data: { publicId: 'uuid-1', status: 'SUBMITTED' } };
|
|
vi.mocked(apiClient.post).mockResolvedValue(mockResponse);
|
|
const submitDto = { templateId: 1, reviewTeamPublicId: 'uuid-team' };
|
|
const result = await rfaService.submit('uuid-1', submitDto);
|
|
expect(apiClient.post).toHaveBeenCalledWith('/rfas/uuid-1/submit', submitDto);
|
|
expect(result).toEqual(mockResponse.data);
|
|
});
|
|
});
|
|
|
|
describe('update', () => {
|
|
it('ควรแก้ไขข้อมูล RFA', async () => {
|
|
const mockResponse = { data: { publicId: 'uuid-1', subject: 'Updated RFA' } };
|
|
vi.mocked(apiClient.put).mockResolvedValue(mockResponse);
|
|
const updateDto = { subject: 'Updated RFA' };
|
|
const result = await rfaService.update('uuid-1', updateDto);
|
|
expect(apiClient.put).toHaveBeenCalledWith('/rfas/uuid-1', updateDto);
|
|
expect(result).toEqual(mockResponse.data);
|
|
});
|
|
});
|
|
|
|
describe('processWorkflow', () => {
|
|
it('ควรดำเนินการขั้นตอนอนุมัติ (Workflow Action)', async () => {
|
|
const mockResponse = { data: { status: 'APPROVED' } };
|
|
vi.mocked(apiClient.post).mockResolvedValue(mockResponse);
|
|
const actionDto = { action: 'APPROVE', comments: 'Approved!' };
|
|
const result = await rfaService.processWorkflow('uuid-1', actionDto as any);
|
|
expect(apiClient.post).toHaveBeenCalledWith('/rfas/uuid-1/action', actionDto);
|
|
expect(result).toEqual(mockResponse.data);
|
|
});
|
|
});
|
|
|
|
describe('delete', () => {
|
|
it('ควรลบ RFA (Soft Delete)', async () => {
|
|
const mockResponse = { data: { success: true } };
|
|
vi.mocked(apiClient.delete).mockResolvedValue(mockResponse);
|
|
const result = await rfaService.delete('uuid-1');
|
|
expect(apiClient.delete).toHaveBeenCalledWith('/rfas/uuid-1');
|
|
expect(result).toEqual(mockResponse.data);
|
|
});
|
|
});
|
|
});
|