feat(ai): add ADR-036 unified OCR architecture and frontend test coverage
CI / CD Pipeline / build (push) Failing after 6m24s
CI / CD Pipeline / deploy (push) Has been skipped

- Add ADR-036 unified OCR architecture (typhoon-ocr via Ollama)
- Extend AI execution profiles for OCR sandbox configuration
- Add comprehensive frontend test coverage (components, hooks, services)
- Add backend test coverage for document-numbering services
- Update OCR sidecar with typhoon-ocr integration
- Add AI policy service and execution profile management
- Update AGENTS.md and architecture documentation
This commit is contained in:
2026-06-14 06:34:07 +07:00
parent e3503b6a77
commit 7e8f4859cd
108 changed files with 33914 additions and 339 deletions
@@ -0,0 +1,56 @@
// File: frontend/lib/stores/__tests__/project-store.test.ts
// Change Log:
// - 2026-06-13: Initial creation - test coverage for useProjectStore (Zustand)
import { describe, it, expect, beforeEach } from 'vitest';
import { act, renderHook } from '@testing-library/react';
import { useProjectStore } from '../project-store';
describe('useProjectStore', () => {
beforeEach(() => {
// รีเซ็ต store ก่อนแต่ละ test
act(() => {
useProjectStore.setState({ selectedProjectId: null });
});
});
it('ค่า default ควรเป็น selectedProjectId: null', () => {
const { result } = renderHook(() => useProjectStore());
expect(result.current.selectedProjectId).toBeNull();
});
it('setSelectedProjectId ควรตั้งค่า selectedProjectId ด้วย UUIDv7 ที่กำหนด', () => {
const { result } = renderHook(() => useProjectStore());
const projectId = '019505a1-7c3e-7000-8000-abc123def456';
act(() => {
result.current.setSelectedProjectId(projectId);
});
expect(result.current.selectedProjectId).toBe(projectId);
});
it('setSelectedProjectId ควรเปลี่ยน selectedProjectId จาก UUID เป็น null ได้', () => {
const projectId = '019505a1-7c3e-7000-8000-abc123def456';
act(() => {
useProjectStore.setState({ selectedProjectId: projectId });
});
const { result } = renderHook(() => useProjectStore());
act(() => {
result.current.setSelectedProjectId(null);
});
expect(result.current.selectedProjectId).toBeNull();
});
it('setSelectedProjectId ควรเปลี่ยน project ได้หลายครั้ง', () => {
const { result } = renderHook(() => useProjectStore());
const projectId1 = '019505a1-7c3e-7000-8000-abc123def001';
const projectId2 = '019505a1-7c3e-7000-8000-abc123def002';
act(() => {
result.current.setSelectedProjectId(projectId1);
});
expect(result.current.selectedProjectId).toBe(projectId1);
act(() => {
result.current.setSelectedProjectId(projectId2);
});
expect(result.current.selectedProjectId).toBe(projectId2);
});
});