- Entra admin roles scan job (ScanEntraAdminRolesJob) - Report service with fingerprint deduplication - Finding generator with high-privilege role catalog - Admin roles summary widget on tenant view page - Alert integration for entra.admin_roles findings - Graph contracts for roleDefinitions + roleAssignments - Entra permissions registry (config/entra_permissions.php) - StoredReport fingerprint migration - OperationCatalog label + duration for entra.admin_roles.scan - SummaryCountsNormalizer: filter zeros, humanize keys globally - 11 new test files (71+ tests, 286+ assertions) - Spec + tasks + checklist updates
30 lines
1.1 KiB
PHP
30 lines
1.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Filament\Resources\TenantResource;
|
|
|
|
it('renders re-run verification and next-step links using canonical manage surfaces only', function (): void {
|
|
[$user, $tenant] = createUserWithTenant(role: 'readonly');
|
|
|
|
$expectedUrl = TenantResource::getUrl('view', ['record' => $tenant]);
|
|
|
|
$this->actingAs($user)
|
|
->get("/admin/tenants/{$tenant->external_id}/required-permissions")
|
|
->assertSuccessful()
|
|
->assertSee('Re-run verification')
|
|
->assertSee($expectedUrl, false)
|
|
->assertDontSee('/admin/t/', false);
|
|
});
|
|
|
|
it('renders sections in summary-issues-passed-technical order and keeps technical details collapsed by default', function (): void {
|
|
[$user, $tenant] = createUserWithTenant(role: 'readonly');
|
|
|
|
$this->actingAs($user)
|
|
->get("/admin/tenants/{$tenant->external_id}/required-permissions")
|
|
->assertSuccessful()
|
|
->assertSeeInOrder(['Summary', 'Issues', 'Passed', 'Technical details'])
|
|
->assertSee('data-testid="technical-details"', false)
|
|
->assertDontSee('data-testid="technical-details" open', false);
|
|
});
|