Landing, Readiness, Trial, and Renewal Journey Coverage
This document complements QA Requirements and Test Basis with detailed execution scenarios. Run each applicable combination of browser, viewport, language, and tenant in release scope.
1. Required journey pathsβ
Landing
βββ Child Readiness Assessment
β βββ KITA student β student login β profile β assessment β result β student plan
β βββ External participant β profile β assessment β result β student plan
βββ Parent Readiness Assessment
β βββ KITA family β login β profile β 23 statements β result β parent plan
β βββ Non-KITA family β profile β 23 statements β result β parent-external plan
βββ Free Trial
βββ student trial checkout β parent + child account β parent auto-login
βββ active trial β learning
βββ same plan β paid renewal
βββ different plan β package switch
βββ expired trial β locked access β subscription
2. Minimum combinationsβ
| Dimension | Minimum values |
|---|---|
| Browser | Latest Chrome, Safari, and Firefox |
| Viewport | 360Γ800, 768Γ1024, 1280Γ800 |
| Language | Indonesian and English |
| Readiness audience | internal/KITA and external/non-KITA |
| Child grade | one early and one teenage grade band |
| Subscription state | none, trialing, active, expired, pending payment |
| Package target | student, parent, parent-external, requires approval |
| Network | normal, offline during autosave, timeout during checkout |
3. Landing page coverageβ
| ID | Scenario | Short steps | Expected result |
|---|---|---|---|
| LP-001 | Open anonymous landing page | Open / without storage/cookies | Hero, CTAs, product sections, FAQ, and footer render without login redirect. |
| LP-002 | Responsive mobile | Open at 360 px and use hamburger menu | Every item is selectable, no horizontal body scroll, and CTAs are visible. |
| LP-003 | Desktop navigation | Choose Curriculum, Classes, Parents, Students, Community, Pricing | Route and active state are correct; browser back/forward works. |
| LP-004 | Free Trial CTA | Choose hero and lower-page trial CTAs | Ends at /pembayaran with trial=true and student checkout type. |
| LP-005 | Child assessment CTA | Choose Child Readiness Assessment | Opens /tes-kesiapan/anak at audience selection. |
| LP-006 | Parent assessment CTA | Choose Parent Readiness Assessment | Opens /tes-kesiapan/orang-tua at KITA/non-KITA selection. |
| LP-007 | Plan/course CTA | Choose a specific package or course | Chosen ID/slug persists at destination and is not replaced by another default plan. |
| LP-008 | Change language | Switch ID β EN, then enter readiness | Copy changes; route, assessment session, and prior selections persist. |
| LP-009 | Plan API failure | Simulate GET subscription-plans 500/timeout | Page is not blank; fallback/error and retry appear; other CTAs still work. |
| LP-010 | Basic accessibility | Keyboard navigation, accessible names, 200% zoom | Focus is visible, order is logical, and buttons/links have accessible names. |
4. Child readiness assessment coverageβ
Audience and authenticationβ
| ID | Scenario | Expected result |
|---|---|---|
| CA-001 | Choose external participant without login | Opens the external profile without forcing login. |
| CA-002 | Choose KITA student while signed out | Redirects to student login and preserves a return-journey marker. |
| CA-003 | Login as student | Returns to assessment, activates internal audience, and pre-fills account profile. |
| CA-004 | Login internally as parent/mentor | Rejected with a wrong-role message; internal assessment does not start. |
| CA-005 | Already signed in as student | Internal audience can start without login again. |
Profile, answers, autosave, and resultsβ
| ID | Scenario | Expected result |
|---|---|---|
| CA-006 | Required profile is empty | Continue is disabled and invalid/missing fields are identifiable. |
| CA-007 | Choose different grade bands | Diagnostic structure and final recommendations follow the chosen grade. |
| CA-008 | Single-choice/frequency answer | Only valid values can be selected and persist after moving to another question. |
| CA-009 | Same most/least answer | Cannot continue until the two choices differ. |
| CA-010 | Incomplete micro-task/reflection | Continue stays disabled until evidence meets the configured rule. |
| CA-011 | Normal autosave | A draft request is sent after an answer and indicator changes saving β saved. |
| CA-012 | Offline during autosave | Local snapshot remains, error does not remove answers, and save can retry. |
| CA-013 | Reload mid-assessment | Audience, profile, language, answers, evidence, question number, and session ID restore. |
| CA-014 | Back/forward between questions | Earlier answers remain selected and progress follows the current position. |
| CA-015 | Submit incomplete flow via UI/API manipulation | Client/backend rejects completion that does not meet the contract. |
| CA-016 | Submit complete flow | Record becomes completed; skill result, radar, strengths, growth focus, projects, and recommendations render. |
| CA-017 | Reload completed result | Result restores and does not create a second session/result. |
| CA-018 | Recommendation filter | Only grade-matching student plans appear. |
| CA-019 | Choose a recommended plan | Checkout receives the correct plan slug/ID and student checkout type. |
| CA-020 | Restart | Active session/snapshot is replaced; earlier completed record is not overwritten. |
5. Parent readiness assessment coverageβ
Audience selectionβ
| ID | Scenario | Expected result |
|---|---|---|
| PR-001 | Choose KITA homeschooling parent | Goes to /tes-kesiapan/orang-tua-kita. |
| PR-002 | Choose non-KITA parent | Goes to /tes-kesiapan/orang-tua-non-kita. |
| PR-003 | Internal path while signed out | Login gate appears; journey returns to internal flow after login. |
| PR-004 | Internal path with wrong role | The account cannot proceed through the internal assessment. |
| PR-005 | External path while signed out | Intro and external profile can be completed. |
Profile, statements, result, and recommendationsβ
| ID | Scenario | Expected result |
|---|---|---|
| PR-006 | Internal profile | Account identity is prefilled and four profile questions can be completed. |
| PR-007 | Incomplete external profile | Missing name/caregiver/required data prevents continue. |
| PR-008 | Answer 23 statements | Progress advances, values persist, and moving backward does not remove answers. |
| PR-009 | Reload mid-assessment | Session, audience, profile, answers, and last position restore. |
| PR-010 | Complete internal assessment | Result stores internal respondent, tier/dimensions, profile, and session ID. |
| PR-011 | Complete external assessment | Result stores external respondent and the correct prospective-family label. |
| PR-012 | Reload result | Completed result returns without duplicate record. |
| PR-013 | Internal recommendations | Plans are requested with parent checkout type; external/student plans do not appear. |
| PR-014 | External recommendations | Plans are requested with parent-external checkout type; parent/student plans do not appear. |
| PR-015 | Trial CTA from results | Checkout opens the intended trial mode without carrying a stale plan. |
| PR-016 | Choose paid plan | Plan slug/ID at checkout matches the result recommendation. |
| PR-017 | Restart | A new session is created; the earlier completed result remains auditable by admin. |
6. Free-trial coverageβ
Trial checkoutβ
| ID | Scenario | Expected result |
|---|---|---|
| FT-001 | Enter through /coba-gratis | Redirects to student trial checkout; parent/teacher plan from prior URL is discarded. |
| FT-002 | Plan list | Only active, eligible student-checkout plans can be selected. |
| FT-003 | Approval-required plan | Automated trial is rejected with an approval-required message. |
| FT-004 | Teacher plan | Backend rejects free trial for teacher checkout. |
| FT-005 | Valid minimum trial fields | Parent name, username, WhatsApp, and student name are enough; parent email may be empty. |
| FT-006 | Invalid username | Uppercase, spaces, forbidden symbols, or length outside 3β30 are rejected. |
| FT-007 | Existing username | Rejected without creating user, membership, subscription, or payment records. |
| FT-008 | Invalid WhatsApp | A number not beginning 08 or outside 10β13 digits is rejected. |
| FT-009 | Double-click submit | Button is loading/disabled; exactly one family and subscription are created. |
| FT-010 | API timeout after submit | Retrying identical data creates no second trial; outcome can be reconciled. |
Records and auto-loginβ
| ID | Data verification | Expected result |
|---|---|---|
| FT-011 | Parent | Role 10, enabled, input username, correct name/phone, correct tenant. |
| FT-012 | Student | Role 20, enabled, correct name/NISN, password_setup_required=true. |
| FT-013 | Membership | Active parentβstudent relation in the same tenant. |
| FT-014 | Student subscription | trialing, amount 0, internal provider, correct plan/payer, child as student target. |
| FT-015 | Trial period | Start is close to submission time and end is exactly 7Γ24 hours later within test tolerance. |
| FT-016 | Payment | Paid, free_trial, total 0, correct student target, no Xendit invoice. |
| FT-017 | Auth handoff | Token exchanges once, auto-logs in parent, and rejects reuse. |
| FT-018 | Subscription visibility | Trial appears for child, not as the parent's personal subscription. |
| FT-019 | Course access | Child can open bundled trial course; an out-of-bundle course remains locked. |
| FT-020 | Expired trial | After period end, is_active=false and premium course is locked even if the record remains. |
7. Renewal and trial-conversion coverageβ
Terminology
Renew Package from a trial account is a paid checkout. The system does not offer a button for extra free-trial time.
Completing a trial accountβ
| ID | Scenario | Expected result |
|---|---|---|
| RN-001 | Trial account selects a plan | Dialog requires email, password, and confirmation before payment can open. |
| RN-002 | Invalid/taken email | Rejected; trial identity and existing subscription remain unchanged. |
| RN-003 | Password under 8 characters or mismatched confirmation | Rejected without starting payment. |
| RN-004 | Valid account data | Profile uses real email, stores password securely, sets is_trial_account=false, and retains the selected plan. |
Same packageβ
| ID | Scenario | Expected result |
|---|---|---|
| RN-005 | Choose same trial plan ID | Action label is Renew Package, change type is renewal, and charge equals package price. |
| RN-006 | Pay while trial is active | Before successful payment, trial status/expiry are unchanged. After success, status is active and paid period is added from trial end. |
| RN-007 | Pay after trial expires | New active period starts at paid time, not the old expiry time. |
| RN-008 | Refresh pending payment | Same payment is shown; no second invoice with the same amount/scope is created. |
| RN-009 | Expired/failed payment | Subscription is not extended; user can explicitly start a new checkout. |
| RN-010 | Repeated callback/payment poll | Period end advances one interval only and only one active entitlement is visible. |
Package switchβ
| ID | Scenario | Expected result |
|---|---|---|
| RN-011 | Choose different plan during trial | UI shows Switch Package/upgrade according to calculation; backend stores pending change until paid. |
| RN-012 | Successful switch payment | New plan activates at switch time and pending change is cleared. |
| RN-013 | Failed switch payment | Old trial plan/expiry remains valid; pending change is cleared or grants no new-plan access. |
| RN-014 | Parent chooses student plan | Parent must choose a child; subscription renews only for that child. |
| RN-015 | Parent chooses parent plan | Subscription targets parent; child does not automatically receive parent-plan entitlement. |
8. End-to-end release scenariosβ
| ID | Journey | Pass condition |
|---|---|---|
| E2E-001 | Landing β external child readiness β result β plan β paid checkout | One completed readiness record, matching plan/grade, and correct account/entitlement target. |
| E2E-002 | Landing β internal child readiness β student login β resume β result | Return URL, session ownership, profile, draft, and result are connected to the student. |
| E2E-003 | Landing β internal parent readiness β result β parent plan | Login gate is correct, 23 answers persist, and recommendations never mix external plans. |
| E2E-004 | Landing β Free Trial β parent auto-login β child learning | Family records are consistent, seven-day trial is child-only, and bundled course is accessible. |
| E2E-005 | Active trial β complete account β same plan β pay | Remaining trial is preserved and one paid interval is added exactly once. |
| E2E-006 | Expired trial β course locked β pay β course opens | No access during expiry; access returns only after successful payment. |
9. Baseline gap observationsβ
The observations below come from the source-code baseline and should be verified by QA. If they remain, log a defect or security/product gap:
- The readiness endpoint accepts a
completedpayload without validating question count/completeness. The UI prevents incomplete submit, but API manipulation can bypass that control. - Backend ownership is enforced for internal child readiness. Internal parent readiness does not yet have equivalent role/ownership validation in the save endpoint; its login gate is primarily frontend-controlled.
- Guest free trial has no idempotency key. A unique username blocks identical retries from creating another account, but the client cannot automatically retrieve the first checkout outcome after timeout.
- There is no one-free-trial policy ledger by WhatsApp number, family, or device. Another trial using a different username may succeed.
- Pending plan changes need specific testing when a switch payment fails/expires because cleanup is not evident in the failed-status synchronization path.
10. Product clarifications to decideβ
Record these as clarifications rather than silently changing expected results:
- Should a WhatsApp number/device receive only one free trial?
- Should the trial CTA from parent readiness always create a student trial, or follow the parent/parent-external audience?
- When switching package during trial, should remaining trial time be preserved or should the new plan start at successful payment?
- How long should an anonymous readiness result remain resumable, and when must its local snapshot expire automatically?
QA must attach the product decision to the test run if any of these areas changes.