# 1. Student Report Automation — Test Cases

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

## Test Execution Policy

- Zero tolerance: any deviation from the documented behavior is a defect.
- Every failed test is logged with a Bug ID, the feature, the sub-feature, the expected vs actual result, and the severity; 100% of bugs are fixed before the group passes.
- 100% pass rate is required for the group to be marked complete.

## Coverage Matrix

| Feature | Sub-feature / Rule | Test IDs |
|---------|--------------------|----------|
| 1.1 Weekly Progress Report Scheduling | Schedule definition: the weekly cadence (day of week, time, timezone) | TC-SA-AR-01-001 |
| 1.1 Weekly Progress Report Scheduling | Report content selection: hours studied, videos completed, assessments and scores, streak status, strengths and improvement areas | TC-SA-AR-01-002 |
| 1.1 Weekly Progress Report Scheduling | Audience scoping: which student segments receive the weekly report | TC-SA-AR-01-003 |
| 1.1 Weekly Progress Report Scheduling | Enable/disable per segment: the weekly report toggled on or off per audience | TC-SA-AR-01-004 |
| 1.1 Weekly Progress Report Scheduling | Preview: a sample weekly report rendered before activation | TC-SA-AR-01-005 |
| 1.1 Weekly Progress Report Scheduling | Rule: the schedule is timezone-aware | TC-SA-AR-01-006 |
| 1.1 Weekly Progress Report Scheduling | Rule: a student with no activity in the week still receives the report with zero/empty values | TC-SA-AR-01-007 |
| 1.1 Weekly Progress Report Scheduling | Rule: a report with no content blocks selected is rejected | TC-SA-AR-01-008 |
| 1.1 Weekly Progress Report Scheduling | Rule: a student in multiple segments receives the report once, not duplicated | TC-SA-AR-01-009 |
| 1.1 Weekly Progress Report Scheduling | Rule: scheduling changes take effect from the next scheduled run | TC-SA-AR-01-010 |
| 1.1 Weekly Progress Report Scheduling | Rule: scheduling changes are audit-logged | TC-SA-AR-01-011 |
| 1.2 Monthly Performance Report Generation | Monthly cadence: the generation day and time | TC-SA-AR-01-012 |
| 1.2 Monthly Performance Report Generation | Subject-wise detailed analysis: per-subject performance breakdown | TC-SA-AR-01-013 |
| 1.2 Monthly Performance Report Generation | Month-over-month comparison: performance delta vs. the previous month | TC-SA-AR-01-014 |
| 1.2 Monthly Performance Report Generation | Goal achievement status: progress against the student's set goals | TC-SA-AR-01-015 |
| 1.2 Monthly Performance Report Generation | Predicted scores: predicted scores for upcoming exams | TC-SA-AR-01-016 |
| 1.2 Monthly Performance Report Generation | Personalized recommendations: AI-generated next-step recommendations | TC-SA-AR-01-017 |
| 1.2 Monthly Performance Report Generation | Generation status: the batch generation state (queued, running, complete, failed) | TC-SA-AR-01-018 |
| 1.2 Monthly Performance Report Generation | Rule: a new student's first report shows "no prior data" rather than a false delta | TC-SA-AR-01-019 |
| 1.2 Monthly Performance Report Generation | Rule: predicted scores are only shown when an upcoming exam is on the calendar | TC-SA-AR-01-020 |
| 1.2 Monthly Performance Report Generation | Rule: a failed batch is retriable; partial failures do not block the rest of the cohort | TC-SA-AR-01-021 |
| 1.2 Monthly Performance Report Generation | Rule: generation is idempotent per period; re-running does not duplicate delivered reports | TC-SA-AR-01-022 |
| 1.2 Monthly Performance Report Generation | Rule: generation configuration changes are audit-logged | TC-SA-AR-01-023 |
| 1.3 Pre-Exam Summary Triggers | Trigger window: the number of days before an exam that triggers the summary | TC-SA-AR-01-024 |
| 1.3 Pre-Exam Summary Triggers | Readiness assessment: an overall exam readiness score | TC-SA-AR-01-025 |
| 1.3 Pre-Exam Summary Triggers | Urgent revision topics: topics flagged for urgent revision | TC-SA-AR-01-026 |
| 1.3 Pre-Exam Summary Triggers | Recommended study focus: the suggested focus areas | TC-SA-AR-01-027 |
| 1.3 Pre-Exam Summary Triggers | Confidence score per topic: per-topic confidence estimates | TC-SA-AR-01-028 |
| 1.3 Pre-Exam Summary Triggers | Exam source: exams pulled from the student's exam calendar | TC-SA-AR-01-029 |
| 1.3 Pre-Exam Summary Triggers | Rule: the trigger fires once per exam; it does not re-fire on each day within the window | TC-SA-AR-01-030 |
| 1.3 Pre-Exam Summary Triggers | Rule: a student with multiple exams in the window receives one summary per exam | TC-SA-AR-01-031 |
| 1.3 Pre-Exam Summary Triggers | Rule: thin-data topics are marked "insufficient data" | TC-SA-AR-01-032 |
| 1.3 Pre-Exam Summary Triggers | Rule: exams added after the window has passed do not retroactively trigger a summary | TC-SA-AR-01-033 |
| 1.3 Pre-Exam Summary Triggers | Rule: trigger configuration changes are audit-logged | TC-SA-AR-01-034 |
| 1.4 Report Delivery Channels | Channel enablement: email, in-app, and PDF channels toggled on/off | TC-SA-AR-01-035 |
| 1.4 Report Delivery Channels | Per-report channel assignment: which channels each report type uses | TC-SA-AR-01-036 |
| 1.4 Report Delivery Channels | PDF generation: reports rendered as downloadable PDF attachments | TC-SA-AR-01-037 |
| 1.4 Report Delivery Channels | In-app delivery: reports surfaced in the student's in-app report center | TC-SA-AR-01-038 |
| 1.4 Report Delivery Channels | Email delivery: reports sent to the student's registered email | TC-SA-AR-01-039 |
| 1.4 Report Delivery Channels | Delivery status: per-report delivery state (sent, delivered, failed, bounced) | TC-SA-AR-01-040 |
| 1.4 Report Delivery Channels | Rule: a report with no enabled channel is not delivered and is flagged as misconfigured | TC-SA-AR-01-041 |
| 1.4 Report Delivery Channels | Rule: PDF generation failure does not block in-app or email delivery | TC-SA-AR-01-042 |
| 1.4 Report Delivery Channels | Rule: a bounced email is recorded and the in-app copy remains available | TC-SA-AR-01-043 |
| 1.4 Report Delivery Channels | Rule: channel assignment changes affect future reports, not already-delivered ones | TC-SA-AR-01-044 |
| 1.4 Report Delivery Channels | Rule: channel configuration changes are audit-logged | TC-SA-AR-01-045 |

