File size: 1,565 Bytes
fbf73ff |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import { http, HttpResponse, delay } from 'msw'
const API_BASE = import.meta.env.VITE_API_URL || 'http://localhost:7860'
export const handlers = [
http.get(`${API_BASE}/api/cases`, async () => {
await delay(100)
return HttpResponse.json({
cases: ['sub-stroke0001', 'sub-stroke0002', 'sub-stroke0003'],
})
}),
http.post(`${API_BASE}/api/segment`, async ({ request }) => {
const body = (await request.json()) as { case_id: string; fast_mode?: boolean }
await delay(200)
return HttpResponse.json({
caseId: body.case_id,
diceScore: 0.847,
volumeMl: 15.32,
// Reflect fast_mode in response - slower when fast_mode=false
elapsedSeconds: body.fast_mode === false ? 45.0 : 12.5,
dwiUrl: `${API_BASE}/files/dwi.nii.gz`,
predictionUrl: `${API_BASE}/files/prediction.nii.gz`,
})
}),
]
// Error handlers for testing error states
export const errorHandlers = {
casesServerError: http.get(`${API_BASE}/api/cases`, () => {
return HttpResponse.json(
{ detail: 'Internal server error' },
{ status: 500 }
)
}),
casesNetworkError: http.get(`${API_BASE}/api/cases`, () => {
return HttpResponse.error()
}),
segmentServerError: http.post(`${API_BASE}/api/segment`, () => {
return HttpResponse.json(
{ detail: 'Segmentation failed: out of memory' },
{ status: 500 }
)
}),
segmentTimeout: http.post(`${API_BASE}/api/segment`, async () => {
await delay(30000)
return HttpResponse.json({ detail: 'Timeout' }, { status: 504 })
}),
}
|