coolify/tests/Feature/GithubAppPermissionsPathTest.php
Andras Bacsai 576f38da1c feat(github): add self-hosted Actions runner orchestration
Implement end-to-end GitHub Actions runner support with provisioning,
tracking, and cleanup flows.

- handle `workflow_job` webhooks to provision and tear down runners
- add runner config/execution models, enum states, and relationships
- create jobs for provisioning, cleanup, and stale-runner reaping
- schedule periodic stale runner cleanup in the console kernel
- add Livewire server UI to manage runner configuration and executions
- store GitHub App runner permissions and runner group metadata
- add migrations for runner permissions, configs, executions, and group id
- update GitHub permissions URL generation for organization app settings
- include feature/unit tests for runner behavior and permission paths
2026-03-03 14:27:19 +01:00

35 lines
1.1 KiB
PHP

<?php
use App\Models\GithubApp;
use App\Models\Team;
use Illuminate\Foundation\Testing\RefreshDatabase;
uses(RefreshDatabase::class);
function makeGithubApp(array $attributes = []): GithubApp
{
$team = Team::factory()->create();
return GithubApp::create(array_merge([
'uuid' => fake()->uuid(),
'name' => 'My Cool App',
'html_url' => 'https://github.com',
'api_url' => 'https://api.github.com',
'organization' => null,
'team_id' => $team->id,
], $attributes));
}
it('returns user-level permissions path when no organization is set', function () {
$app = makeGithubApp(['name' => 'My Cool App', 'organization' => null]);
expect(getPermissionsPath($app))
->toBe('https://github.com/settings/apps/my-cool-app/permissions');
});
it('returns organization-level permissions path when organization is set', function () {
$app = makeGithubApp(['name' => 'My Cool App', 'organization' => 'coollabsio']);
expect(getPermissionsPath($app))
->toBe('https://github.com/organizations/coollabsio/settings/apps/my-cool-app/permissions');
});