TenantAtlas/tests/Unit/GraphContractRegistrySettingsApplySanitizerTest.php
2025-12-14 20:23:18 +01:00

68 lines
2.5 KiB
PHP

<?php
use App\Services\Graph\GraphContractRegistry;
use Tests\TestCase;
uses(TestCase::class);
beforeEach(function () {
config()->set('graph_contracts.types.settingsCatalogPolicy', [
'resource' => 'deviceManagement/configurationPolicies',
'allowed_select' => ['id'],
'allowed_expand' => [],
'type_family' => ['#microsoft.graph.deviceManagementConfigurationPolicy'],
]);
$this->registry = app(GraphContractRegistry::class);
});
it('preserves @odata.type in settingInstance and strips ids', function () {
$settings = [
[
'id' => 's-1',
'displayName' => 'Setting A',
'settingInstance' => [
'@odata.type' => '#microsoft.management.configuration.deviceManagementConfigurationSimpleSettingInstance',
'simpleSettingValue' => ['value' => 10],
'id' => 'si-1',
],
],
[
'displayName' => 'Setting B',
'settingInstance' => [
'@odata.type' => '#microsoft.management.configuration.deviceManagementConfigurationChoiceSettingInstance',
'choiceSettingValue' => ['value' => 'opt1'],
'children' => [
[
'id' => 'c-1',
'@odata.type' => '#child.type',
'someValue' => true,
],
],
],
],
];
$sanitized = $this->registry->sanitizeSettingsApplyPayload('settingsCatalogPolicy', $settings);
expect($sanitized)->toBeArray();
expect(count($sanitized))->toBe(2);
// Top-level ids stripped
expect(array_key_exists('id', $sanitized[0]))->toBeFalse();
// Top-level @odata.type should be added if missing
expect(isset($sanitized[0]['@odata.type']))->toBeTrue();
expect($sanitized[0]['@odata.type'])->toBe('#microsoft.graph.deviceManagementConfigurationSetting');
expect(isset($sanitized[1]['@odata.type']))->toBeTrue();
expect($sanitized[1]['@odata.type'])->toBe('#microsoft.graph.deviceManagementConfigurationSetting');
// @odata.type preserved at settingInstance
expect(isset($sanitized[0]['settingInstance']['@odata.type']))->toBeTrue();
expect(isset($sanitized[1]['settingInstance']['@odata.type']))->toBeTrue();
// nested child keeps its @odata.type and stripped id
expect(isset($sanitized[1]['settingInstance']['children'][0]['@odata.type']))->toBeTrue();
expect(array_key_exists('id', $sanitized[1]['settingInstance']['children'][0]))->toBeFalse();
});