fix(GRO-2373): add Sign out button to in-portal chrome sidebar #77
Reference in New Issue
Block a user
Delete Branch "feature/gro-2373-chrome-signout"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
The customer portal chrome (Home, Appointments, My Pets, Report Cards, Billing, Messages, Settings) had no visible sign-out control. Only the OOBE and the no-access card exposed one. Customers had to clear cookies or use devtools to sign out.
The CMPO ruling for GRO-2355 required the logout control to be reachable from the OOBE screen, the in-portal screen, and the (deep-linkable) deleted-portal screen. GRO-2358 (P1) covered the no-access + OOBE surfaces but missed the in-portal chrome. This PR closes that gap.
Fix
Added a Sign out button in the portal sidebar footer (above the "Customer Portal v1.0" version label, in the same area as "End Impersonation"). The button is always visible to authenticated customers and wires to the existing
handleSignOut()callback, which calls the canonicalsignOut()fromlib/auth-client— the SAME handler used by:AdminLayouttop-bar LogoutTest
src/__tests__/portal.test.tsx: new test rendersCustomerPortalwith a successful SSO bridge, lands on the chrome (verifyingHi, Janegreeting, no no-access card, no OOBE), clicksportal-chrome-signout, and asserts the sharedsignOutSpyfires +window.location.hrefnavigates to/login.UAT Playbook
Updated
UAT_PLAYBOOK.md§5.25.6f with a new test case for the chrome sign-out reachability (sibling to TC-WEB-5.25.6c/6e for OOBE / no-access).Why this is NOT a GRO-2359 regression
GRO-2359 (the OOBE portal-creation routing) does not modify the in-portal chrome — the missing button predates GRO-2359 and the OOBE / no-access logouts are still functional. The defect is purely a pre-existing gap in the chrome layout, scoped to
CustomerPortal.tsx.🤖 Generated with Claude Code
Co-Authored-By: Paperclip noreply@paperclip.ing