pediatric-ai-scribe-v3/e2e/tests
Daniel 8d7bffb07a feat(client): port Learning Hub to React
Minimum-viable port of the user-facing Learning Hub at /app/learning.
Sidebar nav flipped to available in the same commit.

client/src/pages/Learning.tsx
  Three-screen flow: search + category pills drive a feed grid; clicking
  a card opens the viewer; viewer shows body + progress + quiz (if any).

  Feed: one query key per filter — ['learning-feed'], ['learning-category',
  slug], or ['learning-search', q] — so React Query caches each view
  independently and flicking between categories is instant after the first
  load. Search hits /api/learning/search; category filter hits
  /api/learning/category/:slug; default hits /api/learning/feed?limit=30.

  Viewer: body rendered as pre-wrap text intentionally. The vanilla tree
  uses DOMPurify (CDN-loaded) to render HTML bodies; adding that dep to
  the client bundle is a follow-up. Authored content is still clinical
  info, so plain-text preservation is acceptable for this commit — no
  content is lost, just unstyled. Presentations (content_type === 'presentation')
  link to the legacy viewer at /#learning/:slug — Marp slide rendering is
  its own port.

  Quiz: supports single-choice, multi-select, and true/false. Answers
  tracked via { optionId?, optionIds: Set<number> } per question so the
  same state shape drives both radio and checkbox rendering. Submit POSTs
  to /api/learning/submit-quiz; results screen shows per-question verdict
  with correct answer + why-incorrect + general explanation — same fields
  the vanilla showQuizResults renders. Retake wipes the answer map;
  Back-to-Feed returns to the list.

  Progress list reads content.progress[] directly from the content response
  — last 5 attempts, color-coded green/amber at 70%.

shared/types.ts + client/src/shared/types.ts — additive:
  LearningCategory/LearningCategoriesOk, LearningFeedRow/LearningFeedListOk,
  LearningOption/LearningQuestion/LearningProgressEntry/LearningContentFull/
  LearningContentOk, QuizAnswer/QuizResultEntry/QuizSubmitOk. Keys match
  the wire shape server routes return (snake_case for DB columns).

e2e/tests/learning-react.spec.js — three smoke tests:
  shell renders, feed shows items OR empty-state (no crash on empty DB),
  typing into search fires /api/learning/search.

Client tsc -b, server tsc --noEmit, and vite build all pass locally.
Bundle 435.44 kB / 123.81 kB gzipped (+10 kB over Settings complete).
2026-04-23 23:49:56 +02:00
..
ai-endpoints-contract.spec.js test(e2e): +120 tests across 8 new specs; baseline fixes 2026-04-23 18:58:38 +02:00
auth-gated-smoke.spec.js feat(pe-guide): unified single-play + remove badges; fix(e2e): shared fixture + raised login limit 2026-04-22 22:57:11 +02:00
auth-screen.spec.js test(e2e): +44 tests — sick visit, hospital course, auth screen, 2026-04-23 18:58:38 +02:00
bedside-smoke.spec.js fix(nav): move image lightbox to index.html so NRP + seizure pathways 2026-04-23 18:58:38 +02:00
chart-review-workflow.spec.js test(e2e): +120 tests across 8 new specs; baseline fixes 2026-04-23 18:58:38 +02:00
encounter-save-load.spec.js test(e2e): +120 tests across 8 new specs; baseline fixes 2026-04-23 18:58:38 +02:00
encounter-workflow.spec.js test(e2e): +120 tests across 8 new specs; baseline fixes 2026-04-23 18:58:38 +02:00
extensions-crud.spec.js test(e2e): +120 tests across 8 new specs; baseline fixes 2026-04-23 18:58:38 +02:00
hospitalcourse-workflow.spec.js test(e2e): +44 tests — sick visit, hospital course, auth screen, 2026-04-23 18:58:38 +02:00
learning-react.spec.js feat(client): port Learning Hub to React 2026-04-23 23:49:56 +02:00
learning-tab.spec.js test(e2e): +120 tests across 8 new specs; baseline fixes 2026-04-23 18:58:38 +02:00
model-selector.spec.js test(e2e): +44 tests — sick visit, hospital course, auth screen, 2026-04-23 18:58:38 +02:00
pe-guide-smoke.spec.js test(e2e): +120 tests across 8 new specs; baseline fixes 2026-04-23 18:58:38 +02:00
session-persistence.spec.js test(e2e): +44 tests — sick visit, hospital course, auth screen, 2026-04-23 18:58:38 +02:00
settings-faq-dictation.spec.js test(e2e): +120 tests across 8 new specs; baseline fixes 2026-04-23 18:58:38 +02:00
settings-react-integrations.spec.js feat(client): port Settings — Integrations (Nextcloud + Documents) 2026-04-23 23:35:12 +02:00
settings-react-security.spec.js feat(client): port Settings — Security (password, 2FA, sessions) 2026-04-23 23:31:14 +02:00
settings-react-voice-content.spec.js feat(client): port Settings — Voice + Content (8 sub-sections) 2026-04-23 23:40:33 +02:00
sickvisit-workflow.spec.js test(e2e): +44 tests — sick visit, hospital course, auth screen, 2026-04-23 18:58:38 +02:00
soap-hospital-workflow.spec.js feat(ui-state): persist sub-pill selections across reload + sign-out 2026-04-23 18:58:38 +02:00
top-calculators.spec.js test(e2e): add 27 Playwright smoke tests for top-row calculator tabs 2026-04-20 23:19:50 +02:00
ui-state-persistence.spec.js feat(ui-state): persist sub-pill selections across reload + sign-out 2026-04-23 18:58:38 +02:00
vaxschedule-content.spec.js test(e2e): +120 tests across 8 new specs; baseline fixes 2026-04-23 18:58:38 +02:00
wellvisit-workflow.spec.js test(e2e): +44 tests — sick visit, hospital course, auth screen, 2026-04-23 18:58:38 +02:00