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 = ManagedEnvironment::factory()->active()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Spec195 Landing ManagedEnvironment', ]); $user->tenants()->syncWithoutDetaching([ $tenant->getKey() => ['role' => 'owner'], ]); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]) ->get(route('admin.workspace.managed-environments.index', ['workspace' => $workspace])) ->assertSuccessful() ->assertSee('Spec195 Landing ManagedEnvironment') ->assertSee(__('localization.shell.managed_environments_title')) ->assertDontSee(__('localization.shell.no_environment_selected')); }); it('routes the managed-tenants landing card into the open-environment 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 = ManagedEnvironment::factory()->active()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Spec195 Routed ManagedEnvironment', ]); $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(ManagedEnvironmentsLanding::class, ['workspace' => $workspace]); $component ->call('openTenant', $tenant->getKey()) ->assertRedirect(EnvironmentDashboard::getUrl(tenant: $tenant)); }); it('keeps the managed-environments landing readable for long identities and larger portfolios', function (): void { $workspace = Workspace::factory()->create([ 'name' => 'Spec195 Enterprise Workspace With A Long Portfolio Name', 'slug' => 'spec195-enterprise-portfolio', ]); $user = User::factory()->create(); WorkspaceMembership::factory()->create([ 'workspace_id' => (int) $workspace->getKey(), 'user_id' => (int) $user->getKey(), 'role' => 'owner', ]); $longName = 'Spec195 Enterprise North America Production Environment With A Very Long Legal Business Unit Name'; $longExternalId = 'spec195-enterprise-north-america-production-environment-01-7e76a2da-7a86-4a16-9e36-4069b7d3de10'; $environmentIds = []; for ($index = 1; $index <= 10; $index++) { $environment = ManagedEnvironment::factory()->active()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => $index === 1 ? $longName : "Spec195 Portfolio Environment {$index}", 'slug' => $index === 1 ? $longExternalId : "spec195-portfolio-environment-{$index}", ]); $environmentIds[$environment->getKey()] = ['role' => 'owner']; } $user->tenants()->syncWithoutDetaching($environmentIds); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]) ->get(route('admin.workspace.managed-environments.index', ['workspace' => $workspace])) ->assertSuccessful() ->assertSee($longName) ->assertSee($longExternalId) ->assertSee('grid grid-cols-1 gap-3 xl:grid-cols-2', false) ->assertSee('[overflow-wrap:anywhere]', false) ->assertSee('break-all', false) ->assertSee('role="list"', false) ->assertSee('Open environment '.$longName, false); }); it('allows workspace-scoped access to open an environment from the landing without explicit membership', 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 = ManagedEnvironment::factory()->active()->create([ 'workspace_id' => (int) $workspace->getKey(), 'name' => 'Spec195 Guarded ManagedEnvironment', ]); $this->withSession([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]); session([WorkspaceContext::SESSION_KEY => (int) $workspace->getKey()]); Livewire::actingAs($user) ->test(ManagedEnvironmentsLanding::class, ['workspace' => $workspace]) ->call('openTenant', $tenant->getKey()) ->assertRedirect(EnvironmentDashboard::getUrl(tenant: $tenant)); });