Files
kaffeekasse-saas/docs/m1-reconstructed-golden-master.md
T
2026-07-12 00:51:01 +02:00

7.2 KiB

M1 Rekonstruierter Golden Master

Stand: 2026-07-12

Da kein alter MS-SQL-Datenbankstand verfuegbar 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 Testfaellen festgeschrieben. Diese Tests dienen spaeter als Sicherheitsnetz fuer 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 fuer mehrere Teilnehmer.
  • Web-Strich-Eintrag mit Eintragsart = 2.

Salden

  • Positiver Kontostand.
  • Negativer Kontostand.
  • Nullsaldo.
  • Jahreswerte fuer aktuelles Jahr.
  • Altdaten aus Vorjahr, die nicht in Jahreswerte fallen.

CSV-Import

  • Treffer ueber Name.
  • Treffer ueber paypalname.
  • Dublette gleicher Teilnehmer, Betrag und Datum.
  • Unbekannter Name.
  • Negativer oder leerer Betrag.

Hinweise

  • Aktiver Hinweis.
  • Abgelaufener Hinweis.
  • Neuer Hinweis ueber Admin-Formular.

Erwartete Referenzwerte

Fuer 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 ueberschrieben werden.
  3. Ein erstes Vergleichsskript scripts/check-golden-master.php erstellen. Erledigt.
  4. Die wichtigsten Seiten per HTTP abrufen und auf erwartete Texte/Werte pruefen. Erledigt mit scripts/http-smoke.php.
  5. Danach M2 starten: technisches Fundament fuer SaaS-Struktur. M1 ist als Sicherheitsnetz nutzbar; offene Dependency-Themen sind unten dokumentiert.

Skripte

  • scripts/dev-db.php: gemeinsame DB-Verbindung fuer 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: prueft Salden, Jahreswerte, Rollen, Listenfilter, CSV-Lookup und Hinweise.
  • scripts/http-smoke.php: ruft sichere GET-Seiten per HTTP ab und prueft auf HTTP 200, erwartete Texte und PHP-Fehlermarker.

Ausfuehrung

Mit normal installierter PHP-CLI:

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:

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 Testfaelle

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 fuer CSV-Lookup gm-paypal@test.local
Mitglied ohne Buchungen gm-empty@test.local
Vieltrinker fuer Vorderseite gm-heavy@test.local
Aktiver Hinweis [GM] Aktiver Hinweis fuer Golden-Master-Test
Abgelaufener Hinweis [GM] Abgelaufener Hinweis fuer Golden-Master-Test

HTTP-Smoke-Abdeckung

Der HTTP-Smoke-Test prueft nur GET-Seiten ohne bekannte Schreib- oder Versand-Nebenwirkungen.

Seite Erwartung
index.php Dashboard laedt fuer Test Admin
stricheintragen.php Stricherfassung laedt
einzahlung.php Einzahlungserfassung laedt
kaffeeliste.php Gesamtuebersicht laedt
mitarbeiterverwalten.php Mitgliederverwaltung inkl. PayPal-Name laedt
letzteneintraege.php letzte Einzahlungen und Striche laden
csvupload.php CSV-Upload-Formular laedt
hinweise.php Hinweisverwaltung laedt
faq.php FAQ laedt
namenanpassen.php Namensanpassung laedt
teilnehmerauswertung.php?user_id=1 Teilnehmerauswertung fuer Dev-Admin laedt
mailausgebe.php Mailadress-Ausgabe laedt
umfrage.php geschlossene Umfrage laedt
umfrageergebnisse.php Umfrageauswertung laedt

Akzeptanzkriterien

  • Testdaten sind reproduzierbar.
  • Tests koennen mehrfach laufen, ohne Duplikate zu erzeugen.
  • Salden und Jahreswerte sind automatisch pruefbar.
  • CSV-Importfaelle sind fachlich abgedeckt.
  • Die wichtigsten UI-Seiten liefern HTTP 200 ohne PHP-Warnings.
  • Seiten mit Schreib- oder Versand-Nebenwirkungen werden nicht automatisch per GET ausgefuehrt, sondern als Risiko dokumentiert.

Gefundene Fehler und Bewertung

Im M1-Abschlusslauf wurden folgende Punkte geprueft:

  • 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 verfuegbar; Fallback auf strtolower() ergaenzt.
  • exportKaffeeliste.php: Pfad auf TCPDF/tcpdf.php korrigiert. Der Export bleibt trotzdem als bekannter Dependency-Fehler offen, weil die TCPDF-Kopie im Repo unvollstaendig ist und TCPDF/include/tcpdf_font_data.php fehlt.
  • mailversenden.php: nicht automatisch per HTTP ausgefuehrt, weil ein GET bei vollstaendiger PHPMailer-Installation E-Mails versenden kann. Zusaetzlich ist die PHPMailer-Kopie im Repo unvollstaendig.
  • jahresauswertung.php: nicht automatisch per HTTP ausgefuehrt, weil ein GET Jahresbuchungen schreiben und E-Mails versenden kann. Zusaetzlich ist die PHPMailer-Kopie im Repo unvollstaendig.

Aktueller Pruefstatus

Stand 2026-07-12:

  • scripts/seed-golden-master.php erfolgreich gegen die MySQL-Dev-Datenbank ausgefuehrt.
  • scripts/check-golden-master.php erfolgreich ausgefuehrt.
  • Zweiter Seed+Check-Lauf erfolgreich, Idempotenz bestaetigt.
  • Ergebnis: 104 Assertions bestanden.
  • scripts/http-smoke.php erfolgreich gegen http://127.0.0.1:8080 ausgefuehrt.
  • Ergebnis: 14 sichere Seiten bestanden ohne Deprecated, Warning, Fatal error, Parse error, Notice oder Uncaught Error.
  • Bekannter offener Punkt: PDF-Export wegen unvollstaendiger TCPDF-Abhaengigkeit.
  • Bewusst nicht automatisch ausgefuehrt: mailversenden.php und jahresauswertung.php, da GET dort Nebenwirkungen haben kann.