feat/004-assignments-scope-tags #4
@ -48,6 +48,74 @@
|
|||||||
</div>
|
</div>
|
||||||
@endif
|
@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
|
||||||
|
|
||||||
|
<div class="mt-2 text-xs text-gray-700">
|
||||||
|
Assignments: {{ (int) ($summary['success'] ?? 0) }} success •
|
||||||
|
{{ (int) ($summary['failed'] ?? 0) }} failed •
|
||||||
|
{{ (int) ($summary['skipped'] ?? 0) }} skipped
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if ($assignmentIssues->isNotEmpty())
|
||||||
|
<details class="mt-2 rounded border border-amber-200 bg-amber-50 px-2 py-1 text-xs text-amber-900">
|
||||||
|
<summary class="cursor-pointer font-semibold">Assignment details</summary>
|
||||||
|
<div class="mt-2 space-y-2">
|
||||||
|
@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
|
||||||
|
|
||||||
|
<div class="rounded border border-amber-200 bg-white p-2">
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
<div class="font-semibold text-gray-900">
|
||||||
|
Assignment {{ $assignmentGroupId ?? 'unknown group' }}
|
||||||
|
</div>
|
||||||
|
<span class="rounded border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide {{ $outcomeColor }}">
|
||||||
|
{{ $outcomeStatus }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if (! empty($outcome['mapped_group_id']))
|
||||||
|
<div class="mt-1 text-[11px] text-gray-800">
|
||||||
|
Mapped to: {{ $outcome['mapped_group_id'] }}
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if (! empty($outcome['reason']))
|
||||||
|
<div class="mt-1 text-[11px] text-gray-800">
|
||||||
|
{{ $outcome['reason'] }}
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if (! empty($outcome['graph_error_message']) || ! empty($outcome['graph_error_code']))
|
||||||
|
<div class="mt-1 text-[11px] text-amber-900">
|
||||||
|
<div>{{ $outcome['graph_error_message'] ?? 'Unknown error' }}</div>
|
||||||
|
@if (! empty($outcome['graph_error_code']))
|
||||||
|
<div class="mt-0.5 text-amber-800">Code: {{ $outcome['graph_error_code'] }}</div>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
@endif
|
||||||
|
@endif
|
||||||
|
|
||||||
@if (! empty($item['created_policy_id']))
|
@if (! empty($item['created_policy_id']))
|
||||||
@php
|
@php
|
||||||
$createdMode = $item['created_policy_mode'] ?? null;
|
$createdMode = $item['created_policy_mode'] ?? null;
|
||||||
|
|||||||
@ -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]['method'])->toBe('POST');
|
||||||
expect($client->requestCalls[0]['path'])->toBe('deviceManagement/configurationPolicies/scp-3/settings');
|
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 = $this->get(route('filament.admin.resources.restore-runs.view', ['record' => $run]));
|
||||||
$response->assertOk();
|
$response->assertOk();
|
||||||
$response->assertSee('Graph bulk apply failed');
|
$response->assertSee('Graph bulk apply failed');
|
||||||
$response->assertSee('Setting missing');
|
$response->assertSee('Setting missing');
|
||||||
$response->assertSee('req-setting-404');
|
$response->assertSee('req-setting-404');
|
||||||
|
$response->assertSee('Assignments: 0 success');
|
||||||
|
$response->assertSee('Assignment details');
|
||||||
|
$response->assertSee('Graph create failed');
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user