diff --git a/resources/views/filament/infolists/entries/restore-results.blade.php b/resources/views/filament/infolists/entries/restore-results.blade.php index 2f15b6f..c95c264 100644 --- a/resources/views/filament/infolists/entries/restore-results.blade.php +++ b/resources/views/filament/infolists/entries/restore-results.blade.php @@ -48,6 +48,74 @@ @endif + @if (! empty($item['assignment_summary']) && is_array($item['assignment_summary'])) + @php + $summary = $item['assignment_summary']; + $assignmentOutcomes = $item['assignment_outcomes'] ?? []; + $assignmentIssues = collect($assignmentOutcomes) + ->filter(fn ($outcome) => in_array($outcome['status'] ?? null, ['failed', 'skipped'], true)) + ->values(); + @endphp + +
+ Assignments: {{ (int) ($summary['success'] ?? 0) }} success • + {{ (int) ($summary['failed'] ?? 0) }} failed • + {{ (int) ($summary['skipped'] ?? 0) }} skipped +
+ + @if ($assignmentIssues->isNotEmpty()) +
+ Assignment details +
+ @foreach ($assignmentIssues as $outcome) + @php + $outcomeStatus = $outcome['status'] ?? 'unknown'; + $outcomeColor = match ($outcomeStatus) { + 'failed' => 'text-red-700 bg-red-100 border-red-200', + 'skipped' => 'text-amber-900 bg-amber-100 border-amber-200', + default => 'text-gray-700 bg-gray-100 border-gray-200', + }; + $assignmentGroupId = $outcome['group_id'] + ?? ($outcome['assignment']['target']['groupId'] ?? null); + @endphp + +
+
+
+ Assignment {{ $assignmentGroupId ?? 'unknown group' }} +
+ + {{ $outcomeStatus }} + +
+ + @if (! empty($outcome['mapped_group_id'])) +
+ Mapped to: {{ $outcome['mapped_group_id'] }} +
+ @endif + + @if (! empty($outcome['reason'])) +
+ {{ $outcome['reason'] }} +
+ @endif + + @if (! empty($outcome['graph_error_message']) || ! empty($outcome['graph_error_code'])) +
+
{{ $outcome['graph_error_message'] ?? 'Unknown error' }}
+ @if (! empty($outcome['graph_error_code'])) +
Code: {{ $outcome['graph_error_code'] }}
+ @endif +
+ @endif +
+ @endforeach +
+
+ @endif + @endif + @if (! empty($item['created_policy_id'])) @php $createdMode = $item['created_policy_mode'] ?? null; diff --git a/tests/Feature/Filament/SettingsCatalogRestoreApplySettingsPatchTest.php b/tests/Feature/Filament/SettingsCatalogRestoreApplySettingsPatchTest.php index a183d93..ec69858 100644 --- a/tests/Feature/Filament/SettingsCatalogRestoreApplySettingsPatchTest.php +++ b/tests/Feature/Filament/SettingsCatalogRestoreApplySettingsPatchTest.php @@ -169,9 +169,28 @@ public function request(string $method, string $path, array $options = []): Grap expect($client->requestCalls[0]['method'])->toBe('POST'); expect($client->requestCalls[0]['path'])->toBe('deviceManagement/configurationPolicies/scp-3/settings'); + $results = $run->results; + $results[0]['assignment_summary'] = [ + 'success' => 0, + 'failed' => 1, + 'skipped' => 0, + ]; + $results[0]['assignment_outcomes'] = [[ + 'status' => 'failed', + 'group_id' => 'group-1', + 'mapped_group_id' => 'group-2', + 'reason' => 'Graph create failed', + 'graph_error_message' => 'Bad request', + ]]; + + $run->update(['results' => $results]); + $response = $this->get(route('filament.admin.resources.restore-runs.view', ['record' => $run])); $response->assertOk(); $response->assertSee('Graph bulk apply failed'); $response->assertSee('Setting missing'); $response->assertSee('req-setting-404'); + $response->assertSee('Assignments: 0 success'); + $response->assertSee('Assignment details'); + $response->assertSee('Graph create failed'); });