instance(GraphClientInterface::class, new class implements GraphClientInterface { public function listPolicies(string $policyType, array $options = []): GraphResponse { return new GraphResponse(true, []); } public function getPolicy(string $policyType, string $policyId, array $options = []): GraphResponse { return new GraphResponse(true, []); } public function getOrganization(array $options = []): GraphResponse { return new GraphResponse(true, []); } public function applyPolicy(string $policyType, string $policyId, array $payload, array $options = []): GraphResponse { return new GraphResponse(true, []); } public function request(string $method, string $path, array $options = []): GraphResponse { return new GraphResponse(true, []); } public function getServicePrincipalPermissions(array $options = []): GraphResponse { return new GraphResponse(true, []); } }); $tenant = Tenant::factory()->create([ 'tenant_id' => 'tenant-assignment-restore-success', ]); ensureDefaultProviderConnection($tenant); $policy = Policy::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'external_id' => 'policy-assignment-restore-success', 'policy_type' => 'settingsCatalogPolicy', ]); $backupSet = BackupSet::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), ]); $backupItem = BackupItem::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'backup_set_id' => (int) $backupSet->getKey(), 'policy_id' => (int) $policy->getKey(), 'policy_identifier' => (string) $policy->external_id, 'policy_type' => (string) $policy->policy_type, 'assignments' => [ [ 'id' => 'assignment-1', 'target' => [ '@odata.type' => '#microsoft.graph.groupAssignmentTarget', 'groupId' => 'group-source-1', ], ], ], 'payload' => [ '@odata.type' => '#microsoft.graph.deviceManagementConfigurationPolicy', ], ]); $user = User::factory()->create([ 'email' => 'assignment.restore.success@example.com', ]); $this->actingAs($user); $restoreRun = app(RestoreService::class)->execute( tenant: $tenant, backupSet: $backupSet, selectedItemIds: [(int) $backupItem->getKey()], dryRun: false, actorEmail: $user->email, actorName: $user->name, groupMapping: [ 'group-source-1' => 'group-target-1', ], ); $assignmentRun = OperationRun::query() ->where('tenant_id', (int) $tenant->getKey()) ->where('type', 'assignments.restore') ->latest('id') ->first(); expect($assignmentRun)->not->toBeNull(); expect($assignmentRun?->status)->toBe('completed'); expect($assignmentRun?->outcome)->toBe('succeeded'); expect($assignmentRun?->context['restore_run_id'] ?? null)->toBe((int) $restoreRun->getKey()); expect($assignmentRun?->summary_counts ?? [])->toMatchArray([ 'total' => 1, 'processed' => 1, 'failed' => 0, ]); });