test(SampleList): add test coverage for LayoutSwitch component
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import {
|
||||
fireEvent,
|
||||
render,
|
||||
screen,
|
||||
waitFor,
|
||||
} from '@testing-library/svelte';
|
||||
import { layoutManager } from '../../model';
|
||||
import LayoutSwitch from './LayoutSwitch.svelte';
|
||||
|
||||
describe('LayoutSwitch', () => {
|
||||
beforeEach(() => {
|
||||
layoutManager.reset();
|
||||
});
|
||||
|
||||
describe('Rendering', () => {
|
||||
it('renders two icon buttons', () => {
|
||||
render(LayoutSwitch);
|
||||
expect(screen.getAllByRole('button')).toHaveLength(2);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Active state', () => {
|
||||
it('list button is active in list mode', () => {
|
||||
render(LayoutSwitch);
|
||||
const [listBtn] = screen.getAllByRole('button');
|
||||
expect(listBtn).toHaveClass('text-brand');
|
||||
});
|
||||
|
||||
it('grid button is not active in list mode', () => {
|
||||
render(LayoutSwitch);
|
||||
const [, gridBtn] = screen.getAllByRole('button');
|
||||
expect(gridBtn).not.toHaveClass('text-brand');
|
||||
});
|
||||
|
||||
it('grid button is active in grid mode', () => {
|
||||
layoutManager.setMode('grid');
|
||||
render(LayoutSwitch);
|
||||
const [, gridBtn] = screen.getAllByRole('button');
|
||||
expect(gridBtn).toHaveClass('text-brand');
|
||||
});
|
||||
|
||||
it('list button is not active in grid mode', () => {
|
||||
layoutManager.setMode('grid');
|
||||
render(LayoutSwitch);
|
||||
const [listBtn] = screen.getAllByRole('button');
|
||||
expect(listBtn).not.toHaveClass('text-brand');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Interaction', () => {
|
||||
it('clicking second button switches to grid mode', async () => {
|
||||
render(LayoutSwitch);
|
||||
expect(layoutManager.mode).toBe('list');
|
||||
await fireEvent.click(screen.getAllByRole('button')[1]);
|
||||
expect(layoutManager.mode).toBe('grid');
|
||||
});
|
||||
|
||||
it('clicking first button when in grid mode switches to list mode', async () => {
|
||||
layoutManager.setMode('grid');
|
||||
render(LayoutSwitch);
|
||||
await fireEvent.click(screen.getAllByRole('button')[0]);
|
||||
expect(layoutManager.mode).toBe('list');
|
||||
});
|
||||
|
||||
it('active button updates reactively after toggle', async () => {
|
||||
render(LayoutSwitch);
|
||||
const [listBtn, gridBtn] = screen.getAllByRole('button');
|
||||
await fireEvent.click(gridBtn);
|
||||
await waitFor(() => expect(gridBtn).toHaveClass('text-brand'));
|
||||
await waitFor(() => expect(listBtn).not.toHaveClass('text-brand'));
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user