adapt( new NavigationMatrixRule('finding', 'detail_section', 'source_run', 'operation_run', 'canonical_page', 10), new ResolvedReference( referenceClass: ReferenceClass::OperationRun, rawIdentifier: '44', primaryLabel: 'Baseline compare', secondaryLabel: 'Run #44', state: ReferenceResolutionState::Resolved, stateLabel: null, linkTarget: new ReferenceLinkTarget( targetKind: ReferenceClass::OperationRun->value, url: '/admin/operations/44', actionLabel: 'View run', contextBadge: 'Tenant context', ), technicalDetail: ReferenceTechnicalDetail::forIdentifier('44'), ), ); expect($entry)->not->toBeNull() ->and($entry?->targetUrl)->toBe('/admin/operations/44') ->and($entry?->reference)->not->toBeNull() ->and($entry?->reference['stateLabel'])->toBe('Resolved') ->and($entry?->reference['showStateBadge'])->toBeFalse(); }); it('respects hide policies for degraded references', function (): void { $adapter = new RelatedContextReferenceAdapter( new RelatedActionLabelCatalog, new ResolvedReferencePresenter(new ReferenceTypeLabelCatalog, new ReferenceStatePresenter), ); $entry = $adapter->adapt( new NavigationMatrixRule('finding', 'list_row', 'baseline_snapshot', 'baseline_snapshot', 'direct_record', 10, missingStatePolicy: 'hide'), new ResolvedReference( referenceClass: ReferenceClass::BaselineSnapshot, rawIdentifier: '88', primaryLabel: 'Baseline snapshot', secondaryLabel: null, state: ReferenceResolutionState::Inaccessible, stateLabel: null, linkTarget: null, technicalDetail: ReferenceTechnicalDetail::forIdentifier('88'), ), ); expect($entry)->toBeNull(); });