create(); $organisation = Organisation::factory()->create(['owner_id' => $user->id]); $response = $this->actingAs($user)->get(route('registries.create', [ 'organisation' => $organisation->id, ])); $response->assertOk(); $response->assertInertia(fn (AssertableInertia $page) => $page ->component('registries/Create', false) ->where('registryTypes.0', RegistryType::GENERIC->value)); }); it('lists registries for an organisation', function () { $user = User::factory()->create(); $organisation = Organisation::factory()->create(['owner_id' => $user->id]); $organisation->registries()->create([ 'name' => 'GHCR', 'type' => RegistryType::GHCR, 'url' => 'ghcr.io/example', 'credentials' => ['username' => 'keystone', 'password' => 'secret'], ]); $this->actingAs($user) ->get(route('registries.index', $organisation)) ->assertOk() ->assertInertia(fn (AssertableInertia $page) => $page ->component('registries/Index', false) ->has('registries', 1) ->where('registries.0.name', 'GHCR')); }); it('stores a registry for multi-server build artifacts', function () { $user = User::factory()->create(); $organisation = Organisation::factory()->create(['owner_id' => $user->id]); $response = $this->actingAs($user)->post(route('registries.store', [ 'organisation' => $organisation->id, ]), [ 'name' => 'GHCR', 'type' => RegistryType::GHCR->value, 'url' => 'ghcr.io/example/', 'username' => 'keystone', 'password' => 'secret', ]); $response->assertRedirect(route('organisations.show', [ 'organisation' => $organisation->id, ])); $registry = $organisation->registries()->firstOrFail(); expect($registry->name)->toBe('GHCR') ->and($registry->type)->toBe(RegistryType::GHCR) ->and($registry->url)->toBe('ghcr.io/example') ->and($registry->credentials)->toMatchArray([ 'username' => 'keystone', 'password' => 'secret', ]); }); it('shows registry usage from published build artifacts', function () { $user = User::factory()->create(); $organisation = Organisation::factory()->create(['owner_id' => $user->id]); $registry = $organisation->registries()->create([ 'name' => 'GHCR', 'type' => RegistryType::GHCR, 'url' => 'ghcr.io/example', 'credentials' => ['username' => 'keystone', 'password' => 'secret'], ]); $application = Application::factory()->for($organisation)->create(); $environment = Environment::factory()->for($application)->create(); BuildArtifact::query()->create([ 'environment_id' => $environment->id, 'commit_sha' => 'abc123', 'image_tag' => 'app:abc123', 'registry_ref' => 'ghcr.io/example/app:abc123', ]); $this->actingAs($user) ->get(route('registries.show', [$organisation, $registry])) ->assertOk() ->assertInertia(fn (AssertableInertia $page) => $page ->component('registries/Show', false) ->where('registry.id', $registry->id) ->where('artifactCount', 1) ->where('environmentCount', 1) ->has('artifacts.data', 1)); });