Skip to content

OCPBUGS-71878: Show empty state instead of 403 error for users without projects#16464

Merged
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
rhamilto:OCPBUGS-71878
May 20, 2026
Merged

OCPBUGS-71878: Show empty state instead of 403 error for users without projects#16464
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
rhamilto:OCPBUGS-71878

Conversation

@rhamilto
Copy link
Copy Markdown
Member

@rhamilto rhamilto commented May 19, 2026

Analysis / Root cause:

Five resource list pages use useK8sWatchResource directly, bypassing the mock prop that ResourceListPage_ passes via withStartGuide when a user has no projects (SHOW_OPENSHIFT_START_GUIDE flag). The API calls fire regardless and return 403, which StatusBox renders as "Restricted access / You don't have access to this section due to cluster policy."

Affected pages:

  • Workloads → Pods (PodsPage)
  • Workloads → PodDisruptionBudgets (PodDisruptionBudgetsPage)
  • Storage → VolumeSnapshots (VolumeSnapshotPage)
  • User Management → RoleBindings (RoleBindingsPage)
  • Helm (HelmReleaseList via HelmTabbedPage)

Pages using DefaultPageListPageMultiListPage (Services, Routes, Ingresses, NetworkPolicies, UserDefinedNetworks) already handle mock correctly.

Solution description:

Accept and respect the mock prop in each affected page:

  1. Skip API calls when mock=true — pass null to useK8sWatchResource (returns [undefined, true, undefined]) or {} to useK8sWatchResources to prevent 403 errors.
  2. Forward mock to ConsoleDataView — which already renders <EmptyBox label={label} /> ("No {resource} found") when mock=true.
  3. Hide create buttons when mock=true — users without projects shouldn't see resource creation actions.

For the Helm page, mock is threaded from withStartGuidePageContentsHelmPageHelmReleaseList via pageData (used by HorizontalNav to pass props to tab components) and via direct prop to the HelmReleaseListPage fallback path.

Screenshots / screen recording:
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50 (1)
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50 (2)
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50 (3)
localhost_9000_helm_all-namespaces_page=1 perPage=50

Test setup:

Log in as a normal user without any projects.

Test cases:

  • Navigate to Workloads → Pods in admin perspective — verify "No Pods found" empty state (not "Restricted access")
  • Navigate to Workloads → PodDisruptionBudgets — verify "No PodDisruptionBudgets found" empty state
  • Navigate to Storage → VolumeSnapshots — verify "No VolumeSnapshots found" empty state
  • Navigate to User Management → RoleBindings — verify "No RoleBindings found" empty state
  • Navigate to Helm — verify "No Helm Releases found" empty state (not "Restricted access")
  • Verify create buttons are hidden on all affected pages when no projects exist
  • Verify the "Hello, world" getting started banner still appears above the empty state
  • Log in as a user WITH projects and verify all affected pages load resources normally

Browser conformance:

  • Chrome
  • Firefox
  • Safari (or Epiphany on Linux)

Additional info:

OCPBUGS-71878

@openshift-ci-robot openshift-ci-robot added jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels May 19, 2026
@openshift-ci-robot
Copy link
Copy Markdown
Contributor

@rhamilto: This pull request references Jira Issue OCPBUGS-71878, which is invalid:

  • expected the bug to target the "5.0.0" version, but no target version was set

Comment /jira refresh to re-evaluate validity if changes to the Jira bug are made, or edit the title of this pull request to link to a different bug.

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

Analysis / Root cause:

Four resource list pages use useK8sWatchResource directly, bypassing the mock prop that ResourceListPage_ passes via withStartGuide when a user has no projects (SHOW_OPENSHIFT_START_GUIDE flag). The API calls fire regardless and return 403, which StatusBox renders as "Restricted access / You don't have access to this section due to cluster policy."

Affected pages:

  • Workloads → Pods (PodsPage)
  • Workloads → PodDisruptionBudgets (PodDisruptionBudgetsPage)
  • Storage → VolumeSnapshots (VolumeSnapshotPage)
  • User Management → RoleBindings (RoleBindingsPage)

Pages using DefaultPageListPageMultiListPage (Services, Routes, Ingresses, NetworkPolicies, UserDefinedNetworks) already handle mock correctly.

Solution description:

