TenantAtlas/tests/Feature/Workspaces/WorkspaceSelectionTest.php
2026-02-01 12:19:57 +01:00

80 lines
2.6 KiB
PHP

<?php
use App\Models\User;
use App\Models\Workspace;
use App\Models\WorkspaceMembership;
it('uses session workspace id when valid', function () {
$user = User::factory()->create();
$workspace = Workspace::factory()->create();
WorkspaceMembership::factory()->for($workspace)->for($user)->create(['role' => 'owner']);
$this->actingAs($user);
session([\App\Support\Workspaces\WorkspaceContext::SESSION_KEY => $workspace->getKey()]);
$this->get('/admin/_test/workspace-context')
->assertSuccessful()
->assertJson([
'workspace_id' => $workspace->getKey(),
]);
});
it('falls back to last_workspace_id when session workspace is invalid', function () {
$user = User::factory()->create();
$workspace = Workspace::factory()->create();
WorkspaceMembership::factory()->for($workspace)->for($user)->create(['role' => 'owner']);
$user->forceFill(['last_workspace_id' => $workspace->getKey()])->save();
$this->actingAs($user);
session([\App\Support\Workspaces\WorkspaceContext::SESSION_KEY => 999999]);
$this->get('/admin/_test/workspace-context')
->assertSuccessful()
->assertJson([
'workspace_id' => $workspace->getKey(),
]);
});
it('auto-selects the only membership workspace when nothing is selected', function () {
$user = User::factory()->create();
$workspace = Workspace::factory()->create();
WorkspaceMembership::factory()->for($workspace)->for($user)->create(['role' => 'owner']);
$this->actingAs($user);
$this->get('/admin/_test/workspace-context')
->assertSuccessful()
->assertJson([
'workspace_id' => $workspace->getKey(),
]);
expect($user->fresh()->last_workspace_id)->toBe($workspace->getKey());
});
it('redirects to no-access when user has zero workspace memberships', function () {
$user = User::factory()->create();
$this->actingAs($user);
$this->get('/admin/_test/workspace-context')
->assertRedirect('/admin/no-access');
});
it('redirects to choose-workspace when user has multiple workspaces and none selected', function () {
$user = User::factory()->create();
$workspaceA = Workspace::factory()->create();
$workspaceB = Workspace::factory()->create();
WorkspaceMembership::factory()->for($workspaceA)->for($user)->create(['role' => 'owner']);
WorkspaceMembership::factory()->for($workspaceB)->for($user)->create(['role' => 'owner']);
$this->actingAs($user);
$this->get('/admin/_test/workspace-context')
->assertRedirect('/admin/choose-workspace');
});