Steuerkram/tests/e2e/specs/smoke.spec.js
fds2610-bot 7cea573ffc Fix #e2e: E2E-Tests ergänzt, /accounts/new und /assets/new lieferten HTTP 500
Steuerkram an den e2e-runner angebunden (tests/e2e/, 44 Playwright-Tests).
Der erste Smoke-Lauf fand zwei Seiten mit HTTP 500: AccountController::create
las $_GET['from'] ungeprüft, assets/form.php nutzte $testMode und
$defaultKontoId außerhalb des Bearbeiten-Zweigs. Beides war bis zur
Fehler-Härtung (#142) nur eine stille Warning.

Test 67 räumt sein Belegverzeichnis jetzt mit ab - es blieb als root-eigenes
Verzeichnis liegen und blockierte spätere echte Uploads mit HTTP 500.

Test 77 (neu) sichert die Löschsperre von Beleg::delete() ab.
2026-08-02 11:58:33 +02:00

79 lines
2.9 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// @ts-check
// Smoke-Tests: Jede Hauptseite muss ohne Serverfehler rendern.
//
// Diese Ebene fehlte bisher komplett — die PHP-Testsuite prüft Models und
// Services, aber nie das Zusammenspiel aus Router, Controller, View und
// Layout. Genau dort schlugen zuletzt Fehler nach Updates auf.
const { test, expect } = require('@playwright/test')
const { gotoOk, expectNoServerError } = require('../helpers/app')
const jahr = new Date().getFullYear()
const monat = String(new Date().getMonth() + 1).padStart(2, '0')
/** Lesende Seiten, die ohne Vorbedingungen erreichbar sein müssen. */
const seiten = [
['Dashboard', '/'],
['Dashboard (explizit)', '/dashboard'],
['Kontenrahmen', '/accounts'],
['Konto anlegen', '/accounts/new'],
['Belegliste', '/belege'],
['Beleg hochladen', '/belege/upload'],
['Bank buchen', '/bank'],
['Bank – Direktabruf', '/bank/direkt'],
['Bank – Upload', '/bank/upload'],
['Journal', '/journal'],
['Lieferanten', '/suppliers'],
['Lieferant anlegen', '/suppliers/new'],
['Kunden', '/customers'],
['Kunde anlegen', '/customers/new'],
['Rechnungen', '/invoices'],
['Rechnung anlegen', '/invoices/new'],
['Anlagevermögen', '/assets'],
['Anlage anlegen', '/assets/new'],
['UStVA', '/tax/ustva'],
['UStVA – Monat', `/tax/ustva/${jahr}/${monat}`],
['EÜR', '/tax/euer'],
['EÜR – Jahr', `/tax/euer/${jahr}`],
['Einstellungen', '/settings'],
['Einstellungen – Bankimport', '/settings/bankimport'],
['Buchungsvorlagen', '/einstellungen/buchungsvorlagen'],
['Buchungsvorlage anlegen', '/einstellungen/buchungsvorlagen/neu'],
['Ereignisse', '/ereignisse'],
['Benutzerverwaltung', '/useradmin'],
]
test.describe('Smoke: Hauptseiten rendern', () => {
for (const [name, pfad] of seiten) {
test(`${name} (${pfad})`, async ({ page }) => {
await gotoOk(page, pfad)
// Das Layout muss stehen — sonst ist die Seite nur halb gerendert.
await expect(page.locator('nav, .nav, #nav').first()).toBeVisible()
})
}
})
test.describe('Smoke: Grundverhalten', () => {
test('Unbekannte Route liefert 404 statt Serverfehler', async ({ page }) => {
const response = await page.goto('/gibt-es-nicht-e2e')
expect(response.status()).toBe(404)
await expectNoServerError(page)
})
test('Nicht angemeldet führt zum Login', async ({ browser }) => {
// Eigener Kontext ohne gespeicherten Session-Zustand.
const context = await browser.newContext({ storageState: { cookies: [], origins: [] } })
const page = await context.newPage()
await page.goto('/belege')
await expect(page).toHaveURL(/\/login/)
await expect(page.locator('#username')).toBeVisible()
await context.close()
})
test('CSV-Export der Belegliste liefert eine Datei', async ({ page }) => {
const response = await page.request.get('/belege/export')
expect(response.status()).toBe(200)
const disposition = response.headers()['content-disposition'] || ''
expect(disposition).toContain('attachment')
})
})