VibecoderMcSwaggins's picture
feat(frontend): React + Vite + NiiVue frontend (replaces Gradio) (#32)
fbf73ff
raw
history blame
2.01 kB
import { describe, it, expect } from 'vitest'
import { server } from '../../mocks/server'
import { errorHandlers } from '../../mocks/handlers'
import { apiClient } from '../client'
describe('apiClient', () => {
describe('getCases', () => {
it('returns list of case IDs', async () => {
const result = await apiClient.getCases()
expect(result.cases).toHaveLength(3)
expect(result.cases).toContain('sub-stroke0001')
})
it('throws ApiError on server error', async () => {
server.use(errorHandlers.casesServerError)
await expect(apiClient.getCases()).rejects.toThrow(/failed to fetch cases/i)
})
it('throws ApiError on network error', async () => {
server.use(errorHandlers.casesNetworkError)
await expect(apiClient.getCases()).rejects.toThrow()
})
})
describe('runSegmentation', () => {
it('returns segmentation result', async () => {
const result = await apiClient.runSegmentation('sub-stroke0001')
expect(result.caseId).toBe('sub-stroke0001')
expect(result.diceScore).toBe(0.847)
expect(result.volumeMl).toBe(15.32)
expect(result.dwiUrl).toContain('dwi.nii.gz')
expect(result.predictionUrl).toContain('prediction.nii.gz')
})
it('sends fast_mode=false parameter (slower processing)', async () => {
const result = await apiClient.runSegmentation('sub-stroke0001', false)
// Mock returns 45.0s when fast_mode=false
expect(result.elapsedSeconds).toBe(45.0)
})
it('defaults fast_mode to true (faster processing)', async () => {
const result = await apiClient.runSegmentation('sub-stroke0001')
// Mock returns 12.5s when fast_mode=true (the default)
expect(result.elapsedSeconds).toBe(12.5)
})
it('throws ApiError on server error', async () => {
server.use(errorHandlers.segmentServerError)
await expect(
apiClient.runSegmentation('sub-stroke0001')
).rejects.toThrow(/segmentation failed/i)
})
})
})