create()); }); it('shows the onboarding page with all steps incomplete', function () { $organisation = Organisation::factory()->create(); $response = $this->get(route('onboarding.show', ['organisation' => $organisation->id])); $response->assertStatus(200); $response->assertInertia(fn (AssertableInertia $page) => $page ->component('onboarding/Show', false) ->where('nextStep.key', 'provider')); }); it('advances the next step once a provider exists', function () { $organisation = Organisation::factory()->create(); Provider::factory()->forOrganisation($organisation)->create(); $response = $this->get(route('onboarding.show', ['organisation' => $organisation->id])); $response->assertStatus(200); $response->assertInertia(fn (AssertableInertia $page) => $page ->where('nextStep.key', 'source')); }); it('falls back to the last step when everything is complete', function () { $organisation = Organisation::factory()->create(); $provider = Provider::factory()->forOrganisation($organisation)->create(); $organisation->sourceProviders()->create([ 'name' => 'GitHub', 'type' => 'github', ]); $organisation->registries()->create([ 'name' => 'gh', 'type' => 'ghcr', 'url' => 'ghcr.io', ]); Application::factory()->create(['organisation_id' => $organisation->id]); $network = $organisation->networks()->create([ 'name' => 'keystone', 'provider_id' => $provider->id, 'ip_range' => '10.0.0.0/24', ]); \App\Models\Server::factory() ->forOrganisation($organisation->id) ->forProvider($provider->id) ->forNetwork((string) $network->id) ->create(); $response = $this->get(route('onboarding.show', ['organisation' => $organisation->id])); $response->assertStatus(200); $response->assertInertia(fn (AssertableInertia $page) => $page ->where('nextStep.key', 'application')); });