create(['slug' => 'lifecycle-ws']); $user = User::factory()->create(); WorkspaceMembership::factory()->create([ 'workspace_id' => (int) $workspace->getKey(), 'user_id' => (int) $user->getKey(), 'role' => 'owner', ]); $active = Tenant::factory()->active()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Active Tenant', ]); $onboarding = Tenant::factory()->onboarding()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Onboarding Tenant', ]); $archived = Tenant::factory()->archived()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Archived Tenant', ]); $outsider = Tenant::factory()->active()->create(['name' => 'Other Workspace Tenant']); $user->tenants()->syncWithoutDetaching([ $active->getKey() => ['role' => 'owner'], $onboarding->getKey() => ['role' => 'owner'], $archived->getKey() => ['role' => 'owner'], $outsider->getKey() => ['role' => 'owner'], ]); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]) ->get(route('admin.workspace.managed-tenants.index', ['workspace' => $workspace])) ->assertSuccessful() ->assertSee('Active Tenant') ->assertSee('Onboarding Tenant') ->assertSee('Archived Tenant') ->assertSee('Active') ->assertSee('Onboarding') ->assertSee('Archived') ->assertDontSee('Other Workspace Tenant'); }); it('keeps managed tenants discoverable with no selected tenant context', function (): void { $workspace = Workspace::factory()->create(['slug' => 'discoverable-managed-tenants']); $user = User::factory()->create(); WorkspaceMembership::factory()->create([ 'workspace_id' => (int) $workspace->getKey(), 'user_id' => (int) $user->getKey(), 'role' => 'owner', ]); $onboardingTenant = Tenant::factory()->onboarding()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Discoverable Onboarding Tenant', ]); $draftTenant = Tenant::factory()->draft()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Discoverable Draft Tenant', ]); $archivedTenant = Tenant::factory()->archived()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Discoverable Archived Tenant', ]); $user->tenants()->syncWithoutDetaching([ $draftTenant->getKey() => ['role' => 'owner'], $onboardingTenant->getKey() => ['role' => 'owner'], $archivedTenant->getKey() => ['role' => 'owner'], ]); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]) ->get(route('admin.workspace.managed-tenants.index', ['workspace' => $workspace])) ->assertSuccessful() ->assertSee('Discoverable Draft Tenant') ->assertSee('Discoverable Onboarding Tenant') ->assertSee('Discoverable Archived Tenant'); }); it('keeps administrative landing discoverability broader than choose-tenant selection', function (): void { $workspace = Workspace::factory()->create(['slug' => 'landing-vs-selector']); $user = User::factory()->create(); WorkspaceMembership::factory()->create([ 'workspace_id' => (int) $workspace->getKey(), 'user_id' => (int) $user->getKey(), 'role' => 'owner', ]); $activeTenant = Tenant::factory()->active()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Landing Active Tenant', ]); $draftTenant = Tenant::factory()->draft()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Landing Draft Tenant', ]); $onboardingTenant = Tenant::factory()->onboarding()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Landing Onboarding Tenant', ]); $archivedTenant = Tenant::factory()->archived()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Landing Archived Tenant', ]); $user->tenants()->syncWithoutDetaching([ $activeTenant->getKey() => ['role' => 'owner'], $draftTenant->getKey() => ['role' => 'owner'], $onboardingTenant->getKey() => ['role' => 'owner'], $archivedTenant->getKey() => ['role' => 'owner'], ]); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]) ->get(route('admin.workspace.managed-tenants.index', ['workspace' => $workspace])) ->assertSuccessful() ->assertSee('Landing Active Tenant') ->assertSee('Landing Draft Tenant') ->assertSee('Landing Onboarding Tenant') ->assertSee('Landing Archived Tenant'); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]) ->get('/admin/choose-tenant') ->assertSuccessful() ->assertSee('Landing Active Tenant') ->assertDontSee('Landing Draft Tenant') ->assertDontSee('Landing Onboarding Tenant') ->assertDontSee('Landing Archived Tenant'); });