From 3b763d54cccc45fbe74370d3074814a93f5f3633 Mon Sep 17 00:00:00 2001 From: Josh Salway Date: Sun, 3 May 2026 00:03:14 +1000 Subject: [PATCH] test(deploy): remove coercion test to keep PR focused on the fix --- tests/Feature/DeployForceBooleanCastTest.php | 97 -------------------- 1 file changed, 97 deletions(-) delete mode 100644 tests/Feature/DeployForceBooleanCastTest.php diff --git a/tests/Feature/DeployForceBooleanCastTest.php b/tests/Feature/DeployForceBooleanCastTest.php deleted file mode 100644 index 5dc08d29b..000000000 --- a/tests/Feature/DeployForceBooleanCastTest.php +++ /dev/null @@ -1,97 +0,0 @@ -team = Team::factory()->create(); - $this->user = User::factory()->create(); - $this->team->members()->attach($this->user->id, ['role' => 'owner']); - - $plainTextToken = Str::random(40); - $token = $this->user->tokens()->create([ - 'name' => 'test-token', - 'token' => hash('sha256', $plainTextToken), - 'abilities' => ['*'], - 'team_id' => $this->team->id, - ]); - $this->bearerToken = $token->getKey().'|'.$plainTextToken; - - $this->server = Server::factory()->create(['team_id' => $this->team->id]); - $this->destination = StandaloneDocker::factory()->create([ - 'server_id' => $this->server->id, - 'network' => 'coolify-'.Str::lower(Str::random(8)), - ]); - $this->project = Project::factory()->create(['team_id' => $this->team->id]); - $this->environment = Environment::factory()->create(['project_id' => $this->project->id]); - - $this->application = Application::factory()->create([ - 'uuid' => (string) Str::uuid(), - 'environment_id' => $this->environment->id, - 'destination_id' => $this->destination->id, - 'destination_type' => StandaloneDocker::class, - ]); -}); - -// Regression test: $request->input('force') ?? false coerced the string "false" to bool true, -// causing every API deploy with ?force=false to run with --no-cache and bypass layer caching. -// -// Input | input('force') ?? false (old) | boolean('force') (fix) -// ------------|-------------------------------|---------------------- -// "false" | true (bug — non-empty string)| false (correct) -// "true" | true | true -// "0" | false (PHP special-cases "0") | false -// "1" | true | true -// absent/null | false | false - -dataset('falsy force values', [ - 'string false' => ['false'], - 'string 0' => ['0'], -]); - -dataset('truthy force values', [ - 'string true' => ['true'], - 'string 1' => ['1'], -]); - -test('force= query string param does not set force_rebuild', function (string $value) { - $response = $this->withHeaders(['Authorization' => 'Bearer '.$this->bearerToken]) - ->postJson('/api/v1/deploy?uuid='.$this->application->uuid.'&force='.$value); - - $response->assertSuccessful(); - - $deployment = $this->application->deployment_queue()->latest('id')->first(); - expect($deployment)->not()->toBeNull(); - expect($deployment->force_rebuild)->toBeFalse(); -})->with('falsy force values'); - -test('force= query string param sets force_rebuild', function (string $value) { - $response = $this->withHeaders(['Authorization' => 'Bearer '.$this->bearerToken]) - ->postJson('/api/v1/deploy?uuid='.$this->application->uuid.'&force='.$value); - - $response->assertSuccessful(); - - $deployment = $this->application->deployment_queue()->latest('id')->first(); - expect($deployment)->not()->toBeNull(); - expect($deployment->force_rebuild)->toBeTrue(); -})->with('truthy force values'); - -test('omitting force param does not set force_rebuild', function () { - $response = $this->withHeaders(['Authorization' => 'Bearer '.$this->bearerToken]) - ->postJson('/api/v1/deploy?uuid='.$this->application->uuid); - - $response->assertSuccessful(); - - $deployment = $this->application->deployment_queue()->latest('id')->first(); - expect($deployment)->not()->toBeNull(); - expect($deployment->force_rebuild)->toBeFalse(); -});