File size: 2,433 Bytes
fbf73ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
497bb49
 
 
fbf73ff
497bb49
 
 
fbf73ff
 
497bb49
 
fbf73ff
497bb49
 
fbf73ff
 
497bb49
 
fbf73ff
497bb49
 
 
fbf73ff
497bb49
fbf73ff
497bb49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fbf73ff
 
497bb49
 
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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 () => {
      // First create a job
      const createResult = await apiClient.createSegmentJob('sub-stroke0001')

      // Then get its status
      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)
    })
  })
})