# 5. Course Assignment — Test Cases

User Type: **Super Administrator**
Source: *Mi Digital Academy - Education CRM Features Document*
Spec: course_assignment.md — every feature, sub-feature, and rule covered

---

## Test Execution Policy
- Zero tolerance: any deviation from documented behavior = FAILED = bug
- Every bug is immediately logged/reported (Bug ID, feature, sub-feature,
  expected vs actual, severity) and fixed 100% before the group passes
- Feature group passes only at 100% test pass rate

## Coverage Matrix
| Feature | Sub-feature / Rule | Test IDs |
|---------|--------------------|----------|
| 5.1 Assign Courses to Student Groups | Assign a course to a student group (class, cohort, segment) | TC-SA-06-05-001 |
| 5.1 Assign Courses to Student Groups | Group selection: the target group chosen from the platform's groups | TC-SA-06-05-002 |
| 5.1 Assign Courses to Student Groups | Bulk enrollment: the group's members enrolled in the course together | TC-SA-06-05-003 |
| 5.1 Assign Courses to Student Groups | Assignment record: which course is assigned to which group, when | TC-SA-06-05-004 |
| 5.1 Assign Courses to Student Groups | Unassignment: removing a course from a group (with the impact reviewed) | TC-SA-06-05-005 |
| 5.1 Assign Courses to Student Groups | Assignment list: the courses assigned per group, and the groups per course | TC-SA-06-05-006 |
| 5.1 Assign Courses to Student Groups | Audit logging of assignment/unassignment | TC-SA-06-05-007 |
| 5.1 Assign Courses to Student Groups | Rule: an assignment links a course to a group; the group's members are enrolled together | TC-SA-06-05-003 |
| 5.1 Assign Courses to Student Groups | Rule: the assignment is recorded (course, group, timestamp); it is auditable | TC-SA-06-05-004 |
| 5.1 Assign Courses to Student Groups | Rule: an unassignment is reviewed for impact (members' in-progress work) before it is done; the impact is handled, not silently dropped | TC-SA-06-05-005 |
| 5.1 Assign Courses to Student Groups | Rule: the assignment list shows both directions (courses per group, groups per course), so the reach and load are visible | TC-SA-06-05-006 |
| 5.1 Assign Courses to Student Groups | Rule: a group can have multiple courses assigned; a course can be assigned to multiple groups | TC-SA-06-05-008 |
| 5.1 Assign Courses to Student Groups | Rule: assignment/unassignment is audit-logged with the course, group, and timestamp | TC-SA-06-05-007 |
| 5.2 Create Custom Learning Paths | Path creation: a named custom learning path with a goal | TC-SA-06-05-009 |
| 5.2 Create Custom Learning Paths | Course selection: the courses (and units) included in the path | TC-SA-06-05-010 |
| 5.2 Create Custom Learning Paths | Sequencing: the order of the courses/units in the path | TC-SA-06-05-011 |
| 5.2 Create Custom Learning Paths | Path assignment: the path assigned to a learner or group | TC-SA-06-05-012 |
| 5.2 Create Custom Learning Paths | Path progress: a learner's progress through the path tracked | TC-SA-06-05-013 |
| 5.2 Create Custom Learning Paths | Path review: the path's composition and sequence checked for coherence | TC-SA-06-05-014 |
| 5.2 Create Custom Learning Paths | Audit logging of path create/edit/assign | TC-SA-06-05-015 |
| 5.2 Create Custom Learning Paths | Rule: a custom learning path is a curated, sequenced set of courses/units for a goal; it is distinct from a standard catalog track | TC-SA-06-05-009 |
| 5.2 Create Custom Learning Paths | Rule: the sequence is logical (foundations before advanced); the path is reviewed for coherence before assignment | TC-SA-06-05-011 |
| 5.2 Create Custom Learning Paths | Rule: a path is assigned to a learner or group; the assignee follows it as their route | TC-SA-06-05-012 |
| 5.2 Create Custom Learning Paths | Rule: progress through the path is tracked; the learner's position is visible | TC-SA-06-05-013 |
| 5.2 Create Custom Learning Paths | Rule: a path adjustment (add/remove/re-sequence) is recorded; the learner's completed work is preserved | TC-SA-06-05-016 |
| 5.2 Create Custom Learning Paths | Rule: path changes are audit-logged with the path, assignee, and timestamp | TC-SA-06-05-015 |
| 5.3 Schedule Batch Assessments | Batch assessment scheduling: an assessment set for a group at a defined time | TC-SA-06-05-017 |
| 5.3 Schedule Batch Assessments | Assessment selection: the assessment (from the assessment set) chosen for the batch | TC-SA-06-05-018 |
| 5.3 Schedule Batch Assessments | Time window: the start and the duration (the window the batch takes it) | TC-SA-06-05-019 |
| 5.3 Schedule Batch Assessments | Batch selection: the group of learners the assessment is scheduled for | TC-SA-06-05-020 |
| 5.3 Schedule Batch Assessments | Scheduling list: the batch assessments with their times and groups | TC-SA-06-05-021 |
| 5.3 Schedule Batch Assessments | Reminder: the batch notified of the upcoming assessment (per notification settings) | TC-SA-06-05-022 |
| 5.3 Schedule Batch Assessments | Audit logging of batch assessment scheduling | TC-SA-06-05-023 |
| 5.3 Schedule Batch Assessments | Rule: a batch assessment is an assessment scheduled for a group at a defined time window; the batch takes it together | TC-SA-06-05-017 |
| 5.3 Schedule Batch Assessments | Rule: the time window (start and duration) is set; the assessment is taken within it | TC-SA-06-05-019 |
| 5.3 Schedule Batch Assessments | Rule: the batch is notified of the upcoming assessment per the notification settings; a reschedule triggers a re-notification | TC-SA-06-05-022 |
| 5.3 Schedule Batch Assessments | Rule: the scheduling list shows the batch assessments with their times and groups; the calendar is visible | TC-SA-06-05-021 |
| 5.3 Schedule Batch Assessments | Rule: a reschedule is recorded; the batch's prior attempts (if any) are handled per the reschedule's impact | TC-SA-06-05-024 |
| 5.3 Schedule Batch Assessments | Rule: scheduling is audit-logged with the assessment, batch, window, and timestamp | TC-SA-06-05-023 |

## 5.1 Assign Courses to Student Groups

### TC-SA-06-05-001 — Assign a course to a student group (class, cohort, segment)
**Type:** Positive
**Covers:** 5.1 → Assign a course to a student group (class, cohort, segment)
**Preconditions:** A course exists; a student group (a Grade 10 cohort) exists.
**Steps:**
1. Open Course Assignment and select the course (Mathematics).
2. Select the target group (the Grade 10 cohort).
3. Confirm the group's membership (the learners in the group) and assign the course to the group.
**Expected Result:** The course is assigned to the student group — the group's members have the course in their learning context.
**Priority:** Critical

### TC-SA-06-05-002 — Group selection: the target group chosen from the platform's groups
**Type:** Positive
**Covers:** 5.1 → Group selection: the target group chosen from the platform's groups
**Preconditions:** The platform has multiple groups (classes, cohorts, segments).
**Steps:**
1. In Course Assignment, open the group selector.
2. Verify the target group is chosen from the platform's groups (classes, cohorts, segments).
3. Select a group and verify it is the assignment target.
**Expected Result:** The target group is chosen from the platform's groups — the group selection works.
**Priority:** High

### TC-SA-06-05-003 — Bulk enrollment: the group's members enrolled in the course together; the assignment links a course to a group
**Type:** Positive
**Covers:** 5.1 → Bulk enrollment: the group's members enrolled in the course together; Rule: an assignment links a course to a group; the group's members are enrolled together
**Preconditions:** A course is assigned to a group with multiple members.
**Steps:**
1. Assign the course to the group.
2. Verify the platform enrolls the group's members in the course together.
3. Verify each member now has the course in their learning context.
**Expected Result:** The group's members are enrolled in the course together — the assignment links the course to the group.
**Priority:** Critical

### TC-SA-06-05-004 — Assignment record: which course is assigned to which group, when; it is auditable
**Type:** Positive
**Covers:** 5.1 → Assignment record: which course is assigned to which group, when; Rule: the assignment is recorded (course, group, timestamp); it is auditable
**Preconditions:** A course has been assigned to a group.
**Steps:**
1. Open the assignment record.
2. Verify it shows which course is assigned to which group, and when (the timestamp).
3. Verify the assignment is auditable.
**Expected Result:** The assignment is recorded (course, group, timestamp) — it is auditable.
**Priority:** High

### TC-SA-06-05-005 — Unassignment: removing a course from a group (with the impact reviewed); the impact is handled, not silently dropped
**Type:** Negative
**Covers:** 5.1 → Unassignment: removing a course from a group (with the impact reviewed); Rule: an unassignment is reviewed for impact (members' in-progress work) before it is done; the impact is handled, not silently dropped
**Preconditions:** A course is assigned to a group; members have in-progress work.
**Steps:**
1. Initiate the unassignment of the course from the group.
2. Verify the impact (members' in-progress work) is reviewed before the unassignment is done.
3. Complete the unassignment and verify the impact is handled (not silently dropped).
**Expected Result:** The unassignment is reviewed for impact (members' in-progress work) before it is done — the impact is handled, not silently dropped.
**Priority:** Critical

### TC-SA-06-05-006 — Assignment list: the courses assigned per group, and the groups per course; the reach and load are visible
**Type:** Positive
**Covers:** 5.1 → Assignment list: the courses assigned per group, and the groups per course; Rule: the assignment list shows both directions (courses per group, groups per course), so the reach and load are visible
**Preconditions:** Courses are assigned to groups.
**Steps:**
1. Open the assignment list.
2. Verify the courses assigned to a group (its learning load) are shown.
3. Verify the groups a course is assigned to (its reach) are shown.
**Expected Result:** The assignment list shows both directions (courses per group, groups per course) — the reach and load are visible.
**Priority:** High

### TC-SA-06-05-007 — Assignment/unassignment is audit-logged with the course, group, and timestamp
**Type:** Positive
**Covers:** 5.1 → Audit logging of assignment/unassignment; Rule: assignment/unassignment is audit-logged with the course, group, and timestamp
**Preconditions:** Courses have been assigned to and unassigned from groups.
**Steps:**
1. Open the audit trail and filter by "assignment".
2. Verify entries for each assignment and unassignment with the course, the group, and the timestamp.
**Expected Result:** Each assignment and unassignment is audit-logged with the course, group, and timestamp.
**Priority:** Critical

### TC-SA-06-05-008 — A group can have multiple courses assigned; a course can be assigned to multiple groups
**Type:** Edge
**Covers:** 5.1 → Rule: a group can have multiple courses assigned; a course can be assigned to multiple groups
**Preconditions:** A group and multiple courses exist; a course and multiple groups exist.
**Steps:**
1. Assign multiple courses to a single group and verify all are assigned.
2. Assign a single course to multiple groups and verify it is assigned to all.
**Expected Result:** A group can have multiple courses assigned; a course can be assigned to multiple groups.
**Priority:** High

## 5.2 Create Custom Learning Paths

### TC-SA-06-05-009 — Path creation: a named custom learning path with a goal; it is distinct from a standard catalog track
**Type:** Positive
**Covers:** 5.2 → Path creation: a named custom learning path with a goal; Rule: a custom learning path is a curated, sequenced set of courses/units for a goal; it is distinct from a standard catalog track
**Preconditions:** A learner needs a tailored route (e.g., a career switch into data).
**Steps:**
1. Create a custom learning path: a name and the goal it serves.
2. Verify the path is a curated, sequenced set of courses/units for the goal.
3. Verify the path is distinct from a standard catalog track.
**Expected Result:** The custom learning path is created — a named path with a goal, distinct from a standard catalog track.
**Priority:** Critical

### TC-SA-06-05-010 — Course selection: the courses (and units) included in the path
**Type:** Positive
**Covers:** 5.2 → Course selection: the courses (and units) included in the path
**Preconditions:** A custom learning path is being created; courses are available.
**Steps:**
1. Select the courses for the path (the foundations, the core, the application).
2. Select the specific units where a course is only partially needed.
3. Verify the selected courses/units are included in the path.
**Expected Result:** The courses (and units) are selected and included in the path.
**Priority:** High

### TC-SA-06-05-011 — Sequencing: the order of the courses/units in the path; the sequence is logical (foundations before advanced)
**Type:** Positive
**Covers:** 5.2 → Sequencing: the order of the courses/units in the path; Rule: the sequence is logical (foundations before advanced); the path is reviewed for coherence before assignment
**Preconditions:** A custom learning path has selected courses/units.
**Steps:**
1. Sequence the path: the order of the courses/units, so the learning builds correctly (foundations before advanced).
2. Verify the sequence is logical.
**Expected Result:** The path is sequenced — the order of the courses/units is logical (foundations before advanced).
**Priority:** High

### TC-SA-06-05-012 — Path assignment: the path assigned to a learner or group; the assignee follows it as their route
**Type:** Positive
**Covers:** 5.2 → Path assignment: the path assigned to a learner or group; Rule: a path is assigned to a learner or group; the assignee follows it as their route
**Preconditions:** A custom learning path is created and sequenced.
**Steps:**
1. Assign the path to the learner (or group).
2. Verify the learner now sees the path as their route, with the courses in order.
**Expected Result:** The path is assigned to the learner/group — the assignee follows it as their route.
**Priority:** Critical

### TC-SA-06-05-013 — Path progress: a learner's progress through the path tracked; the learner's position is visible
**Type:** Positive
**Covers:** 5.2 → Path progress: a learner's progress through the path tracked; Rule: progress through the path is tracked; the learner's position is visible
**Preconditions:** A learner is following an assigned custom learning path.
**Steps:**
1. The learner completes courses/units in the path.
2. Verify the learner's progress through the path is tracked: the courses/units completed, the current point, and what is next.
3. Verify the learner's position is visible.
**Expected Result:** The learner's progress through the path is tracked — the position (completed, current, next) is visible.
**Priority:** High

### TC-SA-06-05-014 — Path review: the path's composition and sequence checked for coherence; a gap or an out-of-order course is corrected
**Type:** Negative
**Covers:** 5.2 → Path review: the path's composition and sequence checked for coherence; Rule: the sequence is logical (foundations before advanced); the path is reviewed for coherence before assignment
**Preconditions:** A custom learning path has a gap or an out-of-order course.
**Steps:**
1. Review the path for coherence: the sequence is logical, the coverage matches the goal.
2. Identify the gap or out-of-order course.
3. Correct it and verify the path is coherent before assignment.
**Expected Result:** The path's composition and sequence are checked for coherence — a gap or an out-of-order course is corrected before assignment.
**Priority:** High

### TC-SA-06-05-015 — Path create, edit, and assign events are audit-logged with the path, the learner/group, and the timestamp
**Type:** Positive
**Covers:** 5.2 → Audit logging of path create/edit/assign; Rule: path changes are audit-logged with the path, assignee, and timestamp
**Preconditions:** A custom learning path has been created, edited, and assigned.
**Steps:**
1. Open the audit trail and filter by "learning path".
2. Verify entries for create, edit, and assign with the path, the learner/group, and the timestamp.
**Expected Result:** The path create, edit, and assign events are audit-logged with the path, the learner/group, and the timestamp.
**Priority:** Critical

### TC-SA-06-05-016 — A path adjustment (add/remove/re-sequence) is recorded; the learner's completed work is preserved
**Type:** Edge
**Covers:** 5.2 → Rule: a path adjustment (add/remove/re-sequence) is recorded; the learner's completed work is preserved
**Preconditions:** A learner is following a custom learning path and has completed some courses/units; the path needs an adjustment.
**Steps:**
1. Adjust the path (add/remove a course, re-sequence) and re-assign.
2. Verify the change is recorded.
3. Verify the learner's completed work is preserved.
**Expected Result:** The path adjustment is recorded — the learner's completed work is preserved.
**Priority:** High

## 5.3 Schedule Batch Assessments

### TC-SA-06-05-017 — Batch assessment scheduling: an assessment set for a group at a defined time; the batch takes it together
**Type:** Positive
**Covers:** 5.3 → Batch assessment scheduling: an assessment set for a group at a defined time; Rule: a batch assessment is an assessment scheduled for a group at a defined time window; the batch takes it together
**Preconditions:** A class needs an end-of-module assessment; an assessment exists in the assessment set.
**Steps:**
1. Open batch assessment scheduling, select the assessment (from the assessment set), and select the batch (the class).
2. Set the time window and save.
3. Verify the batch assessment is scheduled — the batch takes it together at the defined time.
**Expected Result:** The batch assessment is scheduled — an assessment set for a group at a defined time; the batch takes it together.
**Priority:** Critical

### TC-SA-06-05-018 — Assessment selection: the assessment (from the assessment set) chosen for the batch
**Type:** Positive
**Covers:** 5.3 → Assessment selection: the assessment (from the assessment set) chosen for the batch
**Preconditions:** The assessment set has multiple assessments.
**Steps:**
1. In batch assessment scheduling, open the assessment selector.
2. Select the assessment (from the assessment set) for the batch.
3. Verify the selected assessment is the one scheduled.
**Expected Result:** The assessment (from the assessment set) is chosen for the batch.
**Priority:** High

### TC-SA-06-05-019 — Time window: the start and the duration (the window the batch takes it); the assessment is taken within it
**Type:** Positive
**Covers:** 5.3 → Time window: the start and the duration (the window the batch takes it); Rule: the time window (start and duration) is set; the assessment is taken within it
**Preconditions:** A batch assessment is being scheduled.
**Steps:**
1. Set the time window: the start time and the duration (the window the batch takes the assessment).
2. Verify the assessment is taken within the window.
**Expected Result:** The time window (start and duration) is set — the assessment is taken within it.
**Priority:** High

### TC-SA-06-05-020 — Batch selection: the group of learners the assessment is scheduled for
**Type:** Positive
**Covers:** 5.3 → Batch selection: the group of learners the assessment is scheduled for
**Preconditions:** Multiple groups of learners exist.
**Steps:**
1. In batch assessment scheduling, open the batch selector.
2. Select the batch (the group of learners the assessment is scheduled for).
3. Verify the selected batch is the one the assessment is scheduled for.
**Expected Result:** The batch (the group of learners) is selected — the assessment is scheduled for it.
**Priority:** High

### TC-SA-06-05-021 — Scheduling list: the batch assessments with their times and groups; the calendar is visible
**Type:** Positive
**Covers:** 5.3 → Scheduling list: the batch assessments with their times and groups; Rule: the scheduling list shows the batch assessments with their times and groups; the calendar is visible
**Preconditions:** Multiple batch assessments are scheduled.
**Steps:**
1. Open the scheduling list.
2. Verify the batch assessments are shown with their times and groups.
3. Verify the upcoming and past batch assessments are visible (the assessment calendar is clear).
**Expected Result:** The scheduling list shows the batch assessments with their times and groups — the calendar is visible.
**Priority:** High

### TC-SA-06-05-022 — Reminder: the batch notified of the upcoming assessment (per notification settings); a reschedule triggers a re-notification
**Type:** Positive
**Covers:** 5.3 → Reminder: the batch notified of the upcoming assessment (per notification settings); Rule: the batch is notified of the upcoming assessment per the notification settings; a reschedule triggers a re-notification
**Preconditions:** A batch assessment is scheduled; the notification settings are configured.
**Steps:**
1. Verify the batch is notified of the upcoming assessment (per the notification settings).
2. Reschedule the batch assessment to a new window.
3. Verify the batch is re-notified of the new time.
**Expected Result:** The batch is notified of the upcoming assessment per the notification settings — a reschedule triggers a re-notification.
**Priority:** High

### TC-SA-06-05-023 — Scheduling is audit-logged with the assessment, batch, window, and timestamp
**Type:** Positive
**Covers:** 5.3 → Audit logging of batch assessment scheduling; Rule: scheduling is audit-logged with the assessment, batch, window, and timestamp
**Preconditions:** Batch assessments have been scheduled and rescheduled.
**Steps:**
1. Open the audit trail and filter by "batch assessment".
2. Verify entries for scheduling and rescheduling with the assessment, the batch, the window, and the timestamp.
**Expected Result:** The batch assessment scheduling and rescheduling are audit-logged with the assessment, batch, window, and timestamp.
**Priority:** Critical

### TC-SA-06-05-024 — A reschedule is recorded; the batch's prior attempts (if any) are handled per the reschedule's impact
**Type:** Edge
**Covers:** 5.3 → Rule: a reschedule is recorded; the batch's prior attempts (if any) are handled per the reschedule's impact
**Preconditions:** A batch assessment is rescheduled (a conflict arises); the batch has prior attempts.
**Steps:**
1. Move the batch assessment to a new window (reschedule).
2. Verify the reschedule is recorded.
3. Verify the batch's prior attempts (if any) are handled per the reschedule's impact.
**Expected Result:** The reschedule is recorded — the batch's prior attempts (if any) are handled per the reschedule's impact.
**Priority:** High
