|
|
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("createSegmentJob", () => { |
|
|
it("returns job ID and pending status", async () => { |
|
|
const result = await apiClient.createSegmentJob("sub-stroke0001"); |
|
|
|
|
|
expect(result.jobId).toBeDefined(); |
|
|
expect(result.status).toBe("pending"); |
|
|
expect(result.message).toContain("sub-stroke0001"); |
|
|
}); |
|
|
|
|
|
it("sends fast_mode parameter", async () => { |
|
|
const result = await apiClient.createSegmentJob("sub-stroke0001", false); |
|
|
|
|
|
expect(result.jobId).toBeDefined(); |
|
|
expect(result.status).toBe("pending"); |
|
|
}); |
|
|
|
|
|
it("throws ApiError on server error", async () => { |
|
|
server.use(errorHandlers.segmentCreateError); |
|
|
|
|
|
await expect( |
|
|
apiClient.createSegmentJob("sub-stroke0001"), |
|
|
).rejects.toThrow(/failed to create job/i); |
|
|
}); |
|
|
}); |
|
|
|
|
|
describe("getJobStatus", () => { |
|
|
it("returns job status with progress", async () => { |
|
|
|
|
|
const createResult = await apiClient.createSegmentJob("sub-stroke0001"); |
|
|
|
|
|
|
|
|
const status = await apiClient.getJobStatus(createResult.jobId); |
|
|
|
|
|
expect(status.jobId).toBe(createResult.jobId); |
|
|
expect(["pending", "running", "completed"]).toContain(status.status); |
|
|
expect(status.progress).toBeGreaterThanOrEqual(0); |
|
|
expect(status.progress).toBeLessThanOrEqual(100); |
|
|
expect(status.progressMessage).toBeDefined(); |
|
|
}); |
|
|
|
|
|
it("throws ApiError when job not found", async () => { |
|
|
server.use(errorHandlers.jobNotFound); |
|
|
|
|
|
await expect(apiClient.getJobStatus("nonexistent-job")).rejects.toThrow( |
|
|
/not found/i, |
|
|
); |
|
|
}); |
|
|
}); |
|
|
}); |
|
|
|