File size: 3,145 Bytes
1f21206 | 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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | import { afterEach, describe, expect, it, vi } from 'vitest'
import { act, cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react'
import '@testing-library/jest-dom'
import { NewTaskModal } from './NewTaskModal'
import { useAdapterStore } from '../../stores/adapterStore'
import { useProviderStore } from '../../stores/providerStore'
import { useSettingsStore } from '../../stores/settingsStore'
import { useTaskStore } from '../../stores/taskStore'
afterEach(() => {
cleanup()
useAdapterStore.setState(useAdapterStore.getInitialState(), true)
useProviderStore.setState(useProviderStore.getInitialState(), true)
useSettingsStore.setState(useSettingsStore.getInitialState(), true)
useTaskStore.setState(useTaskStore.getInitialState(), true)
})
describe('NewTaskModal', () => {
it('creates scheduled tasks with a provider-scoped model selection', async () => {
const createTask = vi.fn(async () => {})
useTaskStore.setState({ createTask } as Partial<ReturnType<typeof useTaskStore.getState>>)
useAdapterStore.setState({
fetchConfig: vi.fn(async () => {}),
config: {},
} as Partial<ReturnType<typeof useAdapterStore.getState>>)
useSettingsStore.setState({
locale: 'en',
currentModel: {
id: 'provider-main',
name: 'provider-main',
description: '',
context: '',
},
availableModels: [
{ id: 'claude-sonnet-4-6', name: 'Sonnet', description: '', context: '' },
],
activeProviderName: 'Provider A',
})
useProviderStore.setState({
providers: [{
id: 'provider-a',
presetId: 'custom',
name: 'Provider A',
apiKey: '***',
baseUrl: 'https://api.example.com',
apiFormat: 'anthropic',
models: {
main: 'provider-main',
haiku: 'provider-fast',
sonnet: 'provider-main',
opus: '',
},
}],
activeId: 'provider-a',
hasLoadedProviders: true,
isLoading: true,
})
render(<NewTaskModal open onClose={vi.fn()} />)
fireEvent.change(screen.getByLabelText(/^Name/), {
target: { value: 'provider cron' },
})
fireEvent.change(screen.getByLabelText(/^Description/), {
target: { value: 'exercise provider selection' },
})
fireEvent.change(screen.getByPlaceholderText(/Look at the commits/i), {
target: { value: 'Say hello from the scheduled task.' },
})
await act(async () => {
fireEvent.click(screen.getByRole('button', { name: /provider-main/i }))
await Promise.resolve()
})
await act(async () => {
fireEvent.click(screen.getByRole('button', { name: /provider-fast/i }))
await Promise.resolve()
})
await act(async () => {
fireEvent.click(screen.getByRole('button', { name: 'Create task' }))
await Promise.resolve()
})
await waitFor(() => expect(createTask).toHaveBeenCalledTimes(1))
expect(createTask).toHaveBeenCalledWith(expect.objectContaining({
model: 'provider-fast',
providerId: 'provider-a',
enabled: true,
recurring: true,
}))
})
})
|