Fix: alle drei Env-Kanäle einzeln sichern, sonst kippt phpunit.xml's ADMIN_HOSTS/FILES_HOST

feat/versandtakt
nexxo 2026-08-04 14:39:44 +02:00
parent 9d3f3c27b5
commit 53f1293f09
1 changed files with 28 additions and 10 deletions

View File

@ -36,12 +36,21 @@ function hostSeparationTable(): array
'ADMIN_HOST_EXCLUSIVE' => 'true',
];
// Gemerkt und zurückgestellt, nicht bloß gelöscht: phpunit.xml setzt
// FILES_HOST und ADMIN_HOSTS für den ganzen Lauf, und ein Test, der sie
// hinterher entfernt, kippt die Tests nach ihm.
// Alle drei Kanäle einzeln, und das ist kein Übereifer: phpunit.xml legt
// seine <env>-Werte in $_ENV und putenv() ab, NIE in $_SERVER. Wer nur
// $_SERVER sichert, bekommt null zurück, löscht beim Zurückstellen
// ADMIN_HOSTS und FILES_HOST — und jeder Test NACH diesem liest sie dann
// aus der echten .env des Containers. Genau so sind ImpersonationTest und
// PublicSiteGateTest gefallen, mit einem Fehlerbild, das nach einer
// Reihenfolge-Abhängigkeit der Suite aussieht und keine ist.
$previous = [];
foreach ($env as $key => $value) {
$previous[$key] = $_SERVER[$key] ?? null;
$previous[$key] = [
'env' => array_key_exists($key, $_ENV) ? $_ENV[$key] : null,
'server' => array_key_exists($key, $_SERVER) ? $_SERVER[$key] : null,
'putenv' => getenv($key),
];
putenv("{$key}={$value}");
$_ENV[$key] = $value;
$_SERVER[$key] = $value;
@ -68,14 +77,23 @@ function hostSeparationTable(): array
Model::setConnectionResolver($original['db']);
Model::setEventDispatcher($original['events']);
foreach ($previous as $key => $value) {
if ($value === null) {
foreach ($previous as $key => $was) {
if ($was['putenv'] === false) {
putenv($key);
unset($_ENV[$key], $_SERVER[$key]);
} else {
putenv("{$key}={$value}");
$_ENV[$key] = $value;
$_SERVER[$key] = $value;
putenv("{$key}={$was['putenv']}");
}
if ($was['env'] === null) {
unset($_ENV[$key]);
} else {
$_ENV[$key] = $was['env'];
}
if ($was['server'] === null) {
unset($_SERVER[$key]);
} else {
$_SERVER[$key] = $was['server'];
}
}
}