delete(); $this->actingAs($user) ->get("/admin/t/{$tenant->external_id}") ->assertSuccessful(); }); it('returns 404 for non-members on the tenant dashboard route for archived tenants', function () { $tenant = Tenant::factory()->create(['external_id' => 'archived-tenant-a']); $tenant->delete(); $user = User::factory()->create(); $this->actingAs($user) ->get("/admin/t/{$tenant->external_id}") ->assertNotFound(); }); it('allows members to inspect the admin tenant view for archived tenants', function () { [$user, $tenant] = createUserWithTenant(role: 'owner'); $tenant->delete(); $this->actingAs($user) ->get(TenantResource::getUrl('view', ['record' => $tenant])) ->assertSuccessful() ->assertSee('Archived'); }); it('shows only restore as the lifecycle mutation on archived tenant detail for owners', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); $tenant->delete(); Filament::setTenant(null, true); Livewire::actingAs($user) ->test(ViewTenant::class, ['record' => $tenant->getRouteKey()]) ->assertActionVisible('restore') ->assertActionEnabled('restore') ->assertActionExists('restore', fn (Action $action): bool => $action->getLabel() === 'Restore') ->assertActionHidden('archive') ->assertActionHidden('related_onboarding'); }); it('keeps archived tenant detail inspectable for readonly members while blocking lifecycle mutation', function (): void { [$user, $tenant] = createUserWithTenant(role: 'readonly'); $tenant->delete(); Filament::setTenant(null, true); Livewire::actingAs($user) ->test(ViewTenant::class, ['record' => $tenant->getRouteKey()]) ->assertActionVisible('restore') ->assertActionDisabled('restore') ->assertActionHidden('archive') ->assertActionHidden('related_onboarding'); }); it('keeps archived tenant routes authoritative when another tenant is currently selected', function (): void { [$user, $selectedTenant] = createUserWithTenant(role: 'owner'); $archivedTenant = Tenant::factory()->archived()->create([ 'workspace_id' => (int) $selectedTenant->workspace_id, ]); createUserWithTenant( tenant: $archivedTenant, user: $user, role: 'owner', workspaceRole: 'owner', ensureDefaultMicrosoftProviderConnection: false, ); Filament::setTenant($selectedTenant, true); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $selectedTenant->workspace_id]) ->get(TenantResource::getUrl('view', ['record' => $archivedTenant])) ->assertSuccessful() ->assertSee('Archived'); });