build( policyType: 'deviceConfiguration', subjectExternalId: 'policy-a', metaJsonb: [ 'etag' => 'E1', 'odata_type' => '#microsoft.graph.deviceConfiguration', 'scope_tag_ids' => ['2', '1'], 'assignment_target_count' => 3, ], ); $b = $builder->build( policyType: 'deviceConfiguration', subjectExternalId: 'policy-a', metaJsonb: [ 'assignment_target_count' => 3, 'scope_tag_ids' => ['1', '2'], 'odata_type' => '#microsoft.graph.deviceConfiguration', 'etag' => 'E1', ], ); expect($a)->toBe($b); }); it('represents missing signals as null (not omitted)', function () { $builder = app(InventoryMetaContract::class); $contract = $builder->build( policyType: 'deviceConfiguration', subjectExternalId: 'policy-a', metaJsonb: [], ); expect($contract)->toHaveKeys([ 'version', 'policy_type', 'subject_external_id', 'odata_type', 'etag', 'scope_tag_ids', 'assignment_target_count', ]); expect($contract['version'])->toBe(1); expect($contract['policy_type'])->toBe('deviceConfiguration'); expect($contract['subject_external_id'])->toBe('policy-a'); expect($contract['odata_type'])->toBeNull(); expect($contract['etag'])->toBeNull(); expect($contract['scope_tag_ids'])->toBeNull(); expect($contract['assignment_target_count'])->toBeNull(); });