68 lines
2.5 KiB
PHP
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();
|
|
});
|