jan/web/hooks/useModels.test.ts
Louis 87e1754e3a
chore: improve models and threads caching (#3744)
* chore: managing and maintaining models and threads in the cache

* test: add tests for hooks
2024-10-01 10:15:30 +07:00

62 lines
1.6 KiB
TypeScript

// useModels.test.ts
import { renderHook, act } from '@testing-library/react'
import { events, ModelEvent } from '@janhq/core'
import { extensionManager } from '@/extension'
// Mock dependencies
jest.mock('@janhq/core')
jest.mock('@/extension')
import useModels from './useModels'
// Mock data
const mockDownloadedModels = [
{ id: 'model-1', name: 'Model 1' },
{ id: 'model-2', name: 'Model 2' },
]
const mockConfiguredModels = [
{ id: 'model-3', name: 'Model 3' },
{ id: 'model-4', name: 'Model 4' },
]
const mockDefaultModel = { id: 'default-model', name: 'Default Model' }
describe('useModels', () => {
beforeEach(() => {
jest.clearAllMocks()
})
it('should fetch and set models on mount', async () => {
const mockModelExtension = {
getDownloadedModels: jest.fn().mockResolvedValue(mockDownloadedModels),
getConfiguredModels: jest.fn().mockResolvedValue(mockConfiguredModels),
getDefaultModel: jest.fn().mockResolvedValue(mockDefaultModel),
} as any
jest.spyOn(extensionManager, 'get').mockReturnValue(mockModelExtension)
await act(async () => {
renderHook(() => useModels())
})
expect(mockModelExtension.getDownloadedModels).toHaveBeenCalled()
expect(mockModelExtension.getConfiguredModels).toHaveBeenCalled()
expect(mockModelExtension.getDefaultModel).toHaveBeenCalled()
})
it('should remove event listener on unmount', async () => {
const removeListenerSpy = jest.spyOn(events, 'off')
const { unmount } = renderHook(() => useModels())
unmount()
expect(removeListenerSpy).toHaveBeenCalledWith(
ModelEvent.OnModelsUpdate,
expect.any(Function)
)
})
})