team = Team::factory()->create(); $this->server = Server::factory()->create(['team_id' => $this->team->id]); $this->destination = StandaloneDocker::factory()->create([ 'server_id' => $this->server->id, 'network' => 'test-network-'.fake()->unique()->word(), ]); $this->project = Project::factory()->create(['team_id' => $this->team->id]); $this->environment = Environment::factory()->create(['project_id' => $this->project->id]); }); function makeApplication(int $environmentId, int $destinationId, ?string $gitCommitSha): Application { $attributes = [ 'environment_id' => $environmentId, 'destination_id' => $destinationId, 'destination_type' => StandaloneDocker::class, ]; if ($gitCommitSha !== null) { $attributes['git_commit_sha'] = $gitCommitSha; } return Application::factory()->create($attributes); } describe('queue_application_deployment commit resolution', function () { test('uses application git_commit_sha when commit parameter omitted', function () { $pinnedSha = 'abc123def456abc123def456abc123def456abc1'; $application = makeApplication($this->environment->id, $this->destination->id, $pinnedSha); $result = queue_application_deployment( application: $application, deployment_uuid: 'test-deploy-uuid-1', ); expect($result['status'])->toBe('queued'); $deployment = ApplicationDeploymentQueue::where('deployment_uuid', 'test-deploy-uuid-1')->first(); expect($deployment)->not->toBeNull(); expect($deployment->commit)->toBe($pinnedSha); }); test('falls back to HEAD when both commit parameter and git_commit_sha are unset', function () { $application = makeApplication($this->environment->id, $this->destination->id, 'HEAD'); $result = queue_application_deployment( application: $application, deployment_uuid: 'test-deploy-uuid-2', ); expect($result['status'])->toBe('queued'); $deployment = ApplicationDeploymentQueue::where('deployment_uuid', 'test-deploy-uuid-2')->first(); expect($deployment->commit)->toBe('HEAD'); }); test('explicit commit parameter overrides application git_commit_sha', function () { $pinnedSha = 'abc123def456abc123def456abc123def456abc1'; $webhookSha = '111222333444555666777888999000aaabbbccc1'; $application = makeApplication($this->environment->id, $this->destination->id, $pinnedSha); $result = queue_application_deployment( application: $application, deployment_uuid: 'test-deploy-uuid-3', commit: $webhookSha, ); expect($result['status'])->toBe('queued'); $deployment = ApplicationDeploymentQueue::where('deployment_uuid', 'test-deploy-uuid-3')->first(); expect($deployment->commit)->toBe($webhookSha); }); test('treats empty string commit parameter as unset and uses git_commit_sha', function () { $pinnedSha = 'abc123def456abc123def456abc123def456abc1'; $application = makeApplication($this->environment->id, $this->destination->id, $pinnedSha); $result = queue_application_deployment( application: $application, deployment_uuid: 'test-deploy-uuid-4', commit: '', ); expect($result['status'])->toBe('queued'); $deployment = ApplicationDeploymentQueue::where('deployment_uuid', 'test-deploy-uuid-4')->first(); expect($deployment->commit)->toBe($pinnedSha); }); });