Accept and respect the mock prop in each affected page:

  1. Skip API calls when mock=true — pass null to useK8sWatchResource (returns [undefined, true, undefined]) or {} to useK8sWatchResources to prevent 403 errors.
  2. Forward mock to ConsoleDataView — which already renders <EmptyBox label={label} /> ("No {resource} found") when mock=true.
  3. Hide create buttons when mock=true — users without projects shouldn't see resource creation actions.

Screenshots / screen recording:

Test setup:

Log in as a normal user without any projects.

Test cases:

  • Navigate to Workloads → Pods in admin perspective — verify "No Pods found" empty state (not "Restricted access")
  • Navigate to Workloads → PodDisruptionBudgets — verify "No PodDisruptionBudgets found" empty state
  • Navigate to Storage → VolumeSnapshots — verify "No VolumeSnapshots found" empty state
  • Navigate to User Management → RoleBindings — verify "No RoleBindings found" empty state
  • Verify create buttons are hidden on all affected pages when no projects exist
  • Verify the "Hello, world" getting started banner still appears above the empty state
  • Log in as a user WITH projects and verify all affected pages load resources normally

Browser conformance:

  • Chrome
  • Firefox
  • Safari (or Epiphany on Linux)

Additional info:

OCPBUGS-71878

Reviewers and assignees:

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 openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci openshift-ci Bot requested review from Leo6Leo and spadgett May 19, 2026 15:27
@openshift-ci openshift-ci Bot added component/core Related to console core functionality approved Indicates a PR has been approved by an approver from all required OWNERS files. labels May 19, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 19, 2026

📝 Walkthrough

Walkthrough

This PR adds optional mock mode support across five resource-list and resource-page components. When mock?: boolean is enabled, each component disables Kubernetes watch operations by passing null instead of resource configurations, and hides creation UI elements. The mock flag is threaded through component hierarchies (Page → List/Table) and persists across parent-child boundaries. Changes are applied consistently to PodDisruptionBudgetPage, VolumeSnapshotPage, RoleBindingsPage, and PodsPage, with supporting updates to their child list/table component contracts.

🚥 Pre-merge checks | ✅ 12
✅ Passed checks (12 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and specifically describes the main change: addressing a bug (OCPBUGS-71878) where users without projects see 403 errors instead of appropriate empty states on resource list pages.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
Stable And Deterministic Test Names ✅ Passed PR modifies only React/TypeScript frontend components. The custom check is for Ginkgo test names. This PR contains zero test files of any kind. The check is not applicable.
Test Structure And Quality ✅ Passed Not applicable: PR modifies React/TypeScript frontend components. No Ginkgo tests were added. Custom check is for Go test code, unrelated to this frontend PR.
Microshift Test Compatibility ✅ Passed This PR contains only React/TypeScript frontend component changes (.tsx files) with no Ginkgo e2e tests. The check is not applicable since it applies exclusively to new Ginkgo e2e test additions.
Single Node Openshift (Sno) Test Compatibility ✅ Passed No Ginkgo e2e tests are added in this PR. All changes are frontend React/TypeScript component updates to respect a mock prop. The SNO test compatibility check does not apply.
Topology-Aware Scheduling Compatibility ✅ Passed No deployment manifests, operator code, or controllers modified. This PR changes only React UI components. The topology-aware scheduling check does not apply to frontend UI-only changes.
Ote Binary Stdout Contract ✅ Passed OTE Binary Stdout Contract inapplicable. PR modifies only TypeScript/React frontend components—no Go code, test infrastructure, or process-level logging.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed No Ginkgo e2e tests present. PR modifies React/TypeScript frontend components only. Check not applicable.
Description check ✅ Passed PR description comprehensively covers root cause, solution, test setup, test cases, and includes visual evidence via screenshots.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@rhamilto
Copy link
Copy Markdown
Member Author

/cherry-pick release-4.22 release-4.21 release-4.20

@openshift-cherrypick-robot
Copy link
Copy Markdown

@rhamilto: once the present PR merges, I will cherry-pick it on top of release-4.22 in a new PR and assign it to you.

Details

In response to this:

/cherry-pick release-4.22 release-4.21 release-4.20

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.

@rhamilto
Copy link
Copy Markdown
Member Author

/test backend

@rhamilto
Copy link
Copy Markdown
Member Author

/jira refresh

@openshift-ci-robot openshift-ci-robot added jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. and removed jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels May 19, 2026
@openshift-ci-robot
Copy link
Copy Markdown
Contributor

@rhamilto: This pull request references Jira Issue OCPBUGS-71878, which is valid. The bug has been moved to the POST state.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (5.0.0) matches configured target version for branch (5.0.0)
  • bug is in the state ASSIGNED, which is one of the valid states (NEW, ASSIGNED, POST)

No GitHub users were found matching the public email listed for the QA contact in Jira (yapei@redhat.com), skipping review request.

Details

In response to this:

/jira refresh

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 openshift-eng/jira-lifecycle-plugin repository.

@rhamilto
Copy link
Copy Markdown
Member Author

/retest

…t projects

Resource list pages that use useK8sWatchResource directly were ignoring
the mock prop passed by withStartGuide when no projects are available.
This caused API calls that returned 403 errors, displayed as "Restricted
access" instead of the expected "No {resource} found" empty state.

Accept and respect the mock prop in PodsPage, PodDisruptionBudgetsPage,
VolumeSnapshotPage, and RoleBindingsPage to skip API calls and forward
mock to ConsoleDataView, which already renders an EmptyBox when mock is
true.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@openshift-ci openshift-ci Bot added the component/helm Related to helm-plugin label May 19, 2026
@openshift-ci-robot
Copy link
Copy Markdown
Contributor

@rhamilto: This pull request references Jira Issue OCPBUGS-71878, which is valid.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (5.0.0) matches configured target version for branch (5.0.0)
  • bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)

