create(['slug' => 'spec195-managed-tenants']); $user = User::factory()->create(); WorkspaceMembership::factory()->create([ 'workspace_id' => (int) $workspace->getKey(), 'user_id' => (int) $user->getKey(), 'role' => 'owner', ]); $tenant = Tenant::factory()->active()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Spec195 Landing Tenant', ]); $user->tenants()->syncWithoutDetaching([ $tenant->getKey() => ['role' => 'owner'], ]); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]) ->get(route('admin.workspace.managed-tenants.index', ['workspace' => $workspace])) ->assertSuccessful() ->assertSee('Spec195 Landing Tenant') ->assertSee('Managed tenants') ->assertDontSee('No tenant selected'); }); it('routes the managed-tenants landing back into the chooser flow and open-tenant flow', function (): void { $workspace = Workspace::factory()->create(['slug' => 'spec195-managed-routing']); $user = User::factory()->create(); WorkspaceMembership::factory()->create([ 'workspace_id' => (int) $workspace->getKey(), 'user_id' => (int) $user->getKey(), 'role' => 'owner', ]); $tenant = Tenant::factory()->active()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Spec195 Routed Tenant', ]); $user->tenants()->syncWithoutDetaching([ $tenant->getKey() => ['role' => 'owner'], ]); $this->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]); session([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]); $component = Livewire::actingAs($user) ->test(ManagedTenantsLanding::class, ['workspace' => $workspace]); $component ->call('goToChooseTenant') ->assertRedirect(ChooseTenant::getUrl()); $this->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]); session([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]); Livewire::actingAs($user) ->test(ManagedTenantsLanding::class, ['workspace' => $workspace]) ->call('openTenant', $tenant->getKey()) ->assertRedirect(TenantResource::getUrl('view', ['record' => $tenant])); }); it('rejects opening a tenant from the landing when the actor lacks tenant entitlement', function (): void { $workspace = Workspace::factory()->create(['slug' => 'spec195-managed-guard']); $user = User::factory()->create(); WorkspaceMembership::factory()->create([ 'workspace_id' => (int) $workspace->getKey(), 'user_id' => (int) $user->getKey(), 'role' => 'owner', ]); $tenant = Tenant::factory()->active()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Spec195 Guarded Tenant', ]); $this->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]); session([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]); Livewire::actingAs($user) ->test(ManagedTenantsLanding::class, ['workspace' => $workspace]) ->call('openTenant', $tenant->getKey()) ->assertNotFound(); });