69 lines
2.5 KiB
PHP
69 lines
2.5 KiB
PHP
<?php
|
|
|
|
use App\Models\User;
|
|
use App\Models\Workspace;
|
|
use App\Models\WorkspaceMembership;
|
|
use App\Support\Workspaces\WorkspaceContext;
|
|
|
|
it('invalidates selection and redirects to no-access when the only membership workspace is archived', function () {
|
|
$user = User::factory()->create();
|
|
$workspace = Workspace::factory()->create();
|
|
|
|
WorkspaceMembership::factory()->for($workspace)->for($user)->create(['role' => 'owner']);
|
|
|
|
$workspace->forceFill(['archived_at' => now()])->save();
|
|
|
|
$this->actingAs($user);
|
|
session([WorkspaceContext::SESSION_KEY => $workspace->getKey()]);
|
|
|
|
$this->get('/admin/_test/workspace-context')
|
|
->assertRedirect('/admin/no-access');
|
|
|
|
expect(session()->get(WorkspaceContext::SESSION_KEY))->toBeNull();
|
|
expect($user->fresh()->last_workspace_id)->toBeNull();
|
|
});
|
|
|
|
it('auto-selects another active workspace when the current selection becomes archived', function () {
|
|
$user = User::factory()->create();
|
|
|
|
$archived = Workspace::factory()->create();
|
|
$active = Workspace::factory()->create();
|
|
|
|
WorkspaceMembership::factory()->for($archived)->for($user)->create(['role' => 'owner']);
|
|
WorkspaceMembership::factory()->for($active)->for($user)->create(['role' => 'owner']);
|
|
|
|
$archived->forceFill(['archived_at' => now()])->save();
|
|
|
|
$this->actingAs($user);
|
|
session([WorkspaceContext::SESSION_KEY => $archived->getKey()]);
|
|
$user->forceFill(['last_workspace_id' => $archived->getKey()])->save();
|
|
|
|
$this->get('/admin/_test/workspace-context')
|
|
->assertSuccessful()
|
|
->assertJson([
|
|
'workspace_id' => $active->getKey(),
|
|
]);
|
|
|
|
expect(session()->get(WorkspaceContext::SESSION_KEY))->toBe($active->getKey());
|
|
expect($user->fresh()->last_workspace_id)->toBe($active->getKey());
|
|
});
|
|
|
|
it('invalidates selection and redirects to no-access when membership is removed', function () {
|
|
$user = User::factory()->create();
|
|
$workspace = Workspace::factory()->create();
|
|
|
|
$membership = WorkspaceMembership::factory()->for($workspace)->for($user)->create(['role' => 'owner']);
|
|
|
|
$this->actingAs($user);
|
|
session([WorkspaceContext::SESSION_KEY => $workspace->getKey()]);
|
|
$user->forceFill(['last_workspace_id' => $workspace->getKey()])->save();
|
|
|
|
$membership->delete();
|
|
|
|
$this->get('/admin/_test/workspace-context')
|
|
->assertRedirect('/admin/no-access');
|
|
|
|
expect(session()->get(WorkspaceContext::SESSION_KEY))->toBeNull();
|
|
expect($user->fresh()->last_workspace_id)->toBeNull();
|
|
});
|