7e8f4859cd
- 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
72 lines
2.7 KiB
TypeScript
72 lines
2.7 KiB
TypeScript
// File: frontend/lib/stores/__tests__/draft-store.test.ts
|
|
// Change Log:
|
|
// - 2026-06-13: Initial creation - test coverage for useDraftStore (Zustand)
|
|
|
|
import { describe, it, expect, beforeEach } from 'vitest';
|
|
import { act, renderHook } from '@testing-library/react';
|
|
import { useDraftStore } from '../draft-store';
|
|
|
|
describe('useDraftStore', () => {
|
|
beforeEach(() => {
|
|
// รีเซ็ต store ก่อนแต่ละ test
|
|
act(() => {
|
|
useDraftStore.setState({ drafts: {} });
|
|
});
|
|
});
|
|
|
|
it('ค่า default ควรเป็น drafts: {}', () => {
|
|
const { result } = renderHook(() => useDraftStore());
|
|
expect(result.current.drafts).toEqual({});
|
|
});
|
|
|
|
it('saveDraft ควรบันทึก draft data ด้วย key ที่กำหนด', () => {
|
|
const { result } = renderHook(() => useDraftStore());
|
|
const draftData = { title: 'Test Document', projectId: '019505a1-7c3e-7000-8000-abc123def456' };
|
|
act(() => {
|
|
result.current.saveDraft('rfa-new', draftData);
|
|
});
|
|
expect(result.current.drafts['rfa-new']).toEqual(draftData);
|
|
});
|
|
|
|
it('getDraft ควรดึงข้อมูล draft ตาม key', () => {
|
|
const { result } = renderHook(() => useDraftStore());
|
|
const draftData = { subject: 'Correspondence Test', content: 'Body text' };
|
|
act(() => {
|
|
result.current.saveDraft('corr-edit', draftData);
|
|
});
|
|
const retrieved = result.current.getDraft('corr-edit');
|
|
expect(retrieved).toEqual(draftData);
|
|
});
|
|
|
|
it('getDraft ควร return undefined หาก key ไม่มีใน store', () => {
|
|
const { result } = renderHook(() => useDraftStore());
|
|
const retrieved = result.current.getDraft('non-existent-key');
|
|
expect(retrieved).toBeUndefined();
|
|
});
|
|
|
|
it('clearDraft ควรลบ draft ออกตาม key', () => {
|
|
const { result } = renderHook(() => useDraftStore());
|
|
act(() => {
|
|
result.current.saveDraft('rfa-draft', { title: 'To Delete' });
|
|
});
|
|
expect(result.current.drafts['rfa-draft']).toBeDefined();
|
|
act(() => {
|
|
result.current.clearDraft('rfa-draft');
|
|
});
|
|
expect(result.current.drafts['rfa-draft']).toBeUndefined();
|
|
});
|
|
|
|
it('saveDraft ไม่ควรลบ draft อื่นที่ไม่ใช่ key เดียวกัน', () => {
|
|
const { result } = renderHook(() => useDraftStore());
|
|
act(() => {
|
|
result.current.saveDraft('key-a', { data: 'A' });
|
|
result.current.saveDraft('key-b', { data: 'B' });
|
|
});
|
|
act(() => {
|
|
result.current.clearDraft('key-a');
|
|
});
|
|
expect(result.current.drafts['key-a']).toBeUndefined();
|
|
expect(result.current.drafts['key-b']).toEqual({ data: 'B' });
|
|
});
|
|
});
|