kammer/e2e/specs/pages/locations.spec.ts
Christopher Mühl 307ef24b78 test: E2E test suite + handoff documentation
50 Playwright E2E tests across 13 spec files covering all routes and
user flows (items CRUD, check-out/in, locations, labels, scanning,
search/filter). Uses vitest as runner with playwright-core for browser
automation (bun-compatible alternative to @playwright/test).

Includes Gherkin .feature files as living documentation, test support
infrastructure (IDB seeding, item factories, assertion helpers, layout
measurement), and HANDOFF.md covering project state, deployment, and
open design decisions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 20:53:08 +01:00

56 lines
2 KiB
TypeScript

/**
* @feature Locations
* @see e2e/features/pages/locations.feature
*/
import { describe, test } from 'vitest';
import { setupBrowser } from '../../support/browser';
import { waitForAppReady, seedItems } from '../../support/seed';
import { buildItemAtLocation } from '../../support/item-factory';
import { expectVisible, expectText } from '../../support/expect';
const { getPage } = setupBrowser();
describe('Locations', () => {
test('location tree shows default locations', async () => {
const page = getPage();
await page.goto('/locations');
await waitForAppReady(page);
await expectText(page.getByRole('heading', { level: 1 }), 'Places');
await expectVisible(page.getByText('Home'));
});
test('placeholder shown when no location selected', async () => {
const page = getPage();
await page.goto('/locations');
await waitForAppReady(page);
await expectVisible(page.getByText('Select a location to view items'));
});
test('selecting a location shows its items', async () => {
const page = getPage();
const item = buildItemAtLocation('kueche', { name: 'Blender' });
await page.goto('/');
await waitForAppReady(page);
await seedItems(page, [item]);
await page.goto('/locations');
await waitForAppReady(page);
// Expand Erdgeschoss (click toggle, not the location name) to reveal Küche
await page.locator('.select-none').filter({ hasText: 'Erdgeschoss' }).getByLabel('Expand').click();
await page.getByText('Küche').click();
await expectVisible(page.getByText('Blender'));
});
test('empty location shows placeholder', async () => {
const page = getPage();
await page.goto('/locations');
await waitForAppReady(page);
// Expand Keller (click toggle, not the location name) to reveal Werkstatt
await page.locator('.select-none').filter({ hasText: 'Keller' }).getByLabel('Expand').click();
await page.getByText('Werkstatt').click();
await expectVisible(page.getByText('No items here'));
});
});