Prep & Quick Tests (Student-Only)
Both flows are practice tests the student creates for themselves — there's no teacher review and no parent visibility. They diverge on scope and immediacy: a Prep Test is a longer exam-style test the student configures step-by-step (test category, format, subject, chapter, difficulty); a Quick Test is a 5-minute single-chapter pop quiz the student fires off with two taps.
At a glance
| Who can do this | Students only — create, take, view results. Teachers and parents do not see these tests. |
| Where it lives | Prep Test: /dashboard/prep-test/* · Quick Test: /dashboard/quick-test/* |
| Triggers notifications? | No |
| Related features | Class Tests · Chapter Tests · Coins & Credits |
How it flows
Status lifecycle
Step-by-step
Prep Test
1. Open the prep-test hub
- App / route: Student app →
/dashboard/prep-test - Lists every prep test the student has previously created with status badges (
generating/published/in_progress/completed) and quick filters (All / Ready / In Progress / Completed). - Tap + Create Test →
/dashboard/prep-test/create.
2. Step 1 — Test category
- App / route:
/dashboard/prep-test/create - Three choices:
- Doubt Based — auto-generate from topics the student has struggled with (linked to the Doubts feature).
- School Based — aligned with the student's school curriculum.
- Competitive Exam — competitive-level questions.
- Tapping a category routes to
/dashboard/prep-test/create/type/:testCategory.
3. Step 2 — Format + subject
- App / route:
/dashboard/prep-test/create/type/:testCategory - Pick test format (MCQ / Short / Long), then pick a subject from the student's class subject list. Selecting a subject routes to chapter selection.
4. Step 3 — Chapter + difficulty
- App / route:
/dashboard/prep-test/create/chapters/:subjectId?format=…&category=…&subjectId=… - Lists chapters for the subject. Tapping a chapter opens TestConfigModal.
- Modal asks: difficulty (Easy / Medium / Hard) and a test-type label (display only).
- Confirm → backend creates the test as
draftwithgenerateWithAi: true, duration 30 min, hintsAvailable 3, source = mapped category (doubt_based/school_based/competitive_exam). - Student is bounced back to
/dashboard/prep-test. A toast confirms creation; the new test appears in the list with statusgenerating.
5. Take the test
- Once the test reaches
published, the list card flips to "Take Test". - Routes:
/dashboard/prep-test/:testId(instructions) →/dashboard/prep-test/:testId/:questionIndex(per-question, with timer + hints) →/dashboard/prep-test/:testId/results(final result).
6. View past results
- The prep-test list keeps completed tests indefinitely; tapping a completed test re-opens its results page.
Quick Test
1. Open the quick-test hub
- App / route: Student app →
/dashboard/quick-test - Single page combining: test format selector (MCQ / Short Type / Long Type) + subject grid.
- Picking a subject navigates immediately to
/dashboard/quick-test/chapters/:subjectId?format=…&subjectId=….
2. Pick chapter + difficulty
- App / route:
/dashboard/quick-test/chapters/:subjectId - Lists chapters for that subject. Tapping a chapter opens the same TestConfigModal as prep tests.
- Modal asks: difficulty (Easy / Medium / Hard).
- Confirm → backend starts a quick test with progressive question generation. Returns
testId. App navigates to/dashboard/quick-test/takewith the test id and title in route state.
3. Take the test
- App / route:
/dashboard/quick-test/take— questions stream in as the AI generates them, so the student can start answering before all questions are ready. - Timer is shorter than a prep test (the "5-minute" quick test branding).
- Submit →
/dashboard/quick-test/results.
4. Quick-test results
- App / route:
/dashboard/quick-test/results - Same auto-grading as everywhere else — MCQs against
correctAnswer, short / long shown side-by-side with the model answer. - No persistent quick-test list page — the student takes a quick test, sees results, and is done.
Differences at a glance
| Prep Test | Quick Test | |
|---|---|---|
| Scope | Multi-step: category → format → subject → chapter | Format → subject → chapter |
| Persistence | Listed under /dashboard/prep-test indefinitely | One-shot, no list page |
| Generation | Created as draft, generated in background, polled | Progressive — questions stream as student takes |
| Duration | 30 minutes (default) | ~5 minutes |
| Categories | Doubt / School / Competitive | None — always School |
| Hints | 3 | Same |
Edge cases & things to test
- Generation taking ages: prep test stuck in
generatingfor >2 minutes — does the list show a useful state, or just spin forever? - Resuming a half-done prep test: student starts a prep test, leaves at question 5 — return navigation must resume on question 5 with the timer continuing from
startedAt. - Quick test progressive generation race: student answers question 1 before questions 6–10 are generated — submitting must wait for all questions, not partial-submit.
- Empty chapter list: student picks a subject with no chapters mapped — lists should show a clear empty state, not crash.
- Doubt-based with no doubts: student picks "Doubt Based" but has no recorded doubts — generation must either fall back to a school-based generation or show a clear error.
- Multiple in-flight prep tests: student creates 5 prep tests in succession — all 5 generate concurrently; each status should advance independently in the list.
- Format switching mid-flow: student picks MCQ then changes the format query param mid-flow — TestConfigModal config must use the latest format on confirm.
- Quick test back-button: student is on
/quick-test/takeand hits back — does it abandon the attempt or return to chapter pick? - Network drop during quick-test generation: streaming generation interrupted — does the test resume or fail cleanly?
- Difficulty Hard with limited content: chapter has only 3 modules — confirm difficulty Hard still produces a sensible question count, not zero.
- No teacher leak: confirm prep tests and quick tests do not appear in teacher app
/dashboard/class-testsor in the parent app's/class-tests. - Hint usage doesn't penalise marks: per design, using a hint just flags the answer (
isHintUsed: true); confirm marks aren't auto-deducted.
Related
- Class Tests — teacher-assigned tests, similar UI but very different lifecycle
- Chapter Tests — chapter-scoped (like Quick Test) but unlocked by Learning Journey videos and one-shot
- Coins & Credits — generating prep / quick tests may consume credits
- Doubts — feeds the "Doubt Based" prep-test category