test(ChangeAppTheme): cover theme switcher component with tests
This commit is contained in:
@@ -0,0 +1,56 @@
|
|||||||
|
import {
|
||||||
|
fireEvent,
|
||||||
|
render,
|
||||||
|
screen,
|
||||||
|
} from '@testing-library/svelte';
|
||||||
|
import { themeManager } from '../../model';
|
||||||
|
import ThemeSwitch from './ThemeSwitch.svelte';
|
||||||
|
|
||||||
|
const context = new Map([['responsive', { isMobile: false }]]);
|
||||||
|
|
||||||
|
describe('ThemeSwitch', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
themeManager.setTheme('light');
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Rendering', () => {
|
||||||
|
it('renders an icon button', () => {
|
||||||
|
render(ThemeSwitch, { context });
|
||||||
|
expect(screen.getByRole('button')).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('has "Toggle theme" title', () => {
|
||||||
|
render(ThemeSwitch, { context });
|
||||||
|
expect(screen.getByTitle('Toggle theme')).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('renders an SVG icon', () => {
|
||||||
|
const { container } = render(ThemeSwitch, { context });
|
||||||
|
expect(container.querySelector('svg')).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Interaction', () => {
|
||||||
|
it('toggles theme from light to dark on click', async () => {
|
||||||
|
render(ThemeSwitch, { context });
|
||||||
|
expect(themeManager.value).toBe('light');
|
||||||
|
await fireEvent.click(screen.getByRole('button'));
|
||||||
|
expect(themeManager.value).toBe('dark');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('toggles theme from dark to light on click', async () => {
|
||||||
|
themeManager.setTheme('dark');
|
||||||
|
render(ThemeSwitch, { context });
|
||||||
|
await fireEvent.click(screen.getByRole('button'));
|
||||||
|
expect(themeManager.value).toBe('light');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('double click returns to original theme', async () => {
|
||||||
|
render(ThemeSwitch, { context });
|
||||||
|
const btn = screen.getByRole('button');
|
||||||
|
await fireEvent.click(btn);
|
||||||
|
await fireEvent.click(btn);
|
||||||
|
expect(themeManager.value).toBe('light');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user