Skip to content
Back to skills

Pulse E2e

ASecurity

Dashboard-Workflows von Pulse im echten Browser (Playwright, headless) testen oder neue E2E-Tests schreiben – Seite öffnen, Formular ausfüllen, speichern, Ergebnis und Persistenz prüfen, Desktop und Mobil. Verwenden bei UI-/Formular-/Routenänderungen im Dashboard oder wenn ein E2E-Test fehlt.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
developmentpythongofastapigitapibackend

Works with

  • cli
  • api
  • mcp

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned November 7, 2026

npx -y skills add NicoPinguinDEV/Pulse --skill pulse-e2e --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pulse E2e?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Pulse E2e
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nicopinguindev-pulse-e2e/badge)](https://www.skillsdirectory.com/skills/nicopinguindev-pulse-e2e)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: pulse-e2e
description: Dashboard-Workflows von Pulse im echten Browser (Playwright, headless) testen oder neue E2E-Tests schreiben – Seite öffnen, Formular ausfüllen, speichern, Ergebnis und Persistenz prüfen, Desktop und Mobil. Verwenden bei UI-/Formular-/Routenänderungen im Dashboard oder wenn ein E2E-Test fehlt.
argument-hint: [run | neuer Workflow, z. B. "Teamrollen speichern"]
disable-model-invocation: true
---

# Pulse-E2E (Playwright)

## Umgebung
- Einmalig: `python -m pip install --require-hashes -r requirements-dev.lock` (gepinnt, wie CI) und `python -m playwright install chromium`.
- Server: `tools/preview_server.py` – echte FastAPI-App, Fake-Guild (`tests/fakes.py`), Fake-Login (`--role admin|team`), temporäre Daten, bindet nur 127.0.0.1, **kein Discord, kein OAuth**.
- Referenztest: `tests/test_e2e_dashboard.py` – Basisklasse `_PreviewE2EBase` (Server als Subprozess auf freiem Port mit `--e2e-hooks`, `TMP` auf TemporaryDirectory, Serverausgabe in eine Logdatei statt PIPE, externe Requests per `context.route` blockiert, `PULSE_GITHUB_REPO=""`). Neue Klasse = eigener Server; `ROLE = "team"` für Rechte-Tests. Gespeicherte Werte über `self._config()` direkt prüfen.
- Serverfehler: `POST /__preview/maintenance {"on": true}` (echter Restore-Sperrmodus → 503) und `GET /__preview/fail` (echte 500-Seite). Immer per `addCleanup` zurücksetzen. Client-Fehler (API 500, Netzwerk weg) per `page.route(...).fulfill/abort`.

## Ausführen
```
PULSE_E2E=1 python -m unittest tests.test_e2e_dashboard -v
```
Ohne `PULSE_E2E=1` wird bei fehlendem Playwright übersprungen (normale CI/unittest discovery). Der CI-Job `e2e` in `.github/workflows/python-syntax.yml` setzt `PULSE_E2E=1`.

## Neuen Workflow-Test schreiben
1. **Aktive Route klären:** `pulse_pro.py` überschreibt viele Seiten (z. B. `/settings` → Formular an `/settings/pro-goal`). Im gerenderten HTML prüfen, welches `form action` wirklich ausgeliefert wird – nicht im ersten Treffer in `webserver.py`.
2. **Locator** über `form[action="…"]` + `name`-Attribute oder Rolle/Beschriftung, keine CSS-Klassen (Tailwind ändert sich).
3. **Ablauf:** `goto` → Status 200 → ausfüllen → `with page.expect_navigation(): click()` → Erfolgsmeldung im `#toast[role=status]` (Fehler: `role=alert`). Die URL verliert `?msg=…` per `history.replaceState`, also nicht auf die URL prüfen.
4. **Persistenz:** Seite neu laden und gespeicherten Wert prüfen.
5. **Negativfall:** Browser-Validierung (`min/max/required`) per `evaluate` entfernen und prüfen, dass der Server selbst ablehnt/begrenzt und **nichts Ungültiges gespeichert** wird. Für Rechte: `--role team` auf Admin-Seite → 403, keine Änderung.
6. **Mobil:** `viewport 375×812, is_mobile=True` und `scrollWidth - innerWidth <= 1` (kein horizontaler Überlauf).
7. `page.on("pageerror")` sammeln und am Ende `[]` erwarten.
8. Tests unabhängig von der Reihenfolge halten (alle Tests einer Klasse teilen einen Server).

## Grenzen
Keine Tests gegen den VPS, Produktions-URLs oder echte Discord-Logins. Ergebnis ehrlich berichten (bestanden/fehlgeschlagen/übersprungen + Grund).
- Nicht bei jedem kleinen Backend-Fix laufen lassen – nur bei Dashboard-/Formular-/Routenänderungen; sonst `/pulse-verify targeted`.
- Warten über `expect`/`wait_for_*`, nie feste `sleep`s. Für lange Seiten auch Scrollposition nach Speichern prüfen.
- Der Test-Server muss im `tearDownClass`/`finally` beendet werden; danach keinen laufenden Prozess auf dem Port zurücklassen.
- Das Playwright-MCP-Plugin nur zum Erkunden/Debuggen nutzen; was dauerhaft gelten soll, gehört als Test in `tests/`.
- Fehlschlag dokumentieren: Test-ID, Schritt, erwarteter vs. tatsächlicher Zustand, `pageerror`-Ausgabe; Screenshots nur ins Scratch-/Temp-Verzeichnis.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.