test: smoke-test gegen das docker-image, dazu die doku zu phase 2
Der Dev-Server verlor unter der Last eines ganzen Durchlaufs reproduzierbar Chunks (ChunkLoadError beim Laden von app/layout), was sich weder durch Aufwaermen noch durch laengere Zeitlimits stabilisieren liess. Der Smoke-Test faehrt jetzt - wie der Screenshot-Lauf schon vorher - das Produktions-Image hoch. Ergebnis: 29 Sekunden statt fuenf Minuten, keine Aussetzer, und getestet wird genau das Artefakt, das spaeter deployt wird. Dabei behoben: Der Fehlteile-Dialog hielt eine Kopie der Liste aus dem Moment des Oeffnens und zeigte ein gerade hinzugefuegtes Teil nicht an. Er liest jetzt den aktuellen Eintrag aus den Props statt aus dem Zustand. Gefunden hat das der erweiterte Screenshot-Lauf. Dokumentation zu Phase 2: Changelog 0.2.0, Roadmap abgehakt, Devlog mit Zeiten, CLAUDE.md um die neuen Module und Testkonventionen ergaenzt und die Anleitung um fuenf Kapitel (Import, Scanner, Fehlteile, Einladungen, Daten, Startbildschirm) - mit vier neuen, automatisch erzeugten Bildern. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,13 +0,0 @@
|
||||
import { execFileSync } from 'node:child_process';
|
||||
|
||||
/**
|
||||
* Migrates the smoke-test database. The directory itself is wiped earlier by
|
||||
* scripts/reset-e2e.mjs, because Playwright starts its web server before this
|
||||
* hook runs and the open database file would block the delete on Windows.
|
||||
*/
|
||||
export default function globalSetup() {
|
||||
execFileSync('node', ['node_modules/tsx/dist/cli.mjs', 'scripts/migrate.ts'], {
|
||||
stdio: 'inherit',
|
||||
env: { ...process.env, DATA_DIR: './data-e2e' },
|
||||
});
|
||||
}
|
||||
@@ -127,4 +127,37 @@ test('Screenshots fuer die Anleitung', async ({ page, browser }) => {
|
||||
await visit(page, '/konto');
|
||||
await expect(page.getByText('Passkeys', { exact: true })).toBeVisible();
|
||||
await shoot(page, '16-konto-passkeys');
|
||||
|
||||
// --- 12. Lego import ------------------------------------------------------
|
||||
// The screenshot container runs with a placeholder API key so the manual
|
||||
// shows the form, not the "not configured" hint. Nothing is submitted.
|
||||
await visit(page, '/katalog/neu');
|
||||
await expect(page.getByText('Lego-Import')).toBeVisible();
|
||||
await shoot(page, '17-lego-import');
|
||||
|
||||
// --- 13. missing parts ----------------------------------------------------
|
||||
await visit(page, '/katalog?q=60398');
|
||||
await page.getByText('Familienhaus und Elektroauto').first().click();
|
||||
await expect(page.getByRole('heading', { name: 'Familienhaus und Elektroauto' })).toBeVisible();
|
||||
await page.getByRole('button', { name: 'Fehlteile' }).first().click();
|
||||
await expect(page.getByRole('dialog')).toBeVisible();
|
||||
await page.getByLabel('Teilenummer').fill('3001');
|
||||
await page.getByLabel('Farbe').fill('Rot');
|
||||
await page.getByRole('button', { name: 'Hinzufügen' }).click();
|
||||
await expect(page.getByText('3001')).toBeVisible();
|
||||
await page.screenshot({ path: shotPath('18-fehlteile') });
|
||||
await page.getByRole('button', { name: 'Fertig' }).click();
|
||||
|
||||
// --- 14. invitations ------------------------------------------------------
|
||||
await visit(page, '/verwaltung/einladungen');
|
||||
await expect(page.getByRole('button', { name: 'Einladung erstellen' })).toBeVisible();
|
||||
await page.getByRole('button', { name: 'Einladung erstellen' }).click();
|
||||
await expect(page.getByRole('dialog')).toBeVisible();
|
||||
await page.screenshot({ path: shotPath('19-einladungen') });
|
||||
await page.getByRole('button', { name: 'Abbrechen' }).click();
|
||||
|
||||
// --- 15. export and import ------------------------------------------------
|
||||
await visit(page, '/verwaltung/daten');
|
||||
await expect(page.getByText('Alles als ZIP')).toBeVisible();
|
||||
await shoot(page, '20-daten');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user