feat/e2e-testing (#31)
🚀 Release / release (push) Successful in 4m7s

Reviewed-on: #31
Co-authored-by: Max Richter <max@max-richter.dev>
Co-committed-by: Max Richter <max@max-richter.dev>
This commit was merged in pull request #31.
This commit is contained in:
2026-02-03 22:29:43 +01:00
committed by max_richter
parent 01f1568221
commit 91866b4e9a
37 changed files with 1262 additions and 112 deletions
@@ -0,0 +1,27 @@
import { describe, expect, it } from 'vitest';
import { render } from 'vitest-browser-svelte';
import { page } from 'vitest/browser';
import InputCheckbox from './InputCheckbox.svelte';
describe('InputCheckbox', () => {
it('should render checkbox label', async () => {
render(InputCheckbox, { value: false });
const checkbox = page.getByRole('checkbox');
await expect.element(checkbox).toBeInTheDocument();
});
it('should be unchecked when value is false', async () => {
render(InputCheckbox, { value: false });
const input = page.getByRole('checkbox');
await expect.element(input).not.toBeChecked();
});
it('should be checked when value is true', async () => {
render(InputCheckbox, { value: true });
const input = page.getByRole('checkbox');
await expect.element(input).toBeChecked();
});
});
@@ -0,0 +1,45 @@
import { describe, expect, it } from 'vitest';
import { render } from 'vitest-browser-svelte';
import { page } from 'vitest/browser';
import InputNumber from './InputNumber.svelte';
describe('InputNumber', () => {
it('should render input element', async () => {
render(InputNumber, { value: 0.5 });
const input = page.getByRole('spinbutton');
await expect.element(input).toBeInTheDocument();
});
it('should render with step buttons when step is provided', async () => {
render(InputNumber, { value: 0.5, step: 0.1 });
const decrementBtn = page.getByRole('button', { name: 'step down' });
const incrementBtn = page.getByRole('button', { name: 'step up' });
await expect.element(decrementBtn).toBeInTheDocument();
await expect.element(incrementBtn).toBeInTheDocument();
});
it('should not render step buttons when step is undefined', async () => {
const screen = render(InputNumber, { value: 0.5 });
const buttons = screen.locator.getByRole('button');
const count = buttons.all().length;
expect(count).toBe(0);
});
it('should accept numeric value', async () => {
render(InputNumber, { value: 42 });
const input = page.getByRole('spinbutton');
await expect.element(input).toHaveValue(42);
});
it('should accept min and max bounds', async () => {
render(InputNumber, { value: 5, min: 0, max: 10 });
const input = page.getByRole('spinbutton');
await expect.element(input).toHaveAttribute('min', '0');
await expect.element(input).toHaveAttribute('max', '10');
});
});
@@ -0,0 +1,27 @@
import { describe, expect, it } from 'vitest';
import { render } from 'vitest-browser-svelte';
import { page } from 'vitest/browser';
import InputSelect from './InputSelect.svelte';
describe('InputSelect', () => {
it('should render select element', async () => {
render(InputSelect, { options: ['a', 'b', 'c'], value: 0 });
const select = page.getByRole('combobox');
await expect.element(select).toBeInTheDocument();
});
it('should render all options', async () => {
render(InputSelect, { options: ['apple', 'banana', 'cherry'], value: 0 });
const select = page.getByRole('combobox');
await expect.element(select).toHaveTextContent('applebananacherry');
});
it('should select correct option by index', async () => {
render(InputSelect, { options: ['first', 'second', 'third'], value: 1 });
const select = page.getByRole('combobox');
await expect.element(select).toHaveTextContent('second');
});
});
@@ -0,0 +1,26 @@
import { describe, expect, it } from 'vitest';
import { render } from 'vitest-browser-svelte';
import { page } from 'vitest/browser';
import InputVec3 from './InputVec3.svelte';
describe('InputVec3', () => {
it('should render with correct initial values', async () => {
const value = $state([1.5, 2.5, 3.5]);
render(InputVec3, { value });
const inputs = page.getByRole('spinbutton');
await expect.element(inputs.first()).toBeInTheDocument();
expect(inputs.nth(0)).toHaveValue(1.5);
expect(inputs.nth(1)).toHaveValue(2.5);
expect(inputs.nth(2)).toHaveValue(3.5);
});
it('should have step attribute', async () => {
const value = $state([0, 0, 0]);
render(InputVec3, { value });
const input = page.getByRole('spinbutton').first();
await expect.element(input).toHaveAttribute('step', '0.01');
});
});