mirror of
https://github.com/tiennm99/coolify.git
synced 2026-06-20 05:43:14 +00:00
0ecd488d6a
Dispatch configuration change events after saving application source and advanced settings, and refresh the configuration checker before showing redeploy diffs.
109 lines
3.8 KiB
PHP
109 lines
3.8 KiB
PHP
<?php
|
|
|
|
use App\Livewire\Project\Application\Advanced;
|
|
use App\Models\Application;
|
|
use App\Models\ApplicationSetting;
|
|
use App\Models\Environment;
|
|
use App\Models\Project;
|
|
use App\Models\Server;
|
|
use App\Models\Team;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Livewire\Livewire;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
function createApplicationForAdvancedStopGracePeriodTest(): Application
|
|
{
|
|
$team = Team::factory()->create();
|
|
$server = Server::factory()->create(['team_id' => $team->id]);
|
|
$project = Project::factory()->create(['team_id' => $team->id]);
|
|
$environment = Environment::factory()->create(['project_id' => $project->id]);
|
|
|
|
return Application::create([
|
|
'name' => 'stop-grace-period-test-app',
|
|
'git_repository' => 'https://github.com/coollabsio/coolify',
|
|
'git_branch' => 'main',
|
|
'build_pack' => 'nixpacks',
|
|
'ports_exposes' => '3000',
|
|
'environment_id' => $environment->id,
|
|
'destination_id' => $server->standaloneDockers()->firstOrFail()->id,
|
|
'destination_type' => $server->standaloneDockers()->firstOrFail()->getMorphClass(),
|
|
]);
|
|
}
|
|
|
|
beforeEach(function () {
|
|
$this->actingAs(User::factory()->create());
|
|
});
|
|
|
|
it('saves a valid stop grace period', function () {
|
|
$application = createApplicationForAdvancedStopGracePeriodTest();
|
|
|
|
Livewire::test(Advanced::class, ['application' => $application])
|
|
->set('stopGracePeriod', '300')
|
|
->call('saveStopGracePeriod')
|
|
->assertHasNoErrors()
|
|
->assertDispatched('success');
|
|
|
|
expect($application->settings()->first()->stop_grace_period)->toBe(300);
|
|
});
|
|
|
|
it('dispatches configuration changed when advanced settings are saved', function () {
|
|
$application = createApplicationForAdvancedStopGracePeriodTest();
|
|
|
|
Livewire::test(Advanced::class, ['application' => $application])
|
|
->set('includeSourceCommitInBuild', true)
|
|
->call('submit')
|
|
->assertHasNoErrors()
|
|
->assertDispatched('configurationChanged');
|
|
});
|
|
|
|
it('clears the stop grace period when submitted empty', function () {
|
|
$application = createApplicationForAdvancedStopGracePeriodTest();
|
|
$application->settings->update(['stop_grace_period' => 300]);
|
|
|
|
Livewire::test(Advanced::class, ['application' => $application->fresh()])
|
|
->set('stopGracePeriod', '')
|
|
->call('saveStopGracePeriod')
|
|
->assertHasNoErrors()
|
|
->assertDispatched('success');
|
|
|
|
expect($application->settings()->first()->stop_grace_period)->toBeNull();
|
|
});
|
|
|
|
it('rejects invalid stop grace periods', function (string $value, string $rule) {
|
|
$application = createApplicationForAdvancedStopGracePeriodTest();
|
|
|
|
Livewire::test(Advanced::class, ['application' => $application])
|
|
->set('stopGracePeriod', $value)
|
|
->call('saveStopGracePeriod')
|
|
->assertHasErrors(['stopGracePeriod' => [$rule]]);
|
|
|
|
expect($application->settings()->first()->stop_grace_period)->toBeNull();
|
|
})->with([
|
|
'below minimum' => ['0', 'min'],
|
|
'above maximum' => [(string) (MAX_STOP_GRACE_PERIOD_SECONDS + 1), 'max'],
|
|
'malformed integer' => ['10abc', 'integer'],
|
|
'decimal' => ['1.9', 'integer'],
|
|
]);
|
|
|
|
it('uses one second deployment timeout in local only when stop grace period is unset', function () {
|
|
config(['app.env' => 'local']);
|
|
|
|
$setting = new ApplicationSetting;
|
|
|
|
expect($setting->deploymentStopGracePeriodSeconds())->toBe(MIN_STOP_GRACE_PERIOD_SECONDS);
|
|
|
|
$setting->stop_grace_period = 10;
|
|
|
|
expect($setting->deploymentStopGracePeriodSeconds())->toBe(10);
|
|
});
|
|
|
|
it('uses default deployment timeout outside local when stop grace period is unset', function () {
|
|
config(['app.env' => 'production']);
|
|
|
|
$setting = new ApplicationSetting;
|
|
|
|
expect($setting->deploymentStopGracePeriodSeconds())->toBe(DEFAULT_STOP_GRACE_PERIOD_SECONDS);
|
|
});
|