### TC-SA-AR-01-001 — Schedule definition: the weekly cadence (day of week, time, timezone)
**Type:** Positive
**Covers:** 1.1 → Schedule definition: the weekly cadence (day of week, time, timezone)
**Preconditions:** A Super Admin account is active; at least one enrolled student exists.
**Steps:**
1. As a Super Admin, open Student Report Automation and select Weekly Progress Report.
2. Set the schedule: day of week, time, and timezone, and save.
3. Observe the result and verify the full behavior: the weekly report is queued on the defined cadence.
**Expected Result:** The weekly cadence (day of week, time, timezone) is applied — the report is scheduled exactly as configured.
**Priority:** Critical

### TC-SA-AR-01-002 — Report content selection: hours studied, videos completed, assessments and scores, streak status, strengths and improvement areas
**Type:** Positive
**Covers:** 1.1 → Report content selection: hours studied, videos completed, assessments taken and scores, streak status, areas of strength and improvement
**Preconditions:** A Super Admin account is active; a student has activity data for the current week.
**Steps:**
1. As a Super Admin, select the content blocks: hours studied, videos completed, assessments and scores, streak status, strengths and improvement areas.
2. Render the preview and save.
3. Observe the result and verify the full behavior: the generated weekly report contains exactly the selected blocks with correct data.
**Expected Result:** The weekly report contains the selected content blocks — hours studied, videos completed, assessments and scores, streak status, and strengths/improvement areas — delivered exactly as documented.
**Priority:** Critical

