Skip to content

moooon

Motir

Vibe your whole project. Bring an idea — Motir's three AI layers plan it, track it, and ship it, end to end. You're looking at Motir, built in Motir.

  • Vibe Project
  • Open Source
  • AI Agent
  • AI Loop
1
requests
0
upvotes
145
planned
1,361
shipped

Motir · Work items

MOTIR-320Done

5.7.8 Playwright E2E — mention → bell increment → drawer → click → issue → marked read → badge decrement; preference-off stops the channel

Estimate: 28m · Depends on: 5.7.5

The story-closing end-to-end journey over the real stack (Principle #18 — review at the Story level): the in-app notification loop a user actually experiences, plus the preference-gate cut. Run against the standing dev-server + inngest-stub harness (the OOM-safe reuseExistingServer pattern; the cron/job pipeline drives the fan-in).

Playwright (tests/e2e/notifications.spec.ts): two browser contexts — B (zhuyue@motir.co) and A (bophilips@motir.co). B opens an issue and @-mentions A in a comment (the 5.1 picker keyboard path). A's bell badge increments (after A's navigation/poll). A opens the drawer → the mention sits atop Direct with the unread blue-dot; the badge clears (seen). A clicks the row → it deep-links to the issue AND the row marks read (dot gone, greyed); the unread count decrements (asserted to come from the response, no full reload). B mentions A twice more → "Mark all as read" in the overflow clears every dot in one action; on reload they STAY read (the JRACLOUD-85017 regression is absent). Self-exclusion: B mentioning B produces no bell increment for B.

Preference cut: A opens /settings/account → Notifications, toggles in-app OFF for "Mentioned" → B mentions A again → A's bell does NOT increment, but the [EMAIL] dev-console line still fires (email channel untouched). A toggles email OFF instead (in-app back on) → the next mention increments the bell while NO [EMAIL] line fires — demonstrating the single gate driving both channels independently.

Acceptance criteria

  • notifications.spec.ts passes the full journey (mention → bell increment → drawer open/seen → click → issue deep-link → row marked read → badge decrement → mark-all → survives reload) + the self-exclusion case, green in CI's Playwright lane.
  • The preference cut passes: in-app-off stops the bell (email still sends); email-off stops the mail (bell still increments) — both off the same /settings/account matrix.
  • The badge/count updates without a whole-page reload on mark-read (the inline-edit contract observed in the E2E); the run uses the standing dev-server + inngest-stub harness; the flaky-isolation rule is respected.

Context refs

  • tests/e2e/comments.spec.ts (5.1.7) + tests/e2e/_helpers/ — the comment/mention journey + the multi-context + selector gotchas (Combobox option name = label+secondary; the [EMAIL] dev-console grep contract)
  • 5.7.5 (the bell/drawer surface) + 5.7.6 (the preferences matrix) — the surfaces under test
  • The E2E harness memories: standing dev server + inngest stub (OOM-safe reuseExistingServer), shared-DB flake isolation; finding #57 (the feed stays paged under the journey)