browser()->timeout(10_000); it('restores the canonical draft route, derived stage, and transient secret inputs after a refresh', function (): void { $workspace = Workspace::factory()->create(); $tenant = Tenant::factory()->create([ 'workspace_id' => (int) $workspace->getKey(), 'tenant_id' => '20202020-2020-2020-2020-202020202020', 'name' => 'Browser Refresh Tenant', 'status' => Tenant::STATUS_ONBOARDING, ]); $user = User::factory()->create(['name' => 'Browser Owner']); createUserWithTenant( tenant: $tenant, user: $user, role: 'owner', workspaceRole: 'owner', ensureDefaultMicrosoftProviderConnection: false, ); $connection = ProviderConnection::factory()->platform()->consentGranted()->create([ 'workspace_id' => (int) $workspace->getKey(), 'tenant_id' => (int) $tenant->getKey(), 'provider' => 'microsoft', 'entra_tenant_id' => (string) $tenant->tenant_id, 'display_name' => 'Browser platform connection', 'is_default' => true, 'status' => 'connected', ]); $draft = createOnboardingDraft([ 'workspace' => $workspace, 'tenant' => $tenant, 'started_by' => $user, 'updated_by' => $user, 'current_step' => 'connection', 'state' => [ 'entra_tenant_id' => (string) $tenant->tenant_id, 'tenant_name' => (string) $tenant->name, 'environment' => 'prod', 'provider_connection_id' => (int) $connection->getKey(), ], ]); $this->actingAs($user)->withSession([ WorkspaceContext::SESSION_KEY => (int) $workspace->getKey(), ]); session()->put(WorkspaceContext::SESSION_KEY, (int) $workspace->getKey()); $visibleSelectValue = <<<'JS' (() => { const select = [...document.querySelectorAll('select')].find((element) => { const style = window.getComputedStyle(element); return style.display !== 'none' && style.visibility !== 'hidden'; }); return select?.value ?? null; })() JS; $page = visit(route('admin.onboarding.draft', ['onboardingDraft' => (int) $draft->getKey()])); $page ->assertNoJavaScriptErrors() ->assertRoute('admin.onboarding.draft', ['onboardingDraft' => (int) $draft->getKey()]) ->assertSee('Onboarding draft') ->assertSee('Browser Refresh Tenant') ->assertSee('Verify access') ->assertSee('Status: Not started') ->refresh() ->waitForText('Status: Not started') ->assertNoJavaScriptErrors() ->assertRoute('admin.onboarding.draft', ['onboardingDraft' => (int) $draft->getKey()]) ->assertSee('Verify access') ->assertSee('Status: Not started') ->click('Provider connection') ->assertScript($visibleSelectValue, (string) $connection->getKey()) ->click('Create new connection') ->check('internal:label="Dedicated override"s') ->fill('[type="password"]', 'browser-only-secret') ->assertValue('[type="password"]', 'browser-only-secret') ->refresh() ->waitForText('Status: Not started') ->assertRoute('admin.onboarding.draft', ['onboardingDraft' => (int) $draft->getKey()]) ->assertSee('Verify access') ->click('Provider connection') ->assertScript($visibleSelectValue, (string) $connection->getKey()) ->click('Create new connection') ->check('internal:label="Dedicated override"s') ->assertValue('[type="password"]', ''); });