archived()->create([ 'workspace_id' => (int) $environment->workspace_id, 'name' => 'Archived environment', ]); $user->tenants()->syncWithoutDetaching([ $archived->getKey() => ['role' => 'owner'], ]); $otherWorkspace = Workspace::factory()->create(); $otherEnvironment = ManagedEnvironment::factory()->create([ 'workspace_id' => (int) $otherWorkspace->getKey(), 'name' => 'Other workspace environment', ]); $user->tenants()->syncWithoutDetaching([ $otherEnvironment->getKey() => ['role' => 'owner'], ]); $this->actingAs($user)->withSession([ WorkspaceContext::SESSION_KEY => (int) $environment->workspace_id, ]); $tenants = Livewire::actingAs($user) ->test(ChooseTenant::class) ->instance() ->getTenants(); expect($tenants->pluck('id')->all())->toBe([(int) $environment->getKey()]); }); it('persists managed-environment context and redirects into the temporary tenant shell', function (): void { [$user, $environment] = createUserWithTenant(role: 'owner', workspaceRole: 'manager'); $this->actingAs($user)->withSession([ WorkspaceContext::SESSION_KEY => (int) $environment->workspace_id, ]); Livewire::actingAs($user) ->test(ChooseTenant::class) ->call('selectTenant', (int) $environment->getKey()) ->assertRedirect(TenantDashboard::getUrl(panel: 'tenant', tenant: $environment)); expect(session(WorkspaceContext::LAST_TENANT_IDS_SESSION_KEY))->toBe([ (string) $environment->workspace_id => (int) $environment->getKey(), ]); }); it('keeps route builders on managed-environment slug for the temporary shell', function (): void { [$user, $environment] = createUserWithTenant(role: 'owner', workspaceRole: 'manager'); $this->actingAs($user)->withSession([ WorkspaceContext::SESSION_KEY => (int) $environment->workspace_id, ]); expect(TenantDashboard::getUrl(panel: 'tenant', tenant: $environment)) ->toContain('/admin/t/'.$environment->slug); });