### TC-SA-AR-01-003 — Audience scoping: which student segments receive the weekly report
**Type:** Positive
**Covers:** 1.1 → Audience scoping: which student segments receive the weekly report (all, by plan, by course, by cohort)
**Preconditions:** A Super Admin account is active; students exist across multiple plans and courses.
**Steps:**
1. As a Super Admin, scope the weekly report to a specific plan segment and save.
2. Trigger/await the scheduled run.
3. Observe the result and verify the full behavior: only students in the scoped segment receive the report.
**Expected Result:** Audience scoping — only the scoped student segment receives the weekly report, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-004 — Enable/disable per segment: the weekly report toggled on or off per audience
**Type:** Positive
**Covers:** 1.1 → Enable/disable per segment: the weekly report toggled on or off per audience
**Preconditions:** A Super Admin account is active; the weekly report is enabled for a segment.
**Steps:**
1. As a Super Admin, disable the weekly report for the segment and save.
2. Await the next scheduled run.
3. Observe the result and verify the full behavior: no weekly report is generated for the disabled segment.
**Expected Result:** The weekly report is toggled off per audience — no report is generated for the disabled segment, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-005 — Preview: a sample weekly report rendered before activation
**Type:** Positive
**Covers:** 1.1 → Preview: a sample weekly report rendered before activation
**Preconditions:** A Super Admin account is active; a sample student with activity data exists.
**Steps:**
1. As a Super Admin, configure the weekly report and click Preview.
2. Observe the result and verify the full behavior: a sample weekly report is rendered with the selected blocks and sample data.
**Expected Result:** A sample weekly report is rendered before activation — the layout and data are visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-AR-01-006 — Rule: the schedule is timezone-aware
**Type:** Positive
**Covers:** 1.1 → Rule: the schedule is timezone-aware; a student in a different timezone receives the report at the configured local-equivalent time
**Preconditions:** A Super Admin account is active; students exist in two different timezones.
**Steps:**
1. As a Super Admin, set the weekly schedule in a specific timezone and save.
2. Await the scheduled run.
3. Observe the result and verify the full behavior: each student receives the report at the configured local-equivalent time for their timezone.
**Expected Result:** The schedule is timezone-aware — students in different timezones receive the report at the correct local-equivalent time, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-007 — Rule: a student with no activity in the week still receives the report with zero/empty values
**Type:** Positive
**Covers:** 1.1 → Rule: a student with no activity in the week still receives the report, showing zero/empty values rather than being skipped
**Preconditions:** A Super Admin account is active; a student in the scoped segment had zero activity last week.
**Steps:**
1. As a Super Admin, confirm the student is in the scoped segment.
2. Await the scheduled run.
3. Observe the result and verify the full behavior: the student receives the weekly report with zero/empty values, not skipped.
**Expected Result:** The inactive student still receives the report — zero/empty values are shown rather than the student being skipped, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-008 — Rule: a report with no content blocks selected is rejected
**Type:** Negative
**Covers:** 1.1 → Rule: content blocks can be toggled individually; a report with no blocks selected is rejected
**Preconditions:** A Super Admin account is active.
**Steps:**
1. As a Super Admin, deselect all content blocks for the weekly report.
2. Attempt to save.
3. Observe the result and verify the full behavior: the save is rejected with a validation message.
**Expected Result:** The report with no content blocks is rejected — the save fails with a validation message, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-009 — Rule: a student in multiple segments receives the report once, not duplicated
**Type:** Positive
**Covers:** 1.1 → Rule: a student in multiple segments receives the report once, not duplicated
**Preconditions:** A Super Admin account is active; a student belongs to two segments both scoped for the weekly report.
**Steps:**
1. As a Super Admin, confirm the student is in both scoped segments.
2. Await the scheduled run.
3. Observe the result and verify the full behavior: the student receives exactly one weekly report.
**Expected Result:** The student in multiple segments receives the report once — no duplication, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-010 — Rule: scheduling changes take effect from the next scheduled run
**Type:** Positive
**Covers:** 1.1 → Rule: scheduling changes take effect from the next scheduled run, not mid-run
**Preconditions:** A Super Admin account is active; a weekly run is in progress.
**Steps:**
1. As a Super Admin, change the schedule mid-run and save.
2. Observe the in-progress run to completion.
3. Observe the result and verify the full behavior: the in-progress run completes under the old schedule; the new schedule applies from the next run.
**Expected Result:** Scheduling changes take effect from the next scheduled run — the in-progress run is unaffected, delivered exactly as documented.
**Priority:** Medium

