import { describe, it, expect, vi, beforeEach } from 'vitest' import { fetchDocuments, fetchDocument, uploadDocument, deleteDocument, getPreviewUrl } from './api' vi.mock('../../shared/api/http', () => ({ apiFetch: vi.fn(), })) import { apiFetch } from '../../shared/api/http' describe('document API', () => { beforeEach(() => { vi.clearAllMocks() }) it('fetchDocuments calls GET /api/documents', async () => { const docs = [{ id: '1', filename: 'a.pdf' }] apiFetch.mockResolvedValue(docs) const result = await fetchDocuments() expect(apiFetch).toHaveBeenCalledWith('/api/documents') expect(result).toEqual(docs) }) it('fetchDocument calls GET /api/documents/:id', async () => { const doc = { id: '42', filename: 'test.pdf' } apiFetch.mockResolvedValue(doc) const result = await fetchDocument('42') expect(apiFetch).toHaveBeenCalledWith('/api/documents/42') expect(result).toEqual(doc) }) it('uploadDocument sends file via FormData with skipContentType', async () => { const file = new File(['content'], 'test.pdf', { type: 'application/pdf' }) const response = { id: '1', filename: 'test.pdf' } apiFetch.mockResolvedValue(response) const result = await uploadDocument(file) expect(apiFetch).toHaveBeenCalledWith('/api/documents/upload', { method: 'POST', body: expect.any(FormData), skipContentType: true, }) expect(result).toEqual(response) }) it('deleteDocument calls DELETE /api/documents/:id', async () => { apiFetch.mockResolvedValue(null) await deleteDocument('42') expect(apiFetch).toHaveBeenCalledWith('/api/documents/42', { method: 'DELETE' }) }) it('getPreviewUrl builds correct URL with defaults', () => { expect(getPreviewUrl('abc')).toBe('/api/documents/abc/preview?page=1&dpi=150') }) it('getPreviewUrl accepts custom page and dpi', () => { expect(getPreviewUrl('abc', 3, 300)).toBe('/api/documents/abc/preview?page=3&dpi=300') }) })