getJson('/api/v1/health'); // THEN $response->assertStatus(200) ->assertJsonStructure([ 'status', 'timestamp', 'checks', ]) ->assertJsonPath('status', 'healthy') ->assertJsonPath('checks.' . $databaseDefault . '.status', 'up') ->assertJsonPath('checks.' . $databaseArcadia . '.status', 'up') ->assertJsonPath('checks.' . $cacheStore . '.status', 'up') ->assertJsonPath('checks.' . $mailTransport . '.status', 'up'); }); it('returns 503 unhealthy when default database connection fails', function () use (&$originalDbDefault): void { // GIVEN /** @var TestCase $this */ Config::set('database.default', 'invalid_connection'); $databaseDefault = Config::string('database.default'); try { // WHEN $response = $this->getJson('/api/v1/health'); // THEN $response->assertStatus(503) ->assertJsonPath('status', 'unhealthy') ->assertJsonPath('checks.' . $databaseDefault . '.status', 'down'); } finally { Config::set('database.default', $originalDbDefault); } }); it('returns 503 unhealthy when arcadia database connection fails', function () use (&$originalArcadiaDb): void { // GIVEN /** @var TestCase $this */ Config::set('database.connections.invalid_arcadia_connection', [ 'driver' => 'mysql', 'host' => '127.0.0.1', 'port' => 65433, 'database' => 'invalid_arcadia_db', ]); Config::set('database.arcadia_meta_model', 'invalid_arcadia_connection'); $databaseArcadia = Config::string('database.arcadia_meta_model'); try { // WHEN $response = $this->getJson('/api/v1/health'); // THEN $response->assertStatus(503) ->assertJsonPath('status', 'unhealthy') ->assertJsonPath('checks.' . $databaseArcadia . '.status', 'down'); } finally { Config::set('database.arcadia_meta_model', $originalArcadiaDb); } }); it('returns 503 unhealthy when cache store fails', function () use (&$originalCache): void { // GIVEN /** @var TestCase $this */ Config::set('cache.default', 'invalid_cache_store'); $cacheStore = Config::string('cache.default'); try { // WHEN $response = $this->getJson('/api/v1/health'); // THEN $response->assertStatus(503) ->assertJsonPath('status', 'unhealthy') ->assertJsonPath('checks.' . $cacheStore . '.status', 'down'); } finally { Config::set('cache.default', $originalCache); } }); it('returns 503 unhealthy when smtp server connection fails', function () use (&$originalMail, &$originalMailer): void { // GIVEN /** @var TestCase $this */ Config::set('mail.default', 'smtp'); Config::set('mail.mailers.smtp', [ 'transport' => 'smtp', 'host' => '127.0.0.1', 'port' => 65432, // Non-existent port 'timeout' => 0.1, ]); $mailTransport = Config::string('mail.default'); try { // WHEN $response = $this->getJson('/api/v1/health'); // THEN $response->assertStatus(503) ->assertJsonPath('status', 'unhealthy') ->assertJsonPath('checks.' . $mailTransport . '.status', 'down'); } finally { Config::set('mail.default', $originalMail); Config::set('mail.mailers.smtp', $originalMailer); } }); });