80 lines
2.6 KiB
PHP
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');
|
|
});
|