# 4. Notification Preferences — Test Cases

User Type: **Student**
Source: *Mi Digital Academy - Education CRM Features Document*
Spec: notification_preferences.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 |
|---------|--------------------|----------|
| 4.1 Notification Channel Preferences | Toggle channels: in-app, email, SMS, push (per channel) | TC-ST-02-04-001 |
| 4.1 Notification Channel Preferences | Per-category channel selection (learning, assessment, subscription, promotional) | TC-ST-02-04-002 |
| 4.1 Notification Channel Preferences | "All on" / "All off" quick actions per category | TC-ST-02-04-003 |
| 4.1 Notification Channel Preferences | Preference applies to new notifications from the point of change | TC-ST-02-04-004 |
| 4.1 Notification Channel Preferences | Channel availability shown (e.g., SMS only if a phone is verified) | TC-ST-02-04-005 |
| 4.1 Notification Channel Preferences | Preference visibility in the profile summary | TC-ST-02-04-006 |
| 4.1 Notification Channel Preferences | Preference change event logging | TC-ST-02-04-007 |
| 4.1 Notification Channel Preferences | Audit logging of the notification channel preferences | TC-ST-02-04-008 |
| 4.1 Notification Channel Preferences | Rule: A channel can only be enabled if it is available (e.g., SMS requires a verified phone; push requires the app installed). | TC-ST-02-04-001 |
| 4.1 Notification Channel Preferences | Rule: At least one channel should remain on for critical categories (assessment results, subscription); the platform warns if the Student turns all off. | TC-ST-02-04-002 |
| 4.1 Notification Channel Preferences | Rule: A preference change applies to new notifications from the point of change; already-sent notifications are unaffected. | TC-ST-02-04-003 |
| 4.1 Notification Channel Preferences | Rule: The preferences are visible in the profile summary. | TC-ST-02-04-004 |
| 4.1 Notification Channel Preferences | Rule: Preference changes are logged with the old and new values and the timestamp. | TC-ST-02-04-005 |
| 4.1 Notification Channel Preferences | Rule: The notification channel preferences are audit-logged with the account, the values, and the timestamp. | TC-ST-02-04-006 |
| 4.2 Notification Category Preferences | Enable/disable categories: learning, assessment, progress, subscription, promotional, social | TC-ST-02-04-009 |
| 4.2 Notification Category Preferences | Disabling a category stops all its notifications across all channels | TC-ST-02-04-010 |
| 4.2 Notification Category Preferences | Critical categories (assessment results, subscription) cannot be fully disabled | TC-ST-02-04-011 |
| 4.2 Notification Category Preferences | Per-category "quiet hours" (no non-critical notifications in a time window) | TC-ST-02-04-012 |
| 4.2 Notification Category Preferences | Preference applies to new notifications from the point of change | TC-ST-02-04-013 |
| 4.2 Notification Category Preferences | Category visibility in the profile summary | TC-ST-02-04-014 |
| 4.2 Notification Category Preferences | Preference change event logging | TC-ST-02-04-015 |
| 4.2 Notification Category Preferences | Audit logging of the notification category preferences | TC-ST-02-04-016 |
| 4.2 Notification Category Preferences | Rule: Disabling a category stops all its notifications across all channels. | TC-ST-02-04-009 |
| 4.2 Notification Category Preferences | Rule: Critical categories (assessment results, subscription & billing) cannot be fully disabled; only quiet hours apply. | TC-ST-02-04-010 |
| 4.2 Notification Category Preferences | Rule: Quiet hours suppress non-critical notifications within the window; critical notifications still deliver. | TC-ST-02-04-011 |
| 4.2 Notification Category Preferences | Rule: A preference change applies to new notifications from the point of change. | TC-ST-02-04-012 |
| 4.2 Notification Category Preferences | Rule: The category preferences are visible in the profile summary. | TC-ST-02-04-013 |
| 4.2 Notification Category Preferences | Rule: Preference changes are logged with the old and new values and the timestamp. | TC-ST-02-04-014 |
| 4.2 Notification Category Preferences | Rule: The notification category preferences are audit-logged with the account, the values, and the timestamp. | TC-ST-02-04-015 |
| 4.3 Digest and Reminder Scheduling | Choose digest frequency: daily, weekly, or off | TC-ST-02-04-017 |
| 4.3 Digest and Reminder Scheduling | Digest bundles non-critical notifications (progress, recommendations, social) | TC-ST-02-04-018 |
| 4.3 Digest and Reminder Scheduling | Schedule a daily study reminder at a preferred time | TC-ST-02-04-019 |
| 4.3 Digest and Reminder Scheduling | Reminder respects quiet hours and the study time preference | TC-ST-02-04-020 |
| 4.3 Digest and Reminder Scheduling | Change digest frequency or reminder time at any time | TC-ST-02-04-021 |
| 4.3 Digest and Reminder Scheduling | Preference applies to new digests and reminders from the point of change | TC-ST-02-04-022 |
| 4.3 Digest and Reminder Scheduling | Preference visibility in the profile summary | TC-ST-02-04-023 |
| 4.3 Digest and Reminder Scheduling | Preference change event logging | TC-ST-02-04-024 |
| 4.3 Digest and Reminder Scheduling | Audit logging of the digest and reminder scheduling | TC-ST-02-04-025 |
| 4.3 Digest and Reminder Scheduling | Rule: The digest frequency is one of: daily, weekly, or off. | TC-ST-02-04-017 |
| 4.3 Digest and Reminder Scheduling | Rule: The digest bundles only non-critical notifications; critical ones are always delivered immediately. | TC-ST-02-04-018 |
| 4.3 Digest and Reminder Scheduling | Rule: The study reminder respects quiet hours and the Student's study time preference. | TC-ST-02-04-019 |
| 4.3 Digest and Reminder Scheduling | Rule: A preference change applies to new digests and reminders from the point of change. | TC-ST-02-04-020 |
| 4.3 Digest and Reminder Scheduling | Rule: The preferences are visible in the profile summary. | TC-ST-02-04-021 |
| 4.3 Digest and Reminder Scheduling | Rule: Preference changes are logged with the old and new values and the timestamp. | TC-ST-02-04-022 |
| 4.3 Digest and Reminder Scheduling | Rule: The digest and reminder scheduling is audit-logged with the account, the values, and the timestamp. | TC-ST-02-04-023 |

