Cancelled Subscription — Service Ends
Property: ChurchWiseAI Category: lifecycle
Tier:
all-tiers
Persona: pastor-admin
Touchpoint: /admin/[token]
Preconditions
- Active premium_churches row with plan (any plan), status=active
- Stripe subscription set to cancel_at_period_end=true OR customer.subscription.deleted webhook fired
- Logged in as church admin
Steps
| # | Action | Expected Result |
|---|---|---|
| 1 | Visit Settings > Billing tab before period end | Dashboard shows 'Cancelling — ends [date]' banner. Current plan displayed with end date. 'Cancel Plan' link visible in billing section. |
| 2 | Check service availability during grace period | All features remain fully active: chatbot responds to visitor messages, voice agent answers calls, dashboard fully editable, all agents accessible. |
| 3 | Wait for billing period to end (or simulate webhook) | Stripe fires customer.subscription.deleted event. Webhook received and processed. |
| 4 | Check dashboard after period end | Dashboard enters read-only mode. Settings tab locked. 'Upgrade Plan' prompt visible. Previous plan shown as inactive. |
| 5 | Check chatbot after cancellation | Chatbot widget offline: 'This church's chatbot is currently unavailable. Upgrade to reactivate.' message shown to visitors. |
| 6 | Check voice agent after cancellation | Callers hear: 'This church's voice service is no longer active. Goodbye.' Line disconnects. No call handling. |
| 7 | Check email sequence | Cancellation confirmation email received immediately. Service ended email sent at period end. Win-back email sent within 24h. |
| 8 | Check data preservation | All past messages, visitor contacts, analytics data intact. No data loss. History visible in read-only dashboard. |
| 9 | Click 'Reactivate' or 'Upgrade' button | Redirected to /pricing. Can select new plan. Lands on Stripe checkout (no new trial period). |
| 10 | Complete reactivation payment | Subscription reactivated. Webhook fires. Dashboard returns to editable state. 'Welcome back' email sent. |
| 11 | Verify service resumes after reactivation | Chatbot responds. Voice agent answers. All features active with new plan entitlements. |
Known Failure Modes
- Dashboard not locked after cancellation — read-only state not enforced
- Chatbot still responding after service end — circuit breaker failed
- Voice calls accepted after cancellation — agent not checking status
- Data lost after cancellation — permanent deletion (should only happen at founder request)
- Reactivation redirects to wrong page — checkout not triggered
References
- Playwright spec:
e2e/delivers/acceptance/cancelled.spec.ts - Acceptance spec: acceptance/cancelled.md
- Code files:
Notes
Applies to ALL tiers (chat, voice, bundle). Tests cancellation experience, grace period behavior, service cutoff, email sequence, dashboard lock, data preservation, and reactivation. No trial on reactivation — pays immediately. Full 30+ touchpoint spec in acceptance/cancelled.md.