QA Requirements and Test Basis
This document is the starting reference for functional QA of KITA Future LMS. Use requirement IDs in bug titles, test cases, and evidenceβfor example, [QUIZ-004] Timer does not auto-submit.
| Attribute | Value |
|---|---|
| Product | KITA Future / Codeverta LMS |
| Code baseline | lms.codeverta.com@782ecb8377da |
| Baseline date | 14 August 2026 |
| Document level | Implemented requirement / test basis |
| Priority | P0 critical, P1 primary flow, P2 supporting |
If the tested build is newer than the baseline above, record its commit/build number in the test run and perform impact analysis for changes after this baseline.
1. Purpose and scopeβ
Includedβ
- landing and course discovery;
- registration, activation, password login, passkeys, password reset, and logout;
- role access for roles 10, 20, 30, 40, 99, and 100;
- learning, assignments, quizzes, progress, schedules, and certificates;
- parent and child-account relationships;
- course authoring, grading, analytics, and mentor finance;
- AI/mentor chat, community, notifications, and profiles;
- subscriptions, promos, checkout, payment status, and course purchases;
- user, content, community, readiness, wallet, and audit administration.
Excluded from this functional baselineβ
- pedagogical accuracy of course content;
- live bank/payment-gateway settlement in production;
- factual correctness of generative-AI answers;
- full penetration testing, production-scale load testing, and email deliverability across providers.
2. Roles, authorization, and test accountsβ
| Persona | Role | Minimum accounts | Mandatory variants |
|---|---|---|---|
| Visitor | β | 1 anonymous session | mobile and desktop |
| Parent | 10 | 2 | internal; external/creator parent |
| Student | 20 | 3 | no plan; active plan; expired plan |
| Internal teacher | 30 | 1 | owns draft and published courses |
| External mentor | 40 | 2 | selling locked; selling unlocked |
| Admin | 99 | 1 | active tenant |
| Superadmin | 100 | 1 | root/system operations |
| Negative account | each relevant role | 2 | disabled; wrong password/expired credential |
Use the same tenant for every test run except tenant-isolation cases. Never use production data or real children's identities.
3. Minimum test dataβ
- Two tenants with different data for isolation testing.
- A free course, a subscription course, and a one-time-purchase course.
- At least one draft and one published course; the published course has two sequential units.
- Text, video/YouTube, document, assignment, and prerequisite-locked lessons.
- An untimed quiz and a timed quiz with passing score, attempt limit, randomization, and at least two question types.
- An active certificate template and a course without certificates.
- Valid, not-yet-valid, expired, quota-exhausted, and incompatible promo codes.
- Payments in pending, paid/completed, expired, failed, and approval states where available.
- A schedule template with a standard and an all-day item.
- Community posts with media, polls, comments, reports, bookmarks, locked, and pinned states.
- Mentor balances that are sufficient/insufficient, a complete payout account, and pending/approved/rejected withdrawals.
- An eligible student free-trial plan, parent and parent-external plans, and a plan requiring approval.
- Trial accounts with seven days remaining, expiring today, and already expired.
4. Functional requirements and acceptance criteriaβ
4.1 Authentication and sessionsβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| AUTH-001 | P0 | Registration/guest checkout rejects an existing email or username and creates no duplicate account. |
| AUTH-002 | P0 | A valid activation token activates the account after a valid password confirmation; missing, invalid, expired, or used tokens are rejected. |
| AUTH-003 | P0 | Password login succeeds only for active credentials and the correct role type; failures create no session. |
| AUTH-004 | P1 | Password-reset requests return a neutral response, validate CAPTCHA, and accept only the latest reset token. The new password must meet the displayed rules. |
| AUTH-005 | P1 | A registered passkey can log in; invalid/expired challenges or device cancellation create no session. |
| AUTH-006 | P0 | Logout removes local/server session state; invalid refresh tokens or disabled accounts cannot use protected endpoints. |
| AUTH-007 | P0 | An admin using impersonation sees a clear indicator and can return to the original account; the target must not have equal or higher privilege. |
4.2 Landing page and readiness assessmentsβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| LAND-001 | P1 | The landing page opens without login and renders navigation, product proposition, CTAs, learning paths, and footer without rendering errors on mobile and desktop. |
| LAND-002 | P1 | The Free Trial CTA opens student trial checkout; readiness CTAs open the child or parent assessment selector; package/course CTAs retain the chosen plan/level. |
| LAND-003 | P1 | Desktop and mobile navigation reach the same routes, active state is correct, and browser back/forward retains important state. |
| LAND-004 | P2 | Switching Indonesian/English changes copy without changing active assessment answers, selected plan, or session ID. |
| LAND-005 | P1 | Failed plan/course loading shows a fallback or retry and never selects a stale plan from an earlier URL/session. |
| CHILD-001 | P1 | The child readiness assessment asks whether the respondent is a KITA student or external participant before profile and questions start. |
| CHILD-002 | P0 | The KITA student path requires a student-role login; another role is rejected and, after student login, the journey returns to the correct assessment. |
| CHILD-003 | P1 | The external path starts without login and validates required profile/grade information before the assessment. |
| CHILD-004 | P1 | Continue is enabled only for a valid answer type; a most/least answer cannot use the same option twice. |
| CHILD-005 | P1 | Draft answers, question position, evidence, language, audience, and session ID are restored after reload in the same browser. |
| CHILD-006 | P0 | Completion saves one idempotent completed response per session and renders skills, strengths, growth areas, and recommendations without absolute child comparison. |
| CHILD-007 | P1 | Recommended plans are student checkout plans matching the child's grade; the CTA transfers the selected plan to checkout. |
| CHILD-008 | P1 | Restart removes the active assessment snapshot, creates a new session, and does not overwrite an earlier completed result. |
| PREAD-001 | P1 | The parent readiness assessment asks whether the family is KITA or non-KITA and routes to the matching audience path. |
| PREAD-002 | P0 | The KITA parent path requires the matching session, resumes after login, and does not accept an unauthorized role. |
| PREAD-003 | P1 | The internal profile is prefilled from the account while respecting editable fields; the external profile validates name, caregiver, and other required data. |
| PREAD-004 | P1 | All 23 statements and applicable profile questions are required before submission; moving backward/forward does not remove answers. |
| PREAD-005 | P1 | A draft resumes with the same session ID after reload; a completed response opens the result rather than the last question. |
| PREAD-006 | P1 | Results show tier/dimensions, summary identity, respondent category, recommendations, and a result ID consistent with the backend record. |
| PREAD-007 | P1 | Internal results offer only parent plans; external results offer only parent-external plans; checkout CTAs retain the selected plan. |
| PREAD-008 | P1 | Restart creates a new session and does not alter an existing completed result. |
4.3 Navigation, profile, and notificationsβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| CORE-001 | P0 | The sidebar displays only menus permitted by role and entitlement in LMS Features and Access. Direct URLs must still be rejected by the backend when unauthorized. |
| CORE-002 | P1 | Users can update permitted profile fields; read-only email/identifier fields cannot change through payload manipulation. |
| CORE-003 | P1 | Avatar upload accepts valid files up to 5 MB, rejects invalid files/sizes, and displays the new avatar after refresh. |
| CORE-004 | P1 | Notifications can be read individually, read all, and deleted; the badge reflects the latest unread count. |
| CORE-005 | P2 | Saved app preferences return after login/refresh for the correct account and never leak to another user. |
4.4 Discovery, courses, and learning accessβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| COURSE-001 | P1 | The public catalogue exposes only discoverable courses in the active tenant; search/filter/pagination produce consistent results. |
| COURSE-002 | P0 | My Courses contains only courses owned, assigned, purchased, or granted by an active subscription. |
| COURSE-003 | P0 | An unowned premium course shows a locked state and does not disclose lessons through direct URL/API access. |
| COURSE-004 | P1 | Course structure retains unit, lesson, and quiz order after refresh. Draft content is not visible to students. |
| LEARN-001 | P1 | An accessible lesson renders valid content and media; failed links/files provide an understandable error state. |
| LEARN-002 | P0 | Completing a lesson is idempotent and recalculates course progress without exceeding 100%. |
| LEARN-003 | P0 | Prerequisite lessons/quizzes remain locked until the earlier requirement is completed/passed, including through direct URL/API access. |
| LEARN-004 | P1 | Continue learning opens the next valid item and preserves course context. |
4.5 Assignments and gradingβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| ASSIGN-001 | P1 | Students can submit an attachment and note for an assignment lesson; invalid/failed uploads do not create a false-success submission. |
| ASSIGN-002 | P1 | Students and authorized mentors can read the latest submission; other students and out-of-scope mentors cannot. |
| ASSIGN-003 | P0 | Mentors can submit a score and feedback; negative/invalid scores are rejected and a score above the maximum is never stored above that maximum. |
| ASSIGN-004 | P1 | A score below the minimum retains an unmet state and permits resubmission as configured; passing scores update the course summary. |
| ASSIGN-005 | P1 | Parents can view assignments only for children still linked to them. |
4.6 Quizzesβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| QUIZ-001 | P1 | Only published and accessible quizzes can start; maximum attempts are enforced in UI and API. |
| QUIZ-002 | P0 | Starting creates one active attempt; retries do not create parallel attempts beyond configured rules. |
| QUIZ-003 | P0 | Answers persist on the attempt after reload; another user cannot read or write them. |
| QUIZ-004 | P0 | The timer is derived from server/attempt time; after expiry the attempt accepts no new answer and is auto-submitted or closed according to contract. |
| QUIZ-005 | P0 | Submit calculates score/pass state consistently from the passing score and is idempotent. |
| QUIZ-006 | P1 | Correct answers/explanations appear only when quiz configuration permits them. Randomization does not change correctness. |
| QUIZ-007 | P1 | Authors can create, update, reorder, duplicate, and delete questions; an invalid or over-5-MB Excel import is rejected without hidden partial import. |
| QUIZ-008 | P1 | Analytics and result export include only attempts for the selected quiz/course and never disclose another tenant. |
4.7 Schedules and certificatesβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| SCHED-001 | P1 | Students can create, edit, and delete their own schedule items, including all-day and timed items. |
| SCHED-002 | P1 | Mentors can create templates/items and assign them to students in their access scope. |
| SCHED-003 | P1 | Assignment copies a template into personal schedules; student edits do not alter the source template or another student's schedule. |
| CERT-001 | P0 | Certificates are unavailable before every course requirement is met and whenever certificates are disabled. |
| CERT-002 | P1 | A valid certificate shows student identity, course, date/ID, and can print/download without data changes. |
| CERT-003 | P1 | Template changes follow issuance policy; users without authoring access cannot modify templates. |
4.8 Parents and child accountsβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| PARENT-001 | P0 | A parent can create a child account with unique data and a valid password; it receives the student role and is linked to the creating parent. |
| PARENT-002 | P0 | A valid linking code links the intended student; invalid/expired/disallowed-reuse codes are rejected with no partial relationship. |
| PARENT-003 | P0 | Dashboard, progress, assignments, and subscriptions show only children linked to that parent. |
| PARENT-004 | P1 | Child editing changes only permitted fields. Unlink revokes parent monitoring without deleting the child's account, progress, or transactions. |
| PARENT-005 | P0 | A package purchased for child A grants no entitlement to child B or the parent unless the package explicitly defines it. |
4.9 Chat, AI, community, and readinessβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| CHAT-001 | P1 | Users see only conversations they participate in; unread/read-all is consistent across list and messages. |
| CHAT-002 | P1 | Lesson AI chat preserves correct lesson context; App Guide AI never mixes history between users or tenants. |
| CHAT-003 | P1 | AI quota/rate-limit errors are explicit and the same request does not consume quota twice. |
| COMM-001 | P1 | Permitted roles can create draft/published posts, edit/delete their own posts, and use comments, replies, reactions, bookmarks, follows, and polls. |
| COMM-002 | P0 | Media is limited to 25 MB and role/category restrictions are enforced server-side. A locked post rejects prohibited interactions. |
| COMM-003 | P1 | Admins can review reports; pin/lock/moderation is unavailable to ordinary users. |
| READY-001 | P1 | A readiness response can save as draft and resume by session ID; completion is idempotent and does not duplicate responses. |
| READY-002 | P1 | Admins can filter/analyze readiness data in their tenant; child/other-tenant data is never aggregated. |
4.10 Subscriptions, checkout, and paymentβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| PAY-001 | P0 | Checkout calculates price, discount, tax/fees where applicable, and total consistently across summary, order, and payment gateway. |
| PAY-002 | P0 | Promo eligibility respects date, package, tenant, user, and quota; failed validation does not change the total. |
| PAY-003 | P0 | Payment creation is safe against double-click/retry and does not grant two entitlements for one order. |
| PAY-004 | P0 | Status transitions follow valid paths: pending/approval to paid/completed, expired, or failed. Refresh never downgrades a final state. |
| PAY-005 | P0 | Entitlement is granted only after verified success, not a browser redirect. Pending/failed/expired payments grant no access. |
| PAY-006 | P1 | History and invoice show recipient, package/course, method, total, ID, time, and status matching the payment record. |
| PAY-007 | P0 | A one-time course purchase grants only the purchased course to the correct buyer/recipient. |
| TRIAL-001 | P0 | The Free Trial CTA loads an eligible student plan and automatically selects free-trial payment; teacher and approval-required plans reject automated trials. |
| TRIAL-002 | P0 | Trial checkout validates parent name, unique 3β30-character username, Indonesian WhatsApp 10β13 digits beginning 08, and student name; parent email is optional for a trial. |
| TRIAL-003 | P0 | Trial submission creates exactly one enabled parent, enabled student, active membership, seven-day trialing subscription, and zero-value paid internal payment as one logical transaction. |
| TRIAL-004 | P0 | A student trial targets the child rather than the parent's personal subscription; a parent-plan trial targets only the parent. |
| TRIAL-005 | P0 | The auto-login auth handoff can be exchanged once and logs in the new parent. Retry/double-click must not create duplicate families or trials. |
| TRIAL-006 | P0 | Trial students are marked to create a usable password; their internal trial identity must not be treated as a user recovery email. |
| TRIAL-007 | P0 | Before expiry, a trial grants its plan bundle. After current_period_end, premium access stops even if the row has not been cleaned up. |
| TRIAL-008 | P1 | A trial account selecting a paid package must save a valid email and an at-least-eight-character password before checkout continues. |
| RENEW-001 | P0 | Selecting the same plan ID displays Renew Package and creates paid checkout, not a second free trial. |
| RENEW-002 | P0 | A successful renewal changes the subscription to active and extends from the end of an active period; remaining trial/paid time is preserved. |
| RENEW-003 | P0 | Renewal after trial/subscription expiry starts a new period at successful payment time. |
| RENEW-004 | P0 | The same pending renewal is reused on retry; paid/failed/expired states never create duplicate entitlement or extension. |
| RENEW-005 | P1 | Switching plans during trial follows switch/upgrade rules, displays the correct charge, and applies the new plan only after successful payment. |
4.11 Authoring, creator access, and financeβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| AUTHOR-001 | P0 | Only mentors/adminsβor entitled parents/external mentorsβcan create or edit courses in UI and API. |
| AUTHOR-002 | P1 | A course persists metadata, target role, category, price/visibility, and publication state; required validation prevents publication of a broken draft. |
| AUTHOR-003 | P1 | Authors can create/reorder units and lessons and add media. Image upload is limited to 25 MB and media to 1 GB. |
| AUTHOR-004 | P0 | Authors outside ownership/scope cannot update/delete another course's content, assignments, attempts, or students. |
| SELLER-001 | P0 | A selling-locked parent/external mentor sees the reason and cannot use locked finance/selling endpoints. |
| FIN-001 | P0 | Withdrawal requires a valid payout account, valid amount, and sufficient available balance; concurrent requests cannot withdraw the same balance twice. |
| FIN-002 | P0 | Only authorized roles approve/reject withdrawals, resulting in a consistent ledger/status and audit trail. |
| FIN-003 | P1 | Balance export uses the system-provided format and reconciles opening balance, transactions, and closing balance. |
4.12 Administration and tenant isolationβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| ADMIN-001 | P0 | Admins can search/manage users in their tenant but cannot read/change users from another tenant. Role/status changes apply to the next request. |
| ADMIN-002 | P1 | Admins manage categories, packages, bundles, promos, library, payment records, and moderation within permission; required fields and relationships validate. |
| ADMIN-003 | P1 | Only authorized admins manage readiness, community categories/reports, and AI course covers. AI-cover quota and approval apply. |
| ADMIN-004 | P0 | Only Superadmin/root accesses tenant management, system logs, login attempts, wallet lock/unlock, and other root operations. |
| ADMIN-005 | P0 | Every tenant-scoped query returns only active-tenant data; valid IDs from another tenant produce denial/not found. |
| ADMIN-006 | P1 | Sensitive operations and important status changes generate audit records with actor, target, action, outcome, tenant, and time. |
5. Minimum non-functional requirementsβ
| ID | P | Requirement and acceptance criteria |
|---|---|---|
| NFR-001 | P0 | Responses/logs/client storage expose no unneeded token, password, hidden correct answer, child data, or other-tenant data. |
| NFR-002 | P1 | Forms work with keyboard, have accessible labels/names, visible focus, and errors not conveyed by color alone. |
| NFR-003 | P1 | Primary flows are usable at 360 px mobile and 1280 px desktop without clipping a primary action. |
| NFR-004 | P1 | Mutating requests show loading/disabled state; retry after network failure creates no duplicate data. |
| NFR-005 | P1 | Dates/times are consistently displayed in configured timezone and persisted with unambiguous time. |
| NFR-006 | P1 | Errors 400/401/403/404/409/422/429/500 render safe actionable states with no stack trace or secret. |
6. Smoke test before regressionβ
Stop a release candidate when any P0 smoke test fails.
| No. | Scenario | Expected result |
|---|---|---|
| 1 | Login once for each role | Dashboard and role-appropriate menus load. |
| 2 | Wrong login, disabled user, and direct URL for another role | Rejected without session/data leakage. |
| 3 | Student opens active course, completes lesson, refreshes | Progress persists and course context is correct. |
| 4 | Student completes and submits quiz | Score/status is consistent and final attempt cannot change. |
| 5 | Student submits assignment, mentor grades, student refreshes | Status, score, and feedback synchronize. |
| 6 | Parent opens two different children | Course/progress/subscription data never cross. |
| 7 | Checkout a package through successful-payment simulation | One order and entitlement for the correct recipient. |
| 8 | Mentor creates draft then publishes course | Draft remains hidden; published course appears for the target role. |
| 9 | User creates post/comment and admin moderates | Change is visible and permission applies. |
| 10 | Mentor requests withdrawal and admin processes it | Balance, ledger, and status are consistent. |
| 11 | Access another tenant's ID in a primary endpoint | Denied/not found with no metadata leak. |
| 12 | Logout then back/refresh with old token | Protected page/data is unusable. |
| 13 | Landing β external child readiness β result β choose plan | Draft/resume works, result saves, and student checkout retains the correct plan. |
| 14 | Landing β internal and external parent readiness | Login gate, 23 answers, result, and audience-correct plans work. |
| 15 | Free Trial β auto-login β choose same plan β pay | Seven-day trial targets the child, then paid time is added without losing remaining trial. |
7. Execution strategy and evidenceβ
For every test case, record:
- build/commit, environment, tenant, browser/device, and time;
- requirement ID and precondition/fixture;
- steps, expected result, actual result, and status;
- relevant request/response with token and PII redacted;
- screenshot/video for UI defects;
- traceable record IDs in the QA environment.
Recommended defect severity:
| Severity | Criteria |
|---|---|
| Blocker | All-role login fails, cross-tenant data leaks, payment/ledger corruption, or the environment cannot be tested. |
| Critical | Authorization bypass, premium access without payment, primary-data loss, or duplicate transaction. |
| Major | A primary persona flow fails without a practical workaround. |
| Minor | Supporting flow, copy, layout, or feedback-state issue with a clear workaround. |
8. Baseline exit criteriaβ
Regression can be recommended as passed when:
- every smoke test passes;
- 100% of affected P0 requirements have been executed and passed;
- at least 95% of affected P1 tests pass;
- no Blocker/Critical defect remains open;
- Major defects have a documented release decision and workaround;
- permission and tenant-isolation evidence is attached;
- payment, entitlement, withdrawal, and ledger reconciliation passes for changed features.
9. Traceability to guidesβ
| Requirement area | Primary guide |
|---|---|
| AUTH, CORE | Registration, Activation, and Login, Dashboard, Profile, and Notifications |
| COURSE, LEARN | My Courses, Learning Process |
| ASSIGN, QUIZ, CERT | Assignments and Scores, Quizzes, Certificates |
| PARENT | Child Management, Parent Dashboard |
| AUTHOR, SELLER, FIN | Content Editor, Mentor Finance |
| CHAT, COMM | AI and Mentor Chat, Community |
| PAY | Subscriptions and Payments |
| LAND, CHILD, PREAD, TRIAL, RENEW | Landing, Readiness, Trial, and Renewal Journey Coverage |
When a requirement and implementation differ, QA must record a requirement clarification before changing the expected result.