File size: 1,654 Bytes
5539271
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 { describe, it, expect, vi, beforeEach } from 'vitest'
import { rechunkAnalysis, createAnalysis } from '../analysis/api'

vi.mock('../../shared/api/http', () => ({
  apiFetch: vi.fn(),
}))

import { apiFetch } from '../../shared/api/http'

describe('chunking API', () => {
  beforeEach(() => {
    vi.clearAllMocks()
  })

  it('createAnalysis sends chunkingOptions when provided', async () => {
    const job = { id: '1', documentId: 'doc-1', status: 'PENDING' }
    apiFetch.mockResolvedValue(job)

    const chunkingOpts = { chunker_type: 'hybrid' as const, max_tokens: 256 }
    await createAnalysis('doc-1', null, chunkingOpts)

    expect(apiFetch).toHaveBeenCalledWith('/api/analyses', {
      method: 'POST',
      body: JSON.stringify({ documentId: 'doc-1', chunkingOptions: chunkingOpts }),
    })
  })

  it('createAnalysis omits chunkingOptions when null', async () => {
    apiFetch.mockResolvedValue({ id: '1' })

    await createAnalysis('doc-1', null, null)

    expect(apiFetch).toHaveBeenCalledWith('/api/analyses', {
      method: 'POST',
      body: JSON.stringify({ documentId: 'doc-1' }),
    })
  })

  it('rechunkAnalysis sends POST to rechunk endpoint', async () => {
    const chunks = [{ text: 'chunk1', headings: [], sourcePage: 1, tokenCount: 10 }]
    apiFetch.mockResolvedValue(chunks)

    const opts = { chunker_type: 'hybrid' as const, max_tokens: 512 }
    const result = await rechunkAnalysis('job-1', opts)

    expect(apiFetch).toHaveBeenCalledWith('/api/analyses/job-1/rechunk', {
      method: 'POST',
      body: JSON.stringify({ chunkingOptions: opts }),
    })
    expect(result).toEqual(chunks)
  })
})