diff --git a/tests/Feature/HostSeparationTest.php b/tests/Feature/HostSeparationTest.php index a4ed64b..6ed8f14 100644 --- a/tests/Feature/HostSeparationTest.php +++ b/tests/Feature/HostSeparationTest.php @@ -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 -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']; } } }