Skip to content

Trt 2782 all tests details links UI#3763

Open
neisw wants to merge 5 commits into
openshift:mainfrom
neisw:trt-2782-all-tests-details-links-ui
Open

Trt 2782 all tests details links UI#3763
neisw wants to merge 5 commits into
openshift:mainfrom
neisw:trt-2782-all-tests-details-links-ui

Conversation

@neisw

@neisw neisw commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

UI implementation of TRT-2782. Relies on #3761

Allows navigation to non regressed test details:
image

Continues to support navigation to regressed tests:
image

Summary by CodeRabbit

  • New Features
    • Component readiness (Level 4) now exposes and supports opening navigable test-detail links for all analyzed tests, with backward-compatible fallback to existing regressed-test behavior.
  • Bug Fixes / Improvements
    • Test-detail link injection now applies to all test statuses.
    • If no server-provided test-detail link is available, the UI no longer creates a fallback link.
  • Documentation
    • Added/updated backend and frontend implementation plans for the navigation changes.
  • Tests
    • Added end-to-end coverage validating top-level vs Level 4 link behavior and preserving regressed-test content.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: automatic mode

@openshift-ci
openshift-ci Bot requested review from deepsm007 and sosiouxme July 12, 2026 20:54
@openshift-ci

openshift-ci Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: neisw

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jul 12, 2026
@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 923a9b7a-1c5d-4503-928b-5ebe4ca59a41

📥 Commits

Reviewing files that changed from the base of the PR and between c95f5b6 and 735c6e1.

📒 Files selected for processing (17)
  • docs/plans/trt-2782-frontend-hateoas-links.md
  • sippy-ng/src/component_readiness/CompCapTestRow.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapabilities.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapability.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapabilityTest.js
  • sippy-ng/src/component_readiness/CompReadyTestCell.js
  • sippy-ng/src/component_readiness/CompReadyUtils.js
  • sippy-ng/src/component_readiness/CompReadyUtils.test.js
  • sippy-ng/src/component_readiness/ComponentReadiness.js
  • sippy-ng/src/component_readiness/ComponentReadinessToolBar.js
  • sippy-ng/src/component_readiness/RegressedTestsModal.js
  • sippy-ng/src/component_readiness/RegressedTestsPanel.js
  • sippy-ng/src/component_readiness/Triage.js
  • sippy-ng/src/component_readiness/TriagePotentialMatches.js
  • sippy-ng/src/component_readiness/TriagedRegressionTestList.js
  • sippy-ng/src/component_readiness/TriagedTestsPanel.js
  • test/e2e/util/cache_manipulator.go
💤 Files with no reviewable changes (6)
  • sippy-ng/src/component_readiness/CompReadyEnvCapability.js
  • sippy-ng/src/component_readiness/ComponentReadiness.js
  • sippy-ng/src/component_readiness/TriagedTestsPanel.js
  • sippy-ng/src/component_readiness/RegressedTestsModal.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapabilities.js
  • sippy-ng/src/component_readiness/Triage.js
🚧 Files skipped from review as they are similar to previous changes (10)
  • sippy-ng/src/component_readiness/ComponentReadinessToolBar.js
  • sippy-ng/src/component_readiness/CompReadyTestCell.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapabilityTest.js
  • sippy-ng/src/component_readiness/CompCapTestRow.js
  • sippy-ng/src/component_readiness/CompReadyUtils.js
  • sippy-ng/src/component_readiness/TriagePotentialMatches.js
  • sippy-ng/src/component_readiness/CompReadyUtils.test.js
  • docs/plans/trt-2782-frontend-hateoas-links.md
  • sippy-ng/src/component_readiness/RegressedTestsPanel.js
  • sippy-ng/src/component_readiness/TriagedRegressionTestList.js

Walkthrough

The component readiness API now exposes Level 4 all_tests summaries with test_details links for analyzed tests. Frontend cells and regression/triage views consume HATEOAS links without forwarding filterVals. Tests validate link presence and preserved regression behavior.

