Skip to content

Commit 32cd31e

Browse files
committed
test(customize): add additional coverage for ThemeSelector component
1 parent 0587e7f commit 32cd31e

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

app/customize/components/ThemeSelector.test.tsx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { describe, it, expect, vi, afterEach } from 'vitest';
22
import { render, screen } from '@testing-library/react';
33
import { ThemeSelector } from './ThemeSelector';
44
import { THEME_KEYS } from '../types';
5+
import userEvent from '@testing-library/user-event';
56

67
describe('ThemeSelector', () => {
78
const onThemeChange = vi.fn();
@@ -40,4 +41,35 @@ describe('ThemeSelector', () => {
4041
render(<ThemeSelector theme="dark" onThemeChange={onThemeChange} />);
4142
screen.getByText(/bg · accent · text/i);
4243
});
44+
45+
it('renders the Shuffle button', () => {
46+
render(<ThemeSelector theme="dark" onThemeChange={onThemeChange} />);
47+
expect(screen.getByTitle('Pick a random theme')).toBeTruthy();
48+
});
49+
50+
it('clicking Shuffle calls onThemeChange with a valid theme key', async () => {
51+
const user = userEvent.setup();
52+
render(<ThemeSelector theme="dark" onThemeChange={onThemeChange} />);
53+
const shuffleBtn = screen.getByTitle('Pick a random theme');
54+
await user.click(shuffleBtn);
55+
expect(onThemeChange).toHaveBeenCalledTimes(1);
56+
const calledWith = onThemeChange.mock.calls[0][0];
57+
expect(THEME_KEYS).toContain(calledWith);
58+
expect(calledWith).not.toBe('auto');
59+
expect(calledWith).not.toBe('random');
60+
});
61+
62+
it('changing the select calls onThemeChange with the selected value', async () => {
63+
const user = userEvent.setup();
64+
render(<ThemeSelector theme="dark" onThemeChange={onThemeChange} />);
65+
const select = screen.getByRole('combobox');
66+
await user.selectOptions(select, 'neon');
67+
expect(onThemeChange).toHaveBeenCalledWith('neon');
68+
});
69+
70+
it('renders color swatches for a normal theme', () => {
71+
render(<ThemeSelector theme="dark" onThemeChange={onThemeChange} />);
72+
const swatches = screen.getAllByTitle(/^(bg|accent|text):/i);
73+
expect(swatches.length).toBe(3);
74+
});
4375
});

0 commit comments

Comments
 (0)