TenantAtlas/apps/platform/tests/Architecture/PlatformVocabularyBoundaryGuardTest.php
ahmido be314c577f Spec 400: rebuild Tenantial homepage visuals (#387)
## Summary
- rebuild the public Tenantial homepage around an evidence-first Microsoft tenant governance narrative
- replace the old hero visual with a new static dashboard preview and add dedicated Trust Bar and Feature Pillars sections
- update the shared public shell, navigation, footer, dark design tokens, assets, and homepage content to match the new brand direction
- align website smoke coverage and Spec 400 artifacts with the rebuilt homepage

## Testing
- not run in this pass
- updated website smoke specs under apps/website/tests/smoke

## Note
- `website-dev` was pushed to `origin` so the requested PR base exists remotely
- the remote `website-dev` branch is an ancestor of `origin/dev`, so this PR may also show upstream `dev` history relative to that base

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #387
2026-05-18 14:38:11 +00:00

58 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
use App\Support\Governance\PlatformVocabularyGlossary;
use App\Support\OperationCatalog;
use App\Support\OperationRunType;
use App\Services\Providers\ProviderOperationRegistry;
it('keeps touched registry ownership metadata inside the allowed three-way boundary classification', function (): void {
$classifications = collect(app(PlatformVocabularyGlossary::class)->registries())
->map(static fn ($descriptor): string => $descriptor->boundaryClassification)
->unique()
->values()
->all();
expect($classifications)->toEqualCanonicalizing([
PlatformVocabularyGlossary::BOUNDARY_CROSS_DOMAIN_GOVERNANCE,
PlatformVocabularyGlossary::BOUNDARY_PLATFORM_CORE,
PlatformVocabularyGlossary::BOUNDARY_INTUNE_SPECIFIC,
]);
});
it('guards the false-universal policy_type alias behind explicit context-aware vocabulary helpers', function (): void {
$glossary = app(PlatformVocabularyGlossary::class);
expect($glossary->term('policy_type')?->boundaryClassification)->toBe(PlatformVocabularyGlossary::BOUNDARY_INTUNE_SPECIFIC)
->and($glossary->resolveAlias('policy_type', 'compare')?->termKey)->toBe('governed_subject')
->and(OperationCatalog::canonicalCode('baseline_capture'))->toBe('baseline.capture');
});
it('guards canonical operation type writers against raw alias reintroduction', function (): void {
$legacyAliases = [
'baseline_capture',
'baseline_compare',
'inventory_sync',
'entra_group_sync',
'backup_schedule_run',
'backup_schedule_retention',
'backup_schedule_purge',
'directory_role_definitions.sync',
];
$registry = app(ProviderOperationRegistry::class);
$registryTypes = array_merge(
array_keys($registry->definitions()),
collect($registry->definitions())->pluck('operation_type')->all(),
array_keys($registry->providerBindings()),
collect($registry->providerBindings())
->flatMap(static fn (array $bindings): array => collect($bindings)->pluck('operation_type')->all())
->all(),
OperationRunType::values(),
array_keys(config('tenantpilot.operations.lifecycle.covered_types', [])),
);
expect(array_values(array_intersect($legacyAliases, $registryTypes)))->toBe([]);
});