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

Automations — QA Plan

Run locally with AUTOMATIONS_ENABLED=true on the API; the engine is off without it. Join-link purchases complete without a real card when the org uses the test payment provider and the API runs with TEST_HOOKS_ENABLED=true.

1. Editor

#ScenarioExpected
1.1Type text, put the caret mid-sentence, pick “insert variable”Token lands at the caret; typing continues in the editor
1.2Bold, italic, underline, H2/H3, bullet and numbered listsShown in the editor and the preview
1.3Add an https:// link, then a mailto: linkBoth saved; links styled in the editor and preview
1.4Try javascript:alert(1)Refused in the popover; API rejects it with 400 if sent directly
1.5Link popover → “Book a class — opens the app”Saved as /schedule; delivered email links to ${FRONTEND_URL}/schedule
1.6Save, activate, reloadFormatting, links and variables come back intact
1.7Open an automation saved with only a plain bodyLoads as paragraphs; saving keeps the text
1.8new_member step: open “insert variable”Only {first_name}, {last_name}, {org_name}
1.9Paste {plan_name} into a new_member bodyInline warning; Save/Activate disabled; API returns 400 automation_unsupported_variables
1.10Preview in Hebrew / RussianSample name דנה / Дана

2. Email rendering

#ScenarioExpected
2.1Hebrew member receives an automation emailOrg letterhead and footer, right-to-left, name interpolated
2.2English lead receives an automation emailLeft-to-right, lead consent footer + List-Unsubscribe
2.3Step with an empty subjectSubject is the org name, never the automation’s name
2.4Body with a long URL, viewed at 390pxLink wraps; no horizontal overflow
2.5Plain body containing <b> and &Rendered as text, escaped
2.6Same step on push / WhatsAppPlain text, links as text (url)

3. Unsubscribe

#ScenarioExpected
3.1Promotional automation (e.g. absent) to a memberBody unsubscribe line + List-Unsubscribe / List-Unsubscribe-Post headers
3.2Transactional automation (e.g. new_member, subscription_started)No unsubscribe line or headers
3.3Click the link → confirm on /{lang}/automation-emails/unsubscribeautomation.email = false; announcement pref untouched
3.4One-click POST /email-unsubscribe?token=…Same result; 200
3.4bAfter unsubscribing, follow “Manage notification preferences”Lands on /{lang}/profile/notifications (via sign-in); turning “automatic messages” email back on re-enables automation email
3.5Tampered token200 with status: invalid; nothing written
3.6Announcement link mailed before this release (/announcements/unsubscribe, old web page)Still opts out of announcement email only
3.7Opted-out member hits another automationStep run skipped / member_opted_out

4. New-member welcome

#ScenarioExpected
4.1Desk-created memberOne welcome email
4.2Join link without a planOne welcome email
4.3Join link with a plan, paid onlineFixed “purchase confirmed” system email + the welcome after the payment lands
4.4Join link with a plan, presalePresale confirmation + the welcome right away (not ~70 min later)
4.5Join link with a plan, checkout abandonedNo welcome; hold dropped after 24h or released
4.6Join-link signup settled at the desk (cash or free plan)Welcome once the plan starts
4.7Existing member buys another plan, or renewsNo second welcome
4.8Member under 18 joinsWelcome sent
4.9Staff create a managed child; guardian accepts the linkOne welcome to the guardian’s email, subject “Regarding :”, child’s first name in the body; a second guardian accepting sends no second enrollment
4.10Promotional automation (e.g. birthday) for a managed childSkipped promotional_to_minor_blocked
4.11Erase a member who received an automationErasure succeeds; their enrollments and step runs are gone

5. Push

#ScenarioExpected
5.1Tap an automation push in the member appOpens the home tab
5.2Push step with email fallback, member has no app installedStep run skipped no_device; fallback email sent

6. Counters

#ScenarioExpected
6.1After a welcome is sentList shows “Sent (30d)” 1; “In progress” 0 once the enrollment completes