Added `ProviderResourceBinding` model, migrations, policies, and supporting framework for canonical resource identity mapping as defined in Spec 381. This provides the structural capability to resolve baseline and posture discrepancies by binding logical entities across source providers to canonical identities. Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #452
48 lines
2.2 KiB
PHP
48 lines
2.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Support\Baselines\BaselineSubjectKey;
|
|
use App\Support\Baselines\SubjectClass;
|
|
use App\Support\Resources\ResourceIdentity;
|
|
|
|
it('does not collapse same-label provider resources with different stable IDs', function (): void {
|
|
$left = BaselineSubjectKey::forProviderResourceIdentity(
|
|
subjectDomain: 'baseline',
|
|
subjectClass: SubjectClass::PolicyBacked,
|
|
subjectTypeKey: 'deviceConfiguration',
|
|
identity: ResourceIdentity::providerResource('fake-provider', 'policy', 'provider-resource-1'),
|
|
);
|
|
|
|
$right = BaselineSubjectKey::forProviderResourceIdentity(
|
|
subjectDomain: 'baseline',
|
|
subjectClass: SubjectClass::PolicyBacked,
|
|
subjectTypeKey: 'deviceConfiguration',
|
|
identity: ResourceIdentity::providerResource('fake-provider', 'policy', 'provider-resource-2'),
|
|
);
|
|
|
|
expect($left)->toStartWith('provider-resource:v1:baseline:policy_backed:deviceconfiguration:fake-provider:policy:provider_resource:')
|
|
->and($right)->toStartWith('provider-resource:v1:baseline:policy_backed:deviceconfiguration:fake-provider:policy:provider_resource:')
|
|
->and($left)->not->toBe($right);
|
|
});
|
|
|
|
it('creates canonical keys for built-in and virtual targets without provider object IDs', function (): void {
|
|
$builtin = BaselineSubjectKey::forProviderResourceIdentity(
|
|
subjectDomain: 'baseline',
|
|
subjectClass: SubjectClass::FoundationBacked,
|
|
subjectTypeKey: 'assignmentTarget',
|
|
identity: ResourceIdentity::canonicalBuiltin('fake-provider', 'target', 'all-principals'),
|
|
);
|
|
|
|
$virtual = BaselineSubjectKey::forProviderResourceIdentity(
|
|
subjectDomain: 'baseline',
|
|
subjectClass: SubjectClass::FoundationBacked,
|
|
subjectTypeKey: 'assignmentTarget',
|
|
identity: ResourceIdentity::virtualTarget('fake-provider', 'target', 'dynamic-group-all-devices'),
|
|
);
|
|
|
|
expect($builtin)->toStartWith('provider-resource:v1:baseline:foundation_backed:assignmenttarget:fake-provider:target:canonical_builtin:')
|
|
->and($virtual)->toStartWith('provider-resource:v1:baseline:foundation_backed:assignmenttarget:fake-provider:target:canonical_virtual_target:')
|
|
->and($builtin)->not->toBe($virtual);
|
|
});
|