65 lines
2 KiB
TypeScript
65 lines
2 KiB
TypeScript
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')
|
|
})
|
|
})
|