import { fireEvent, render, screen } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' import SummaryIndexSetting from '../summary-index-setting' // Mock useModelList to return a list of text generation models vi.mock('@/app/components/header/account-setting/model-provider-page/hooks', () => ({ useModelList: () => ({ data: [ { provider: 'openai', label: { en_US: 'OpenAI' }, models: [ { model: 'gpt-4', label: { en_US: 'GPT-4' }, model_type: 'llm', status: 'active' }, ], }, ], }), })) // Mock ModelSelector (external component from header module) vi.mock('@/app/components/header/account-setting/model-provider-page/model-selector', () => ({ default: ({ onSelect, readonly, defaultModel }: { onSelect?: (val: Record) => void, readonly?: boolean, defaultModel?: { model?: string } }) => (
{defaultModel?.model || 'none'}
), })) const ns = 'datasetSettings' describe('SummaryIndexSetting', () => { beforeEach(() => { vi.clearAllMocks() }) describe('knowledge-base entry', () => { it('should render auto gen label and switch', () => { render() expect(screen.getByText(`${ns}.form.summaryAutoGen`)).toBeInTheDocument() }) it('should render switch with defaultValue false when no setting', () => { render() // Switch is rendered; no model selector without enable expect(screen.queryByTestId('model-selector')).not.toBeInTheDocument() }) it('should show model selector and textarea when enabled', () => { render( , ) expect(screen.getByTestId('model-selector')).toBeInTheDocument() expect(screen.getByText(`${ns}.form.summaryModel`)).toBeInTheDocument() expect(screen.getByText(`${ns}.form.summaryInstructions`)).toBeInTheDocument() }) it('should call onSummaryIndexSettingChange with enable toggle', () => { const onChange = vi.fn() render( , ) // Find and click the switch const switchEl = screen.getByRole('switch') fireEvent.click(switchEl) expect(onChange).toHaveBeenCalledWith({ enable: true }) }) it('should call onSummaryIndexSettingChange when model selected', () => { const onChange = vi.fn() render( , ) fireEvent.click(screen.getByTestId('select-model-btn')) expect(onChange).toHaveBeenCalledWith({ model_provider_name: 'openai', model_name: 'gpt-4' }) }) it('should call onSummaryIndexSettingChange when prompt changed', () => { const onChange = vi.fn() render( , ) const textarea = screen.getByPlaceholderText(`${ns}.form.summaryInstructionsPlaceholder`) fireEvent.change(textarea, { target: { value: 'Summarize this' } }) expect(onChange).toHaveBeenCalledWith({ summary_prompt: 'Summarize this' }) }) }) describe('dataset-settings entry', () => { it('should render auto gen label with switch', () => { render() expect(screen.getByText(`${ns}.form.summaryAutoGen`)).toBeInTheDocument() }) it('should show disabled text when not enabled', () => { render( , ) expect(screen.getByText(`${ns}.form.summaryAutoGenEnableTip`)).toBeInTheDocument() }) it('should show enabled tip when enabled', () => { render( , ) expect(screen.getByText(`${ns}.form.summaryAutoGenTip`)).toBeInTheDocument() }) it('should show model selector and textarea when enabled', () => { render( , ) expect(screen.getByTestId('model-selector')).toBeInTheDocument() expect(screen.getByText(`${ns}.form.summaryModel`)).toBeInTheDocument() }) }) describe('create-document entry', () => { it('should render auto gen label with switch', () => { render() expect(screen.getByText(`${ns}.form.summaryAutoGen`)).toBeInTheDocument() }) it('should show model selector and textarea when enabled', () => { render( , ) expect(screen.getByTestId('model-selector')).toBeInTheDocument() expect(screen.getByText(`${ns}.form.summaryModel`)).toBeInTheDocument() expect(screen.getByText(`${ns}.form.summaryInstructions`)).toBeInTheDocument() }) it('should not show model selector when disabled', () => { render( , ) expect(screen.queryByTestId('model-selector')).not.toBeInTheDocument() }) }) describe('readonly mode', () => { it('should pass readonly to model selector in knowledge-base entry', () => { render( , ) expect(screen.getByTestId('model-selector')).toHaveAttribute('data-readonly', 'true') }) it('should disable textarea in readonly mode', () => { render( , ) const textarea = screen.getByPlaceholderText(`${ns}.form.summaryInstructionsPlaceholder`) expect(textarea).toBeDisabled() }) }) describe('model config derivation', () => { it('should pass correct defaultModel when provider and model are set', () => { render( , ) expect(screen.getByTestId('current-model')).toHaveTextContent('claude-3') }) it('should pass undefined defaultModel when provider is missing', () => { render( , ) expect(screen.getByTestId('current-model')).toHaveTextContent('none') }) }) })