- config/logging.php: Themen-Channels billing, ki, monitoring, market als daily-Dateien mit gemeinsamer Aufbewahrung (LOG_DAILY_DAYS), Stack-Default auf daily; Channel `testing` für die Suite. - Fachliche Log-Aufrufe in Billing, KI-Jobs, OperationalAlert und Kursdaten auf Log::channel() umgestellt. - phpunit.xml + TestCase: Suite schreibt ausschließlich nach testing-YYYY-MM-DD.log; LogChannelsTest sichert die Konfiguration. - docs/weiteres: Decision-Update Duplicate-Content entfernt (überholt durch Roadmap-Anhang 2), Decision-Update Verlinkung & Backlinks als Referenz wieder abgelegt, README-Index nachgezogen. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
45 lines
1.6 KiB
PHP
45 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace Tests;
|
|
|
|
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
|
use RuntimeException;
|
|
|
|
abstract class TestCase extends BaseTestCase
|
|
{
|
|
/**
|
|
* Schutz vor einem gecachten `bootstrap/cache/config.php`: Der überlagert
|
|
* die phpunit.xml-Umgebung, die Suite läuft dann gegen die Dev-Datenbank
|
|
* aus der .env — und `RefreshDatabase` leert sie (passiert am
|
|
* 15.09.2026, 3 GB Bestandskopie weg). Lieber laut abbrechen.
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
if (config('database.default') !== 'sqlite' || config('database.connections.sqlite.database') !== ':memory:') {
|
|
throw new RuntimeException(sprintf(
|
|
'Tests laufen gegen „%s“ statt SQLite :memory: — vermutlich liegt ein Config-Cache. `php artisan config:clear` und erneut starten.',
|
|
config('database.default'),
|
|
));
|
|
}
|
|
|
|
$this->routeTopicLogChannelsToTestingLog();
|
|
}
|
|
|
|
/**
|
|
* Die Themen-Channels (`Log::channel('billing')` usw.) umgehen den
|
|
* Default-Channel aus phpunit.xml und würden sonst in die echten
|
|
* Themen-Dateien unter storage/logs schreiben. Alles, was die Suite loggt,
|
|
* gehört nach testing-YYYY-MM-DD.log. `admin_slow` bleibt außen vor, weil
|
|
* seine Tests den Pfad selbst setzen bzw. prüfen.
|
|
*/
|
|
private function routeTopicLogChannelsToTestingLog(): void
|
|
{
|
|
$testing = config('logging.channels.testing');
|
|
|
|
foreach (['billing', 'ki', 'monitoring', 'market'] as $channel) {
|
|
config()->set("logging.channels.{$channel}", $testing);
|
|
}
|
|
}
|
|
}
|