getJson('/api/v1/health'); // THEN $response->assertStatus(200) ->assertJsonStructure([ 'status', 'timestamp', 'checks' => [ 'database_default' => ['status', 'connection'], 'database_arcadia' => ['status', 'connection'], 'cache' => ['status', 'store'], 'mail_smtp' => ['status', 'transport'], ], ]) ->assertJson([ 'status' => 'healthy', 'checks' => [ 'database_default' => ['status' => 'up'], 'database_arcadia' => ['status' => 'up'], 'cache' => ['status' => 'up'], 'mail_smtp' => ['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'); try { // WHEN $response = $this->getJson('/api/v1/health'); // THEN $response->assertStatus(503) ->assertJson([ 'status' => 'unhealthy', 'checks' => [ 'database_default' => ['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.arcadia_meta_model', 'invalid_arcadia_connection'); try { // WHEN $response = $this->getJson('/api/v1/health'); // THEN $response->assertStatus(503) ->assertJson([ 'status' => 'unhealthy', 'checks' => [ 'database_arcadia' => ['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'); try { // WHEN $response = $this->getJson('/api/v1/health'); // THEN $response->assertStatus(503) ->assertJson([ 'status' => 'unhealthy', 'checks' => [ 'cache' => ['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, ]); try { // WHEN $response = $this->getJson('/api/v1/health'); // THEN $response->assertStatus(503) ->assertJson([ 'status' => 'unhealthy', 'checks' => [ 'mail_smtp' => ['status' => 'down'], ], ]); } finally { Config::set('mail.default', $originalMail); Config::set('mail.mailers.smtp', $originalMailer); } }); });