63 lines
2.7 KiB
JavaScript
63 lines
2.7 KiB
JavaScript
// @ts-check
|
||
// Hotspot: Ereignisliste über alle Bereiche (Issue #165).
|
||
//
|
||
// Die Liste zeigt nicht mehr nur den Nextcloud-Import, sondern auch Fehler und
|
||
// Warnungen aus dem übrigen System. Der Weg „Fehlermeldung im Browser → Eintrag
|
||
// in der Ereignisliste“ führt über eine Weiterleitung mit Flash-Meldung und ist
|
||
// deshalb nur mit Browser prüfbar; die Speicherlogik selbst deckt
|
||
// tests/81_EreignisseAlleFehlerTest.php ab.
|
||
//
|
||
// Die Tests legen keine Geschäftsdaten an. Ein Aufruf einer ungültigen URL
|
||
// erzeugt einen Protokolleintrag – genau das ist der geprüfte Effekt.
|
||
|
||
const { test, expect } = require('@playwright/test')
|
||
const { gotoOk } = require('../helpers/app')
|
||
|
||
test.describe('Ereignisse', () => {
|
||
test('Übersicht listet alle Bereiche und bietet Filter', async ({ page }) => {
|
||
await gotoOk(page, '/ereignisse')
|
||
|
||
await expect(page.locator('select[name="channel"]')).toHaveCount(1)
|
||
await expect(page.locator('select[name="level"]')).toHaveCount(1)
|
||
await expect(page.locator('#events-autoreload-toggle')).toHaveCount(1)
|
||
await expect(page.locator('select[name="channel"] option[value=""]')).toContainText('Alle Bereiche')
|
||
})
|
||
|
||
test('Der alte Nextcloud-Pfad landet auf der gefilterten Übersicht', async ({ page }) => {
|
||
await page.goto('/ereignisse/nextcloud-import')
|
||
const url = new URL(page.url())
|
||
expect(url.pathname).toBe('/ereignisse')
|
||
expect(url.searchParams.get('channel')).toBe('nextcloud-import')
|
||
await expect(page.locator('select[name="channel"]')).toHaveValue('nextcloud-import')
|
||
})
|
||
|
||
test('Eine Fehlermeldung aus dem Browser erscheint in der Ereignisliste', async ({ page }) => {
|
||
// Erzeugt garantiert eine Fehlermeldung samt Weiterleitung (Issue #167).
|
||
await page.goto('/dashboard/buchungen/unsinn/2026')
|
||
await expect(page.locator('body')).toContainText('Unbekannte Auswertung.')
|
||
|
||
await gotoOk(page, '/ereignisse?level=error')
|
||
await expect(page.locator('body')).toContainText('Unbekannte Auswertung.')
|
||
await expect(page.locator('body')).toContainText('[meldungen]')
|
||
})
|
||
|
||
test('Filter nach Schweregrad blendet Infos aus', async ({ page }) => {
|
||
await gotoOk(page, '/ereignisse?level=error')
|
||
await expect(page.locator('select[name="level"]')).toHaveValue('error')
|
||
|
||
const zeilen = page.locator('#events-body table tbody tr')
|
||
const anzahl = await zeilen.count()
|
||
for (let i = 0; i < Math.min(anzahl, 10); i++) {
|
||
await expect(zeilen.nth(i)).toContainText('Fehler')
|
||
}
|
||
})
|
||
|
||
test('Der Daten-Endpunkt liefert dieselbe gefilterte Liste als JSON', async ({ page }) => {
|
||
const antwort = await page.request.get('/ereignisse/data?level=error')
|
||
expect(antwort.status()).toBe(200)
|
||
|
||
const daten = await antwort.json()
|
||
expect(typeof daten.count).toBe('number')
|
||
expect(typeof daten.html).toBe('string')
|
||
})
|
||
})
|