import { render, screen } from '@testing-library/react';
import { describe, expect, it, vi } from 'vitest';
import { NewModelDialog } from '../NewModelDialog';
describe('NewModelDialog - ComfyUI workflow support', () => {
const mockOnClose = vi.fn();
const mockOnAddModel = vi.fn();
const mockOnSelectDefaultModel = vi.fn();
const mockOnModelFormChange = vi.fn();
const mockOnFeatureChange = vi.fn();
const defaultProps = {
open: true,
onClose: mockOnClose,
onAddModel: mockOnAddModel,
currentProvider: 'comfyui',
providerClass: 'comfyui',
newModelForm: {
name: 'flux',
caption: 'Flux',
features: ['imageGeneration' as const],
parameters: {},
},
availableDefaultModels: [],
selectedDefaultModel: '',
onSelectDefaultModel: mockOnSelectDefaultModel,
onModelFormChange: mockOnModelFormChange,
onFeatureChange: mockOnFeatureChange,
editMode: false,
};
it('should show workflow file input for ComfyUI provider', async () => {
render();
// ComfyUI should show workflow file input
expect(await screen.findByTestId('workflow-path-input')).toBeInTheDocument();
expect(await screen.findByTestId('select-workflow-button')).toBeInTheDocument();
});
it('should not show workflow file input for non-ComfyUI providers', async () => {
render(
,
);
// Non-ComfyUI providers should not show workflow input
expect(screen.queryByTestId('workflow-path-input')).not.toBeInTheDocument();
expect(screen.queryByTestId('select-workflow-button')).not.toBeInTheDocument();
});
it('should render workflow input correctly for ComfyUI', async () => {
render();
// data-testid is on the input element itself via slotProps.htmlInput
const workflowInput = await screen.findByTestId('workflow-path-input');
expect(workflowInput).toBeInTheDocument();
expect(workflowInput).toHaveAttribute('type', 'text');
});
it('should render browse button for ComfyUI', async () => {
render();
const browseButton = await screen.findByTestId('select-workflow-button');
expect(browseButton).toBeInTheDocument();
expect(browseButton).toHaveTextContent('Preference.Browse');
});
it('should display existing workflow path in edit mode', async () => {
render(
,
);
const workflowInput = await screen.findByTestId('workflow-path-input');
expect(workflowInput).toHaveValue('C:\\existing\\workflow.json');
});
it('should show Update button in edit mode', async () => {
render();
expect(await screen.findByText('Update')).toBeInTheDocument();
});
it('should show Save button in add mode', async () => {
render();
expect(await screen.findByText('Save')).toBeInTheDocument();
});
});