create([ 'tenant_id' => 'tenant-123', 'external_id' => 'tenant-123', ]); $backupItem = BackupItem::factory()->create([ 'tenant_id' => $tenant->id, 'metadata' => [], 'assignments' => null, ]); $policyPayload = [ 'roleScopeTagIds' => ['0'], ]; $this->mock(AssignmentFetcher::class, function (MockInterface $mock) { $mock->shouldReceive('fetch') ->once() ->andReturn([ [ 'id' => 'assignment-1', 'intent' => 'apply', 'deviceAndAppManagementAssignmentFilterId' => 'filter-123', 'deviceAndAppManagementAssignmentFilterType' => 'include', 'target' => [ '@odata.type' => '#microsoft.graph.groupAssignmentTarget', 'groupId' => 'group-123', ], ], ]); }); $this->mock(GroupResolver::class, function (MockInterface $mock) { $mock->shouldReceive('resolveGroupIds') ->once() ->andReturn([ 'group-123' => [ 'id' => 'group-123', 'displayName' => 'Test Group', 'orphaned' => false, ], ]); }); $this->mock(AssignmentFilterResolver::class, function (MockInterface $mock) use ($tenant) { $mock->shouldReceive('resolve') ->once() ->with(['filter-123'], $tenant) ->andReturn([ ['id' => 'filter-123', 'displayName' => 'Targeted Devices'], ]); }); $this->mock(ScopeTagResolver::class, function (MockInterface $mock) use ($tenant) { $mock->shouldReceive('resolve') ->once() ->with(['0'], $tenant) ->andReturn([ ['id' => '0', 'displayName' => 'Default'], ]); }); $service = app(AssignmentBackupService::class); $updated = $service->enrichWithAssignments( backupItem: $backupItem, tenant: $tenant, policyType: 'settingsCatalogPolicy', policyId: 'policy-123', policyPayload: $policyPayload, includeAssignments: true ); expect($updated->assignments)->toHaveCount(1) ->and($updated->assignments[0]['target']['deviceAndAppManagementAssignmentFilterId'])->toBe('filter-123') ->and($updated->assignments[0]['target']['deviceAndAppManagementAssignmentFilterType'])->toBe('include') ->and($updated->assignments[0]['target']['assignment_filter_name'])->toBe('Targeted Devices'); });