/**
* Unit tests for the stoppable Stop button affordance in DefaultPromptInput.
*
* Strategy: test DefaultPromptInput (the Solid component) directly — the
* defineWebComponent custom element requires a full browser environment
* (Constructable Stylesheets, shadow roots) unsuitable for jsdom.
* This mirrors the pattern in prompt-suggestions.declarative.test.tsx.
*/
import { describe, it, expect, vi, afterEach } from 'vitest';
import '@testing-library/jest-dom/vitest';
import { render, cleanup, fireEvent } from '@solidjs/testing-library';
import { DefaultPromptInput } from './default-input';
afterEach(cleanup);
const noop = () => {};
const baseProps = {
value: '',
onValueChange: noop,
onSubmit: noop,
onSuggestionClick: noop,
};
describe('DefaultPromptInput stoppable Stop button', () => {
it('renders the send button (not Stop) when loading=false stoppable=false', () => {
const { getByTestId, queryByTestId } = render(() => (
));
expect(getByTestId('send')).toBeInTheDocument();
expect(queryByTestId('stop')).not.toBeInTheDocument();
});
it('renders the send button (not Stop) when stoppable=true but loading=false', () => {
const { getByTestId, queryByTestId } = render(() => (
));
expect(getByTestId('send')).toBeInTheDocument();
expect(queryByTestId('stop')).not.toBeInTheDocument();
});
it('renders the send button (not Stop) when loading=true but stoppable=false', () => {
const { getByTestId, queryByTestId } = render(() => (
));
expect(getByTestId('send')).toBeInTheDocument();
expect(queryByTestId('stop')).not.toBeInTheDocument();
});
it('renders the Stop button (not send) when both loading=true and stoppable=true', () => {
const { getByTestId, queryByTestId } = render(() => (
));
expect(getByTestId('stop')).toBeInTheDocument();
expect(queryByTestId('send')).not.toBeInTheDocument();
});
it('Stop button has accessible label "Stop"', () => {
const { getByLabelText } = render(() => (
));
expect(getByLabelText('Stop')).toBeInTheDocument();
});
it('clicking the Stop button calls onStop', () => {
const onStop = vi.fn();
const { getByTestId } = render(() => (
));
fireEvent.click(getByTestId('stop'));
expect(onStop).toHaveBeenCalledOnce();
});
it('clicking the Stop button does NOT call onSubmit', () => {
const onSubmit = vi.fn();
const onStop = vi.fn();
const { getByTestId } = render(() => (
));
fireEvent.click(getByTestId('stop'));
expect(onSubmit).not.toHaveBeenCalled();
});
});