Changes

All-tests HATEOAS navigation

Layer / File(s) Summary
Backend aggregation and link injection
pkg/api/componentreadiness/..., pkg/apis/api/componentreport/types.go, pkg/api/componentreadiness/middleware/...
Level 4 reports collect and serialize AllTests, inject links for every status, and retain regression-only cell status computation.
Backend validation and cache handling
pkg/api/componentreadiness/component_report_test.go, test/e2e/componentreadiness/..., test/e2e/util/cache_manipulator.go
Tests validate Level 1 omission, Level 4 link coverage, preserved regression behavior, and test-specific cache-key selection.
Frontend cell and link utilities
sippy-ng/src/component_readiness/CompCapTestRow.js, CompReadyTestCell.js, CompReadyUtils.js, CompReadyUtils.test.js
Cells prefer all_tests with a regression fallback, while link generation uses test-provided HATEOAS URLs and view-specific handling.
Frontend caller and prop wiring
sippy-ng/src/component_readiness/ComponentReadiness*.js, RegressedTests*.js, Triage*.js, Triaged*.js
Toolbar, modal, panel, and triage call sites remove filterVals forwarding and use the simplified link helper.
Implementation plans
docs/plans/*
Plans document backend and frontend implementation details and verification expectations.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested reviewers: deepsm007, sosiouxme, xueqzhan

Sequence Diagram(s)

sequenceDiagram
  participant ComponentReportGenerator
  participant LinkInjector
  participant FrontendGrid
  ComponentReportGenerator->>ComponentReportGenerator: collect Level 4 all_tests
  ComponentReportGenerator->>LinkInjector: process each test comparison
  LinkInjector-->>ComponentReportGenerator: attach test_details links
  ComponentReportGenerator-->>FrontendGrid: return all_tests summaries
  FrontendGrid->>FrontendGrid: convert HATEOAS link to UI URL
  FrontendGrid-->>FrontendGrid: render clickable test cell
Loading
🚥 Pre-merge checks | ✅ 19 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 41.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Test Coverage For New Features ⚠️ Warning Go/e2e and util tests exist, but the new UI branch in CompReadyTestCell/CompCapTestRow has no component test; only CompReadyUtils.test.js exists. Add React tests for CompReadyTestCell/CompCapTestRow covering all_tests vs regressed_tests fallback and link/no-link rendering, or cover it with an integration test.
✅ Passed checks (19 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the PR's main goal of adding UI support for all test details links in component readiness.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Go Error Handling ✅ Passed No new _-ignored errors or panic sites were added; new Go paths wrap Redis/JSON failures with fmt.Errorf(...%w) and guard nil pointers before use.
Sql Injection Prevention ✅ Passed Touched files only change report/link aggregation; no SQL strings, Query/Exec calls, or concatenated query construction appear in the diff.
Excessive Css In React Should Use Styles ✅ Passed Touched React files only change logic; inline style objects are small (≤3 properties), so no excessive inline CSS was introduced.
Single Responsibility And Clear Naming ✅ Passed PASS: The PR stays within one cohesive component-readiness chunk, and the new structs/functions are narrowly scoped with clear names; it also removes generic prop plumbing.
Feature Documentation ✅ Passed No component-readiness feature doc exists in docs/features; the only feature doc is about job symptoms, so this PR had no relevant feature doc to update.
Stable And Deterministic Test Names ✅ Passed The new test/subtest titles are static and descriptive; no dynamic names, timestamps, IDs, pods, nodes, or namespaces appear in the added tests.
Test Structure And Quality ✅ Passed New e2e tests are API-only, split into focused subtests, use explicit failure messages, and introduce no cluster resources or waits needing cleanup/timeouts.
Microshift Test Compatibility ✅ Passed The added tests are plain Go tests using only Sippy HTTP APIs; no unsupported OpenShift APIs/features or MicroShift skip/label guards are present.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The added e2e tests only query report APIs and assert link presence; they contain no multi-node/HA assumptions or SNO-specific behavior.
Topology-Aware Scheduling Compatibility ✅ Passed Only component-readiness API/UI/test code changed; no deployment manifests, controllers, node selectors, affinity, PDBs, or topology checks were added.
Ote Binary Stdout Contract ✅ Passed No process-level stdout writes were added; new code is test-only, and the changed Go paths contain no fmt.Print/klog stdout setup or suite-level hooks.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The new e2e test only calls the local Sippy API via SippyGet, and the helper uses net.JoinHostPort with localhost; no IPv4-only literals or public hosts found.
No-Weak-Crypto ✅ Passed No weak crypto or secret comparisons found in changed files; scans showed no MD5/SHA1/DES/RC4/3DES/Blowfish/ECB usage, and the only hash is non-security symptomColor.
Container-Privileges ✅ Passed Diff search found no added privileged/hostPID/hostNetwork/hostIPC, allowPrivilegeEscalation, or runAsUser/runAsNonRoot settings in changed files.
No-Sensitive-Data-In-Logs ✅ Passed The PR removes a console.log(regressedTests) and adds no new log statements or sensitive-field logging in the diff.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
sippy-ng/src/component_readiness/TriagedRegressionTestList.js (1)

245-275: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Unguarded href when generateTestDetailsReportLink returns null.

Per the simplification described in the plan doc, generateTestDetailsReportLink now returns null when no HATEOAS link is present. Here, item.url is used directly as href without a null check (<a href={item.url} ...>), unlike CompReadyTestCell.js, which guards with a ternary (link ? <a href={link}>... : ...). If a triaged regression's TestComparison lacks a test_details link, the icon renders inside a non-functional anchor that still looks clickable.

🔧 Proposed guard
-                  <a href={item.url} target="_blank" rel="noopener noreferrer">
-                    <CompSeverityIcon
-                      status={item.status}
-                      explanations={item.explanations}
-                    />
-                  </a>
+                  {item.url ? (
+                    <a href={item.url} target="_blank" rel="noopener noreferrer">
+                      <CompSeverityIcon
+                        status={item.status}
+                        explanations={item.explanations}
+                      />
+                    </a>
+                  ) : (
+                    <CompSeverityIcon
+                      status={item.status}
+                      explanations={item.explanations}
+                    />
+                  )}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sippy-ng/src/component_readiness/TriagedRegressionTestList.js` around lines
245 - 275, Update the renderCell logic for the triaged regression status in
TriagedRegressionTestList so a null result from generateTestDetailsReportLink
does not render the icon inside an anchor with an invalid href. Mirror the
guarded link behavior used by CompReadyTestCell.js: render the anchor only when
item.url is present, and render the same icon without a link otherwise.
pkg/api/componentreadiness/component_report.go (1)

125-159: 🚀 Performance & Scalability | 🟡 Minor | ⚡ Quick win

Avoid double post-analysis for regressed tests

AllTests already includes the regressed entries, so those cells run through PostAnalysis twice. Skip the overlap in the second loop or derive one slice from the other to avoid redundant middleware work.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/api/componentreadiness/component_report.go` around lines 125 - 159, The
PostAnalysis method currently processes regressed tests twice because AllTests
includes those entries. Update the AllTests loop in
ComponentReportGenerator.PostAnalysis to skip entries already represented in
RegressedTests, or otherwise derive the non-regressed subset, while preserving
post-analysis for tests that are only in AllTests.
sippy-ng/src/component_readiness/RegressedTestsPanel.js (1)

285-313: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Guard against null link from generateTestDetailsReportLink.

generateTestDetailsReportLink can now return null (no HATEOAS link found), but the anchor here is rendered unconditionally. Unlike CompReadyTestCell.js, which conditionally wraps the icon only when a link exists, this will silently render a non-functional <a> with no href.

🐛 Proposed fix to guard the link
-          <a
-            href={generateTestDetailsReportLink(params.row)}
-            target="_blank"
-            rel="noopener noreferrer"
-          >
-            <CompSeverityIcon
-              status={
-                params.row.effective_status
-                  ? params.row.effective_status
-                  : params.row.status
-              }
-              explanations={params.row.explanations}
-            />
-          </a>
+          {(() => {
+            const link = generateTestDetailsReportLink(params.row)
+            const icon = (
+              <CompSeverityIcon
+                status={
+                  params.row.effective_status
+                    ? params.row.effective_status
+                    : params.row.status
+                }
+                explanations={params.row.explanations}
+              />
+            )
+            return link ? (
+              <a href={link} target="_blank" rel="noopener noreferrer">
+                {icon}
+              </a>
+            ) : (
+              icon
+            )
+          })()}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sippy-ng/src/component_readiness/RegressedTestsPanel.js` around lines 285 -
313, Update the status column’s renderCell callback to store the result of
generateTestDetailsReportLink(params.row) and render the anchor only when that
link is non-null; otherwise render CompSeverityIcon directly while preserving
its existing status and explanations props.
sippy-ng/src/component_readiness/TriagePotentialMatches.js (1)

352-379: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Guard against null URL in the status cell.

Since generateTestDetailsReportLink can return null when no HATEOAS link exists, testDetailsUrl may be null and the anchor at Line 371 renders with no href, leaving a non-functional link around the icon. Consider conditionally rendering the anchor only when url is truthy, mirroring the pattern in CompReadyTestCell.js.

🐛 Proposed fix to guard the link
       renderCell: (params) => (
         <div className={classes.statusCell}>
-          <a href={params.value.url} target="_blank" rel="noopener noreferrer">
-            <CompSeverityIcon
-              status={params.value.status}
-              explanations={params.value.explanations}
-            />
-          </a>
+          {params.value.url ? (
+            <a href={params.value.url} target="_blank" rel="noopener noreferrer">
+              <CompSeverityIcon
+                status={params.value.status}
+                explanations={params.value.explanations}
+              />
+            </a>
+          ) : (
+            <CompSeverityIcon
+              status={params.value.status}
+              explanations={params.value.explanations}
+            />
+          )}
         </div>
       ),
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sippy-ng/src/component_readiness/TriagePotentialMatches.js` around lines 352
- 379, Update the status cell’s renderCell logic in TriagePotentialMatches to
render the anchor only when params.value.url is truthy, while always rendering
CompSeverityIcon. Preserve the existing link attributes and icon
status/explanations handling when a URL is available, mirroring the
conditional-link pattern used by CompReadyTestCell.
🧹 Nitpick comments (2)
pkg/api/componentreadiness/component_report_test.go (1)

1220-1227: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assertion doesn't actually validate "populated" for most cases.

The comment claims this validates that AllTests "is populated," but assert.GreaterOrEqual(len(AllTests), len(RegressedTests)) is trivially true (>= 0) whenever RegressedTests is empty. Most test cases here (e.g. NotSignificant, SignificantImprovement, MissingBasisAndSample statuses) have zero RegressedTests, so the assertion doesn't catch a backend regression where AllTests is left empty for those columns, even though the corresponding e2e test (alltests_links_test.go) expects AllTests to be populated with links for NotSignificant/SignificantImprovement/MissingBasis statuses.

Consider asserting AllTests is non-empty whenever the column status isn't MissingBasisAndSample (i.e., there is real base/sample data), to actually cover the population claim.

♻️ Suggested stronger assertion
 					// AllTests should contain at least as many entries as RegressedTests
 					assert.GreaterOrEqual(t, len(report.Rows[ir].Columns[ic].AllTests),
 						len(report.Rows[ir].Columns[ic].RegressedTests),
 						"AllTests should be a superset of RegressedTests for row %d col %d", ir, ic)
+					// For columns with real base/sample data, AllTests should be populated.
+					if report.Rows[ir].Columns[ic].Status != crtest.MissingBasisAndSample {
+						assert.NotEmpty(t, report.Rows[ir].Columns[ic].AllTests,
+							"AllTests should be populated for row %d col %d with status %d",
+							ir, ic, report.Rows[ir].Columns[ic].Status)
+					}
 					// Clear AllTests for the deep comparison below; the count check above
 					// validates it is populated.
 					report.Rows[ir].Columns[ic].AllTests = nil
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/api/componentreadiness/component_report_test.go` around lines 1220 -
1227, Strengthen the AllTests validation in the report comparison loop so
columns whose status is not MissingBasisAndSample require a non-empty AllTests
collection, while retaining the existing superset check against RegressedTests.
Keep the exception for MissingBasisAndSample and continue clearing AllTests only
after both validations.
test/e2e/componentreadiness/alltests_links_test.go (1)

26-57: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Both key assertions can be skipped depending on live view data.

The two subtests that actually verify test_details links exist (regressed tests have test_details links in AllTests and non-regressed tests have test_details links in AllTests) both t.Skip if the fetched view happens to lack matching rows. Since the view used is views[0] from whatever the live environment returns, these core assertions may run without ever executing in some environments/CI runs, reducing this e2e test's regression-catching value.

Consider selecting/asserting a view known to contain both regressed and non-regressed test data (or failing loudly if no suitable view is found) rather than silently skipping the primary checks.

Also applies to: 59-86

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/componentreadiness/alltests_links_test.go` around lines 26 - 57, The
link assertions in the subtests “regressed tests have test_details links in
AllTests” and “non-regressed tests have test_details links in AllTests” can be
silently skipped when the selected live view lacks matching rows. Update the
view selection or setup to use a view containing both regressed and
non-regressed data, and fail the test when no suitable view exists instead of
calling t.Skip; keep the existing test_details link assertions unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@pkg/api/componentreadiness/component_report.go`:
- Around line 125-159: The PostAnalysis method currently processes regressed
tests twice because AllTests includes those entries. Update the AllTests loop in
ComponentReportGenerator.PostAnalysis to skip entries already represented in
RegressedTests, or otherwise derive the non-regressed subset, while preserving
post-analysis for tests that are only in AllTests.

In `@sippy-ng/src/component_readiness/RegressedTestsPanel.js`:
- Around line 285-313: Update the status column’s renderCell callback to store
the result of generateTestDetailsReportLink(params.row) and render the anchor
only when that link is non-null; otherwise render CompSeverityIcon directly
while preserving its existing status and explanations props.

In `@sippy-ng/src/component_readiness/TriagedRegressionTestList.js`:
- Around line 245-275: Update the renderCell logic for the triaged regression
status in TriagedRegressionTestList so a null result from
generateTestDetailsReportLink does not render the icon inside an anchor with an
invalid href. Mirror the guarded link behavior used by CompReadyTestCell.js:
render the anchor only when item.url is present, and render the same icon
without a link otherwise.

In `@sippy-ng/src/component_readiness/TriagePotentialMatches.js`:
- Around line 352-379: Update the status cell’s renderCell logic in
TriagePotentialMatches to render the anchor only when params.value.url is
truthy, while always rendering CompSeverityIcon. Preserve the existing link
attributes and icon status/explanations handling when a URL is available,
mirroring the conditional-link pattern used by CompReadyTestCell.

---

Nitpick comments:
In `@pkg/api/componentreadiness/component_report_test.go`:
- Around line 1220-1227: Strengthen the AllTests validation in the report
comparison loop so columns whose status is not MissingBasisAndSample require a
non-empty AllTests collection, while retaining the existing superset check
against RegressedTests. Keep the exception for MissingBasisAndSample and
continue clearing AllTests only after both validations.

In `@test/e2e/componentreadiness/alltests_links_test.go`:
- Around line 26-57: The link assertions in the subtests “regressed tests have
test_details links in AllTests” and “non-regressed tests have test_details links
in AllTests” can be silently skipped when the selected live view lacks matching
rows. Update the view selection or setup to use a view containing both regressed
and non-regressed data, and fail the test when no suitable view exists instead
of calling t.Skip; keep the existing test_details link assertions unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 77ccaa38-f04f-47bd-8e1b-f0035fecb88f

📥 Commits

Reviewing files that changed from the base of the PR and between 9370b21 and e6b3762.

📒 Files selected for processing (22)
  • docs/plans/trt-2782-all-tests-links.md
  • docs/plans/trt-2782-frontend-hateoas-links.md
  • pkg/api/componentreadiness/component_report.go
  • pkg/api/componentreadiness/component_report_test.go
  • pkg/api/componentreadiness/middleware/linkinjector/linkinjector.go
  • pkg/apis/api/componentreport/types.go
  • sippy-ng/src/component_readiness/CompCapTestRow.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapabilities.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapability.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapabilityTest.js
  • sippy-ng/src/component_readiness/CompReadyTestCell.js
  • sippy-ng/src/component_readiness/CompReadyUtils.js
  • sippy-ng/src/component_readiness/CompReadyUtils.test.js
  • sippy-ng/src/component_readiness/ComponentReadiness.js
  • sippy-ng/src/component_readiness/ComponentReadinessToolBar.js
  • sippy-ng/src/component_readiness/RegressedTestsModal.js
  • sippy-ng/src/component_readiness/RegressedTestsPanel.js
  • sippy-ng/src/component_readiness/Triage.js
  • sippy-ng/src/component_readiness/TriagePotentialMatches.js
  • sippy-ng/src/component_readiness/TriagedRegressionTestList.js
  • sippy-ng/src/component_readiness/TriagedTestsPanel.js
  • test/e2e/componentreadiness/alltests_links_test.go
💤 Files with no reviewable changes (7)
  • sippy-ng/src/component_readiness/CompReadyEnvCapabilities.js
  • sippy-ng/src/component_readiness/ComponentReadiness.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapability.js
  • sippy-ng/src/component_readiness/TriagedTestsPanel.js
  • sippy-ng/src/component_readiness/Triage.js
  • pkg/api/componentreadiness/middleware/linkinjector/linkinjector.go
  • sippy-ng/src/component_readiness/RegressedTestsModal.js

@openshift-ci openshift-ci Bot added the ready-for-human-review Indicates a PR has been reviewed by automated tools and is ready for human review label Jul 12, 2026
@neisw

neisw commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

/retest-required

@neisw

neisw commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

/hold
until after #3761 merges

@openshift-ci openshift-ci Bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jul 13, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling required tests:
/test e2e

@neisw
neisw force-pushed the trt-2782-all-tests-details-links-ui branch from e6b3762 to c95f5b6 Compare July 14, 2026 00:42

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
test/e2e/componentreadiness/alltests_links_test.go (1)

53-63: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate "RegressedTests unchanged by AllTests addition" subtest.

This subtest is byte-for-byte identical to the one at lines 216-226 in TestAllTestsLinksPresent. Extract a shared helper to avoid drift between the two copies.

♻️ Proposed helper extraction
func assertRegressedTestsUnchanged(t *testing.T, rows []componentreport.ReportRow) {
	for _, row := range rows {
		for _, col := range row.Columns {
			for _, rt := range col.RegressedTests {
				assert.Less(t, int(rt.ReportStatus), int(crtest.MissingSample),
					"RegressedTests should only contain tests with regression status, got %d for %s",
					rt.ReportStatus, rt.TestName)
			}
		}
	}
}
-	t.Run("RegressedTests unchanged by AllTests addition", func(t *testing.T) {
-		for _, row := range report.Rows {
-			for _, col := range row.Columns {
-				for _, rt := range col.RegressedTests {
-					assert.Less(t, int(rt.ReportStatus), int(crtest.MissingSample),
-						"RegressedTests should only contain tests with regression status, got %d for %s",
-						rt.ReportStatus, rt.TestName)
-				}
-			}
-		}
-	})
+	t.Run("RegressedTests unchanged by AllTests addition", func(t *testing.T) {
+		assertRegressedTestsUnchanged(t, report.Rows)
+	})

Also applies to: 216-226

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/componentreadiness/alltests_links_test.go` around lines 53 - 63,
Extract the duplicated “RegressedTests unchanged by AllTests addition” assertion
into a shared assertRegressedTestsUnchanged helper, accepting the report rows
and testing context. Replace both copies in TestAllTestsLinksPresent with calls
to this helper while preserving the existing assertion and subtest behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@test/e2e/componentreadiness/alltests_links_test.go`:
- Around line 53-63: Extract the duplicated “RegressedTests unchanged by
AllTests addition” assertion into a shared assertRegressedTestsUnchanged helper,
accepting the report rows and testing context. Replace both copies in
TestAllTestsLinksPresent with calls to this helper while preserving the existing
assertion and subtest behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: dd7da4da-9316-4774-82f5-b17e772dc726

📥 Commits

Reviewing files that changed from the base of the PR and between e6b3762 and c95f5b6.

📒 Files selected for processing (20)
  • docs/plans/trt-2782-all-tests-links.md
  • docs/plans/trt-2782-frontend-hateoas-links.md
  • pkg/api/componentreadiness/component_report.go
  • pkg/api/componentreadiness/component_report_test.go
  • sippy-ng/src/component_readiness/CompCapTestRow.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapabilities.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapability.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapabilityTest.js
  • sippy-ng/src/component_readiness/CompReadyTestCell.js
  • sippy-ng/src/component_readiness/CompReadyUtils.js
  • sippy-ng/src/component_readiness/CompReadyUtils.test.js
  • sippy-ng/src/component_readiness/ComponentReadiness.js
  • sippy-ng/src/component_readiness/ComponentReadinessToolBar.js
  • sippy-ng/src/component_readiness/RegressedTestsModal.js
  • sippy-ng/src/component_readiness/RegressedTestsPanel.js
  • sippy-ng/src/component_readiness/Triage.js
  • sippy-ng/src/component_readiness/TriagePotentialMatches.js
  • sippy-ng/src/component_readiness/TriagedRegressionTestList.js
  • sippy-ng/src/component_readiness/TriagedTestsPanel.js
  • test/e2e/componentreadiness/alltests_links_test.go
💤 Files with no reviewable changes (6)
  • sippy-ng/src/component_readiness/TriagedTestsPanel.js
  • sippy-ng/src/component_readiness/Triage.js
  • sippy-ng/src/component_readiness/ComponentReadiness.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapability.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapabilities.js
  • sippy-ng/src/component_readiness/RegressedTestsModal.js
🚧 Files skipped from review as they are similar to previous changes (13)
  • pkg/api/componentreadiness/component_report_test.go
  • sippy-ng/src/component_readiness/TriagePotentialMatches.js
  • sippy-ng/src/component_readiness/CompReadyEnvCapabilityTest.js
  • sippy-ng/src/component_readiness/CompCapTestRow.js
  • sippy-ng/src/component_readiness/CompReadyUtils.test.js
  • docs/plans/trt-2782-all-tests-links.md
  • sippy-ng/src/component_readiness/CompReadyTestCell.js
  • sippy-ng/src/component_readiness/RegressedTestsPanel.js
  • sippy-ng/src/component_readiness/TriagedRegressionTestList.js
  • sippy-ng/src/component_readiness/ComponentReadinessToolBar.js
  • pkg/api/componentreadiness/component_report.go
  • sippy-ng/src/component_readiness/CompReadyUtils.js
  • docs/plans/trt-2782-frontend-hateoas-links.md

@neisw
neisw force-pushed the trt-2782-all-tests-details-links-ui branch from c95f5b6 to 735c6e1 Compare July 14, 2026 16:06
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling required tests:
/test e2e

@openshift-ci

openshift-ci Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

@neisw: all tests passed!

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. ready-for-human-review Indicates a PR has been reviewed by automated tools and is ready for human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant