diff --git a/config/graph_contracts.php b/config/graph_contracts.php index 205da5b..f1220a5 100644 --- a/config/graph_contracts.php +++ b/config/graph_contracts.php @@ -19,6 +19,8 @@ 'type_family' => [ '#microsoft.graph.deviceConfiguration', '#microsoft.graph.windows10CustomConfiguration', + '#microsoft.graph.windows10GeneralConfiguration', + '#microsoft.graph.windowsHealthMonitoringConfiguration', '#microsoft.graph.iosGeneralDeviceConfiguration', '#microsoft.graph.androidGeneralDeviceConfiguration', '#microsoft.graph.macOSGeneralDeviceConfiguration', @@ -344,6 +346,8 @@ '#microsoft.graph.windows10CompliancePolicy', '#microsoft.graph.iosCompliancePolicy', '#microsoft.graph.androidCompliancePolicy', + '#microsoft.graph.androidDeviceOwnerCompliancePolicy', + '#microsoft.graph.androidWorkProfileCompliancePolicy', '#microsoft.graph.macOSCompliancePolicy', ], 'create_method' => 'POST', @@ -369,6 +373,7 @@ '#microsoft.graph.targetedManagedAppProtection', '#microsoft.graph.iosManagedAppProtection', '#microsoft.graph.androidManagedAppProtection', + '#microsoft.graph.windowsManagedAppProtection', '#microsoft.graph.windowsInformationProtectionPolicy', '#microsoft.graph.mdmWindowsInformationProtectionPolicy', ], @@ -574,7 +579,11 @@ 'resource' => 'deviceManagement/deviceEnrollmentConfigurations', 'allowed_select' => ['id', 'displayName', 'description', '@odata.type', 'version'], 'allowed_expand' => [], - 'type_family' => [], + 'type_family' => [ + '#microsoft.graph.deviceEnrollmentConfiguration', + '#microsoft.graph.deviceEnrollmentWindowsHelloForBusinessConfiguration', + '#microsoft.graph.windowsRestoreDeviceEnrollmentConfiguration', + ], 'create_method' => 'POST', 'update_method' => 'PATCH', 'id_field' => 'id', diff --git a/specs/011-restore-run-wizard/tasks.md b/specs/011-restore-run-wizard/tasks.md index e6c7b48..f20fb48 100644 --- a/specs/011-restore-run-wizard/tasks.md +++ b/specs/011-restore-run-wizard/tasks.md @@ -38,6 +38,7 @@ ## Phase 7 — Tests + Formatting - [x] T018 Add Pest tests for wizard gating rules and status transitions. - [x] T019 Add Pest tests for safety checks persistence and blocking behavior. - [x] T020 Add Pest tests for preview summary generation. +- [x] T024 Fix Graph contract type families to accept valid derived @odata.type values during restore. - [x] T021 Run `./vendor/bin/pint --dirty`. - [x] T022 Run targeted tests (e.g. `./vendor/bin/sail artisan test --filter=RestoreRunWizard` once tests exist). diff --git a/tests/Pest.php b/tests/Pest.php index 62cf209..dccc767 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -19,6 +19,9 @@ ->use(RefreshDatabase::class) ->in('Feature'); +pest()->extend(Tests\TestCase::class) + ->in('Unit'); + beforeEach(function () { putenv('INTUNE_TENANT_ID'); unset($_ENV['INTUNE_TENANT_ID'], $_SERVER['INTUNE_TENANT_ID']); diff --git a/tests/Unit/ODataTypeValidationTest.php b/tests/Unit/ODataTypeValidationTest.php new file mode 100644 index 0000000..b4cd370 --- /dev/null +++ b/tests/Unit/ODataTypeValidationTest.php @@ -0,0 +1,38 @@ + $odataType], 'deviceConfiguration', 'all'); + + expect($result['matches'])->toBeTrue(); +})->with([ + '#microsoft.graph.windows10GeneralConfiguration', + '#microsoft.graph.windowsHealthMonitoringConfiguration', +]); + +it('accepts derived deviceCompliancePolicy odata types', function (string $odataType) { + $result = BackupItem::validateODataType(['@odata.type' => $odataType], 'deviceCompliancePolicy', 'all'); + + expect($result['matches'])->toBeTrue(); +})->with([ + '#microsoft.graph.androidDeviceOwnerCompliancePolicy', + '#microsoft.graph.androidWorkProfileCompliancePolicy', +]); + +it('accepts derived appProtectionPolicy odata types', function (string $odataType) { + $result = BackupItem::validateODataType(['@odata.type' => $odataType], 'appProtectionPolicy', 'mobile'); + + expect($result['matches'])->toBeTrue(); +})->with([ + '#microsoft.graph.windowsManagedAppProtection', +]); + +it('accepts derived enrollmentRestriction odata types', function (string $odataType) { + $result = BackupItem::validateODataType(['@odata.type' => $odataType], 'enrollmentRestriction', 'all'); + + expect($result['matches'])->toBeTrue(); +})->with([ + '#microsoft.graph.deviceEnrollmentWindowsHelloForBusinessConfiguration', + '#microsoft.graph.windowsRestoreDeviceEnrollmentConfiguration', +]);