98 lines
2.7 KiB
TypeScript
98 lines
2.7 KiB
TypeScript
// File: frontend/lib/services/__tests__/admin-ai.service.test.ts
|
|
// Change Log:
|
|
// - 2026-06-19: เพิ่ม regression tests สำหรับ AI Admin response normalization
|
|
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
import apiClient from '@/lib/api/client';
|
|
import { adminAiService } from '../admin-ai.service';
|
|
import { adminAiPromptService } from '../admin-ai-prompt.service';
|
|
|
|
const promptVersion = {
|
|
publicId: '0195aaaa-aaaa-7000-8000-aaaaaaaaaaaa',
|
|
promptType: 'ocr_system',
|
|
versionNumber: 1,
|
|
version: 3,
|
|
template: 'OCR prompt',
|
|
isActive: true,
|
|
createdAt: '2026-06-19T00:00:00.000Z',
|
|
};
|
|
|
|
describe('admin AI service normalization', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it('ควร unwrap VRAM response ที่ถูกห่อ data ซ้อนกัน', async () => {
|
|
vi.mocked(apiClient.get).mockResolvedValue({
|
|
data: {
|
|
data: {
|
|
totalVramMb: 16384,
|
|
usedVramMb: 4096,
|
|
freeVramMb: 12288,
|
|
hasCapacity: true,
|
|
loadedModels: [
|
|
{
|
|
modelId: 'np-dms-ai:latest',
|
|
modelName: 'np-dms-ai:latest',
|
|
vramUsageMB: 4096,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
});
|
|
|
|
const result = await adminAiService.getVramStatus();
|
|
|
|
expect(result.totalVRAMMB).toBe(16384);
|
|
expect(result.usedVRAMMB).toBe(4096);
|
|
expect(result.usagePercent).toBe(25);
|
|
expect(result.canLoadModel).toBe(true);
|
|
expect(result.loadedModels).toHaveLength(1);
|
|
});
|
|
|
|
it('ควรไม่แสดง OOM Guard เมื่อ backend ยังไม่ส่ง total VRAM', async () => {
|
|
vi.mocked(apiClient.get).mockResolvedValue({
|
|
data: {
|
|
data: {
|
|
loadedModels: [],
|
|
hasCapacity: false,
|
|
},
|
|
},
|
|
});
|
|
|
|
const result = await adminAiService.getVramStatus();
|
|
|
|
expect(result.totalVRAMMB).toBe(0);
|
|
expect(result.usedVRAMMB).toBe(0);
|
|
expect(result.canLoadModel).toBe(true);
|
|
});
|
|
|
|
it('ควรคืน prompt list เป็น array เมื่อ response ถูกห่อ data ซ้อนกัน', async () => {
|
|
vi.mocked(apiClient.get).mockResolvedValue({
|
|
data: {
|
|
data: {
|
|
data: [promptVersion],
|
|
},
|
|
},
|
|
});
|
|
|
|
const result = await adminAiPromptService.getPrompts('ocr_system');
|
|
|
|
expect(result).toEqual([promptVersion]);
|
|
});
|
|
|
|
it('ควรคืน empty array เมื่อ prompt payload ไม่ใช่ array', async () => {
|
|
vi.mocked(apiClient.get).mockResolvedValue({
|
|
data: {
|
|
data: {
|
|
message: 'unexpected payload',
|
|
},
|
|
},
|
|
});
|
|
|
|
const result = await adminAiPromptService.getPrompts('ocr_system');
|
|
|
|
expect(result).toEqual([]);
|
|
});
|
|
});
|