Snapshot of main at 9f39a6e1e (2026-11-02)

This commit is contained in:
Ronald Huynen committed 2026-11-02 10:41:47 +01:00
commit 6ccf1792d7
2580 files changed
+1040202

No files matched your search

+88
View File
@@ -0,0 +1,88 @@
<?php
namespace Tests\Feature;
use Illuminate\Http\Client\Request;
use Illuminate\Support\Facades\Http;
use Tests\TestCase;
/**
* health:check reports to healthchecks.io: a plain ping when every service is
* fine, /fail with the reasons when one is not (see HealthCheck).
*/
class HealthCheckCommandTest extends TestCase
{
private const PING = 'https://hc-ping.test/abc-123';
protected function setUp(): void
{
parent::setUp();
config([
'cache.default' => 'array',
'timebank_cc.health_monitor.enabled' => true,
'timebank_cc.health_monitor.healthcheck_url' => self::PING,
'timebank_cc.health_monitor.website_url' => 'https://site.test',
'timebank_cc.health_monitor.disk_max_percent' => 100,
'elasticsearch.host' => 'es.test:9200',
]);
}
public function test_a_healthy_run_sends_a_plain_ping(): void
{
Http::fake([
'es.test:9200/*' => Http::response(['status' => 'yellow']),
'site.test*' => Http::response('ok'),
'hc-ping.test/*' => Http::response('OK'),
]);
$this->artisan('health:check')->assertExitCode(0);
Http::assertSent(fn (Request $r) => $r->url() === self::PING);
Http::assertNotSent(fn (Request $r) => str_ends_with($r->url(), '/fail'));
}
public function test_a_failing_service_is_reported_with_its_reason(): void
{
Http::fake([
'es.test:9200/*' => Http::response(['status' => 'red']),
'site.test*' => Http::response('down', 500),
'hc-ping.test/*' => Http::response('OK'),
]);
$this->artisan('health:check')->assertExitCode(1);
Http::assertSent(function (Request $r) {
return $r->url() === self::PING . '/fail'
&& str_contains($r->body(), 'elasticsearch: cluster status red')
&& str_contains($r->body(), 'website: https://site.test answered HTTP 500');
});
}
public function test_a_full_disk_fails(): void
{
config(['timebank_cc.health_monitor.disk_max_percent' => 1]);
Http::fake([
'es.test:9200/*' => Http::response(['status' => 'green']),
'site.test*' => Http::response('ok'),
'hc-ping.test/*' => Http::response('OK'),
]);
$this->artisan('health:check')->assertExitCode(1);
Http::assertSent(fn (Request $r) => $r->url() === self::PING . '/fail'
&& str_contains($r->body(), 'disk:'));
}
public function test_it_runs_every_five_minutes(): void
{
$this->artisan('schedule:list')->expectsOutputToContain('health:check');
$event = collect(app(\Illuminate\Console\Scheduling\Schedule::class)->events())
->first(fn ($e) => str_contains($e->command ?? '', 'health:check'));
$this->assertNotNull($event);
$this->assertSame('*/5 * * * *', $event->expression);
}
}