mirror of
https://github.com/lordmathis/llamactl.git
synced 2025-12-23 17:44:24 +00:00
66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
import { instancesApi } from '@/lib/api'
|
|
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
// Mock fetch globally
|
|
const mockFetch = vi.fn()
|
|
global.fetch = mockFetch
|
|
|
|
describe('API Error Handling', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks()
|
|
})
|
|
|
|
it('converts HTTP errors to meaningful messages', async () => {
|
|
const mockResponse = {
|
|
ok: false,
|
|
status: 409,
|
|
text: () => Promise.resolve('Instance already exists'),
|
|
clone: function() { return this }
|
|
}
|
|
mockFetch.mockResolvedValue(mockResponse)
|
|
|
|
await expect(instancesApi.create('existing', {}))
|
|
.rejects
|
|
.toThrow('HTTP 409: Instance already exists')
|
|
})
|
|
|
|
it('handles empty error responses gracefully', async () => {
|
|
const mockResponse = {
|
|
ok: false,
|
|
status: 500,
|
|
text: () => Promise.resolve(''),
|
|
clone: function() { return this }
|
|
}
|
|
mockFetch.mockResolvedValue(mockResponse)
|
|
|
|
await expect(instancesApi.list())
|
|
.rejects
|
|
.toThrow('HTTP 500')
|
|
})
|
|
|
|
it('handles 204 No Content responses', async () => {
|
|
mockFetch.mockResolvedValue({
|
|
ok: true,
|
|
status: 204
|
|
})
|
|
|
|
const result = await instancesApi.delete('test-instance')
|
|
expect(result).toBeUndefined()
|
|
})
|
|
|
|
it('builds query parameters correctly for logs', async () => {
|
|
mockFetch.mockResolvedValue({
|
|
ok: true,
|
|
text: () => Promise.resolve('logs')
|
|
})
|
|
|
|
await instancesApi.getLogs('test-instance', 100)
|
|
|
|
expect(mockFetch).toHaveBeenCalledWith(
|
|
expect.stringMatching(
|
|
/^https?:\/\/[^/]+\/api\/v1\/instances\/test-instance\/logs\?lines=100$/
|
|
),
|
|
expect.any(Object)
|
|
)
|
|
})
|
|
}) |