Homepage Personalization โ Manual Test Plan โ
These 8 scenarios cover the critical paths for issue #763. Run against a deployed environment with HomepageConfig.personalizationEnabled = true and at least 15 active HomepageForYouCandidates with persona tags.
Scenario 1 โ Anonymous visitor โ
Setup: Open a private/incognito browser window (no XSUAA session).
Steps:
- Navigate to
/. - Observe the homepage.
Expected:
- Verb spine appears in the default order (
Learn ยท Build ยท Integrate ยท Operate ยท AI ยท Connect). - No personalized badge strip is visible.
- No "For you" row is visible.
- No network request to
/api/homepage/personalizedis made (check DevTools Network tab).
Scenario 2 โ Signed-in user with no learning preferences set โ
Setup: Sign in with a user account that has no role, deployment, or cloud set in /me/#learning-preferences.
Steps:
- Navigate to
/. - Observe the homepage.
Expected:
- Verb spine appears in the default order.
- Badge strip appears: "Personalized for you ยท Adjust ยท See default" (no role/cloud clause in the badge text because the profile is empty).
- "For you" row is hidden (no candidates match an empty profile).
- Network request to
/api/homepage/personalizedreturns 200. - Response includes
Cache-Control: private, no-storeandX-Personalization: 1headers.
Scenario 3 โ Signed-in developer on AWS โ
Setup: Sign in and set learning preferences: role = developer, cloud = aws.
Steps:
- Navigate to
/. - Observe the homepage.
Expected:
- Verb spine leads with Build (developer tilt: build, learn, integrate, ai, operate, connect).
- Badge strip shows: "Personalized for you ยท developer, AWS ยท Adjust ยท See default".
- "For you" row is visible with at least 3 cards matching
role:developerorcloud:aws. - Cards tagged
cloud:awswith higher weights appear before genericrole:developercards of equal weight.
Scenario 4 โ "See default" bypass โ
Setup: Continue from Scenario 3 (signed in as developer/AWS).
Steps:
- On
/, click "See default" in the badge strip. - Observe the page.
- Navigate away (e.g. to
/learn/) and back to/. - Close the tab. Open a new tab and navigate to
/.
Expected:
- After clicking "See default": static homepage renders, verb spine in default order, no "For you" row. Badge shows: "Viewing the default homepage ยท Personalize again".
- After navigating away and back within the same tab: default view persists.
sessionStorage['sap-devs-homepage-default']is set. - After closing and reopening: personalized view resumes (session flag is cleared on tab close).
Scenario 5 โ Cross-tab live re-render โ
Setup: Sign in as a user with role = developer.
Steps:
- Open
/in Tab A. Note the current verb order and "For you" cards. - Open
/me/#learning-preferencesin Tab B. - In Tab B, change
roletoarchitect. Save preferences. - Switch to Tab A within 2 seconds.
Expected:
- Tab A reorders the verb spine without a page reload: Integrate now leads (architect tilt: integrate, build, operate, learn, ai, connect).
- The "For you" row updates to show architect-tagged candidates.
- Badge echoes "architect".
- No full page reload occurs; existing hover/focus states on other elements are preserved.
Scenario 6 โ personaHidden suppresses shelf entry for a student โ
Setup: In the admin UI (/admin-ui/#homepage, Shelves tab), find a shelf entry and set personaHidden: role:student. Leave personaTags with at least one other tag.
Steps:
- Sign in as a user with
role = student. - Navigate to the verb sub-page that contains the entry (e.g.
/learn/). - Observe the shelf section that contained the entry.
Expected:
- The entry is not visible in the sub-page shelf for the student user.
Steps (control):
- Sign in as a user with
role = architect. - Navigate to the same verb sub-page.
Expected:
- The entry is visible for the architect user.
Scenario 7 โ Kill switch off โ
Setup: In /admin-ui/#homepage, Config tab, set personalizationEnabled = false.
Steps:
- Sign in as any user with learning preferences set.
- Navigate to
/. - Observe the homepage.
Expected:
- Verb spine appears in the default order.
- No personalized badge strip.
- No "For you" row.
- Network request to
/api/homepage/personalizedreturns 204 (no body). Confirm in DevTools Network tab.
Teardown: Reset personalizationEnabled = true after the test.
Scenario 8 โ Slow network / offline โ
Setup: Sign in as a user with learning preferences. In DevTools, throttle network to "Slow 3G" or use the offline toggle.
Steps:
- Navigate to
/. - Observe the page during the slow/failing fetch.
Expected:
- Static content renders immediately from the Hugo shell.
- No JavaScript errors appear in the DevTools Console above
debuglevel. - No visible layout shift or broken states.
- If the fetch eventually fails (offline): page remains in the static state; no badge; no "For you" row.
- No user-visible error messages or broken component states.