TenantAtlas/apps/platform/tests/Unit/Support/TenantConfiguration/Spec427TeamsAppPermissionPolicyContractTest.php
ahmido bfb52b84d6 feat: implement spec 427 source contract enablement (#494)
Automated PR for spec 427 Exchange Teams verified source contract enablement.

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #494
2026-07-03 23:12:45 +00:00

36 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
use App\Models\TenantConfigurationResourceType;
use App\Services\Graph\GraphContractRegistry;
use App\Services\TenantConfiguration\CoverageSourceContractDecision;
use App\Services\TenantConfiguration\CoverageSourceContractResolver;
use App\Services\TenantConfiguration\ResourceTypeRegistry;
it('Spec427 classifies appPermissionPolicy as adapter-blocked with bounded Teams source metadata', function (): void {
$decision = (new CoverageSourceContractResolver(new GraphContractRegistry))
->resolve(spec427AppPermissionPolicyResourceType());
expect($decision->sourceContractState)->toBe(CoverageSourceContractDecision::CONTRACT_BLOCKED_REPO_ADAPTER_MISSING)
->and($decision->sourceMetadata['workload'])->toBe('teams')
->and($decision->sourceMetadata['source_class'])->toBe('tcm')
->and($decision->sourceMetadata['source_contract_name'])->toBe('teams.appPermissionPolicy.source_contract_review')
->and($decision->sourceMetadata['source_contract_version'])->toBe('review-2026-07-03')
->and($decision->sourceMetadata['provider_adapter_state'])->toBe('missing')
->and($decision->sourceMetadata['identity_handoff']['preferred_identity_fields'])->toBe(['id', 'sourceId', 'policyId'])
->and($decision->sourceMetadata['identity_handoff']['fallback_identity_fields'])->toBe([])
->and($decision->sourceMetadata['response_shape']['display_safe_fields'])->toContain('DisplayName')
->and($decision->sourceMetadata['normalization_handoff']['identity_fields'])->toContain('policyId');
});
function spec427AppPermissionPolicyResourceType(): TenantConfigurationResourceType
{
$definition = collect(ResourceTypeRegistry::defaultDefinitions())
->firstWhere('canonical_type', 'appPermissionPolicy');
expect($definition)->not->toBeNull('Missing default resource type definition for appPermissionPolicy.');
return new TenantConfigurationResourceType($definition);
}