presseportale/tests/Feature/TestDatabaseGuardTest.php
Kevin Adametz 4e34c3d0d1 tests/legal: Testdatenbank-Guard vor den DB-Traits, Flags in phpunit.xml gepinnt, Zustimmung an gezeigte Fassung gebunden (Umsetzungsaudit 25.09.: N22, N06, 5.3)
- Tests\TestCase prüft die Standardverbindung in setUpTraits(), also vor
  RefreshDatabase — bisher erst nach dem Refresh (N22). Eigener Test.
- phpunit.xml pinnt IMAGE_RIGHTS_V2, IMAGE_PRECHECK(_STAGE) und
  LEGAL_ACCEPTANCE_GATE auf die Vorgaben aus .env.example; die Suite hing
  sonst an der lokalen .env (Audit Abschnitt 6).
- Zustimmungsgate: die Livewire-Komponenten tragen die beim Rendern gezeigten
  Fassungen (Trait-Hook rendering); weicht die aktuelle Fassung beim Absenden
  ab, wird die Annahme abgelehnt und der neue Wortlaut gezeigt. Ein fehlendes
  Pflichtdokument ist bei aktivem Gate ein Konfigurationsfehler (N06).
- Audit vom 25.09., Decision-Update vom 22.09. und Plan Fassung 2 versioniert;
  die Antwortkopie „…-211.md" entfernt; U10-Formulierung im Plan präzisiert.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 13:35:14 +00:00

35 lines
1.4 KiB
PHP

<?php
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
/**
* Der Guard gegen eine falsch aufgelöste Testdatenbank (Config-Cache →
* Dev-DB) muss greifen, BEVOR RefreshDatabase etwas anfasst. Laravel ruft
* setUpTraits() vor allen Datenbank-Traits auf; dort hängt der Guard
* (Umsetzungsaudit 25.09.2026, N22).
*/
test('the database guard runs in setUpTraits, ahead of RefreshDatabase', function () {
$method = new ReflectionMethod(TestCase::class, 'setUpTraits');
$source = implode('', array_slice(file($method->getFileName()), $method->getStartLine() - 1, $method->getEndLine() - $method->getStartLine() + 1));
expect($method->getDeclaringClass()->getName())->toBe(TestCase::class)
->and(strpos($source, 'assertTestDatabaseIsInMemorySqlite'))->toBeLessThan(strpos($source, 'parent::setUpTraits'))
->and(in_array(RefreshDatabase::class, class_uses_recursive(static::class), true))->toBeTrue();
});
test('the database guard rejects anything but sqlite in memory', function () {
/** @var TestCase $this */
$guard = fn () => $this->assertTestDatabaseIsInMemorySqlite();
$guard();
try {
config()->set('database.default', 'mysql');
expect($guard)->toThrow(RuntimeException::class, 'statt SQLite :memory:');
} finally {
// Sonst räumt RefreshDatabase gegen die falsche Verbindung auf.
config()->set('database.default', 'sqlite');
}
});