put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); Livewire::actingAs($readonlyUser) ->test(ViewBaselineProfile::class, ['record' => $profile->getKey()]) ->assertActionDisabled('capture') ->assertActionDisabled('compareNow'); Livewire::actingAs($ownerUser) ->test(ViewBaselineProfile::class, ['record' => $profile->getKey()]) ->assertActionHidden('capture') ->assertActionEnabled('compareNow'); }); it('keeps tenant compare actions disabled for users without tenant.sync and enabled for owners', function (): void { [$readonlyUser, $tenant] = createUserWithTenant(role: 'readonly'); [$ownerUser] = createUserWithTenant(tenant: $tenant, role: 'owner'); seedActiveBaselineForTenant($tenant); $tenant->makeCurrent(); Filament::setTenant($tenant, true); Livewire::actingAs($readonlyUser) ->test(BaselineCompareLanding::class) ->assertActionDisabled('compareNow'); Livewire::actingAs($ownerUser) ->test(BaselineCompareLanding::class) ->assertActionEnabled('compareNow'); }); it('keeps legacy-scope capture and compare actions capability-gated on the profile detail page', function (): void { [$readonlyUser, $tenant] = createUserWithTenant(role: 'readonly'); [$ownerUser] = createUserWithTenant(tenant: $tenant, role: 'owner'); [$profile] = seedActiveBaselineForTenant($tenant); DB::table('baseline_profiles') ->where('id', (int) $profile->getKey()) ->update([ 'scope_jsonb' => json_encode([ 'policy_types' => ['deviceConfiguration'], 'foundation_types' => [], ], JSON_THROW_ON_ERROR), 'updated_at' => now(), ]); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); Livewire::actingAs($readonlyUser) ->test(ViewBaselineProfile::class, ['record' => $profile->getKey()]) ->assertActionDisabled('capture') ->assertActionDisabled('compareNow'); Livewire::actingAs($ownerUser) ->test(ViewBaselineProfile::class, ['record' => $profile->getKey()]) ->assertActionHidden('capture') ->assertActionEnabled('compareNow'); });