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>) useAdapterStore.setState({ fetchConfig: vi.fn(async () => {}), config: {}, } as Partial>) 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() 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, })) }) })