Die Browser-Tests legten ihre Konten, Kategorien und Buchungen bei jedem Lauf neu an, weggeräumt hat sie niemand: Zuletzt standen über dreitausend Zeilen Testdaten in der Datenbank – vierzig „E2E Bankprovision …“ hintereinander im Kategoriefilter, und kein Bildschirmfoto eines fehlgeschlagenen Tests war mehr zu gebrauchen. scripts/e2e-aufraeumen.php räumt weg, was am Testnutzer hängt – nicht, was nach Testdaten aussieht. Ein Namensmuster übersähe die Buchung „Supermarkt“ und träfe irgendwann etwas Echtes; die Fremdschlüssel dagegen sagen genau, was zu diesem Nutzer gehört, und nehmen über ihre Kaskaden auch die Zeilen ohne eigene benutzer_id mit. Der Nutzer selbst bleibt stehen, und er muss den Anzeigenamen tragen, den scripts/e2e-benutzer.php setzt: Wer E2E_USER versehentlich auf seinen eigenen Zugang stellt, bekommt einen Abbruch statt eines leeren Datenbestands. Aufgerufen wird es vor dem Lauf, nicht danach – ein abgebrochener Lauf hinterlässt sonst einen Bestand, an den niemand mehr denkt, und so bleiben die Daten des letzten Laufs bis zum nächsten für die Fehlersuche stehen. Das deckte auf, dass sieben Tests auf den Resten früherer Läufe standen: Die Auswertungen prüfen, dass ein Bericht eine Tabelle statt eines Platzhalters zeigt, das Cockpit, dass „Übrige Konten“ eine Ebene tiefer führt – Daten dafür legte keiner von ihnen an. scripts/e2e-grundbestand.php stellt deshalb einen festgelegten Bestand her, dessen Zuschnitte an genau diesen Tests hängen: mehr Konten als Vermoegensentwicklung::SERIEN, Buchungen in jedem Monat des laufenden Jahres, ein Vorjahr für den Vergleichsbericht, ein Depot mit Wertpapiergeschäft. Test 41 prüft jede dieser Grenzen einzeln und nennt den Test, der daran hängt. 87 E2E-Tests grün, in 1,3 statt 2,7 Minuten – die Listen rendern keine Tausenden Altzeilen mehr. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AQ57wQWZ4xKHcKmp26bzgr
61 lines
1.6 KiB
PHP
Executable file
61 lines
1.6 KiB
PHP
Executable file
#!/usr/bin/env php
|
||
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
/**
|
||
* Legt den Grundbestand an, auf dem die E2E-Tests aufsetzen.
|
||
*
|
||
* docker compose exec -u www-data php php scripts/e2e-grundbestand.php
|
||
*
|
||
* `tests/e2e/run.sh` ruft das nach dem Aufräumen selbst auf. Gedacht ist es für
|
||
* einen frisch aufgeräumten Bestand: Ein zweiter Aufruf legt alles noch einmal
|
||
* an, statt es zu ergänzen.
|
||
*
|
||
* Wie beim Aufräumen muss der Nutzer als Testnutzer ausgewiesen sein – sonst
|
||
* landet der Bestand in einem echten Zugang.
|
||
*/
|
||
|
||
require dirname(__DIR__) . '/vendor/autoload.php';
|
||
|
||
use Finanzmanager\Config;
|
||
use Finanzmanager\Services\E2EAufraeumer;
|
||
use Finanzmanager\Services\E2EGrundbestand;
|
||
|
||
Config::load();
|
||
|
||
$still = in_array('--still', $argv, true);
|
||
|
||
$sage = static function (string $zeile) use ($still): void {
|
||
if (!$still) {
|
||
echo $zeile . PHP_EOL;
|
||
}
|
||
};
|
||
|
||
$nutzer = E2EAufraeumer::testnutzer();
|
||
|
||
if ($nutzer === null) {
|
||
fwrite(STDERR, "Abbruch: Es gibt keinen Testnutzer. Zuerst scripts/e2e-benutzer.php.\n");
|
||
exit(1);
|
||
}
|
||
|
||
if (!E2EAufraeumer::istTestnutzer($nutzer)) {
|
||
fwrite(STDERR, sprintf(
|
||
"Abbruch: '%s' ist nicht als Testnutzer ausgewiesen (Anzeigename '%s' statt '%s').\n"
|
||
. "Es wurde nichts angelegt.\n",
|
||
(string)$nutzer['benutzername'],
|
||
(string)$nutzer['anzeigename'],
|
||
E2EAufraeumer::ANZEIGENAME
|
||
));
|
||
exit(1);
|
||
}
|
||
|
||
$ergebnis = E2EGrundbestand::anlegen((int)$nutzer['id']);
|
||
|
||
$sage(sprintf('Grundbestand angelegt (Testnutzer %s).', (string)$nutzer['benutzername']));
|
||
|
||
foreach ($ergebnis as $gattung => $anzahl) {
|
||
$sage(sprintf(' %-16s %6d', $gattung, $anzahl));
|
||
}
|
||
|
||
exit(0);
|