diff --git a/.planning/phases/07-engagement-overview-new/07-HUMAN-UAT.md b/.planning/phases/07-engagement-overview-new/07-HUMAN-UAT.md new file mode 100644 index 0000000..0292732 --- /dev/null +++ b/.planning/phases/07-engagement-overview-new/07-HUMAN-UAT.md @@ -0,0 +1,52 @@ +--- +status: partial +phase: 07-engagement-overview-new +source: [07-VERIFICATION.md] +started: 2026-05-04T00:00:00Z +updated: 2026-05-04T00:00:00Z +--- + +## Current Test + +[awaiting human testing] + +## Tests + +### 1. Drawer-to-page navigation +expected: From the More drawer, tapping "Engagement" lands on `/mobile/engagement` inside the Phase 2 shell. Page renders with H1 "Engagement", sticky 3-chip period selector (7d/30d/90d), 4 stacked summary cards, sparkline card, sort chips, search input, and the employee list (or skeleton placeholders during initial load). +result: [pending] + +### 2. Period chip refetch behavior +expected: Tapping a different period chip (e.g., 7d โ†’ 30d โ†’ 90d) fires three independent fetches (summary, trend, users) and updates the cards, sparkline, and list. Active chip changes to `bg-primary text-primary-foreground`. +result: [pending] + +### 3. Sort chip behavior +expected: Tapping a sort chip (Hours / Name / Utilization) refetches only the users list (summary and trend stay unchanged). Active sort chip styling updates. List reorders accordingly. +result: [pending] + +### 4. Search input behavior +expected: Typing in the search input filters loaded users client-side after a 300ms debounce, matching `displayName` and `email`. When no matches, an inline "No matches for '{query}'" message appears with a "Clear search" button that resets the filter. +result: [pending] + +### 5. Sparkline visual rendering +expected: The hours-trend sparkline renders as a single thin line (`stroke-primary stroke-2 fill-none`) over the selected period. Faint baseline at the bottom. Label row above shows "Hours trend ยท last {periodLabel}" left and the latest-value indicator right (`text-xs text-muted-foreground`). When no points, renders "No activity" inline. +result: [pending] + +### 6. IntersectionObserver infinite scroll + Load more +expected: When more than 50 employees exist (`pagination.totalPages > 1`), scrolling to the bottom of the list auto-loads page 2 via IntersectionObserver. Load more button serves as a11y fallback. On error, the button label flips to "Retry". +result: [pending] + +### 7. User row tap navigation +expected: Tapping any employee row navigates to `/mobile/engagement/[graphUserId]` (Phase 8's destination โ€” the URL should resolve to a 404 or placeholder until Phase 8 lands; the link itself must work). +result: [pending] + +## Summary + +total: 7 +passed: 0 +issues: 0 +pending: 7 +skipped: 0 +blocked: 0 + +## Gaps