active()->create(['name' => 'Choose Active ManagedEnvironment']); [$user, $activeEnvironment] = createUserWithTenant(tenant: $activeEnvironment, role: 'owner'); $otherActiveTenant = ManagedEnvironment::factory()->active()->create([ 'workspace_id' => (int) $activeEnvironment->workspace_id, 'name' => 'Choose Other Active ManagedEnvironment', ]); $onboardingTenant = ManagedEnvironment::factory()->onboarding()->create([ 'workspace_id' => (int) $activeEnvironment->workspace_id, 'name' => 'Choose Onboarding ManagedEnvironment', ]); $archivedTenant = ManagedEnvironment::factory()->archived()->create([ 'workspace_id' => (int) $activeEnvironment->workspace_id, 'name' => 'Choose Archived ManagedEnvironment', ]); createUserWithTenant(tenant: $otherActiveTenant, user: $user, role: 'owner'); createUserWithTenant(tenant: $onboardingTenant, user: $user, role: 'owner', ensureDefaultMicrosoftProviderConnection: false); createUserWithTenant(tenant: $archivedTenant, user: $user, role: 'owner', ensureDefaultMicrosoftProviderConnection: false); Filament::setTenant(null, true); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $activeEnvironment->workspace_id]) ->get('/admin/choose-environment') ->assertSuccessful() ->assertSee('Choose Active ManagedEnvironment') ->assertSee('Choose Other Active ManagedEnvironment') ->assertDontSee('Choose Onboarding ManagedEnvironment') ->assertDontSee('Choose Archived ManagedEnvironment') ->assertSee(__('localization.shell.choose_environment_description')) ->assertSee(__('localization.shell.workspace_wide_available_without_environment')) ->assertSee('data-testid="choose-environment-search"', false) ->assertSee('data-testid="choose-environment-add"', false) ->assertSee('data-testid="choose-environment-switch-workspace"', false) ->assertDontSee('MANAGED_ENVIRONMENT'); }); it('filters selectable environments without leaking non-matching cards', function (): void { $alphaEnvironment = ManagedEnvironment::factory()->active()->create([ 'name' => 'Alpha Production Environment', 'domain' => 'alpha.example.test', ]); [$user, $alphaEnvironment] = createUserWithTenant( tenant: $alphaEnvironment, role: 'owner', ensureDefaultMicrosoftProviderConnection: false, ); $betaEnvironment = ManagedEnvironment::factory()->active()->create([ 'workspace_id' => (int) $alphaEnvironment->workspace_id, 'name' => 'Beta Sandbox Environment', 'domain' => 'beta.example.test', ]); createUserWithTenant( tenant: $betaEnvironment, user: $user, role: 'owner', ensureDefaultMicrosoftProviderConnection: false, ); Filament::setTenant(null, true); $this->actingAs($user); setAdminPanelContext(); session()->put(WorkspaceContext::SESSION_KEY, (int) $alphaEnvironment->workspace_id); Livewire::actingAs($user) ->test(ChooseEnvironment::class) ->assertSee('Alpha Production Environment') ->assertSee('Beta Sandbox Environment') ->set('search', 'beta') ->assertSet('search', 'beta') ->assertSee('Beta Sandbox Environment') ->assertSee('beta.example.test') ->assertDontSee('Alpha Production Environment') ->assertSee(__('localization.shell.environment_search_results_count', ['visible' => 1, 'total' => 2])) ->set('search', 'missing-environment') ->assertSee(__('localization.shell.no_environment_search_results')) ->assertDontSee('Alpha Production Environment') ->assertDontSee('Beta Sandbox Environment'); }); it('shows a workspace-safe empty state when no selectable tenants remain', function (): void { $onboardingTenant = ManagedEnvironment::factory()->onboarding()->create(['name' => 'Only Onboarding ManagedEnvironment']); [$user, $onboardingTenant] = createUserWithTenant( tenant: $onboardingTenant, role: 'owner', ensureDefaultMicrosoftProviderConnection: false, ); Filament::setTenant(null, true); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $onboardingTenant->workspace_id]) ->get('/admin/choose-environment') ->assertSuccessful() ->assertSee(__('localization.shell.no_active_environments')) ->assertSee(__('localization.shell.no_active_environments_description')) ->assertSee(__('localization.shell.view_managed_environments')); }); it('keeps selector eligibility narrower than managed-tenant administrative discoverability', function (): void { $activeEnvironment = ManagedEnvironment::factory()->active()->create(['name' => 'Selector Active ManagedEnvironment']); [$user, $activeEnvironment] = createUserWithTenant(tenant: $activeEnvironment, role: 'owner', ensureDefaultMicrosoftProviderConnection: false); $onboardingTenant = ManagedEnvironment::factory()->onboarding()->create([ 'workspace_id' => (int) $activeEnvironment->workspace_id, 'name' => 'Selector Onboarding ManagedEnvironment', ]); $archivedTenant = ManagedEnvironment::factory()->archived()->create([ 'workspace_id' => (int) $activeEnvironment->workspace_id, 'name' => 'Selector Archived ManagedEnvironment', ]); createUserWithTenant(tenant: $onboardingTenant, user: $user, role: 'owner', workspaceRole: 'owner', ensureDefaultMicrosoftProviderConnection: false); createUserWithTenant(tenant: $archivedTenant, user: $user, role: 'owner', workspaceRole: 'owner', ensureDefaultMicrosoftProviderConnection: false); Filament::setTenant(null, true); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $activeEnvironment->workspace_id]) ->get('/admin/choose-environment') ->assertSuccessful() ->assertSee('Selector Active ManagedEnvironment') ->assertDontSee('Selector Onboarding ManagedEnvironment') ->assertDontSee('Selector Archived ManagedEnvironment'); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $activeEnvironment->workspace_id]) ->get(route('admin.workspace.managed-environments.index', ['workspace' => $activeEnvironment->workspace])) ->assertSuccessful() ->assertSee('Selector Active ManagedEnvironment') ->assertSee('Selector Onboarding ManagedEnvironment') ->assertSee('Selector Archived ManagedEnvironment'); }); it('redirects clear selected tenant from tenant-bound pages back to a workspace-safe managed-tenants page', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); Filament::setTenant($tenant, true); $this->actingAs($user) ->withSession([ WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id, WorkspaceContext::LAST_ENVIRONMENT_IDS_SESSION_KEY => [ (string) $tenant->workspace_id => (int) $tenant->getKey(), ], ]) ->from(EnvironmentDashboard::getUrl(tenant: $tenant)) ->post(route('admin.clear-environment-context')) ->assertRedirect(route('admin.workspace.managed-environments.index', ['workspace' => $tenant->workspace])); $this->withSession([ WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id, ])->get(route('admin.operations.index', ['workspace' => $tenant->workspace])) ->assertSuccessful() ->assertDontSee(__('localization.shell.all_environments')); }); it('redirects clear selected tenant from the evidence index to the workspace-safe evidence overview', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); Filament::setTenant($tenant, true); $evidenceIndexPath = (string) parse_url(EvidenceSnapshotResource::getUrl('index', tenant: $tenant, panel: 'admin'), PHP_URL_PATH); $this->actingAs($user) ->withSession([ WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id, WorkspaceContext::LAST_ENVIRONMENT_IDS_SESSION_KEY => [ (string) $tenant->workspace_id => (int) $tenant->getKey(), ], ]) ->from($evidenceIndexPath) ->post(route('admin.clear-environment-context')) ->assertRedirect(route('admin.evidence.overview')); $this->withSession([ WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id, ])->get(route('admin.evidence.overview')) ->assertSuccessful() ->assertSee('No evidence snapshots in this scope'); });