Skip to content

UC-8 Student completes an assessment

Primary actor Student
Supporting actors SHS Staff (reviews reflections, corrects a score)
Priority Should
Satisfies FR-E4, FR-E6, FR-B3
Precondition The student is enrolled; the week carrying the item is available or complete.
Trigger The student opens a week's knowledge check.

Main success scenario

  1. The student answers a multiple-choice item. The system scores it against the answer key, all or nothing, stores the response with scored_by = auto, and returns the verdict with feedback drawn from the key.
  2. The student writes a reflection. The system stores it with no score. No student-authored text reaches any model.
  3. Scores aggregate by learning-outcome tag for the learning-outcome report (UC-10); unscored reflections are excluded from that aggregate.

Extensions

  • 1a. Answer is not one of the item's options. 400; nothing is stored.
  • 1b. Second attempt. 409; one attempt per item.
  • 1c. A locked week's items expose nothing.
  • Staff review. Reflections appear in the builder's review panel with the rubric; staff mark them reviewed. An admin may correct an MCQ score by hand; the row then carries scored_by = human.

Acceptance criteria (Gherkin)

Feature file Test module
mcq_scoring.feature test_mcq_scoring_bdd.py
no_student_text_to_a_model.feature test_no_student_text_to_a_model_bdd.py
scoredby_contract.feature test_scoredby_contract_bdd.py
reflection_review_rubric.feature and frontend/reflection_review_rubric.feature test_reflection_review_rubric_bdd.py
review_panel_queue.feature and frontend/review_panel_queue.feature test_review_panel_queue_bdd.py

Plain pytest: test_mcq_scoring.py, test_assessment_items.py, test_score_override.py, test_response_review.py, test_locked_week_assessments.py. Frontend: KnowledgeCheck.test.tsx, ReviewPanels.test.tsx.

Views

Code: backend/app/services/assessments.py, backend/app/routers/assessments.py, frontend/src/components/Passport/KnowledgeCheck.tsx, frontend/src/components/admin/ChallengeBuilder/ReviewPanels.tsx.