Some checks failed
PR Fast Feedback / fast-feedback (pull_request) Failing after 3m45s
Implemented the first version of review output resolve actions. Included a ReviewOutputResolveActionMapper, commands to seed browser fixtures, updated CustomerReviewWorkspace, EnvironmentReviewResource, UI enforcement, and related views. Also added extensive unit, feature, and browser tests, and updated the design coverage matrix.
112 lines
4.5 KiB
PHP
112 lines
4.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Models\EnvironmentReview;
|
|
use App\Models\EvidenceSnapshot;
|
|
use App\Models\ReviewPack;
|
|
use App\Support\EnvironmentReviewCompletenessState;
|
|
use App\Support\ResolutionGuidance\Adapters\ReviewPackOutputResolutionAdapter;
|
|
use App\Support\ResolutionGuidance\ResolutionAction;
|
|
use App\Support\ReviewPacks\ReviewPackOutputReadiness;
|
|
use App\Support\ReviewPacks\ReviewPackOutputResolutionGuidance;
|
|
|
|
it('maps publication-blocked review output guidance into one shared resolution case', function (): void {
|
|
$readiness = ReviewPackOutputReadiness::derive(
|
|
reviewStatus: 'published',
|
|
reviewCompletenessState: EnvironmentReviewCompletenessState::Complete->value,
|
|
evidenceCompletenessState: EnvironmentReviewCompletenessState::Partial->value,
|
|
sectionStateCounts: [
|
|
EnvironmentReviewCompletenessState::Complete->value => 3,
|
|
EnvironmentReviewCompletenessState::Missing->value => 2,
|
|
],
|
|
requiredSectionCount: 5,
|
|
requiredSectionStateCounts: [
|
|
EnvironmentReviewCompletenessState::Complete->value => 3,
|
|
EnvironmentReviewCompletenessState::Missing->value => 2,
|
|
],
|
|
publishBlockers: ['Operator approval note is still missing.'],
|
|
hasReadyExport: false,
|
|
includePii: false,
|
|
protectedValuesHidden: true,
|
|
disclosurePresent: true,
|
|
);
|
|
|
|
$guidance = ReviewPackOutputResolutionGuidance::fromReadiness($readiness, [
|
|
'download' => '/admin/review-packs/8/download',
|
|
'review' => '/admin/reviews/6',
|
|
'evidence' => '/admin/evidence/8',
|
|
]);
|
|
|
|
$review = new EnvironmentReview;
|
|
$review->forceFill([
|
|
'id' => 6,
|
|
'workspace_id' => 1,
|
|
'managed_environment_id' => 41,
|
|
'status' => 'published',
|
|
]);
|
|
$review->setRelation('evidenceSnapshot', tap(new EvidenceSnapshot, function (EvidenceSnapshot $snapshot): void {
|
|
$snapshot->forceFill(['id' => 8]);
|
|
}));
|
|
$review->setRelation('currentExportReviewPack', tap(new ReviewPack, function (ReviewPack $pack): void {
|
|
$pack->forceFill(['id' => 8]);
|
|
}));
|
|
|
|
$case = ReviewPackOutputResolutionAdapter::fromGuidance($review, $guidance, 'customer_review_workspace');
|
|
|
|
expect($case['key'])->toBe('review_output.publication_blocked')
|
|
->and($case['severity'])->toBe('critical')
|
|
->and($case['status'])->toBe('blocked')
|
|
->and($case['title'])->toBe('Output not customer-ready')
|
|
->and($case['primary_action']['key'])->toBe('resolve_review_blockers')
|
|
->and($case['primary_action']['type'])->toBe(ResolutionAction::TYPE_NAVIGATION)
|
|
->and($case['source_refs'])->toEqual([
|
|
['type' => 'environment_review', 'id' => 6],
|
|
['type' => 'review_pack', 'id' => 8],
|
|
])
|
|
->and($case['evidence_refs'])->toEqual([
|
|
['type' => 'evidence_snapshot', 'id' => 8],
|
|
]);
|
|
});
|
|
|
|
it('maps ready customer-safe exports to a download-first shared resolution case', function (): void {
|
|
$readiness = ReviewPackOutputReadiness::derive(
|
|
reviewStatus: 'published',
|
|
reviewCompletenessState: EnvironmentReviewCompletenessState::Complete->value,
|
|
evidenceCompletenessState: EnvironmentReviewCompletenessState::Complete->value,
|
|
sectionStateCounts: [
|
|
EnvironmentReviewCompletenessState::Complete->value => 5,
|
|
],
|
|
requiredSectionCount: 5,
|
|
requiredSectionStateCounts: [
|
|
EnvironmentReviewCompletenessState::Complete->value => 5,
|
|
],
|
|
publishBlockers: [],
|
|
hasReadyExport: true,
|
|
includePii: false,
|
|
protectedValuesHidden: true,
|
|
disclosurePresent: true,
|
|
);
|
|
|
|
$guidance = ReviewPackOutputResolutionGuidance::fromReadiness($readiness, [
|
|
'download' => '/admin/review-packs/8/download',
|
|
'review' => '/admin/reviews/6',
|
|
]);
|
|
|
|
$review = new EnvironmentReview;
|
|
$review->forceFill([
|
|
'id' => 6,
|
|
'workspace_id' => 1,
|
|
'managed_environment_id' => 41,
|
|
'status' => 'published',
|
|
]);
|
|
|
|
$case = ReviewPackOutputResolutionAdapter::fromGuidance($review, $guidance, 'customer_review_workspace');
|
|
|
|
expect($case['key'])->toBe('review_output.customer_safe_ready')
|
|
->and($case['severity'])->toBe('success')
|
|
->and($case['status'])->toBe('ready')
|
|
->and($case['primary_action']['key'])->toBe('download_customer_safe_review_pack')
|
|
->and($case['primary_action']['type'])->toBe(ResolutionAction::TYPE_DOWNLOAD);
|
|
});
|