No GitHub users were found matching the public email listed for the QA contact in Jira (yapei@redhat.com), skipping review request.

Details

In response to this:

Analysis / Root cause:

Five resource list pages use useK8sWatchResource directly, bypassing the mock prop that ResourceListPage_ passes via withStartGuide when a user has no projects (SHOW_OPENSHIFT_START_GUIDE flag). The API calls fire regardless and return 403, which StatusBox renders as "Restricted access / You don't have access to this section due to cluster policy."

Affected pages:

  • Workloads → Pods (PodsPage)
  • Workloads → PodDisruptionBudgets (PodDisruptionBudgetsPage)
  • Storage → VolumeSnapshots (VolumeSnapshotPage)
  • User Management → RoleBindings (RoleBindingsPage)
  • Helm (HelmReleaseList via HelmTabbedPage)

Pages using DefaultPageListPageMultiListPage (Services, Routes, Ingresses, NetworkPolicies, UserDefinedNetworks) already handle mock correctly.

Solution description:

Accept and respect the mock prop in each affected page:

  1. Skip API calls when mock=true — pass null to useK8sWatchResource (returns [undefined, true, undefined]) or {} to useK8sWatchResources to prevent 403 errors.
  2. Forward mock to ConsoleDataView — which already renders <EmptyBox label={label} /> ("No {resource} found") when mock=true.
  3. Hide create buttons when mock=true — users without projects shouldn't see resource creation actions.

For the Helm page, mock is threaded from withStartGuidePageContentsHelmPageHelmReleaseList via pageData (used by HorizontalNav to pass props to tab components) and via direct prop to the HelmReleaseListPage fallback path.

Screenshots / screen recording:
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50 (1)
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50 (2)
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50 (3)

Test setup:

Log in as a normal user without any projects.

Test cases:

  • Navigate to Workloads → Pods in admin perspective — verify "No Pods found" empty state (not "Restricted access")
  • Navigate to Workloads → PodDisruptionBudgets — verify "No PodDisruptionBudgets found" empty state
  • Navigate to Storage → VolumeSnapshots — verify "No VolumeSnapshots found" empty state
  • Navigate to User Management → RoleBindings — verify "No RoleBindings found" empty state
  • Navigate to Helm — verify "No Helm Releases found" empty state (not "Restricted access")
  • Verify create buttons are hidden on all affected pages when no projects exist
  • Verify the "Hello, world" getting started banner still appears above the empty state
  • Log in as a user WITH projects and verify all affected pages load resources normally

Browser conformance:

  • Chrome
  • Firefox
  • Safari (or Epiphany on Linux)

Additional info:

OCPBUGS-71878

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 openshift-eng/jira-lifecycle-plugin repository.

