Drei Fragen, drei unterschiedliche Antworten. Die globale Seitenbreite war einstellbar und wirkte nur in eine Richtung: site.css schrieb width:min(1180px,...), also schluckte die 1180 jeden groesseren Wert aus dem Designbereich. Schmaler ging, breiter nicht, ohne jede Meldung. Die Zahl kommt jetzt aus dem Theme. Das ist der dritte Fehler dieser Art an einem Tag - nach der Rahmenstaerke und der Bildrundung -, und alle drei hatten dieselbe Ursache: CSS, das nie gegen eine Erwartung geprueft wurde. Menueplaetze und Menueart waren vermischt. Wo ein Menue steht, bestimmt der Block und war immer frei. Welche Eintraege es zeigt, bestimmt der Platz - davon gab es zwei, jetzt vier (Haupt, zweite, Fusszeile, Rechtliches). Wie es aussieht, war gar nicht einstellbar: jetzt waagerecht, untereinander oder aufklappbar als Burger. Der Burger ist ein details-Element, denn ein Menue, das ein Skript zum Oeffnen braucht, geht auf einer Seite ohne Skript nicht auf. "Seiten ohne Menue" war nicht moeglich - der Kopfbereich war ein Dokument fuer alle Seiten. Jetzt waehlt jede Seite: Standard, ein anderer Bereich, oder keiner. Dafuer musste die Regel "es gibt genau einen Kopf- und Fussbereich" fallen; sie war richtig, solange niemand waehlen konnte, und wurde falsch, sobald man waehlen kann. Ein bestehender Test, der diese Regel zusicherte, ist deshalb umgeschrieben und prueft jetzt die neue. Gespeichert wird die Wahl, nicht das Ergebnis: leer heisst Standard, none heisst keiner, sonst die Adresse. Ein Verweis auf einen geloeschten Bereich faellt auf den Standard zurueck, statt die Seite stillschweigend ohne Navigation auszuliefern. Neu im Ausbauplan: ein einzelnes install.php, das das Releasearchiv herunterlaedt und entpackt, damit niemand tausende Dateien per FTP hochladen muss. Mit den Regeln, die darueber entscheiden, ob das eine Hilfe oder eine Einladung ist: Adresse und SHA-256 stehen in der Datei und nicht im Formular, HTTPS mit Zertifikatspruefung, Schutz gegen ZIP-Slip, Selbstloeschung danach. 336 PHP-Tests / 1354 Assertions, 17 JS-Modelltests. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
59 lines
2.1 KiB
PHP
59 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Tests;
|
|
|
|
use Doctrine\DBAL\Connection;
|
|
use Doctrine\DBAL\Schema\Schema;
|
|
use DoctrineMigrations\Version20260912000100;
|
|
use DoctrineMigrations\Version20260912000200;
|
|
use DoctrineMigrations\Version20260912000300;
|
|
use DoctrineMigrations\Version20260912000400;
|
|
use DoctrineMigrations\Version20260912000500;
|
|
use DoctrineMigrations\Version20260912000600;
|
|
use DoctrineMigrations\Version20260912000700;
|
|
use DoctrineMigrations\Version20260912000800;
|
|
use DoctrineMigrations\Version20260912000900;
|
|
use DoctrineMigrations\Version20260912001000;
|
|
use DoctrineMigrations\Version20260912001100;
|
|
use DoctrineMigrations\Version20260912001200;
|
|
use DoctrineMigrations\Version20260912001300;
|
|
use Psr\Log\NullLogger;
|
|
|
|
/**
|
|
* The schema a migrated installation has, built for a fresh test database.
|
|
*
|
|
* The list used to stand in three places, so a new migration was three edits and the fixtures
|
|
* drifted apart. It stands here once. Indexes come from the same postUp() helpers the migrations
|
|
* use, because on SQLite an index added the ordinary way rebuilds the table.
|
|
*/
|
|
final class TestSchema
|
|
{
|
|
public static function build(Connection $db): void
|
|
{
|
|
$schema = new Schema();
|
|
foreach ([
|
|
Version20260912000100::class,
|
|
Version20260912000200::class,
|
|
Version20260912000300::class,
|
|
Version20260912000400::class,
|
|
Version20260912000500::class,
|
|
Version20260912000600::class,
|
|
Version20260912000700::class,
|
|
Version20260912000800::class,
|
|
Version20260912000900::class,
|
|
Version20260912001000::class,
|
|
Version20260912001100::class,
|
|
Version20260912001200::class,
|
|
Version20260912001300::class,
|
|
] as $migration) {
|
|
(new $migration($db, new NullLogger()))->up($schema);
|
|
}
|
|
foreach ($schema->toSql($db->getDatabasePlatform()) as $sql) {
|
|
$db->executeStatement($sql);
|
|
}
|
|
Version20260912000400::applyIndexes($db);
|
|
Version20260912000600::applyIndexes($db);
|
|
Version20260912000900::applyIndexes($db);
|
|
}
|
|
}
|