### TC-SA-AR-01-011 — Rule: scheduling changes are audit-logged
**Type:** Positive
**Covers:** 1.1 → Audit logging of weekly report scheduling
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, change the weekly report schedule and save.
2. Open the audit log.
3. Observe the result and verify the full behavior: the change is recorded with the actor and timestamp.
**Expected Result:** The scheduling change is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-012 — Monthly cadence: the generation day and time
**Type:** Positive
**Covers:** 1.2 → Monthly cadence: the generation day and time (e.g., 1st of the month)
**Preconditions:** A Super Admin account is active.
**Steps:**
1. As a Super Admin, set the monthly generation day and time and save.
2. Await the scheduled generation.
3. Observe the result and verify the full behavior: the monthly batch generation starts on the configured day and time.
**Expected Result:** The monthly cadence is applied — the batch generation runs on the configured day and time, delivered exactly as documented.
**Priority:** Critical

### TC-SA-AR-01-013 — Subject-wise detailed analysis: per-subject performance breakdown
**Type:** Positive
**Covers:** 1.2 → Subject-wise detailed analysis: per-subject performance breakdown
**Preconditions:** A Super Admin account is active; a student has performance data across multiple subjects.
**Steps:**
1. As a Super Admin, include the subject-wise analysis block and trigger generation.
2. Open the generated monthly report.
3. Observe the result and verify the full behavior: the report contains a per-subject performance breakdown with correct figures.
**Expected Result:** The subject-wise detailed analysis is present — the per-subject breakdown is accurate, delivered exactly as documented.
**Priority:** Critical