## 4.1 Notification Channel Preferences

### TC-ST-02-04-001 — Toggle channels: in-app, email, SMS, push (per channel)
**Type:** Positive
**Covers:** 4.1 → Toggle channels: in-app, email, SMS, push (per channel); Rule: A channel can only be enabled if it is available (e.g., SMS requires a verified phone; push requires the app installed).
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Toggle channels: in-app.
2. Observe the result and verify the full behavior: Toggle channels: in-app, email, SMS, push (per channel).
**Expected Result:** Toggle channels: in-app, email, SMS, push (per channel) — delivered exactly as documented.
**Priority:** Critical

### TC-ST-02-04-002 — Per-category channel selection (learning, assessment, subscription, promotional)
**Type:** Positive
**Covers:** 4.1 → Per-category channel selection (learning, assessment, subscription, promotional); Rule: At least one channel should remain on for critical categories (assessment results, subscription); the platform warns if the Student turns all off.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Per-category channel selection (learning.
2. Observe the result and verify the full behavior: Per-category channel selection (learning, assessment, subscription, promotional).
**Expected Result:** Per-category channel selection (learning, assessment, subscription, promotional) — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-003 — "All on" / "All off" quick actions per category
**Type:** Positive
**Covers:** 4.1 → "All on" / "All off" quick actions per category; Rule: A preference change applies to new notifications from the point of change; already-sent notifications are unaffected.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: "All on" / "All off" quick actions per category.
2. Observe the result and verify the full behavior: "All on" / "All off" quick actions per category.
**Expected Result:** "All on" / "All off" quick actions per category — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-004 — Preference applies to new notifications from the point of change
**Type:** Positive
**Covers:** 4.1 → Preference applies to new notifications from the point of change; Rule: The preferences are visible in the profile summary.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Preference applies to new notifications from the point of change.
2. Observe the result and verify the full behavior: Preference applies to new notifications from the point of change.
**Expected Result:** Preference applies to new notifications from the point of change — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-005 — Channel availability shown (e.g., SMS only if a phone is verified)
**Type:** Positive
**Covers:** 4.1 → Channel availability shown (e.g., SMS only if a phone is verified); Rule: Preference changes are logged with the old and new values and the timestamp.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Channel availability shown (e.g..
2. Observe the result and verify the full behavior: Channel availability shown (e.g., SMS only if a phone is verified).
**Expected Result:** Channel availability shown (e.g., SMS only if a phone is verified) — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-006 — Preference visibility in the profile summary
**Type:** Positive
**Covers:** 4.1 → Preference visibility in the profile summary; Rule: The notification channel preferences are audit-logged with the account, the values, and the timestamp.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Preference visibility in the profile summary.
2. Observe the result and verify the full behavior: Preference visibility in the profile summary.
**Expected Result:** Preference visibility in the profile summary — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-007 — Preference change event logging
**Type:** Positive
**Covers:** 4.1 → Preference change event logging
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Preference change event logging.
2. Observe the result and verify the full behavior: Preference change event logging.
**Expected Result:** Preference change event logging — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-008 — Audit logging of the notification channel preferences
**Type:** Positive
**Covers:** 4.1 → Audit logging of the notification channel preferences
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, perform the action associated with: Audit logging of the notification channel preferences.
2. Open the relevant activity / audit log and verify the event is recorded with the account, the action, and the timestamp.
**Expected Result:** The action is audit-logged — the account, the action, and the timestamp are recorded.
**Priority:** Critical

## 4.2 Notification Category Preferences

### TC-ST-02-04-009 — Enable/disable categories: learning, assessment, progress, subscription, promotional, social
**Type:** Positive
**Covers:** 4.2 → Enable/disable categories: learning, assessment, progress, subscription, promotional, social; Rule: Disabling a category stops all its notifications across all channels.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Enable/disable categories: learning.
2. Observe the result and verify the full behavior: Enable/disable categories: learning, assessment, progress, subscription, promotional, social.
**Expected Result:** Enable/disable categories: learning, assessment, progress, subscription, promotional, social — delivered exactly as documented.
**Priority:** Critical

### TC-ST-02-04-010 — Disabling a category stops all its notifications across all channels
**Type:** Positive
**Covers:** 4.2 → Disabling a category stops all its notifications across all channels; Rule: Critical categories (assessment results, subscription & billing) cannot be fully disabled; only quiet hours apply.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Disabling a category stops all its notifications across all channels.
2. Observe the result and verify the full behavior: Disabling a category stops all its notifications across all channels.
**Expected Result:** Disabling a category stops all its notifications across all channels — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-011 — Critical categories (assessment results, subscription) cannot be fully disabled
**Type:** Positive
**Covers:** 4.2 → Critical categories (assessment results, subscription) cannot be fully disabled; Rule: Quiet hours suppress non-critical notifications within the window; critical notifications still deliver.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Critical categories (assessment results.
2. Observe the result and verify the full behavior: Critical categories (assessment results, subscription) cannot be fully disabled.
**Expected Result:** Critical categories (assessment results, subscription) cannot be fully disabled — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-012 — Per-category "quiet hours" (no non-critical notifications in a time window)
**Type:** Positive
**Covers:** 4.2 → Per-category "quiet hours" (no non-critical notifications in a time window); Rule: A preference change applies to new notifications from the point of change.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Per-category "quiet hours" (no non-critical notifications in a time window).
2. Observe the result and verify the full behavior: Per-category "quiet hours" (no non-critical notifications in a time window).
**Expected Result:** Per-category "quiet hours" (no non-critical notifications in a time window) — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-013 — Preference applies to new notifications from the point of change
**Type:** Positive
**Covers:** 4.2 → Preference applies to new notifications from the point of change; Rule: The category preferences are visible in the profile summary.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Preference applies to new notifications from the point of change.
2. Observe the result and verify the full behavior: Preference applies to new notifications from the point of change.
**Expected Result:** Preference applies to new notifications from the point of change — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-014 — Category visibility in the profile summary
**Type:** Positive
**Covers:** 4.2 → Category visibility in the profile summary; Rule: Preference changes are logged with the old and new values and the timestamp.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Category visibility in the profile summary.
2. Observe the result and verify the full behavior: Category visibility in the profile summary.
**Expected Result:** Category visibility in the profile summary — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-015 — Preference change event logging
**Type:** Positive
**Covers:** 4.2 → Preference change event logging; Rule: The notification category preferences are audit-logged with the account, the values, and the timestamp.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Preference change event logging.
2. Observe the result and verify the full behavior: Preference change event logging.
**Expected Result:** Preference change event logging — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-016 — Audit logging of the notification category preferences
**Type:** Positive
**Covers:** 4.2 → Audit logging of the notification category preferences
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, perform the action associated with: Audit logging of the notification category preferences.
2. Open the relevant activity / audit log and verify the event is recorded with the account, the action, and the timestamp.
**Expected Result:** The action is audit-logged — the account, the action, and the timestamp are recorded.
**Priority:** Critical

## 4.3 Digest and Reminder Scheduling

### TC-ST-02-04-017 — Choose digest frequency: daily, weekly, or off
**Type:** Positive
**Covers:** 4.3 → Choose digest frequency: daily, weekly, or off; Rule: The digest frequency is one of: daily, weekly, or off.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Choose digest frequency: daily.
2. Observe the result and verify the full behavior: Choose digest frequency: daily, weekly, or off.
**Expected Result:** Choose digest frequency: daily, weekly, or off — delivered exactly as documented.
**Priority:** Critical

### TC-ST-02-04-018 — Digest bundles non-critical notifications (progress, recommendations, social)
**Type:** Positive
**Covers:** 4.3 → Digest bundles non-critical notifications (progress, recommendations, social); Rule: The digest bundles only non-critical notifications; critical ones are always delivered immediately.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Digest bundles non-critical notifications (progress.
2. Observe the result and verify the full behavior: Digest bundles non-critical notifications (progress, recommendations, social).
**Expected Result:** Digest bundles non-critical notifications (progress, recommendations, social) — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-019 — Schedule a daily study reminder at a preferred time
**Type:** Positive
**Covers:** 4.3 → Schedule a daily study reminder at a preferred time; Rule: The study reminder respects quiet hours and the Student's study time preference.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Schedule a daily study reminder at a preferred time.
2. Observe the result and verify the full behavior: Schedule a daily study reminder at a preferred time.
**Expected Result:** Schedule a daily study reminder at a preferred time — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-020 — Reminder respects quiet hours and the study time preference
**Type:** Positive
**Covers:** 4.3 → Reminder respects quiet hours and the study time preference; Rule: A preference change applies to new digests and reminders from the point of change.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Reminder respects quiet hours and the study time preference.
2. Observe the result and verify the full behavior: Reminder respects quiet hours and the study time preference.
**Expected Result:** Reminder respects quiet hours and the study time preference — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-021 — Change digest frequency or reminder time at any time
**Type:** Positive
**Covers:** 4.3 → Change digest frequency or reminder time at any time; Rule: The preferences are visible in the profile summary.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Change digest frequency or reminder time at any time.
2. Observe the result and verify the full behavior: Change digest frequency or reminder time at any time.
**Expected Result:** Change digest frequency or reminder time at any time — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-022 — Preference applies to new digests and reminders from the point of change
**Type:** Positive
**Covers:** 4.3 → Preference applies to new digests and reminders from the point of change; Rule: Preference changes are logged with the old and new values and the timestamp.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Preference applies to new digests and reminders from the point of change.
2. Observe the result and verify the full behavior: Preference applies to new digests and reminders from the point of change.
**Expected Result:** Preference applies to new digests and reminders from the point of change — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-023 — Preference visibility in the profile summary
**Type:** Positive
**Covers:** 4.3 → Preference visibility in the profile summary; Rule: The digest and reminder scheduling is audit-logged with the account, the values, and the timestamp.
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Preference visibility in the profile summary.
2. Observe the result and verify the full behavior: Preference visibility in the profile summary.
**Expected Result:** Preference visibility in the profile summary — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-024 — Preference change event logging
**Type:** Positive
**Covers:** 4.3 → Preference change event logging
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, set up the precondition and perform: Preference change event logging.
2. Observe the result and verify the full behavior: Preference change event logging.
**Expected Result:** Preference change event logging — delivered exactly as documented.
**Priority:** High

### TC-ST-02-04-025 — Audit logging of the digest and reminder scheduling
**Type:** Positive
**Covers:** 4.3 → Audit logging of the digest and reminder scheduling
**Preconditions:** A Student account is active and the Student is in the state required for this behavior.
**Steps:**
1. As a Student, perform the action associated with: Audit logging of the digest and reminder scheduling.
2. Open the relevant activity / audit log and verify the event is recorded with the account, the action, and the timestamp.
**Expected Result:** The action is audit-logged — the account, the action, and the timestamp are recorded.
**Priority:** Critical
