mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-18 07:43:00 -07:00
108 lines
2.5 KiB
TypeScript
108 lines
2.5 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
import { renderWithProviders } from '../../../test-utils/render.js';
|
|
import {
|
|
DescriptiveRadioButtonSelect,
|
|
type DescriptiveRadioSelectItem,
|
|
type DescriptiveRadioButtonSelectProps,
|
|
} from './DescriptiveRadioButtonSelect.js';
|
|
|
|
vi.mock('./BaseSelectionList.js', async (importOriginal) => {
|
|
const actual =
|
|
await importOriginal<typeof import('./BaseSelectionList.js')>();
|
|
return {
|
|
...actual,
|
|
BaseSelectionList: vi.fn(({ children, ...props }) => (
|
|
<actual.BaseSelectionList {...props}>{children}</actual.BaseSelectionList>
|
|
)),
|
|
};
|
|
});
|
|
|
|
vi.mock('../../semantic-colors.js', () => ({
|
|
theme: {
|
|
text: {
|
|
primary: 'COLOR_PRIMARY',
|
|
secondary: 'COLOR_SECONDARY',
|
|
},
|
|
ui: {
|
|
focus: 'COLOR_FOCUS',
|
|
},
|
|
background: {
|
|
focus: 'COLOR_FOCUS_BG',
|
|
},
|
|
status: {
|
|
success: 'COLOR_SUCCESS',
|
|
},
|
|
},
|
|
}));
|
|
|
|
describe('DescriptiveRadioButtonSelect', () => {
|
|
const mockOnSelect = vi.fn();
|
|
const mockOnHighlight = vi.fn();
|
|
|
|
const ITEMS: Array<DescriptiveRadioSelectItem<string>> = [
|
|
{
|
|
title: 'Foo Title',
|
|
description: 'This is Foo.',
|
|
value: 'foo',
|
|
key: 'foo',
|
|
},
|
|
{
|
|
title: 'Bar Title',
|
|
description: 'This is Bar.',
|
|
value: 'bar',
|
|
key: 'bar',
|
|
},
|
|
{
|
|
title: 'Baz Title',
|
|
description: 'This is Baz.',
|
|
value: 'baz',
|
|
disabled: true,
|
|
key: 'baz',
|
|
},
|
|
];
|
|
|
|
const renderComponent = async (
|
|
props: Partial<DescriptiveRadioButtonSelectProps<string>> = {},
|
|
) => {
|
|
const defaultProps: DescriptiveRadioButtonSelectProps<string> = {
|
|
items: ITEMS,
|
|
onSelect: mockOnSelect,
|
|
...props,
|
|
};
|
|
const result = await renderWithProviders(
|
|
<DescriptiveRadioButtonSelect {...defaultProps} />,
|
|
);
|
|
await result.waitUntilReady();
|
|
return result;
|
|
};
|
|
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it('should render correctly with default props', async () => {
|
|
const { lastFrame, unmount } = await renderComponent();
|
|
expect(lastFrame()).toMatchSnapshot();
|
|
unmount();
|
|
});
|
|
|
|
it('should render correctly with custom props', async () => {
|
|
const { lastFrame, unmount } = await renderComponent({
|
|
initialIndex: 1,
|
|
isFocused: false,
|
|
showScrollArrows: true,
|
|
maxItemsToShow: 5,
|
|
showNumbers: true,
|
|
onHighlight: mockOnHighlight,
|
|
});
|
|
expect(lastFrame()).toMatchSnapshot();
|
|
unmount();
|
|
});
|
|
});
|