### TC-SA-AR-01-014 — Month-over-month comparison: performance delta vs. the previous month
**Type:** Positive
**Covers:** 1.2 → Month-over-month comparison: performance delta vs. the previous month
**Preconditions:** A Super Admin account is active; a student has data for two consecutive months.
**Steps:**
1. As a Super Admin, include the comparison block and trigger generation.
2. Open the generated monthly report.
3. Observe the result and verify the full behavior: the report shows the performance delta vs. the previous month.
**Expected Result:** The month-over-month comparison is present — the delta vs. the previous month is shown accurately, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-015 — Goal achievement status: progress against the student's set goals
**Type:** Positive
**Covers:** 1.2 → Goal achievement status: progress against the student's set goals
**Preconditions:** A Super Admin account is active; a student has active goals with partial progress.
**Steps:**
1. As a Super Admin, include the goal achievement block and trigger generation.
2. Open the generated monthly report.
3. Observe the result and verify the full behavior: the report shows progress against each of the student's goals.
**Expected Result:** The goal achievement status is present — progress against the student's set goals is shown, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-016 — Predicted scores: predicted scores for upcoming exams
**Type:** Positive
**Covers:** 1.2 → Predicted scores: predicted scores for upcoming exams
**Preconditions:** A Super Admin account is active; a student has an upcoming exam on their calendar.
**Steps:**
1. As a Super Admin, include the predicted scores block and trigger generation.
2. Open the generated monthly report.
3. Observe the result and verify the full behavior: the report shows predicted scores for the upcoming exam.
**Expected Result:** The predicted scores are present — predicted scores for the upcoming exam are shown, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-017 — Personalized recommendations: AI-generated next-step recommendations
**Type:** Positive
**Covers:** 1.2 → Personalized recommendations: AI-generated next-step recommendations
**Preconditions:** A Super Admin account is active; a student has performance data.
**Steps:**
1. As a Super Admin, include the recommendations block and trigger generation.
2. Open the generated monthly report.
3. Observe the result and verify the full behavior: the report contains AI-generated next-step recommendations relevant to the student's data.
**Expected Result:** The personalized recommendations are present — AI-generated next steps relevant to the student are shown, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-018 — Generation status: the batch generation state (queued, running, complete, failed)
**Type:** Positive
**Covers:** 1.2 → Generation status: the batch generation state (queued, running, complete, failed)
**Preconditions:** A Super Admin account is active; a monthly batch generation is scheduled.
**Steps:**
1. As a Super Admin, open the generation status view.
2. Observe the batch through its lifecycle.
3. Observe the result and verify the full behavior: the status shows queued, running, complete, or failed as appropriate.
**Expected Result:** The generation status is shown — the batch state transitions queued → running → complete (or failed), delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-019 — Rule: a new student's first report shows "no prior data" rather than a false delta
**Type:** Positive
**Covers:** 1.2 → Rule: the month-over-month comparison requires at least one prior month of data; a new student's first report shows "no prior data"
**Preconditions:** A Super Admin account is active; a student enrolled this month has no prior-month data.
**Steps:**
1. As a Super Admin, trigger generation for the new student.
2. Open the generated report.
3. Observe the result and verify the full behavior: the comparison block shows "no prior data" rather than a false delta.
**Expected Result:** The new student's first report shows "no prior data" — no false delta is displayed, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-020 — Rule: predicted scores are only shown when an upcoming exam is on the calendar
**Type:** Positive
**Covers:** 1.2 → Rule: predicted scores are only shown when an upcoming exam is on the student's calendar; otherwise the block is omitted
**Preconditions:** A Super Admin account is active; a student has no upcoming exam on their calendar.
**Steps:**
1. As a Super Admin, trigger generation for the student.
2. Open the generated report.
3. Observe the result and verify the full behavior: the predicted scores block is omitted.
**Expected Result:** The predicted scores block is omitted — no exam on the calendar means no predicted scores shown, delivered exactly as documented.
**Priority:** Medium

### TC-SA-AR-01-021 — Rule: a failed batch is retriable; partial failures do not block the rest of the cohort
**Type:** Negative
**Covers:** 1.2 → Rule: a failed batch is retriable; partial failures do not block the rest of the cohort
**Preconditions:** A Super Admin account is active; a monthly batch is running and one student's generation fails.
**Steps:**
1. As a Super Admin, observe the batch with one failed student.
2. Verify the rest of the cohort completed.
3. Re-run the failed portion.
4. Observe the result and verify the full behavior: the failed student's report is generated on retry; the rest of the cohort was unaffected.
**Expected Result:** The failed batch is retriable — the partial failure does not block the rest of the cohort, delivered exactly as documented.
**Priority:** Critical

### TC-SA-AR-01-022 — Rule: generation is idempotent per period; re-running does not duplicate delivered reports
**Type:** Positive
**Covers:** 1.2 → Rule: generation is idempotent per period; re-running does not duplicate delivered reports
**Preconditions:** A Super Admin account is active; a monthly report was already generated and delivered for the current period.
**Steps:**
1. As a Super Admin, re-run the batch for the same period.
2. Check a student's report inbox.
3. Observe the result and verify the full behavior: no duplicate report is delivered for the period.
**Expected Result:** Generation is idempotent per period — re-running does not duplicate delivered reports, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-023 — Rule: generation configuration changes are audit-logged
**Type:** Positive
**Covers:** 1.2 → Audit logging of monthly report generation
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, change the monthly generation cadence and save.
2. Open the audit log.
3. Observe the result and verify the full behavior: the change is recorded with the actor and timestamp.
**Expected Result:** The generation configuration change is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-024 — Trigger window: the number of days before an exam that triggers the summary
**Type:** Positive
**Covers:** 1.3 → Trigger window: the number of days before an exam that triggers the summary
**Preconditions:** A Super Admin account is active; a student has an exam 7 days away.
**Steps:**
1. As a Super Admin, set the pre-exam trigger window to 7 days and save.
2. Await the exam entering the window.
3. Observe the result and verify the full behavior: the pre-exam summary is generated and delivered when the exam enters the window.
**Expected Result:** The trigger window is applied — the summary fires when the exam enters the configured window, delivered exactly as documented.
**Priority:** Critical

