32 lines
1.5 KiB
PHP
32 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Api\V1\FullSurface;
|
|
|
|
use Tests\Feature\Api\V1\FullSurface\Support\FullSurfaceE2EContractCase;
|
|
|
|
class ApiBatch20ContinuityComplianceRiskRegisterTest extends FullSurfaceE2EContractCase
|
|
{
|
|
public function test_batch20_continuity_and_compliance_route_families_remain_visible(): void
|
|
{
|
|
$families = [
|
|
'legal hold and retention conflict' => ['privacy', 'retention', 'archive', 'purge'],
|
|
'cash drawer and receipt integrity' => ['cash', 'payment', 'receipt', 'finance'],
|
|
'scholarship and discount eligibility' => ['scholarship', 'discount', 'voucher', 'fees'],
|
|
'gradebook locks and amendments' => ['scores', 'grade', 'report-card', 'teacher'],
|
|
'attendance device and geofence trust' => ['attendance', 'scanner', 'kiosk', 'badge'],
|
|
'transportation pickup safety' => ['transport', 'bus', 'pickup', 'guardian'],
|
|
'emergency broadcast controls' => ['emergency', 'broadcast', 'notification', 'calendar'],
|
|
'webhook key rotation' => ['webhook', 'callback', 'provider', 'sync'],
|
|
'audit export redaction' => ['audit', 'logs', 'export', 'reports'],
|
|
'analytics warehouse export' => ['analytics', 'dashboard', 'summary', 'export'],
|
|
];
|
|
|
|
foreach ($families as $label => $needles) {
|
|
$this->assertNotEmpty(
|
|
$this->apiRoutesContainingAny($needles),
|
|
'Batch 20 continuity/compliance family missing or renamed without updating risk register: '.$label
|
|
);
|
|
}
|
|
}
|
|
}
|