$odataType, 'groupId' => $groupId, ]; if (is_string($displayName) && $displayName !== '') { $target['group_display_name'] = $displayName; } return ['target' => $target]; } test('restore wizard create page renders without touching graph', function () { $tenant = ManagedEnvironment::factory()->create(); [$user] = createUserWithTenant($tenant); bindFailHardGraphClient(); $this->actingAs($user) ->withSession([ WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id, WorkspaceContext::LAST_ENVIRONMENT_IDS_SESSION_KEY => [ (string) $tenant->workspace_id => (int) $tenant->getKey(), ], ]) ->get(RestoreRunResource::getUrl('create', panel: 'admin', tenant: $tenant)) ->assertOk() ->assertSee('Select Backup Set'); }); test('restore wizard group mapping renders DB-only with resolver-mode UX', function () { $tenant = ManagedEnvironment::factory()->create(); [$user] = createUserWithTenant($tenant); $backupSet = BackupSet::factory()->create([ 'managed_environment_id' => $tenant->getKey(), 'name' => 'group-mapping-backup-set', ]); $groupId = '11111111-2222-3333-4444-555555555555'; BackupItem::factory()->create([ 'managed_environment_id' => $tenant->getKey(), 'backup_set_id' => $backupSet->getKey(), 'assignments' => [ makeAssignment('#microsoft.graph.groupAssignmentTarget', $groupId, 'Example Group'), ], ]); bindFailHardGraphClient(); $url = RestoreRunResource::getUrl('create', panel: 'admin', tenant: $tenant).'?backup_set_id='.$backupSet->getKey(); $this->actingAs($user) ->withSession([ WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id, WorkspaceContext::LAST_ENVIRONMENT_IDS_SESSION_KEY => [ (string) $tenant->workspace_id => (int) $tenant->getKey(), ], ]) ->get($url) ->assertOk() ->assertSee('Example Group') ->assertSee('Source ID:') ->assertSee($groupId) ->assertSee('Resolve target mappings') ->assertSee('Select a target group from the directory cache or enter a target group object ID as a fallback.') ->assertDontSee('Paste the target Entra ID group Object ID') ->assertDontSee('Use SKIP to omit the assignment.'); });