### TC-SA-AR-01-025 — Readiness assessment: an overall exam readiness score
**Type:** Positive
**Covers:** 1.3 → Readiness assessment: an overall exam readiness score
**Preconditions:** A Super Admin account is active; a pre-exam summary has been generated.
**Steps:**
1. As a Super Admin, open a generated pre-exam summary.
2. Observe the result and verify the full behavior: the summary contains an overall exam readiness score.
**Expected Result:** The readiness assessment is present — the overall exam readiness score is shown, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-026 — Urgent revision topics: topics flagged for urgent revision
**Type:** Positive
**Covers:** 1.3 → Urgent revision topics: topics flagged for urgent revision
**Preconditions:** A Super Admin account is active; a student has weak topics; a pre-exam summary has been generated.
**Steps:**
1. As a Super Admin, open the generated pre-exam summary.
2. Observe the result and verify the full behavior: the summary lists topics flagged for urgent revision.
**Expected Result:** The urgent revision topics are present — the flagged topics are listed, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-027 — Recommended study focus: the suggested focus areas
**Type:** Positive
**Covers:** 1.3 → Recommended study focus: the suggested focus areas
**Preconditions:** A Super Admin account is active; a pre-exam summary has been generated.
**Steps:**
1. As a Super Admin, open the generated pre-exam summary.
2. Observe the result and verify the full behavior: the summary shows recommended study focus areas.
**Expected Result:** The recommended study focus is present — the suggested focus areas are shown, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-028 — Confidence score per topic: per-topic confidence estimates
**Type:** Positive
**Covers:** 1.3 → Confidence score per topic: per-topic confidence estimates
**Preconditions:** A Super Admin account is active; a student has assessment data for multiple topics; a pre-exam summary has been generated.
**Steps:**
1. As a Super Admin, open the generated pre-exam summary.
2. Observe the result and verify the full behavior: the summary shows a confidence score per topic.
**Expected Result:** The confidence score per topic is present — per-topic confidence estimates are shown, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-029 — Exam source: exams pulled from the student's exam calendar
**Type:** Positive
**Covers:** 1.3 → Exam source: exams pulled from the student's exam calendar
**Preconditions:** A Super Admin account is active; a student's exam calendar contains an upcoming exam.
**Steps:**
1. As a Super Admin, confirm the exam appears on the student's exam calendar.
2. Await the trigger window.
3. Observe the result and verify the full behavior: the pre-exam summary is generated for the calendar exam.
**Expected Result:** The exam source is the student's exam calendar — the summary is generated for calendar exams, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-030 — Rule: the trigger fires once per exam; it does not re-fire on each day within the window
**Type:** Positive
**Covers:** 1.3 → Rule: the trigger fires once per exam; it does not re-fire on each day within the window
**Preconditions:** A Super Admin account is active; a student's exam is within the trigger window.
**Steps:**
1. As a Super Admin, observe the student's inbox over the remaining days of the window.
2. Observe the result and verify the full behavior: exactly one pre-exam summary is delivered for the exam.
**Expected Result:** The trigger fires once per exam — no re-firing on subsequent days within the window, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-031 — Rule: a student with multiple exams in the window receives one summary per exam
**Type:** Positive
**Covers:** 1.3 → Rule: a student with multiple exams in the window receives one summary per exam
**Preconditions:** A Super Admin account is active; a student has two exams both entering the trigger window.
**Steps:**
1. As a Super Admin, await both exams entering the window.
2. Check the student's inbox.
3. Observe the result and verify the full behavior: the student receives one summary per exam (two total).
**Expected Result:** One summary per exam — the student with multiple exams receives one summary for each, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-032 — Rule: thin-data topics are marked "insufficient data"
**Type:** Positive
**Covers:** 1.3 → Rule: confidence scores are computed only for topics with sufficient assessment data; thin-data topics are marked "insufficient data"
**Preconditions:** A Super Admin account is active; a student has a topic with minimal assessment data; a pre-exam summary has been generated.
**Steps:**
1. As a Super Admin, open the generated pre-exam summary.
2. Locate the thin-data topic.
3. Observe the result and verify the full behavior: the topic is marked "insufficient data" rather than given a false confidence score.
**Expected Result:** The thin-data topic is marked "insufficient data" — no false confidence score is shown, delivered exactly as documented.
**Priority:** Medium

