TenantAtlas/apps/platform/tests/Feature/Guards/Spec193MonitoringSurfaceHierarchyGuardTest.php

78 lines
4.0 KiB
PHP

<?php
declare(strict_types=1);
use App\Filament\Pages\BaselineCompareLanding;
use App\Filament\Pages\BaselineCompareMatrix;
use App\Filament\Pages\Monitoring\Alerts;
use App\Filament\Pages\Monitoring\AuditLog as AuditLogPage;
use App\Filament\Pages\Monitoring\EvidenceOverview;
use App\Filament\Pages\Monitoring\FindingExceptionsQueue;
use App\Filament\Pages\Monitoring\Operations;
use App\Filament\Pages\Operations\TenantlessOperationRunViewer;
use App\Filament\Pages\Reviews\ReviewRegister;
use App\Filament\Pages\TenantDiagnostics;
use App\Filament\Resources\AlertDeliveryResource\Pages\ListAlertDeliveries;
use App\Support\Ui\ActionSurface\ActionSurfaceExemptions;
use App\Support\Ui\ActionSurface\ActionSurfaceValidator;
it('keeps the spec 193 monitoring inventory complete and explicitly classified', function (): void {
$inventory = ActionSurfaceExemptions::spec193MonitoringSurfaceInventory();
expect(array_keys($inventory))->toEqualCanonicalizing([
FindingExceptionsQueue::class,
TenantlessOperationRunViewer::class,
Operations::class,
Alerts::class,
AuditLogPage::class,
ListAlertDeliveries::class,
EvidenceOverview::class,
BaselineCompareLanding::class,
BaselineCompareMatrix::class,
ReviewRegister::class,
TenantDiagnostics::class,
])
->and(ActionSurfaceExemptions::spec193MonitoringSurface(FindingExceptionsQueue::class)['classification'] ?? null)->toBe('remediation_required')
->and(ActionSurfaceExemptions::spec193MonitoringSurface(FindingExceptionsQueue::class)['surfaceKind'] ?? null)->toBe('queue_workbench')
->and(ActionSurfaceExemptions::spec193MonitoringSurface(FindingExceptionsQueue::class)['primaryInspectModel'] ?? null)->toBe('explicit_inspect_action')
->and(ActionSurfaceExemptions::spec193MonitoringSurface(Alerts::class)['classification'] ?? null)->toBe('minor_alignment_only')
->and(ActionSurfaceExemptions::spec193MonitoringSurface(EvidenceOverview::class)['classification'] ?? null)->toBe('compliant_no_op')
->and(ActionSurfaceExemptions::spec193MonitoringSurface(TenantDiagnostics::class)['classification'] ?? null)->toBe('special_type_acceptable');
});
it('keeps tenant diagnostics as the only explicit spec 193 exception surface', function (): void {
$inventory = ActionSurfaceExemptions::spec193MonitoringSurfaceInventory();
$exceptionPages = collect($inventory)
->filter(fn (array $surface): bool => $surface['classification'] === 'special_type_acceptable')
->keys()
->values()
->all();
expect($exceptionPages)->toBe([
TenantDiagnostics::class,
])
->and(ActionSurfaceExemptions::spec193MonitoringSurface(TenantDiagnostics::class)['exceptionReason'] ?? null)->toContain('diagnostic')
->and(ActionSurfaceExemptions::spec193MonitoringSurface(TenantDiagnostics::class)['surfaceKind'] ?? null)->toBe('diagnostic_exception')
->and(ActionSurfaceExemptions::spec193MonitoringSurface(TenantDiagnostics::class)['primaryInspectModel'] ?? null)->toBe('singleton_detail_surface')
->and(collect($inventory)
->except([TenantDiagnostics::class])
->every(fn (array $surface): bool => ($surface['exceptionReason'] ?? null) === null))->toBeTrue();
});
it('keeps the spec 193 monitoring inventory valid inside the action-surface validator', function (): void {
$result = ActionSurfaceValidator::withBaselineExemptions()->validateComponents([]);
expect($result->hasIssues())->toBeFalse($result->formatForAssertion());
});
it('keeps spec 193 monitoring surfaces out of record-page header layouts', function (): void {
foreach (array_keys(ActionSurfaceExemptions::spec193MonitoringSurfaceInventory()) as $className) {
$source = file_get_contents((string) (new \ReflectionClass($className))->getFileName()) ?: '';
expect($source)
->not->toContain('EnterpriseDetail')
->not->toContain('enterprise-detail/header');
}
});