208 lines
7.2 KiB
Markdown
208 lines
7.2 KiB
Markdown
# M1 Rekonstruierter Golden Master
|
|
|
|
Stand: 2026-07-12
|
|
|
|
Da kein alter MS-SQL-Datenbankstand verfügbar ist, wird M1 als rekonstruierter
|
|
Golden Master aufgebaut. Die Referenz entsteht aus Legacy-Code, Screenshots und
|
|
kontrollierten Testdaten in der MySQL-Dev-Datenbank.
|
|
|
|
## Ziel
|
|
|
|
Die wichtigsten fachlichen Regeln werden mit kleinen, nachvollziehbaren
|
|
Testfällen festgeschrieben. Diese Tests dienen später als Sicherheitsnetz für
|
|
die SaaS-Umstrukturierung.
|
|
|
|
## Testdaten-Gruppen
|
|
|
|
### Teilnehmer
|
|
|
|
- Aktives normales Mitglied.
|
|
- Aktiver Admin.
|
|
- Inaktives Mitglied.
|
|
- Mitglied mit PayPal-Namen.
|
|
- Mitglied ohne Buchungen.
|
|
|
|
### Buchungen
|
|
|
|
- Einzahlung mit positivem Betrag.
|
|
- Mehrere Einzahlungen an unterschiedlichen Tagen.
|
|
- Strichbuchung mit einem Strich.
|
|
- Strichbuchung mit zwei Strichen.
|
|
- Sammelerfassung für mehrere Teilnehmer.
|
|
- Web-Strich-Eintrag mit `Eintragsart = 2`.
|
|
|
|
### Salden
|
|
|
|
- Positiver Kontostand.
|
|
- Negativer Kontostand.
|
|
- Nullsaldo.
|
|
- Jahreswerte für aktuelles Jahr.
|
|
- Altdaten aus Vorjahr, die nicht in Jahreswerte fallen.
|
|
|
|
### CSV-Import
|
|
|
|
- Treffer über Name.
|
|
- Treffer über `paypalname`.
|
|
- Dublette gleicher Teilnehmer, Betrag und Datum.
|
|
- Unbekannter Name.
|
|
- Negativer oder leerer Betrag.
|
|
|
|
### Hinweise
|
|
|
|
- Aktiver Hinweis.
|
|
- Abgelaufener Hinweis.
|
|
- Neuer Hinweis über Admin-Formular.
|
|
|
|
## Erwartete Referenzwerte
|
|
|
|
Für jeden Testfall sollen erwartete Werte dokumentiert werden:
|
|
|
|
- Summe Einzahlungen.
|
|
- Summe Kosten.
|
|
- Summe Striche.
|
|
- Aktueller Stand.
|
|
- Jahresstriche.
|
|
- Jahreseinzahlungen.
|
|
- Jahresausgaben.
|
|
- Sichtbarkeit in Listen und Filtern.
|
|
|
|
## Umsetzungsvorschlag
|
|
|
|
1. `database/mysql-dev-schema.sql` um stabile Seed-Daten erweitern oder separates
|
|
Seed-Skript anlegen. Erledigt mit `scripts/seed-golden-master.php`.
|
|
2. `scripts/init-mysql-dev.php` so erweitern, dass es die Testdaten idempotent
|
|
anlegt. Entschieden: Golden-Master-Daten bleiben in einem separaten Skript,
|
|
damit normale Dev-Daten nicht zwangsweise überschrieben werden.
|
|
3. Ein erstes Vergleichsskript `scripts/check-golden-master.php` erstellen.
|
|
Erledigt.
|
|
4. Die wichtigsten Seiten per HTTP abrufen und auf erwartete Texte/Werte
|
|
prüfen. Erledigt mit `scripts/http-smoke.php`.
|
|
5. Danach M2 starten: technisches Fundament für SaaS-Struktur. M1 ist als
|
|
Sicherheitsnetz nutzbar; offene Dependency-Themen sind unten dokumentiert.
|
|
|
|
## Skripte
|
|
|
|
- `scripts/dev-db.php`: gemeinsame DB-Verbindung für Dev-Skripte.
|
|
- `scripts/golden-master-data.php`: definierte Testdaten und erwartete Werte.
|
|
- `scripts/seed-golden-master.php`: legt Golden-Master-Testdaten idempotent an.
|
|
- `scripts/check-golden-master.php`: prüft Salden, Jahreswerte, Rollen,
|
|
Listenfilter, CSV-Lookup und Hinweise.
|
|
- `scripts/http-smoke.php`: ruft sichere GET-Seiten per HTTP ab und prüft auf
|
|
HTTP 200, erwartete Texte und PHP-Fehlermarker.
|
|
|
|
## Ausführung
|
|
|
|
Mit normal installierter PHP-CLI:
|
|
|
|
```bash
|
|
php scripts/seed-golden-master.php
|
|
php scripts/check-golden-master.php
|
|
php scripts/http-smoke.php
|
|
```
|
|
|
|
In der aktuellen lokalen Umgebung mit entpacktem PHP:
|
|
|
|
```bash
|
|
LD_LIBRARY_PATH="$PWD/.local/php/usr/lib/x86_64-linux-gnu" \
|
|
"$PWD/.local/php/usr/bin/php8.3" \
|
|
-c "$PWD/.local/php-dev.ini" \
|
|
scripts/seed-golden-master.php
|
|
|
|
LD_LIBRARY_PATH="$PWD/.local/php/usr/lib/x86_64-linux-gnu" \
|
|
"$PWD/.local/php/usr/bin/php8.3" \
|
|
-c "$PWD/.local/php-dev.ini" \
|
|
scripts/check-golden-master.php
|
|
|
|
LD_LIBRARY_PATH="$PWD/.local/php/usr/lib/x86_64-linux-gnu" \
|
|
"$PWD/.local/php/usr/bin/php8.3" \
|
|
-c "$PWD/.local/php-dev.ini" \
|
|
scripts/http-smoke.php
|
|
```
|
|
|
|
Die Skripte erwarten die bekannten Dev-Umgebungsvariablen `DB_HOST`, `DB_NAME`,
|
|
`DB_USER` und `DB_PASS`.
|
|
|
|
## Abgedeckte Testfälle
|
|
|
|
| Testfall | Fixture |
|
|
| --- | --- |
|
|
| Admin mit Buchung | `gm-admin@test.local` |
|
|
| Positiver Saldo mit Vorjahresdaten | `gm-positive@test.local` |
|
|
| Negativer Saldo | `gm-negative@test.local` |
|
|
| Nullsaldo | `gm-zero@test.local` |
|
|
| Inaktives Mitglied | `gm-inactive@test.local` |
|
|
| PayPal-Name für CSV-Lookup | `gm-paypal@test.local` |
|
|
| Mitglied ohne Buchungen | `gm-empty@test.local` |
|
|
| Vieltrinker für Vorderseite | `gm-heavy@test.local` |
|
|
| Aktiver Hinweis | `[GM] Aktiver Hinweis für Golden-Master-Test` |
|
|
| Abgelaufener Hinweis | `[GM] Abgelaufener Hinweis für Golden-Master-Test` |
|
|
|
|
## HTTP-Smoke-Abdeckung
|
|
|
|
Der HTTP-Smoke-Test prüft nur GET-Seiten ohne bekannte Schreib- oder
|
|
Versand-Nebenwirkungen.
|
|
|
|
| Seite | Erwartung |
|
|
| --- | --- |
|
|
| `index.php` | Dashboard lädt für `Test Admin` |
|
|
| `stricheintragen.php` | Stricherfassung lädt |
|
|
| `einzahlung.php` | Einzahlungserfassung lädt |
|
|
| `kaffeeliste.php` | Gesamtübersicht lädt |
|
|
| `mitarbeiterverwalten.php` | Mitgliederverwaltung inkl. `PayPal-Name` lädt |
|
|
| `letzteneintraege.php` | letzte Einzahlungen und Striche laden |
|
|
| `csvupload.php` | CSV-Upload-Formular lädt |
|
|
| `hinweise.php` | Hinweisverwaltung lädt |
|
|
| `faq.php` | FAQ lädt |
|
|
| `namenanpassen.php` | Namensanpassung lädt |
|
|
| `teilnehmerauswertung.php?user_id=1` | Teilnehmerauswertung für Dev-Admin lädt |
|
|
| `mailausgebe.php` | Mailadress-Ausgabe lädt |
|
|
| `umfrage.php` | geschlossene Umfrage lädt |
|
|
| `umfrageergebnisse.php` | Umfrageauswertung lädt |
|
|
|
|
## Akzeptanzkriterien
|
|
|
|
- Testdaten sind reproduzierbar.
|
|
- Tests können mehrfach laufen, ohne Duplikate zu erzeugen.
|
|
- Salden und Jahreswerte sind automatisch prüfbar.
|
|
- CSV-Importfälle sind fachlich abgedeckt.
|
|
- Die wichtigsten UI-Seiten liefern HTTP 200 ohne PHP-Warnings.
|
|
- Seiten mit Schreib- oder Versand-Nebenwirkungen werden nicht automatisch per
|
|
GET ausgeführt, sondern als Risiko dokumentiert.
|
|
|
|
## Gefundene Fehler und Bewertung
|
|
|
|
Im M1-Abschlusslauf wurden folgende Punkte geprüft:
|
|
|
|
- `number_format(null)` in `kaffeeliste.php`: behoben; leere Summen werden als
|
|
`0` behandelt.
|
|
- `paypalname` in der Mitgliederverwaltung: eingepflegt und im Golden Master
|
|
abgedeckt.
|
|
- `umfrage.php`: `mb_strtolower()` ist in der lokalen PHP-Umgebung nicht
|
|
verfügbar; Fallback auf `strtolower()` ergänzt.
|
|
- `exportKaffeeliste.php`: Pfad auf `TCPDF/tcpdf.php` korrigiert. Der Export
|
|
bleibt trotzdem als bekannter Dependency-Fehler offen, weil die TCPDF-Kopie im
|
|
Repo unvollständig ist und `TCPDF/include/tcpdf_font_data.php` fehlt.
|
|
- `mailversenden.php`: nicht automatisch per HTTP ausgeführt, weil ein GET bei
|
|
vollständiger PHPMailer-Installation E-Mails versenden kann. Zusätzlich ist
|
|
die PHPMailer-Kopie im Repo unvollständig.
|
|
- `jahresauswertung.php`: nicht automatisch per HTTP ausgeführt, weil ein GET
|
|
Jahresbuchungen schreiben und E-Mails versenden kann. Zusätzlich ist die
|
|
PHPMailer-Kopie im Repo unvollständig.
|
|
|
|
## Aktueller Prüfstatus
|
|
|
|
Stand 2026-07-12:
|
|
|
|
- `scripts/seed-golden-master.php` erfolgreich gegen die MySQL-Dev-Datenbank
|
|
ausgeführt.
|
|
- `scripts/check-golden-master.php` erfolgreich ausgeführt.
|
|
- Zweiter Seed+Check-Lauf erfolgreich, Idempotenz bestätigt.
|
|
- Ergebnis: 104 Assertions bestanden.
|
|
- `scripts/http-smoke.php` erfolgreich gegen `http://127.0.0.1:8080`
|
|
ausgeführt.
|
|
- Ergebnis: 14 sichere Seiten bestanden ohne `Deprecated`, `Warning`,
|
|
`Fatal error`, `Parse error`, `Notice` oder `Uncaught Error`.
|
|
- Bekannter offener Punkt: PDF-Export wegen unvollständiger TCPDF-Abhängigkeit.
|
|
- Bewusst nicht automatisch ausgeführt: `mailversenden.php` und
|
|
`jahresauswertung.php`, da GET dort Nebenwirkungen haben kann.
|