### TC-SA-AR-01-033 — Rule: exams added after the window has passed do not retroactively trigger a summary
**Type:** Negative
**Covers:** 1.3 → Rule: exams added to the calendar after the window has passed do not retroactively trigger a summary
**Preconditions:** A Super Admin account is active; an exam is added to a student's calendar 2 days before the exam (window is 7 days).
**Steps:**
1. As a Super Admin, add the exam to the calendar after the window has passed.
2. Check the student's inbox.
3. Observe the result and verify the full behavior: no pre-exam summary is generated retroactively.
**Expected Result:** No retroactive summary — the late-added exam does not trigger a summary, delivered exactly as documented.
**Priority:** Medium

### TC-SA-AR-01-034 — Rule: trigger configuration changes are audit-logged
**Type:** Positive
**Covers:** 1.3 → Audit logging of pre-exam summary triggers
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, change the pre-exam trigger window and save.
2. Open the audit log.
3. Observe the result and verify the full behavior: the change is recorded with the actor and timestamp.
**Expected Result:** The trigger configuration change is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-035 — Channel enablement: email, in-app, and PDF channels toggled on/off
**Type:** Positive
**Covers:** 1.4 → Channel enablement: email, in-app, and PDF channels toggled on/off
**Preconditions:** A Super Admin account is active.
**Steps:**
1. As a Super Admin, open Report Delivery Channels and toggle email, in-app, and PDF on/off.
2. Save.
3. Observe the result and verify the full behavior: the enabled channels are applied to report delivery.
**Expected Result:** The channel enablement is applied — email, in-app, and PDF channels are toggled as configured, delivered exactly as documented.
**Priority:** Critical

