TenantAtlas/tests/Feature/Onboarding/OnboardingSessionTakeoverAuthorizationTest.php
2026-02-01 12:20:18 +01:00

60 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
use App\Filament\Pages\Onboarding\TenantOnboardingWizard;
use App\Models\OnboardingSession;
use App\Models\ProviderConnection;
use App\Models\User;
use Filament\Facades\Filament;
use Livewire\Livewire;
it('allows takeover for owner and manager only', function (string $role, bool $shouldBeAllowed) {
[$lockHolder, $tenant] = createUserWithTenant(role: 'operator');
$actor = User::factory()->create();
createUserWithTenant(tenant: $tenant, user: $actor, role: $role);
ProviderConnection::factory()->for($tenant)->create([
'provider' => 'microsoft',
'is_default' => true,
]);
$this->actingAs($lockHolder);
Filament::setTenant($tenant, true);
Livewire::test(TenantOnboardingWizard::class)
->assertSuccessful();
$session = OnboardingSession::query()
->where('tenant_id', $tenant->getKey())
->first();
expect($session)->not->toBeNull();
expect($session?->locked_by_user_id)->toBe((int) $lockHolder->getKey());
$this->actingAs($actor);
Filament::setTenant($tenant, true);
if (! $shouldBeAllowed) {
Livewire::test(TenantOnboardingWizard::class)
->callAction('takeover_onboarding_session');
$session->refresh();
expect($session->locked_by_user_id)->toBe((int) $lockHolder->getKey());
return;
}
Livewire::test(TenantOnboardingWizard::class)
->callAction('takeover_onboarding_session');
$session->refresh();
expect($session->locked_by_user_id)->toBe((int) $actor->getKey());
})->with([
'owner' => ['owner', true],
'manager' => ['manager', true],
'operator' => ['operator', false],
'readonly' => ['readonly', false],
]);