SALT
Salvation Army SALT College of Africa

UAT Master Test Plan

User Acceptance Testing
Version2.0
Date20th February 2026
Prepared BySumba Group Limited
Developed BySumba Group Limited
Testing PeriodFeb 17–28, 2026
ClassificationInternal — Confidential
← Click here to go back to Home Page

Table of Contents

1. Introduction & Objectives

1.1 Purpose

This UAT plan defines the testing strategy, schedule, and test cases for the E-Learning Platform overhaul. UAT validates that the system meets all functional requirements, maintains backward compatibility with the production database, and delivers a reliable experience across all user roles and client applications.

1.2 Objectives

  1. Verify all features work correctly for each user role (Admin, ETO, Tutor, Student).
  2. Confirm backward compatibility with existing production data in salvation.sql.
  3. Validate the complete student lifecycle: registration → enrollment → study → assessment → certification.
  4. Test all three client applications: Web Admin (Next.js), Mobile App (Flutter), Executive Dashboard (Flutter).
  5. Confirm infrastructure components (PostgreSQL 17, Redis 7, MinIO) operate correctly.
  6. Ensure Flyway migrations (V1–V5) apply without errors.
  7. Validate multi-language support (English, French, Kiswahili, Portuguese).
  8. Obtain formal sign-off from stakeholders before production deployment.

1.3 References

DocumentLocation
Database Schema (salvation.sql)Salvation-Army-Backend-main/src/main/resources/
Flyway Migrations V1–V5Salvation-Army-Backend-main/src/main/resources/db/migration/
API Base URL (Production)https://app.saltcollegeandresourcecentre.com/SaltELearnAppApi
API Base URL (Staging)https://stagging.saltcollegeandresourcecentre.com/SaltELearnAppApi
Web Admin (Production)https://app.saltcollegeandresourcecentre.com
Web Admin (Staging)https://stagging.saltcollegeandresourcecentre.com

2. Scope

2.1 In Scope

2.2 Out of Scope

3. Test Environment & Setup

3.1 Infrastructure

ComponentTechnologyPortPurpose
Backend APISpring Boot 3.4.2 (Java 21)8091REST API at /SaltELearnAppApi
DatabasePostgreSQL 175432Database: salvation
CacheRedis 7 (Alpine)6379Session & data caching
File StorageMinIO (S3-compatible)9000 / 9001Object storage + legacy fallback
Web AdminNext.js (TypeScript, Tailwind CSS 4)8081Admin panel — 4 roles
Mobile AppFlutter (Riverpod 3.x)Android APK / iOS
Exec DashboardFlutter (fl_chart)Analytics
StagingEC2 (Ubuntu)443stagging.saltcollegeandresourcecentre.com

3.2 Setup Checklist

3.3 Test Data Requirements

4. User Roles & Test Accounts

RoleAccess LevelDescriptionTest AccountTerritory
Admin5 (highest)Full platform managementUse existing admin from salvation.sqlAll / SALT-College
Tutor8Subject teaching, markingUse existing tutor from salvation.sqlAssigned territory
ETO9Territory oversight, approvalsUse existing ETO from salvation.sqlAssigned territory
Student12 (lowest)Learning, exams, assignmentsAdm# 2018333 (Esther Mwangale)Kenya (+254)
Student12Additional test studentAdm# 2024053 (Tebogo Nkotane)As assigned
Student12Additional test studentAdm# 2024054 (Andile Matukane)As assigned
Note: Lower access_level number = higher authority. All passwords are BCrypt hashed. Use Admin password reset if credentials are unknown.

5. Entry & Exit Criteria

5.1 Entry Criteria

5.2 Exit Criteria

5.3 Suspension Criteria

6. Testing Schedule

Week 1: February 17–21, 2026

DayDateFocus AreaTest CasesTesters
MonFeb 17Environment Setup & Smoke TestingVerify all infrastructure, smoke testsDev + QA
TueFeb 18Authentication & Security (7.1)AUTH-001 to AUTH-012All roles
WedFeb 19Student Enrollment & Approval (7.2)ENR-001 to ENR-018Admin, ETO, Student
ThuFeb 20Subject Registration (7.3) + Assignments (7.4)SUB-001 to SUB-012, ASG-001 to ASG-010Admin, Tutor, Student
FriFeb 21Exam Lifecycle (7.5)EXM-001 to EXM-026Admin, Tutor, Student

Week 2: February 24–28, 2026

DayDateFocus AreaTest CasesTesters
MonFeb 24Grading (7.6) + Billing (7.7)GRD-001 to GRD-014, BIL-001 to BIL-008Admin
TueFeb 25Secondary Checklists: Dashboard, Chat, Files, SessionsChecklists 1–5All roles
WedFeb 26Secondary Checklists: Suspension, Reports, i18n, Theme, Exec DashboardChecklists 6–12All roles
ThuFeb 27End-to-End Flows (Section 9) + Assignment Lifecycle (ASG-011 to ASG-020)E2E-001 to E2E-003, remaining ASGAll roles
FriFeb 28Regression + Bug Fixes + Final Sign-OffRe-test failed cases, regressionAll stakeholders
Important: P1 bugs found in Week 1 must be fixed and retested before proceeding to Week 2.

7. Critical Workflow Test Scripts

Each test case uses this format:

FieldDescription
Test Case IDPREFIX-NNN
DescriptionWhat is being tested
PriorityCritical / High / Medium
PreconditionsRequired state before test
ClientWeb Admin / Mobile / Both
RoleWhich user role executes
StepsNumbered step-by-step instructions
Expected ResultObservable outcome
Actual Result[Tester fills in]
StatusPass / Fail / Blocked
Defect ID[If fail, reference defect]

7.1 Authentication & Security

AUTH-001: Valid Admin Login with OTP

FieldContent
PriorityCritical
PreconditionsActive admin account exists in tbl_sys_users
ClientWeb Admin
RoleAdmin
Steps1. Navigate to https://app.saltcollegeandresourcecentre.com
2. Enter admin username and password
3. Click “Login”
4. System sends OTP to registered email/SMS
5. Enter the received OTP access code
6. Click “Verify”
Expected ResultUser is redirected to /dashboard/admin with 6 stat cards visible. JWT token stored in localStorage as salt_token.
Actual Result
Status

AUTH-002: Valid Student Login via Mobile

