diff --git a/src/lib/components/CompletedToggle.svelte.test.ts b/src/lib/components/CompletedToggle.svelte.test.ts new file mode 100644 index 0000000..e1c86b2 --- /dev/null +++ b/src/lib/components/CompletedToggle.svelte.test.ts @@ -0,0 +1,54 @@ +import { render } from 'vitest-browser-svelte'; +import { page } from 'vitest/browser'; +import { describe, expect, it, vi, beforeEach } from 'vitest'; +import CompletedToggle from './CompletedToggle.svelte'; + +describe('CompletedToggle', () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it('renders the toggle checkbox', async () => { + render(CompletedToggle); + + const checkbox = page.getByRole('checkbox'); + await expect.element(checkbox).toBeInTheDocument(); + }); + + it('renders "Show completed" label text', async () => { + render(CompletedToggle); + + const label = page.getByText('Show completed'); + await expect.element(label).toBeInTheDocument(); + }); + + it('renders checkbox in unchecked state by default', async () => { + render(CompletedToggle); + + const checkbox = page.getByRole('checkbox'); + await expect.element(checkbox).not.toBeChecked(); + }); + + it('checkbox becomes checked when clicked', async () => { + render(CompletedToggle); + + const checkbox = page.getByRole('checkbox'); + await expect.element(checkbox).not.toBeChecked(); + + await checkbox.click(); + + await expect.element(checkbox).toBeChecked(); + }); + + it('has accessible label with correct text', async () => { + render(CompletedToggle); + + // Verify the label has the correct text and is associated with the checkbox + const label = page.getByText('Show completed'); + await expect.element(label).toBeInTheDocument(); + + // The label should be a