### TC-SA-AR-01-036 — Per-report channel assignment: which channels each report type uses
**Type:** Positive
**Covers:** 1.4 → Per-report channel assignment: which channels each report type uses
**Preconditions:** A Super Admin account is active; all channels are enabled.
**Steps:**
1. As a Super Admin, assign weekly = in-app + email and monthly = PDF + email, and save.
2. Await the scheduled runs.
3. Observe the result and verify the full behavior: each report type is delivered through its assigned channels only.
**Expected Result:** The per-report channel assignment is applied — each report type uses exactly its assigned channels, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-037 — PDF generation: reports rendered as downloadable PDF attachments
**Type:** Positive
**Covers:** 1.4 → PDF generation: reports rendered as downloadable PDF attachments
**Preconditions:** A Super Admin account is active; the PDF channel is enabled for a report type.
**Steps:**
1. As a Super Admin, await a report delivered via the PDF channel.
2. Open the PDF attachment.
3. Observe the result and verify the full behavior: the report is rendered as a valid, downloadable PDF with correct content.
**Expected Result:** The PDF is generated — the report is a valid downloadable PDF with correct content, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-038 — In-app delivery: reports surfaced in the student's in-app report center
**Type:** Positive
**Covers:** 1.4 → In-app delivery: reports surfaced in the student's in-app report center
**Preconditions:** A Super Admin account is active; the in-app channel is enabled for a report type.
**Steps:**
1. As a Super Admin, await a report delivered via the in-app channel.
2. Open the student's in-app report center.
3. Observe the result and verify the full behavior: the report is surfaced in the report center.
**Expected Result:** The in-app delivery works — the report appears in the student's in-app report center, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-039 — Email delivery: reports sent to the student's registered email
**Type:** Positive
**Covers:** 1.4 → Email delivery: reports sent to the student's registered email
**Preconditions:** A Super Admin account is active; the email channel is enabled; the student has a registered email.
**Steps:**
1. As a Super Admin, await a report delivered via the email channel.
2. Check the student's registered email inbox.
3. Observe the result and verify the full behavior: the report email arrives with the correct content/attachment.
**Expected Result:** The email delivery works — the report is sent to the student's registered email, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-040 — Delivery status: per-report delivery state (sent, delivered, failed, bounced)
**Type:** Positive
**Covers:** 1.4 → Delivery status: per-report delivery state (sent, delivered, failed, bounced)
**Preconditions:** A Super Admin account is active; reports have been delivered through multiple channels.
**Steps:**
1. As a Super Admin, open the delivery status view.
2. Observe the result and verify the full behavior: each report shows its delivery state (sent, delivered, failed, or bounced).
**Expected Result:** The delivery status is shown — per-report delivery states are visible, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-041 — Rule: a report with no enabled channel is not delivered and is flagged as misconfigured
**Type:** Negative
**Covers:** 1.4 → Rule: a report with no enabled channel is not delivered and is flagged as misconfigured
**Preconditions:** A Super Admin account is active; a report type has no channels assigned.
**Steps:**
1. As a Super Admin, leave a report type with no enabled channels.
2. Await the scheduled run.
3. Observe the result and verify the full behavior: the report is not delivered and is flagged as misconfigured.
**Expected Result:** The misconfigured report is not delivered — it is flagged as misconfigured, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-042 — Rule: PDF generation failure does not block in-app or email delivery
**Type:** Negative
**Covers:** 1.4 → Rule: PDF generation failure does not block in-app or email delivery of the same report
**Preconditions:** A Super Admin account is active; a report is assigned PDF + in-app + email; PDF generation fails.
**Steps:**
1. As a Super Admin, observe a report whose PDF generation fails.
2. Check the in-app and email delivery for the same report.
3. Observe the result and verify the full behavior: the in-app and email deliveries complete despite the PDF failure.
**Expected Result:** The PDF failure does not block other channels — in-app and email delivery complete, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-043 — Rule: a bounced email is recorded and the in-app copy remains available
**Type:** Negative
**Covers:** 1.4 → Rule: a bounced email is recorded and the in-app copy remains available as a fallback
**Preconditions:** A Super Admin account is active; a student's email bounces; the report is also delivered in-app.
**Steps:**
1. As a Super Admin, observe the bounced email in the delivery status.
2. Open the student's in-app report center.
3. Observe the result and verify the full behavior: the bounce is recorded and the in-app copy is available.
**Expected Result:** The bounced email is recorded — the in-app copy remains available as a fallback, delivered exactly as documented.
**Priority:** High

### TC-SA-AR-01-044 — Rule: channel assignment changes affect future reports, not already-delivered ones
**Type:** Positive
**Covers:** 1.4 → Rule: channel assignment is per report type; changing it affects future reports, not already-delivered ones
**Preconditions:** A Super Admin account is active; a report was already delivered via email.
**Steps:**
1. As a Super Admin, remove email from the report type's channels.
2. Check the already-delivered report and the next scheduled report.
3. Observe the result and verify the full behavior: the already-delivered report is unchanged; the next report omits email.
**Expected Result:** Channel changes affect future reports only — already-delivered reports are unchanged, delivered exactly as documented.
**Priority:** Medium

### TC-SA-AR-01-045 — Rule: channel configuration changes are audit-logged
**Type:** Positive
**Covers:** 1.4 → Audit logging of delivery channel configuration
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, change the delivery channel configuration and save.
2. Open the audit log.
3. Observe the result and verify the full behavior: the change is recorded with the actor and timestamp.
**Expected Result:** The channel configuration change is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High