FieldContent
PriorityCritical
PreconditionsActive student account (Adm# 2018333)
ClientMobile
RoleStudent
Steps1. Open the College mobile app
2. Enter admission number 2018333 and password
3. Tap “Login”
4. Enter OTP received via email
5. Tap “Verify”
Expected ResultStudent dashboard loads with 5 bottom tabs (Home, Subjects, Assignments, Exams, More). Welcome message displays student name.
Actual Result
Status

AUTH-003: Login Fails with Incorrect Username

FieldContent
PriorityHigh
PreconditionsNone
ClientBoth
RoleAny
Steps1. Navigate to login page
2. Enter non-existent username INVALID_USER_999
3. Enter any password
4. Click “Login”
Expected ResultError message displayed: “Invalid credentials” or similar. No OTP sent. User remains on login page.
Actual Result
Status

AUTH-004: Login Fails with Incorrect Password

FieldContent
PriorityHigh
PreconditionsActive user account exists
ClientBoth
RoleAny
Steps1. Enter valid username
2. Enter wrong password
3. Click “Login”
Expected ResultError message displayed. No OTP sent. Failed attempt logged in brute force tracker.
Actual Result
Status

AUTH-005: OTP Validation with Correct Code

FieldContent
PriorityCritical
PreconditionsStep 1 of login completed, OTP received
ClientBoth
RoleAny
Steps1. Complete Step 1 (credentials validated)
2. Check email/SMS for OTP
3. Enter correct access code
4. Click “Verify”
Expected ResultJWT token returned. User redirected to role-appropriate dashboard. Token stored securely.
Actual Result
Status

AUTH-006: OTP Validation Fails with Wrong Code

FieldContent
PriorityHigh
PreconditionsStep 1 completed
ClientBoth
RoleAny
Steps1. Complete Step 1
2. Enter incorrect access code 000000
3. Click “Verify”
Expected ResultError message: “Invalid access code”. User remains on OTP screen. Can retry.
Actual Result
Status

AUTH-007: Mandatory Password Change (mcp=“Y”)

FieldContent
PriorityCritical
PreconditionsUser account with mcp="yes" flag (first login or admin-reset password)
ClientBoth
RoleAny
Steps1. Login with valid credentials
2. Enter valid OTP
3. System detects mcp=“yes” and shows password change form
4. Enter current password
5. Enter new password (min 8 characters)
6. Confirm new password
7. Submit
Expected ResultPassword changed. mcp flag updated. User can now login with new password. Redirected to login page.
Actual Result
Status

AUTH-008: Password Change Skipped (mcp=“N”)

FieldContent
PriorityHigh
PreconditionsUser account with mcp="no"
ClientBoth
RoleAny
Steps1. Login with valid credentials
2. Enter valid OTP
Expected ResultNo password change prompt. Directly redirected to dashboard.
Actual Result
Status

AUTH-009: Forgot Password Flow

FieldContent
PriorityHigh
PreconditionsUser account with valid email
ClientBoth
RoleStudent
Steps1. Click “Forgot Password” on login page
2. Enter registered email address
3. Submit
Expected ResultPassword reset instructions sent to email. User informed to check email.
Actual Result
Status

AUTH-010: Admin Resets User Password

FieldContent
PriorityHigh
PreconditionsLogged in as Admin. Target user account exists.
ClientWeb Admin
RoleAdmin
Steps1. Navigate to Users page
2. Find target user
3. Click “Reset Password”
4. Confirm action
Expected ResultPassword reset. Target user's mcp set to “yes”. User must change password on next login.
Actual Result
Status

AUTH-011: Session Timeout

FieldContent
PriorityMedium
PreconditionsLogged in. Timeout configured in tbl_sys_settings.
ClientBoth
RoleAny
Steps1. Login successfully
2. Leave application idle beyond configured timeout period
3. Attempt to navigate to a protected page
Expected ResultJWT expired. User redirected to login page. Appropriate message shown.
Actual Result
Status

AUTH-012: Logout Clears Session

FieldContent
PriorityHigh
PreconditionsLogged in
ClientBoth
RoleAny
Steps1. Click logout (Web: user menu; Mobile: More > Logout)
2. Confirm logout
3. Attempt to access a protected page via URL
Expected ResultSession cleared. JWT removed from storage. Redirected to login. Cannot access protected pages.
Actual Result
Status

7.2 Student Enrollment & Approval

ENR-001: New Student Self-Registration (Mobile)

FieldContent
PriorityCritical
PreconditionsValid admission number uploaded by admin
ClientMobile
RoleStudent
Steps1. Open mobile app
2. Tap “Register”
3. Select “New Student”
4. Enter email address
5. Submit registration (POST /student/enroll)
Expected ResultRegistration submitted. Student record created with status “N” (New). Confirmation message displayed. Student receives email with credentials.
Actual Result
Status

ENR-002: Continuing Student Registration

FieldContent
PriorityCritical
PreconditionsStudent has existing record in system
ClientMobile
RoleStudent
Steps1. Open mobile app
2. Tap “Register”
3. Select “Continuing Student”
4. Enter email and registration number
5. Submit (POST /student/register_student)
Expected ResultSystem finds existing record. Student re-enrolled for next level. Status set to pending approval.
Actual Result
Status

ENR-003: Registration Fails with Duplicate Admission Number

FieldContent
PriorityHigh
PreconditionsAdmission number already actively enrolled
ClientMobile
RoleStudent
Steps1. Attempt registration with admission number that already has active enrollment
Expected ResultError message: duplicate or already registered. Registration blocked.
Actual Result
Status

ENR-004: Registration Fails with Invalid Admission Number

FieldContent
PriorityHigh
PreconditionsNone
ClientMobile
RoleStudent
Steps1. Attempt registration with admission number not in system
Expected ResultError message: admission number not found. Registration blocked.
Actual Result
Status

ENR-005: Bulk Upload Admission Numbers via CSV

FieldContent
PriorityCritical
PreconditionsLogged in as Admin. CSV file with 1 column of admission numbers.
ClientWeb Admin
RoleAdmin
Steps1. Navigate to Student Management
2. Click “Upload Admissions”
3. Select CSV file
4. Submit (POST /admin/upload_admission/{userId})
Expected ResultAdmission numbers imported. Students created with status “U” (Uploaded). Count of imported records shown.
Actual Result
Status

ENR-006: Bulk Upload Fails with Invalid CSV

FieldContent
PriorityMedium
PreconditionsLogged in as Admin
ClientWeb Admin
RoleAdmin
Steps1. Attempt upload with malformed CSV (wrong columns, empty file)
Expected ResultValidation error. No records imported. Clear error message.
Actual Result
Status

ENR-007: ETO Loads Pending Approvals

FieldContent
PriorityCritical
PreconditionsLogged in as ETO. Students pending in ETO's territory.
ClientWeb Admin
RoleETO
Steps1. Navigate to /dashboard/eto/approvals
2. View list of pending students
Expected ResultList shows only students from ETO's territory. Expandable cards display: name, admission #, email, contact, application date.
Actual Result
Status

ENR-008: ETO Reviews Student Details (Expanded View)

FieldContent
PriorityHigh
PreconditionsPending students visible
ClientWeb Admin
RoleETO
Steps1. Click to expand a student card
2. Review expanded details
Expected ResultExpanded view shows: gender, marital status, ID number, rank, session, entry type, past performance table with previous subjects and grades.
Actual Result
Status

ENR-009: ETO Downloads Student List

FieldContent
PriorityHigh
PreconditionsPending students available
ClientWeb Admin
RoleETO
Steps1. Click “Download Student List” button
2. Save Excel file
Expected ResultExcel file downloads with student data. Approve/reject buttons become enabled after download.
Actual Result
Status

ENR-010: ETO Approves Student

FieldContent
PriorityCritical
PreconditionsStudent list downloaded. Pending student visible.
ClientWeb Admin
RoleETO
Steps1. Click “Approve” on student card
2. Confirm approval (POST /v2/bridge/students/{id}/approve)
Expected ResultStudent status updated. Student moves to Admin's pending queue. Success message shown. Student removed from ETO's pending list.
Actual Result
Status

ENR-011: ETO Rejects Student with Remarks

FieldContent
PriorityHigh
PreconditionsStudent list downloaded. Pending student visible.
ClientWeb Admin
RoleETO
Steps1. Click “Reject” on student card
2. Enter rejection remarks (mandatory)
3. Confirm (POST /v2/bridge/students/{id}/reject)
Expected ResultStudent status set to rejected. Remarks saved. Student notified.
Actual Result
Status

ENR-012: Admin Loads ETO-Approved Students

FieldContent
PriorityCritical
PreconditionsLogged in as Admin. ETO-approved students exist.
ClientWeb Admin
RoleAdmin
Steps1. Navigate to /dashboard/admin/students
2. Filter by pending status
Expected ResultList shows students approved by ETO, pending Admin's final decision.
Actual Result
Status

ENR-013: Admin Final Approval

FieldContent
PriorityCritical
PreconditionsETO-approved student in queue
ClientWeb Admin
RoleAdmin
Steps1. Select student
2. Click “Approve”
3. Confirm
Expected ResultStudent status set to “D” (Done/Approved). Student can now login and access learning features.
Actual Result
Status

ENR-014: Admin Rejects Student

FieldContent
PriorityHigh
PreconditionsStudent in admin pending queue
ClientWeb Admin
RoleAdmin
Steps1. Select student
2. Click “Reject”
3. Enter remarks
4. Confirm
Expected ResultStudent status set to rejected. Remarks saved.
Actual Result
Status

ENR-015: Approved Student Accesses Dashboard

FieldContent
PriorityCritical
PreconditionsStudent fully approved (status “D”)
ClientBoth
RoleStudent
Steps1. Login as approved student
2. Complete OTP
3. View dashboard
Expected ResultDashboard loads. Enrolled subjects visible. Can access assignments, exams, materials.
Actual Result
Status

ENR-016: Rejected Student Cannot Access Features

FieldContent
PriorityHigh
PreconditionsStudent was rejected
ClientBoth
RoleStudent
Steps1. Attempt login as rejected student
Expected ResultLogin blocked or restricted access. Cannot view subjects/assignments/exams.
Actual Result
Status

ENR-017: Admin Updates Student Email

FieldContent
PriorityMedium
PreconditionsLogged in as Admin. Student exists.
ClientWeb Admin
RoleAdmin
Steps1. Navigate to student details
2. Click “Update Email”
3. Enter new email
4. Submit (POST /admin/update_student_email)
Expected ResultEmail updated in both tbl_student and tbl_sys_users. Student can receive OTP at new email.
Actual Result
Status

ENR-018: Restore Legacy Student Data (CSV)

FieldContent
PriorityMedium
PreconditionsLogged in as Admin. 17-column CSV with historical data.
ClientWeb Admin
RoleAdmin
Steps1. Upload CSV (POST /admin/restore_students/{userId})
2. CSV: subject_code, learning_level_id, reg_year, exam_date, 10 assignments, avg, exam total, final
Expected ResultHistorical data imported. Student performance records created.
Actual Result
Status

7.3 Subject Registration & Approval

SUB-001: Student Registers for Subjects

FieldContent
PriorityCritical
PreconditionsApproved student. Subjects available for student's academic level.
ClientMobile
RoleStudent
Steps1. Login as student
2. Navigate to Subjects
3. Select available subjects for current level
4. Submit registration (POST /student/register_subjects)
Expected ResultSubject selections created in tbl_student_subjects_selection. Status set to pending approval.
Actual Result
Status

SUB-002: Student Views Registered Subjects

FieldContent
PriorityHigh
PreconditionsStudent has registered subjects
ClientBoth
RoleStudent
Steps1. Navigate to Subjects page
2. View subject list/grid
Expected ResultShows all registered subjects with: name, code, status (A/P/E/N), assignment score, exam score, pass mark.
Actual Result
Status

SUB-003: Student Views Unapproved Subjects

FieldContent
PriorityMedium
PreconditionsStudent has pending subject selections
ClientBoth
RoleStudent
Steps1. Check subjects with pending status
Expected ResultPending subjects shown with “P” status badge.
Actual Result
Status

SUB-004: Subject Registration Blocked for Wrong Level

FieldContent
PriorityHigh
PreconditionsStudent at Foundation level
ClientMobile
RoleStudent
Steps1. Attempt to register for Diploma-level subjects (D* prefix)
Expected ResultRegistration blocked. Error message about level mismatch.
Actual Result
Status

SUB-005: ETO Views Pending Subject Selections

FieldContent
PriorityHigh
PreconditionsLogged in as ETO. Students have pending selections.
ClientWeb Admin
RoleETO
Steps1. Navigate to subject approvals
2. View pending selections (POST /admin/un_approved_subjects)
Expected ResultList of students with pending subject selections for ETO's territory.
Actual Result
Status

SUB-006: ETO/Admin Approves Subject Selection

FieldContent
PriorityCritical
PreconditionsPending subject selection exists
ClientWeb Admin
RoleETO / Admin
Steps1. Select student's subject selection
2. Click “Approve”
3. Confirm (POST /admin/subjects_approval)
Expected ResultSelection status updated to approved. Student can now see subject as “Active”.
Actual Result
Status

SUB-007: ETO/Admin Rejects Subject Selection

FieldContent
PriorityHigh
PreconditionsPending subject selection exists
ClientWeb Admin
RoleETO / Admin
Steps1. Select student's subject selection
2. Click “Reject”
3. Enter remarks
4. Confirm
Expected ResultSelection rejected. Remarks saved. Student notified.
Actual Result
Status

SUB-008: Admin Creates New Subject

FieldContent
PriorityHigh
PreconditionsLogged in as Admin
ClientWeb Admin
RoleAdmin
Steps1. Navigate to /dashboard/admin/subjects
2. Click “Add Subject”
3. Enter: code (e.g., CF999), name, learning level, pass mark, cost
4. Submit (POST /subject/create_subject)
Expected ResultSubject created in tbl_subjects. Visible in subject list with correct details.
Actual Result
Status

SUB-009: Admin Modifies Subject

FieldContent
PriorityMedium
PreconditionsSubject exists
ClientWeb Admin
RoleAdmin
Steps1. Find subject in list
2. Click “Edit”
3. Modify details (name, cost, pass mark)
4. Save (POST /subject/modify_subject)
Expected ResultSubject updated. Changes reflected immediately.
Actual Result
Status

SUB-010: Subjects Filtered by Learning Level

FieldContent
PriorityMedium
PreconditionsSubjects exist at multiple levels
ClientWeb Admin
RoleAdmin
Steps1. Navigate to subjects page
2. Filter by Foundation level
3. Filter by Certificate level
4. Filter by Diploma level
Expected ResultFoundation shows F* subjects. Certificate shows C* subjects. Diploma shows D* subjects.
Actual Result
Status

SUB-011: Tutor Views Assigned Subjects and Students

FieldContent
PriorityHigh
PreconditionsLogged in as Tutor with assigned subjects
ClientBoth
RoleTutor
Steps1. Navigate to dashboard
2. View “My Subjects” count
3. Navigate to Students page
Expected ResultShows only subjects assigned to this tutor. Student list shows only students enrolled in those subjects.
Actual Result
Status

SUB-012: Student Applies for Failed Subject Retake

FieldContent
PriorityHigh
PreconditionsStudent has a failed subject
ClientMobile
RoleStudent
Steps1. View failed subjects (POST /student/failed_subjects)
2. Select subject to retake
3. Submit application (POST /student/apply_failed_exam)
Expected ResultRetake application created. Pending approval.
Actual Result
Status

7.4 Assignment Lifecycle

ASG-001: Tutor Uploads Assignment PDF

FieldContent
PriorityCritical
PreconditionsLogged in as Tutor. Has assigned subjects. PDF file ready.
ClientWeb Admin
RoleTutor
Steps1. Navigate to Materials/Assignments
2. Select subject
3. Upload PDF file
4. Set due date and instructions
5. Submit (POST /file_handler/upload, file_type=“A”)
Expected ResultAssignment uploaded. Record created in tbl_materials_upload. File stored in MinIO. Students can see assignment.
Actual Result
Status

ASG-002: Tutor Uploads Assignment with Due Date

FieldContent
PriorityHigh
PreconditionsLogged in as Tutor
ClientWeb Admin
RoleTutor
Steps1. Upload assignment
2. Set due_date to a future date
3. Submit
Expected ResultAssignment created with due date visible to students.
Actual Result
Status

ASG-003: Upload Rejected for Unsupported Format

FieldContent
PriorityMedium
PreconditionsLogged in as Tutor
ClientWeb Admin
RoleTutor
Steps1. Attempt to upload .exe or .zip file as assignment
Expected ResultUpload rejected. Error message about unsupported format. Only PDF and Word allowed.
Actual Result
Status

ASG-004: Upload Fails with Empty File

FieldContent
PriorityMedium
PreconditionsLogged in as Tutor
ClientWeb Admin
RoleTutor
Steps1. Attempt to upload 0-byte file
Expected ResultUpload rejected with error message.
Actual Result
Status

ASG-005: Student Views Pending Assignments

FieldContent
PriorityCritical
PreconditionsAssignments uploaded for student's subjects
ClientBoth
RoleStudent
Steps1. Navigate to Assignments page
2. View assignment list
3. Mobile: check “Pending” tab
Expected ResultAssignments visible with: title, subject, status (N=New), due date. Download button available.
Actual Result
Status

ASG-006: Student Downloads Assignment

FieldContent
PriorityHigh
PreconditionsAssignment available
ClientBoth
RoleStudent
Steps1. Click download on assignment
2. File downloads (GET /file_handler/read/{id}/D/A)
Expected ResultPDF file downloads successfully. Content matches uploaded assignment.
Actual Result
Status

ASG-007: Student Submits Assignment as PDF

FieldContent
PriorityCritical
PreconditionsAssignment exists. Student has PDF ready.
ClientMobile
RoleStudent
Steps1. Navigate to Assignments
2. Select subject
3. Choose PDF file
4. Submit (POST /file_handler/submit_assignment)
Expected ResultAssignment submitted. File stored at {territory_code}/assignments/. Status shows as submitted.
Actual Result
Status

ASG-008: Student Submits Word Document (Auto-Convert)

FieldContent
PriorityHigh
PreconditionsAssignment exists. Student has .docx file.
ClientMobile
RoleStudent
Steps1. Select Word (.docx) file
2. Submit assignment
Expected ResultWord document automatically converted to PDF. Stored as PDF. Submission successful.
Actual Result
Status

ASG-009: Late Submission Blocked

FieldContent
PriorityHigh
PreconditionsAssignment with past due date
ClientMobile
RoleStudent
Steps1. Attempt to submit assignment after due date
Expected ResultSubmission blocked. Error message about deadline passed.
Actual Result
Status

ASG-010: Admin Allows Late Submission

FieldContent
PriorityMedium
PreconditionsLogged in as Admin. Assignment past due.
ClientWeb Admin
RoleAdmin
Steps1. Navigate to assignment management
2. Find the overdue assignment
3. Click “Allow Late Submission” (POST /admin/allow_late_assignment)
Expected ResultStudent can now submit despite past deadline.
Actual Result
Status

ASG-011: Tutor Views Unmarked Assignments

FieldContent
PriorityCritical
PreconditionsStudents have submitted assignments
ClientBoth
RoleTutor
Steps1. Navigate to Assignments page
2. View pending/unmarked list (POST /admin/un_tutor_marked_assignments)
Expected ResultTable shows: student name, admission #, subject, submission date, status “N”.
Actual Result
Status

ASG-012: Tutor Downloads Student Submission

FieldContent
PriorityHigh
PreconditionsStudent has submitted an assignment
ClientBoth
RoleTutor
Steps1. Click download on student's submission (GET /file_handler/read_assignment/{id}/D)
Expected ResultStudent's PDF downloads. Content readable.
Actual Result
Status

ASG-013: Tutor Marks Assignment (Web — Inline)

FieldContent
PriorityCritical
PreconditionsUnmarked assignment exists
ClientWeb Admin
RoleTutor
Steps1. Click “Mark” on assignment row
2. Enter score (0–100) in inline input
3. Click “Save” (POST /v2/bridge/assignments/{id}/mark)
Expected ResultScore saved. Status changes to “T” (Tutor Marked). Assignment moves to admin approval queue.
Actual Result
Status

ASG-014: Tutor Marks Assignment (Mobile — Dialog)

FieldContent
PriorityCritical
PreconditionsUnmarked assignment on mobile
ClientMobile
RoleTutor
Steps1. Tap assignment
2. Enter score (0–100) in dialog
3. Enter comments
4. Tap “Submit”
Expected ResultScore and comments saved. Status changes to “T”.
Actual Result
Status

ASG-015: Admin Views Tutor-Marked Assignments

FieldContent
PriorityHigh
PreconditionsTutor has marked assignments
ClientWeb Admin
RoleAdmin
Steps1. Navigate to pending assignment approvals (POST /admin/pending_assignment_approval)
Expected ResultList shows tutor-marked assignments with student, subject, score, tutor name.
Actual Result
Status

ASG-016: Admin Approves Tutor Marks

FieldContent
PriorityCritical
PreconditionsTutor-marked assignment in queue
ClientWeb Admin
RoleAdmin
Steps1. Review tutor's marking
2. Click “Approve”
Expected ResultAssignment status changes to “P” (Admin Approved). Score finalized.
Actual Result
Status

ASG-017: Admin Manual Marks (Override)

FieldContent
PriorityMedium
PreconditionsLogged in as Admin
ClientWeb Admin
RoleAdmin
Steps1. Find assignment
2. Click “Manual Mark” (POST /admin/manual_mark_assignment)
3. Enter score
4. Save
Expected ResultAdmin's score saved, overriding tutor mark if any.
Actual Result
Status

ASG-018: Student Views Marked Assignments

FieldContent
PriorityHigh
PreconditionsAssignments have been marked
ClientBoth
RoleStudent
Steps1. Navigate to Assignments
2. Mobile: tap “Marked” tab
3. View scores
Expected ResultMarked assignments show score and status. Green “T” or yellow “P” badges.
Actual Result
Status

ASG-019: Tutor Uploads Reading Material

FieldContent
PriorityHigh
PreconditionsLogged in as Tutor
ClientWeb Admin
RoleTutor
Steps1. Navigate to Materials
2. Select subject
3. Upload PDF (POST /file_handler/upload, file_type=“R”)
Expected ResultMaterial uploaded. Stored in student_reading/. Students can download.
Actual Result
Status

ASG-020: Student Downloads Reading Material

FieldContent
PriorityHigh
PreconditionsReading materials uploaded for student's subjects
ClientBoth
RoleStudent
Steps1. Navigate to Materials page
2. Find material grouped by subject
3. Click download
Expected ResultPDF/document downloads successfully.
Actual Result
Status

7.5 Exam Lifecycle

EXM-001: Tutor Creates Exam Paper

FieldContent
PriorityCritical
PreconditionsLogged in as Tutor. Has assigned subjects.
ClientWeb Admin
RoleTutor
Steps1. Navigate to /dashboard/tutor/exams
2. Click “Create Exam”
3. Select subject
4. Enter: title, type (MCQ or Essay), max score, duration
5. Submit (POST /exam/create_paper)
Expected ResultExam paper created in tbl_exam_paper. Status: pending approval. Visible in tutor's paper list.
Actual Result
Status

EXM-002: Tutor Adds MCQ Questions

FieldContent
PriorityCritical
PreconditionsMCQ exam paper created
ClientWeb Admin
RoleTutor
Steps1. Open exam paper
2. Click “Add Question”
3. Enter question text
4. Enter 4 answer options
5. Select correct answer
6. Save (POST /exam/set_questions)
7. Repeat for multiple questions
Expected ResultQuestions saved in tbl_questions. Each linked to paper_id. Correct answer stored.
Actual Result
Status

EXM-003: Tutor Deletes a Question

FieldContent
PriorityMedium
PreconditionsExam paper has questions
ClientWeb Admin
RoleTutor
Steps1. View questions for paper
2. Click “Delete” on a question (POST /exam/delete_question)
Expected ResultQuestion removed. Question count decrements.
Actual Result
Status

EXM-004: Tutor Views Created Papers

FieldContent
PriorityHigh
PreconditionsTutor has created papers
ClientBoth
RoleTutor
Steps1. Navigate to Exams page (POST /exam/tutor_paper)
Expected ResultTable shows: paper ID, subject, title, type badge (MCQ/Essay), max score, status.
Actual Result
Status

EXM-005: Admin Loads Papers Pending Approval

FieldContent
PriorityCritical
PreconditionsTutor has created papers
ClientWeb Admin
RoleAdmin
Steps1. Navigate to /dashboard/admin/exams/approvals
2. View pending list (POST /exam/admin_load_exams_for_approval)
Expected ResultShows papers awaiting approval with details.
Actual Result
Status

EXM-006: Admin Approves Exam Paper

FieldContent
PriorityCritical
PreconditionsPending paper exists
ClientWeb Admin
RoleAdmin
Steps1. Select paper
2. Click “Approve” (POST /v2/bridge/exams/papers/{id}/approve)
Expected ResultPaper approved. Can now be posted/scheduled for students.
Actual Result
Status

EXM-007: Admin Creates Exam Date

FieldContent
PriorityHigh
PreconditionsApproved exam paper exists
ClientWeb Admin
RoleAdmin
Steps1. Navigate to /dashboard/admin/exams/dates
2. Click “New Exam Date”
3. Select subject and date
4. Submit (POST /admin/new_exam_date)
Expected ResultExam date created. Students can now apply to sit exam on this date.
Actual Result
Status

EXM-008: Admin Removes Exam Date (No Bookings)

FieldContent
PriorityMedium
PreconditionsExam date with no student bookings
ClientWeb Admin
RoleAdmin
Steps1. Select exam date
2. Click “Remove” (POST /admin/remove_exam_date)
Expected ResultExam date removed. Only possible if no students booked.
Actual Result
Status

EXM-009: Admin Uploads Downloadable Exam PDF

FieldContent
PriorityCritical
PreconditionsApproved essay-type exam paper
ClientWeb Admin
RoleAdmin
Steps1. Select paper
2. Upload exam PDF (POST /v2/exam/paper/{id}/upload-pdf)
3. Set answer submission deadline
Expected ResultPDF stored. Paper marked as downloadable. Deadline saved.
Actual Result
Status

EXM-010: Student Applies for Exam

FieldContent
PriorityCritical
PreconditionsStudent has approved subject. Exam date exists.
ClientMobile
RoleStudent
Steps1. Navigate to Exams
2. View available exams
3. Select exam to apply (POST /exam/exam_applications)
Expected ResultApplication submitted. Status: pending approval.
Actual Result
Status

EXM-011: Admin Approves Student Exam Application

FieldContent
PriorityCritical
PreconditionsStudent exam application exists
ClientWeb Admin
RoleAdmin
Steps1. Navigate to student exam approvals
2. Select application
3. Approve (POST /exam/approve_exam_requests)
Expected ResultApplication approved. Student can take exam. Validation code sent.
Actual Result
Status

EXM-012: Admin Rejects Exam Application

FieldContent
PriorityHigh
PreconditionsStudent exam application exists
ClientWeb Admin
RoleAdmin
Steps1. Select application
2. Reject with remarks
Expected ResultApplication rejected. Student notified.
Actual Result
Status

EXM-013: Student Receives Validation Code

FieldContent
PriorityCritical
PreconditionsExam application approved
ClientMobile
RoleStudent
Steps1. Check email/SMS for validation code
Expected ResultValidation code received. Can be used to start exam.
Actual Result
Status

EXM-014: Student Validates Exam Code

FieldContent
PriorityCritical
PreconditionsHas validation code
ClientMobile
RoleStudent
Steps1. Enter validation code (POST /exam/validate_exam_code)
Expected ResultCode accepted. Exam ready to start.
Actual Result
Status

EXM-015: Exam Code Resend

FieldContent
PriorityMedium
PreconditionsExam approved but code lost
ClientMobile
RoleStudent
Steps1. Click “Resend Code” (POST /exam/resend_exam_code)
Expected ResultNew code sent. Previous code invalidated.
Actual Result
Status

EXM-016: Student Starts Online MCQ Quiz

FieldContent
PriorityCritical
PreconditionsCode validated
ClientMobile
RoleStudent
Steps1. Click “Start Exam” (POST /exam/start_quiz)
2. Timer starts counting down
3. Questions display one at a time
Expected ResultQuiz session created. Timer visible. Questions load from tbl_questions.
Actual Result
Status

EXM-017: Student Submits MCQ Exam (Auto-Marked)

FieldContent
PriorityCritical
PreconditionsQuiz in progress
ClientMobile
RoleStudent
Steps1. Answer all questions
2. Click “Submit” (POST /exam/submit_exam)
Expected ResultAnswers compared to correct answers. Score calculated automatically. Results shown immediately. Record saved in tbl_student_quiz.
Actual Result
Status

EXM-018: Student Downloads Exam PDF (Downloadable Type)

FieldContent
PriorityCritical
PreconditionsDownloadable exam exists and is approved
ClientBoth
RoleStudent
Steps1. Navigate to Exams
2. Find downloadable exam
3. Click “Download” (GET /v2/exam/paper/{id}/download)
Expected ResultExam PDF downloads. Content matches uploaded exam.
Actual Result
Status

EXM-019: Student Uploads Exam Answer

FieldContent
PriorityCritical
PreconditionsDownloadable exam downloaded. Answer prepared as PDF.
ClientBoth
RoleStudent
Steps1. Click “Upload Answer”
2. Select PDF file
3. Submit (POST /v2/exam/paper/{id}/upload-answer)
Expected ResultAnswer uploaded before deadline. Record created. Status: pending marking.
Actual Result
Status

EXM-020: Upload Answer After Deadline Blocked

FieldContent
PriorityHigh
PreconditionsDeadline has passed
ClientBoth
RoleStudent
Steps1. Attempt to upload answer after deadline
Expected ResultUpload blocked. Error message about deadline.
Actual Result
Status

EXM-021: Admin Extends Answer Deadline

FieldContent
PriorityMedium
PreconditionsDownloadable exam with deadline
ClientWeb Admin
RoleAdmin
Steps1. Find exam paper
2. Click “Enable Late” (POST /v2/exam/paper/{id}/enable-late)
Expected ResultDeadline extended. Student can now upload.
Actual Result
Status

EXM-022: Tutor Views Submitted Answers

FieldContent
PriorityHigh
PreconditionsStudents have submitted answers
ClientWeb Admin
RoleTutor
Steps1. View submitted answers (GET /v2/exam/paper/{id}/answers)
Expected ResultList of students who submitted answers with submission date.
Actual Result
Status

EXM-023: Tutor Marks Downloaded Exam Answer

FieldContent
PriorityCritical
PreconditionsStudent answer submitted
ClientWeb Admin
RoleTutor
Steps1. Download student's answer (GET /v2/exam/paper/{id}/answers/{studentId})
2. Review answer
3. Enter score and remarks (POST /v2/exam/paper/{id}/answers/{studentId}/mark)
Expected ResultScore saved. Marking recorded.
Actual Result
Status

EXM-024: Admin Awards Final Exam Score

FieldContent
PriorityCritical
PreconditionsExam has been marked
ClientWeb Admin
RoleAdmin
Steps1. Review marks
2. Award final score (POST /exam/award_max)
Expected ResultFinal score saved. Student can view result.
Actual Result
Status

EXM-025: Student Views Past Quiz History

FieldContent
PriorityHigh
PreconditionsStudent has completed exams
ClientBoth
RoleStudent
Steps1. Navigate to exam history (POST /exam/past_quiz)
Expected ResultList of completed exams with scores and dates.
Actual Result
Status

EXM-026: Retake Check and Suspension After 3 Failures

FieldContent
PriorityCritical
PreconditionsStudent has failed same exam 3 times
ClientBoth
RoleAdmin / Student
Steps1. Check retake eligibility (GET /v2/exam/retake/{studentId}/{subjectId})
2. Verify suspension triggered after 3rd failure
Expected ResultAfter 3 failures: student account suspended for that subject. Suspension logged. Admin can view in suspension management.
Actual Result
Status

7.6 Grading & Certificates

GRD-001: View Grading Configuration

FieldContent
PriorityHigh
PreconditionsLogged in as Admin
ClientWeb Admin
RoleAdmin
Steps1. Navigate to /dashboard/admin/grading
2. View grading config (GET /v2/grading/config)
Expected Result6-tier scale displayed: High Distinction (85–100), Distinction (75–84.99), Credit (65–74.99), Merit (55–64.99), Pass (50–54.99), Fail (0–49.99).
Actual Result
Status

GRD-002: Admin Updates Grading Config

FieldContent
PriorityHigh
PreconditionsLogged in as Admin
ClientWeb Admin
RoleAdmin
Steps1. Modify grade boundaries
2. Save (PUT /v2/grading/config)
3. Reload page
Expected ResultChanges saved. New boundaries reflected on reload.
Actual Result
Status

GRD-003: Calculate Student-Subject Grade

FieldContent
PriorityCritical
PreconditionsStudent has assignment and exam scores for a subject
ClientWeb Admin
RoleAdmin
Steps1. Query grade calculation (GET /v2/grading/student/{id}/subject/{id})
Expected ResultReturns: assignment average, exam score, weighted total (50/50), grade tier name.
Actual Result
Status

GRD-004: Grade Boundary — Score 85.00 = High Distinction

FieldContent
PriorityHigh
PreconditionsStudent with total weighted score of exactly 85.00
ClientWeb Admin
RoleAdmin
Steps1. Calculate grade for student with 85.00 score
Expected ResultGrade = “High Distinction” (not “Distinction”). Boundary inclusive.
Actual Result
Status

GRD-005: Grade Boundary — Score 49.99 = Fail

FieldContent
PriorityHigh
PreconditionsStudent with total weighted score of 49.99
ClientWeb Admin
RoleAdmin
Steps1. Calculate grade for student with 49.99 score
Expected ResultGrade = “Fail” (below 50.00 Pass threshold).
Actual Result
Status

GRD-006: Grade Boundary — Score 50.00 = Pass

FieldContent
PriorityHigh
PreconditionsStudent with total weighted score of exactly 50.00
ClientWeb Admin
RoleAdmin
Steps1. Calculate grade for student with 50.00 score
Expected ResultGrade = “Pass” (meets minimum threshold).
Actual Result
Status

GRD-007: Student Grade Summary

FieldContent
PriorityHigh
PreconditionsStudent has grades in multiple subjects
ClientWeb Admin
RoleAdmin
Steps1. Query grade summary (GET /v2/grading/student/{id}/summary)
Expected ResultReturns all subjects with scores and grades. Overall average calculated.
Actual Result
Status

GRD-008: Admin Edits Final Score (Override)

FieldContent
PriorityMedium
PreconditionsStudent has existing grade
ClientWeb Admin
RoleAdmin
Steps1. Edit final score (PUT /v2/grading/student/{id}/subject/{id}/final)
2. Enter new score
Expected ResultScore overridden. Grade recalculated based on new score.
Actual Result
Status

GRD-009: Generate Certificate

FieldContent
PriorityCritical
PreconditionsStudent completed all subjects in academic level. All graded.
ClientWeb Admin
RoleAdmin
Steps1. Navigate to Certificates
2. Select student and academic level
3. Generate (POST /v2/certificates/generate/{studentId}/{levelId})
Expected ResultCertificate PDF generated with: student name, level, date, serial number, QR code. Stored in MinIO.
Actual Result
Status

GRD-010: Certificate Contains QR Code

FieldContent
PriorityHigh
PreconditionsCertificate generated
ClientWeb Admin
RoleAdmin
Steps1. Download certificate PDF
2. Inspect for QR code
Expected ResultQR code present on certificate. Encodes verification URL with serial number.
Actual Result
Status

GRD-011: Download Certificate PDF

FieldContent
PriorityHigh
PreconditionsCertificate generated
ClientBoth
RoleAny
Steps1. Download certificate (GET /v2/certificates/download/{serialNumber})
Expected ResultPDF downloads. Content matches generated certificate.
Actual Result
Status

GRD-012: Public QR Verification (No Auth)

FieldContent
PriorityCritical
PreconditionsCertificate with QR code
ClientAny browser
RolePublic (no login)
Steps1. Scan QR code or visit verification URL
2. GET /v2/certificates/verify/{serialNumber}
Expected ResultPublic page shows: student name, level, date, institution. Confirms certificate is genuine. No authentication required.
Actual Result
Status

GRD-013: List Student Certificates

FieldContent
PriorityMedium
PreconditionsStudent has certificates
ClientWeb Admin
RoleAdmin
Steps1. Query certificates (GET /v2/certificates/student/{studentId})
Expected ResultList of all certificates with serial numbers, levels, dates.
Actual Result
Status

GRD-014: Generate Transcript

FieldContent
PriorityHigh
PreconditionsStudent has graded subjects
ClientWeb Admin
RoleAdmin
Steps1. Generate transcript (GET /v2/transcripts/{studentId})
Expected ResultPDF generated with: all subjects, assignment scores, exam scores, total, grade tier for each.
Actual Result
Status

7.7 Billing

BIL-001: Calculate Student Billing

FieldContent
PriorityCritical
PreconditionsLogged in as Admin. Student enrolled in subjects with costs.
ClientWeb Admin
RoleAdmin
Steps1. Navigate to /dashboard/admin/billing
2. Enter student ID
3. Click “Calculate” (POST /v2/billing/calculate/{studentId})
Expected ResultBilling calculated. Shows: student name, total amount, billing date, line items (each subject + cost).
Actual Result
Status

BIL-002: Billing Reflects Correct Subject Costs

FieldContent
PriorityCritical
PreconditionsStudent enrolled in subjects with known costs in tbl_subjects
ClientWeb Admin
RoleAdmin
Steps1. Calculate billing
2. Compare line item costs to tbl_subjects.cost
Expected ResultEach line item cost matches the subject's cost in database. Total = sum of all subject costs.
Actual Result
Status

BIL-003: View Billing by ID

FieldContent
PriorityMedium
PreconditionsBilling record exists
ClientWeb Admin
RoleAdmin
Steps1. Query billing (GET /v2/billing/{billingId})
Expected ResultFull billing details returned.
Actual Result
Status

BIL-004: View Student Billing History

FieldContent
PriorityHigh
PreconditionsStudent has multiple billing records
ClientWeb Admin
RoleAdmin
Steps1. Query history (GET /v2/billing/student/{studentId})
Expected ResultList of all billing records for student across terms/levels.
Actual Result
Status

BIL-005: Export Billing to Excel (Date Range)

FieldContent
PriorityHigh
PreconditionsBilling records exist
ClientWeb Admin
RoleAdmin
Steps1. Set date range filter (fromDate, toDate)
2. Click “Export” (GET /v2/billing/export)
Expected ResultExcel file downloads with billing data within date range.
Actual Result
Status

BIL-006: Export Billing for Specific Student

FieldContent
PriorityMedium
PreconditionsStudent billing exists
ClientWeb Admin
RoleAdmin
Steps1. Set studentId filter
2. Export
Expected ResultExcel contains only that student's billing records.
Actual Result
Status

BIL-007: Billing Recalculates After Subject Addition

FieldContent
PriorityHigh
PreconditionsStudent already has billing. New subject added.
ClientWeb Admin
RoleAdmin
Steps1. Add new subject to student
2. Recalculate billing
Expected ResultNew total includes the additional subject cost.
Actual Result
Status

BIL-008: Billing Displays in Student Detail

FieldContent
PriorityMedium
PreconditionsStudent has billing
ClientWeb Admin
RoleAdmin
Steps1. Navigate to student detail page
2. Check billing section
Expected ResultBilling summary visible in student detail view.
Actual Result
Status

8. Secondary Feature Checklists

8.1 Dashboard Stats Accuracy

#CheckClientExpectedPass/FailNotes
1Admin: Total Students card matches DB countWeb AdminCount matches SELECT COUNT(*) FROM tbl_student
2Admin: Pending Approvals card is accurateWeb AdminMatches pending student count
3Admin: Active Subjects count is correctWeb AdminMatches active subjects in tbl_subjects
4Admin: Suspended Students count is correctWeb AdminMatches suspension records
5ETO: Territory Students filtered correctlyWeb AdminOnly shows students from ETO's territory
6Tutor: Pending Assignments count correctWeb AdminMatches unmarked assignments for tutor
7Student: Enrolled Subjects count correctBothMatches student's active selections
8Student: Average Score is accurateBothMatches calculated average

8.2 Chat & Messaging

#CheckClientExpectedPass/FailNotes
1WebSocket connection establishesBothChat connects on /ws
2Send message to another userBothMessage delivered
3Receive real-time messageBothAppears without refresh
4Chat history loads correctlyBothPrevious messages shown
5Unread message count updatesBothCounter increments on new message
6Chat pagination worksWeb AdminLoad older messages on scroll
7User chat list loadsBothRecent conversations visible
8Cross-role chat works (student-tutor)BothMessages flow between roles
9AI chatbot responds to keywordsMobileBot replies to “assignment”, “exam”, etc.
10Chatbot escalation offer worksMobileOffers human support on unknown query

8.3 File Upload/Download

#CheckClientExpectedPass/FailNotes
1Upload PDF reading materialWeb AdminStored in MinIO
2Upload Word doc (auto-convert to PDF)Web AdminConverted and stored as PDF
3Download inline viewBothOpens in browser
4Download with attachment headerBothSaves as file
5100MB max size enforcedBothFiles > 100MB rejected
6Unsupported formats rejectedBothNon-PDF/Word blocked
7MinIO storage verifiedBackendFile exists in salt-files bucket
8Legacy filesystem fallback worksBackendOld files at /opt/salt_files accessible

8.4 Reports & Exports

#CheckClientExpectedPass/FailNotes
1ETO Progressive Report generatesWeb AdminExcel downloads
2Pending Approval Report generatesWeb AdminExcel downloads
3Pending Subject Approval ReportWeb AdminExcel downloads
4Pending Exam Approval ReportWeb AdminExcel downloads
5Tutor Students ReportWeb AdminExcel downloads
6Tutor Subjects with AssignmentsWeb AdminExcel downloads
7Exam Register (Approved Exams)Web AdminExcel downloads
8Final Course Update (Marked Exams)Web AdminExcel downloads

8.5 Session & Intake Management

#CheckClientExpectedPass/FailNotes
1List active sessionsWeb AdminSessions display
2Create new sessionWeb AdminSession created with name/status
3Update session name/statusWeb AdminChanges saved
4Search sessions by nameWeb AdminFilter works
5View intake configWeb AdminConfiguration displays
6Check intake period open/closedWeb AdminCorrect status returned

8.6 Suspension Management

#CheckClientExpectedPass/FailNotes
1View suspended students listWeb AdminSuspended students shown
2Lift suspension with commentsWeb AdminSuspension lifted, student reactivated
3Decline suspension appealWeb AdminAppeal declined, student stays suspended
4Auto-suspend after 3 exam failuresBackendSuspension triggered automatically
5Suspended student blocked from examsBothCannot access exam features
6Legacy suspended accounts loadWeb AdminHistorical suspensions visible

8.7 Announcements

#CheckClientExpectedPass/FailNotes
1Admin creates announcementWeb AdminAnnouncement saved
2Active announcements display on dashboardsBothVisible to all roles
3Announcements load on mobileMobileDisplayed correctly
4Old announcements archivedWeb AdminOnly active shown by default

8.8 Country & Territory CRUD

#CheckClientExpectedPass/FailNotes
1List all countriesWeb AdminCountries displayed
2Create new countryWeb AdminCountry added
3Update country detailsWeb AdminChanges saved
4List territories by countryWeb AdminFiltered correctly
5Create new territoryWeb AdminTerritory added with code
6Update territoryWeb AdminChanges saved

8.9 Schema Management & Data Integrity

#CheckClientExpectedPass/FailNotes
1Schema status checkWeb AdminStatus returned
2Run integrity validationWeb AdminValidation completes
3View integrity logWeb AdminLog entries displayed
4Fix duplicatesWeb AdminDuplicates resolved
5Export students backup (Excel)Web AdminFile downloads
6Export full backup (ZIP)Web AdminZIP file downloads

8.10 Internationalization (i18n)

#CheckClientExpectedPass/FailNotes
1Switch to English (en)MobileAll UI text in English
2Switch to French (fr)MobileAll UI text in French
3Switch to Kiswahili (sw)MobileAll UI text in Kiswahili
4Switch to Portuguese (pt)MobileAll UI text in Portuguese
5Error messages in selected languageBothBackend errors translated
6Language preference persistsMobileSame language after restart

8.11 Theme Toggle

#CheckClientExpectedPass/FailNotes
1Toggle to dark modeMobileDark theme applied
2Toggle to light modeMobileLight theme applied
3Theme persists after restartMobileSame theme on relaunch
4All screens render in both themesMobileNo visual glitches

8.12 Executive Dashboard

#CheckClientExpectedPass/FailNotes
1Overview metrics loadExec DashboardStat cards populated
2Enrollment trends chart rendersExec DashboardLine chart visible (12 months)
3Territory breakdown chart rendersExec DashboardBar chart visible
4Assignment analytics displayExec DashboardData populated
5Exam analytics displayExec DashboardData populated
6Approval workflow stats displayExec DashboardData populated
7Subject-territory matrix loadsExec DashboardTable/grid visible
8New vs continuing chartExec DashboardChart visible
9Marking progress trackerExec DashboardProgress bars visible
10Date range filter worksExec DashboardData updates on filter change

8.13 Executive Dashboard Push Notifications

#CheckClientExpectedPass/FailNotes
1FCM topic subscription on app launchExec DashboardApp subscribes to salt_exec_events topic on startup
2Notification bell visible in AppBarExec DashboardBell icon displayed next to date filter and refresh buttons
3Badge count starts at zeroExec DashboardNo badge shown when there are no unread notifications

TC-EXEC-PUSH-01: Assignment Submitted Notification

FieldContent
PriorityHigh
PreconditionsExecutive Dashboard open and subscribed to salt_exec_events. Student has an assignment to submit.
ClientExec Dashboard + Mobile
RoleStudent (trigger) / Admin (observe on dashboard)
Steps1. Open Executive Dashboard and verify bell icon is visible
2. On a separate device, log in as Student
3. Student submits an assignment for subject FPNT01
4. Observe the Executive Dashboard within 30 seconds
Expected ResultBell icon badge increments by 1. Opening the notification panel shows a notification with message indicating the student name, subject, and that an assignment was submitted.
Actual Result
Status

TC-EXEC-PUSH-02: Student Approved by Admin Notification

FieldContent
PriorityHigh
PreconditionsExecutive Dashboard open. A student is pending Admin approval (ETO already approved).
ClientExec Dashboard + Web Admin
RoleAdmin (trigger and observe)
Steps1. Open Executive Dashboard on one browser tab
2. Open Web Admin on another tab, navigate to pending students
3. Admin approves a pending student
4. Observe the Executive Dashboard within 30 seconds
Expected ResultBell icon badge increments. Notification panel shows message indicating the student name, admission number, and that they were approved by Admin.
Actual Result
Status

TC-EXEC-PUSH-03: Student Approved by ETO Notification

FieldContent
PriorityHigh
PreconditionsExecutive Dashboard open. A student is pending ETO approval.
ClientExec Dashboard + Web Admin
RoleETO (trigger) / Admin (observe on dashboard)
Steps1. Open Executive Dashboard
2. Log in to Web Admin as ETO
3. ETO approves a pending student from their territory
4. Observe the Executive Dashboard within 30 seconds
Expected ResultBell icon badge increments. Notification panel shows message indicating the student name, admission number, and that they were approved by ETO.
Actual Result
Status

TC-EXEC-PUSH-04: Assignment Marked Notification

FieldContent
PriorityHigh
PreconditionsExecutive Dashboard open. A submitted (unmarked) assignment exists.
ClientExec Dashboard + Web Admin
RoleTutor (trigger) / Admin (observe on dashboard)
Steps1. Open Executive Dashboard
2. Log in to Web Admin as Tutor
3. Tutor marks a student’s assignment with a score
4. Observe the Executive Dashboard within 30 seconds
Expected ResultBell icon badge increments. Notification panel shows message indicating the tutor name, student name, subject, and score awarded.
Actual Result
Status

TC-EXEC-PUSH-05: Notification Bell Badge Count Updates

FieldContent
PriorityHigh
PreconditionsExecutive Dashboard open with zero unread notifications.
ClientExec Dashboard
RoleAdmin
Steps1. Verify badge count is 0 (no badge shown)
2. Trigger 3 events (e.g., submit assignment, mark assignment, approve student) in sequence
3. Observe badge count after each event
Expected ResultBadge count increments from 0 to 1, then 2, then 3 as each event is received.
Actual Result
Status

TC-EXEC-PUSH-06: Mark All as Read Clears Badge

FieldContent
PriorityHigh
PreconditionsExecutive Dashboard has 3 or more unread notifications (badge shows count).
ClientExec Dashboard
RoleAdmin
Steps1. Verify badge shows unread count (e.g., 3)
2. Tap the bell icon to open notification panel
3. Tap “Mark All as Read”
Expected ResultAll notifications change to read state. Badge count resets to zero (badge disappears). Notifications remain in the list but are no longer highlighted.
Actual Result
Status

TC-EXEC-PUSH-07: Clear All Removes All Notifications

FieldContent
PriorityHigh
PreconditionsExecutive Dashboard has notifications in the panel (read or unread).
ClientExec Dashboard
RoleAdmin
Steps1. Open notification panel
2. Verify notifications are listed
3. Tap “Clear All”
Expected ResultAll notifications removed from the panel. The list is empty. Badge count resets to zero.
Actual Result
Status

9. End-to-End Process Flows

E2E-001: Complete Student Lifecycle

Scenario: New student from registration to certification.

StepActionRoleExpected Outcome
1Admin bulk uploads admission numberAdminStudent created with status “U”
2Student self-registers on mobileStudentStatus changes to “N”
3ETO reviews and approvesETOStatus moves toward “P”
4Admin gives final approvalAdminStatus = “D” (Done)
5Student logs inStudentDashboard accessible
6Student registers for Foundation subjectsStudentSubjects pending approval
7ETO/Admin approves subjectsETO/AdminSubjects active
8Student downloads reading materialsStudentMaterials accessible
9Student submits assignmentsStudentAssignments recorded
10Tutor marks assignmentsTutorScores entered
11Admin approves marksAdminMarks finalized
12Student takes MCQ examStudentAuto-marked, score recorded
13Student downloads essay exam, uploads answerStudentAnswer submitted
14Tutor marks essayTutorScore entered
15Admin awards final exam scoreAdminScore finalized
16Grade calculated (50% assignment + 50% exam)SystemGrade tier assigned
17Student completes all Foundation subjectsStudentLevel complete
18Admin generates certificateAdminPDF with QR code
19Certificate QR verified publiclyPublicVerification confirms authenticity

Pass/Fail: _____   Tester: _____________   Date: _____________

E2E-002: ETO Approval Workflow (Cross-Territory)

Scenario: Multiple students from different territories processed by different ETOs.

StepActionRoleExpected Outcome
1Students register from Kenya (+254) and Rwanda (+250)StudentsStatus “N” for both
2Kenya ETO logs inETO (+254)Sees only Kenya students
3Kenya ETO approves studentETO (+254)Kenya student moves to admin queue
4Rwanda ETO logs inETO (+250)Sees only Rwanda students, NOT Kenya
5Rwanda ETO approves studentETO (+250)Rwanda student moves to admin queue
6Admin sees both studentsAdminBoth territories visible
7Admin approves bothAdminBoth students status “D”

Pass/Fail: _____   Tester: _____________   Date: _____________

E2E-003: Exam Retake and Suspension Flow

Scenario: Student fails exam 3 times, gets suspended, then reinstated.

StepActionRoleExpected Outcome
1Student takes exam — attempt 1StudentScore below pass mark, fail
2Student applies for retakeStudentRetake approved
3Student takes exam — attempt 2StudentScore below pass mark, fail
4Student applies for retakeStudentRetake approved
5Student takes exam — attempt 3StudentScore below pass mark, fail
6System auto-suspends studentSystemSuspension created in tbl_suspension_log
7Student cannot access exam featuresStudentExam features blocked
8Admin views suspended studentsAdminStudent visible in suspension list
9Admin lifts suspension with commentsAdminStudent reactivated
10Student can access exams againStudentFeatures restored

Pass/Fail: _____   Tester: _____________   Date: _____________

10. Defect Log Template

FieldDescription
Defect IDDEF-NNN
TitleShort description
SeverityP1 (Critical) / P2 (High) / P3 (Medium) / P4 (Low)
Test Case IDRelated test case (e.g., AUTH-005)
ClientWeb Admin / Mobile / Exec Dashboard / Backend
Steps to ReproduceNumbered steps
Expected ResultWhat should happen
Actual ResultWhat actually happened
ScreenshotsAttach if applicable
Assigned ToDeveloper name
StatusOpen / In Progress / Fixed / Verified / Closed
Found DateDate discovered
Fixed DateDate resolved

Severity Definitions

SeverityDefinitionResolution
P1 — CriticalSystem crash, data loss, security breach, complete feature failureMust fix before UAT can continue
P2 — HighMajor feature broken, workaround exists but impracticalMust fix before sign-off
P3 — MediumMinor feature issue, reasonable workaround existsFix before production, may defer
P4 — LowCosmetic, typo, minor UX improvementLog for future release

11. Risk Register

Risk IDDescriptionProbabilityImpactMitigation
R-001Production database (salvation.sql) has inconsistent dataMediumHighTest with actual production data dump. Document edge cases.
R-002MinIO not accessible / files missingLowHighVerify dual-read fallback to /opt/salt_files works.
R-003OTP delivery fails (SMS/email gateway down)MediumCriticalTest with test accounts that have verified email. Admin can reset passwords manually.
R-004Mobile app crashes on specific Android/iOS versionsMediumMediumTest on multiple devices. Document minimum versions.
R-005Concurrent user access causes data conflictsLowMediumTest with multiple simultaneous users. Verify optimistic locking.
R-006Flyway migrations fail on production dataLowCriticalTest migrations against salvation.sql dump first. Never modify existing migrations.
R-007Redis cache returns stale dataLowMediumVerify cache TTL settings. Test manual refresh.
R-008File upload exceeds 100MB limitLowLowVerify server-side validation. Test with large files.
R-009JWT token expiry causes mid-operation failureMediumMediumVerify graceful redirect to login. Check token refresh logic.
R-010i18n translations incompleteMediumLowVerify all 4 languages have complete bundles. Document missing translations.

12. Sign-Off

UAT Completion Summary

MetricValue
Total Critical Test Cases112
Total Checklist Items82
Critical Tests Passed_____ / 112
Checklist Items Passed_____ / 82
P1 Defects Open_____
P2 Defects Open_____
P3 Defects Open_____
P4 Defects Open_____

Approval Signatures

RoleNameSignatureDate
Project Manager
QA Lead
Development Lead
Business Owner (Salvation Army)
IT Manager

Decision

Comments

_________________________________________________________________________

_________________________________________________________________________

_________________________________________________________________________

College E-Learning — Developed by Sumba Group Limited for Salvation Army SALT College of Africa