toMatchArray([ 'driver' => 'daily', 'path' => storage_path("logs/{$file}.log"), 'days' => 14, ]); })->with([ 'billing' => ['billing', 'billing'], 'ki' => ['ki', 'ki'], 'monitoring' => ['monitoring', 'monitoring'], 'market' => ['market', 'market'], 'csp' => ['csp', 'csp'], 'spam' => ['spam', 'spam'], 'admin_slow' => ['admin_slow', 'admin-slow'], ]); test('the default stack rotates daily instead of growing one single file', function () { $config = require base_path('config/logging.php'); expect($config['channels']['stack']['channels'])->toBe(['daily']) ->and($config['channels']['daily']['path'])->toBe(storage_path('logs/laravel.log')); }); test('the test suite logs into the dedicated testing channel only', function () { expect(config('logging.default'))->toBe('testing') ->and(config('logging.channels.testing.path'))->toBe(storage_path('logs/testing.log')); foreach (['billing', 'ki', 'monitoring', 'market'] as $channel) { expect(config("logging.channels.{$channel}.path"))->toBe(storage_path('logs/testing.log')); } }); test('operational alerts go to the monitoring channel', function () { config()->set('monitoring.alerts.enabled', false); $monitoringLog = Mockery::spy(LoggerInterface::class); Log::shouldReceive('channel')->once()->with('monitoring')->andReturn($monitoringLog); OperationalAlert::send('Bounce-Postfach konnte nicht gelesen werden'); $monitoringLog->shouldHaveReceived('critical') ->withArgs(fn (string $message): bool => str_contains($message, 'Bounce-Postfach')) ->once(); }); test('market data failures go to the market channel', function () { Http::fake(['*' => Http::response('', 500)]); $marketLog = Mockery::spy(LoggerInterface::class); Log::shouldReceive('channel')->with('market')->andReturn($marketLog); app(MarketDataService::class)->refresh(); $marketLog->shouldHaveReceived('warning')->atLeast()->once(); });