Skip to Content
Living documentation — last reviewed 2026-05-28
FeaturesAnnouncementsAnnouncements — QA Plan

Announcements — QA Plan

1. Create + fan-out

#ScenarioExpected
1.1Coach creates with title + content201; WS event to org:{id} room; push enqueued to N-1 members; PostHog event captured (prod)
1.2Member tries to create403
1.3Create with empty title400 from DTO
1.4Create with priority=trueUI shows priority badge; sort order respects
1.5500-member orgPush fan-out completes; verify queue handles chunking; no throttling errors
1.6Author opts out of announcement push prefAuthor still excluded; no push to author regardless
1.7One member opts out of announcement prefPush to that member skipped

2. List + counts

#ScenarioExpected
2.1Member fetches listReturns rows with per-member readAt
2.2Unread countMatches DB truth (count where no announcement_reads row exists for me)
2.3Priority sorted firstVerify order
2.4Cursor paginationStable

3. Read receipts

#ScenarioExpected
3.1Member marks readRow inserted; counts decrement
3.2Member marks read twiceIdempotent; same row
3.3Member of org A marks read for an announcement in org BShould 403/404 — confirm in service

4. WebSocket

#ScenarioExpected
4.1Member connected → coach createsMember’s UI receives announcement:new
4.2Member offline → comes online laterPicks up via REST list — no replay over WS

5. Detail view (staff)

#ScenarioExpected
5.1Staff opens detailSees read receipts
5.2Member opens detail endpoint403 (staff-only) — verify in code

6. RTL + i18n

#ScenarioExpected
6.1Hebrew content renderedRTL preserved
6.2Mixed Hebrew + English in contentCorrect bidi

7. Smoke

  • Create announcement → push arrives on mobile.
  • Bell badge updates after mark-read.
  • Member from another org doesn’t see anything.