fix(application): clarify deployment type precedence logic
- Prioritize real private keys (id > 0) first - Check source second before falling back to zero key - Remove isDev() check that was restricting zero key behavior in dev - Remove exception throw, use 'other' as safe fallback - Expand test coverage to validate all precedence scenarios
This commit is contained in:
parent
2b65eaa2b4
commit
0991f8e2ca
2 changed files with 59 additions and 9 deletions
|
|
@ -989,17 +989,24 @@ public function isPRDeployable(): bool
|
||||||
|
|
||||||
public function deploymentType()
|
public function deploymentType()
|
||||||
{
|
{
|
||||||
if (isDev() && data_get($this, 'private_key_id') === 0) {
|
$privateKeyId = data_get($this, 'private_key_id');
|
||||||
|
|
||||||
|
// Real private key (id > 0) always takes precedence
|
||||||
|
if ($privateKeyId !== null && $privateKeyId > 0) {
|
||||||
return 'deploy_key';
|
return 'deploy_key';
|
||||||
}
|
}
|
||||||
if (! is_null(data_get($this, 'private_key_id'))) {
|
|
||||||
return 'deploy_key';
|
// GitHub/GitLab App source
|
||||||
} elseif (data_get($this, 'source')) {
|
if (data_get($this, 'source')) {
|
||||||
return 'source';
|
return 'source';
|
||||||
} else {
|
|
||||||
return 'other';
|
|
||||||
}
|
}
|
||||||
throw new \Exception('No deployment type found');
|
|
||||||
|
// Localhost key (id = 0) when no source is configured
|
||||||
|
if ($privateKeyId === 0) {
|
||||||
|
return 'deploy_key';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'other';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function could_set_build_commands(): bool
|
public function could_set_build_commands(): bool
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,54 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Models\Application;
|
use App\Models\Application;
|
||||||
|
use App\Models\GithubApp;
|
||||||
|
|
||||||
it('treats zero private key id as deploy key', function () {
|
it('returns deploy_key when private_key_id is a real key', function () {
|
||||||
$application = new Application();
|
$application = new Application;
|
||||||
|
$application->private_key_id = 5;
|
||||||
|
|
||||||
|
expect($application->deploymentType())->toBe('deploy_key');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns deploy_key when private_key_id is a real key even with source', function () {
|
||||||
|
$application = Mockery::mock(Application::class)->makePartial();
|
||||||
|
$application->private_key_id = 5;
|
||||||
|
$application->shouldReceive('getAttribute')->with('source')->andReturn(new GithubApp);
|
||||||
|
$application->shouldReceive('getAttribute')->with('private_key_id')->andReturn(5);
|
||||||
|
|
||||||
|
expect($application->deploymentType())->toBe('deploy_key');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns source when private_key_id is null and source exists', function () {
|
||||||
|
$application = Mockery::mock(Application::class)->makePartial();
|
||||||
|
$application->private_key_id = null;
|
||||||
|
$application->shouldReceive('getAttribute')->with('source')->andReturn(new GithubApp);
|
||||||
|
$application->shouldReceive('getAttribute')->with('private_key_id')->andReturn(null);
|
||||||
|
|
||||||
|
expect($application->deploymentType())->toBe('source');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns source when private_key_id is zero and source exists', function () {
|
||||||
|
$application = Mockery::mock(Application::class)->makePartial();
|
||||||
|
$application->private_key_id = 0;
|
||||||
|
$application->shouldReceive('getAttribute')->with('source')->andReturn(new GithubApp);
|
||||||
|
$application->shouldReceive('getAttribute')->with('private_key_id')->andReturn(0);
|
||||||
|
|
||||||
|
expect($application->deploymentType())->toBe('source');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('returns deploy_key when private_key_id is zero and no source', function () {
|
||||||
|
$application = new Application;
|
||||||
$application->private_key_id = 0;
|
$application->private_key_id = 0;
|
||||||
$application->source = null;
|
$application->source = null;
|
||||||
|
|
||||||
expect($application->deploymentType())->toBe('deploy_key');
|
expect($application->deploymentType())->toBe('deploy_key');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('returns other when private_key_id is null and no source', function () {
|
||||||
|
$application = Mockery::mock(Application::class)->makePartial();
|
||||||
|
$application->shouldReceive('getAttribute')->with('source')->andReturn(null);
|
||||||
|
$application->shouldReceive('getAttribute')->with('private_key_id')->andReturn(null);
|
||||||
|
|
||||||
|
expect($application->deploymentType())->toBe('other');
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue