Files
coolify/tests/Feature/Jobs/CheckAndStartSentinelJobTest.php
Andras Bacsai 41ed5b7a69 test: fix stale and flaky tests
- Update tests whose expectations no longer matched intended changes
  (GitHub App redirect, wildcard domains, container IDs, nightly
  install folders, localhost metadata, Sentinel restart on save)
- Seed the instance settings the 2FA profile test needs
- Run the global Pest hooks for all test folders and release the
  Laravel application after each test, so tests do not leak state
- Replace a class alias mock that broke later tests
- Generate factory names that always pass name validation; Faker names
  with apostrophes or short words made form tests fail at random
2026-10-06 13:01:49 +02:00

64 lines
2.3 KiB
PHP

<?php
use App\Models\Server;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Queue;
uses(RefreshDatabase::class);
beforeEach(function () {
Server::flushIdentityMap();
// Changing is_metrics_enabled queues a Sentinel restart (ServerSetting::booted()); these tests
// only check the enabled state, so keep the sync queue from starting Sentinel.
Queue::fake();
});
it('treats Sentinel as enabled for regular servers even when the legacy flag and metrics are disabled', function () {
DB::table('instance_settings')->insert(['id' => 0]);
$user = User::factory()->create();
$server = Server::factory()->create([
'team_id' => $user->teams()->first()->id,
]);
$server->settings->update([
'is_metrics_enabled' => false,
'is_sentinel_enabled' => false,
]);
expect($server->fresh()->isSentinelEnabled())->toBeTrue();
});
it('does not enable Sentinel for excluded server types', function (array $settings, array $metadata = []) {
DB::table('instance_settings')->insert(['id' => 0]);
$user = User::factory()->create();
$server = Server::factory()->create([
'team_id' => $user->teams()->first()->id,
'server_metadata' => $metadata,
]);
$server->settings->update(array_merge([
'is_metrics_enabled' => false,
'is_sentinel_enabled' => true,
], $settings));
expect($server->fresh()->isSentinelEnabled())->toBeFalse();
})->with([
'build server' => [['server_role' => 'build', 'is_build_server' => true]],
'swarm manager' => [['is_swarm_manager' => true]],
'swarm worker' => [['is_swarm_worker' => true]],
'transferred server' => [[], ['transfer' => ['status' => 'transferred']]],
'force-disabled server' => [['force_disabled' => true]],
]);
it('keeps metrics optional while Sentinel remains enabled', function () {
DB::table('instance_settings')->insert(['id' => 0]);
$user = User::factory()->create();
$server = Server::factory()->create([
'team_id' => $user->teams()->first()->id,
]);
$server->settings->update(['is_metrics_enabled' => false]);
expect($server->fresh()->isSentinelEnabled())->toBeTrue()
->and((bool) $server->settings->fresh()->is_metrics_enabled)->toBeFalse();
});