@rhamilto
Copy link
Copy Markdown
Member Author

/retest

2 similar comments
@rhamilto
Copy link
Copy Markdown
Member Author

/retest

@rhamilto
Copy link
Copy Markdown
Member Author

/retest

@logonoff
Copy link
Copy Markdown
Member

QA Verification Evidence

Details
Branch OCPBUGS-71878
Baseline main @ ac110743c8
Candidate OCPBUGS-71878 @ ac02795d7e
Verified 2026-05-19
Browser Playwright 1.60.0 / Chromium
OS Darwin 25.5.0
Jira OCPBUGS-71878

Verification Steps

# Route Action Status
1 /k8s/all-namespaces/corev1Pod Navigate, wait for load FIXED
2 /k8s/all-namespaces/policyv1PodDisruptionBudget Navigate, wait for load FIXED
3 /k8s/all-namespaces/snapshot.storage.k8s.iov1VolumeSnapshot Navigate, wait for load FIXED
4 /k8s/all-namespaces/rolebindings Navigate, wait for load FIXED
5 /helm/all-namespaces Navigate, wait for load FIXED
6 /dashboards Navigate, wait for load PASS
7 /k8s/all-namespaces/deployments Navigate, wait for load PASS
8 /k8s/all-namespaces/statefulsets Navigate, wait for load PASS
9 /k8s/all-namespaces/secrets Navigate, wait for load PASS
10 /k8s/all-namespaces/configmaps Navigate, wait for load PASS
11 /k8s/all-namespaces/cronjobs Navigate, wait for load PASS
12 /k8s/all-namespaces/jobs Navigate, wait for load PASS
13 /k8s/all-namespaces/daemonsets Navigate, wait for load PASS
14 /k8s/all-namespaces/services Navigate, wait for load PASS
15 /k8s/all-namespaces/routes Navigate, wait for load PASS
16 /k8s/all-namespaces/ingresses Navigate, wait for load PASS
17 /k8s/all-namespaces/networkpolicies Navigate, wait for load PASS
18 /k8s/all-namespaces/persistentvolumeclaims Navigate, wait for load PASS
19 /k8s/all-namespaces/buildconfigs Navigate, wait for load PASS
20 /k8s/all-namespaces/imagestreams Navigate, wait for load PASS
21 /k8s/all-namespaces/serviceaccounts Navigate, wait for load PASS
22 /k8s/all-namespaces/roles Navigate, wait for load PASS
23 /k8s/all-namespaces/resourcequotas Navigate, wait for load PASS
24 /k8s/all-namespaces/limitranges Navigate, wait for load PASS
25 /k8s/all-namespaces/events Navigate, wait for load PASS
Animated overview (click to expand)
Baseline Candidate
Step 1: description (status)
Baseline (main) Candidate (OCPBUGS-71878)
Step 2: Pods (was 403, now empty state) (FIXED)
Baseline (main) Candidate (OCPBUGS-71878)
Step 3: PodDisruptionBudgets (was 403, now empty state) (FIXED)
Baseline (main) Candidate (OCPBUGS-71878)
Step 4: VolumeSnapshots (was 403, now empty state) (FIXED)
Baseline (main) Candidate (OCPBUGS-71878)
Step 5: RoleBindings (was 403, now empty state) (FIXED)
Baseline (main) Candidate (OCPBUGS-71878)
Step 6: Helm Releases (was 403, now empty state) (FIXED)
Baseline (main) Candidate (OCPBUGS-71878)
Step 7: Dashboard (sanity check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 8: Deployments (already handled mock) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 9: StatefulSets (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 10: Secrets (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 11: ConfigMaps (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 12: CronJobs (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 13: Jobs (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 14: DaemonSets (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 15: Services (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 16: Routes (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 17: Ingresses (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 18: NetworkPolicies (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 19: PVCs (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 20: BuildConfigs (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 21: ImageStreams (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 22: ServiceAccounts (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 23: Roles (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 24: ResourceQuotas (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)
Step 25: LimitRanges (regression check) (PASS)
Baseline (main) Candidate (OCPBUGS-71878)

Warning

This verification was performed by an AI agent. Results may contain false positives or miss
regressions that require human judgment. Always review the screenshots manually before approving.

Automated QA verification by Claude Code

Copy link
Copy Markdown
Member

@logonoff logonoff left a comment

Choose a reason for hiding this comment

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

/lgtm

@logonoff
Copy link
Copy Markdown
Member

/verified by claude

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label May 19, 2026
@openshift-ci-robot
Copy link
Copy Markdown
Contributor

@logonoff: This PR has been marked as verified by claude.

Details

In response to this:

/verified by claude

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 openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label May 19, 2026
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 19, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: logonoff, rhamilto

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
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 19, 2026

@rhamilto: 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.

@openshift-merge-bot openshift-merge-bot Bot merged commit 8ba6726 into openshift:main May 20, 2026
9 checks passed
@openshift-ci-robot
Copy link
Copy Markdown
Contributor

@rhamilto: Jira Issue Verification Checks: Jira Issue OCPBUGS-71878
✔️ This pull request was pre-merge verified.
✔️ All associated pull requests have merged.
✔️ All associated, merged pull requests were pre-merge verified.

Jira Issue OCPBUGS-71878 has been moved to the MODIFIED state and will move to the VERIFIED state when the change is available in an accepted nightly payload. 🕓

Details

In response to this:

Analysis / Root cause:

Five resource list pages use useK8sWatchResource directly, bypassing the mock prop that ResourceListPage_ passes via withStartGuide when a user has no projects (SHOW_OPENSHIFT_START_GUIDE flag). The API calls fire regardless and return 403, which StatusBox renders as "Restricted access / You don't have access to this section due to cluster policy."

Affected pages:

  • Workloads → Pods (PodsPage)
  • Workloads → PodDisruptionBudgets (PodDisruptionBudgetsPage)
  • Storage → VolumeSnapshots (VolumeSnapshotPage)
  • User Management → RoleBindings (RoleBindingsPage)
  • Helm (HelmReleaseList via HelmTabbedPage)

Pages using DefaultPageListPageMultiListPage (Services, Routes, Ingresses, NetworkPolicies, UserDefinedNetworks) already handle mock correctly.

Solution description:

Accept and respect the mock prop in each affected page:

  1. Skip API calls when mock=true — pass null to useK8sWatchResource (returns [undefined, true, undefined]) or {} to useK8sWatchResources to prevent 403 errors.
  2. Forward mock to ConsoleDataView — which already renders <EmptyBox label={label} /> ("No {resource} found") when mock=true.
  3. Hide create buttons when mock=true — users without projects shouldn't see resource creation actions.

For the Helm page, mock is threaded from withStartGuidePageContentsHelmPageHelmReleaseList via pageData (used by HorizontalNav to pass props to tab components) and via direct prop to the HelmReleaseListPage fallback path.

Screenshots / screen recording:
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50 (1)
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50 (2)
localhost_9000_k8s_all-namespaces_core~v1~Pod_page=1 perPage=50 (3)
localhost_9000_helm_all-namespaces_page=1 perPage=50

Test setup:

Log in as a normal user without any projects.

Test cases:

  • Navigate to Workloads → Pods in admin perspective — verify "No Pods found" empty state (not "Restricted access")
  • Navigate to Workloads → PodDisruptionBudgets — verify "No PodDisruptionBudgets found" empty state
  • Navigate to Storage → VolumeSnapshots — verify "No VolumeSnapshots found" empty state
  • Navigate to User Management → RoleBindings — verify "No RoleBindings found" empty state
  • Navigate to Helm — verify "No Helm Releases found" empty state (not "Restricted access")
  • Verify create buttons are hidden on all affected pages when no projects exist
  • Verify the "Hello, world" getting started banner still appears above the empty state
  • Log in as a user WITH projects and verify all affected pages load resources normally

Browser conformance:

  • Chrome
  • Firefox
  • Safari (or Epiphany on Linux)

Additional info:

OCPBUGS-71878

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 openshift-eng/jira-lifecycle-plugin repository.

@openshift-cherrypick-robot
Copy link
Copy Markdown

@rhamilto: new pull request created: #16467

Details

In response to this:

/cherry-pick release-4.22 release-4.21 release-4.20

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.

@openshift-merge-robot
Copy link
Copy Markdown
Contributor

Fix included in release 5.0.0-0.nightly-2026-05-20-101113

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. component/core Related to console core functionality component/helm Related to helm-plugin jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants