# 3. Notification Channels & Preferences — Test Cases

User Type: **Affiliate**
Source: *Mi Digital Academy - Education CRM Features Document*
Spec: notification_channels_preferences.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 |
|---------|--------------------|----------|
| 3.1 | Choose notification channels (in-app, email, push) | TC-AF-9-03-001 |
| 3.1 | Toggle a channel on or off | TC-AF-9-03-002 |
| 3.1 | Notifications delivered on enabled channels only | TC-AF-9-03-003 |
| 3.1 | Default channel settings | TC-AF-9-03-004 |
| 3.1 | Channel preferences saved | TC-AF-9-03-005 |
| 3.1 | Preferences available on web and mobile | TC-AF-9-03-006 |
| 3.1 | Preferences event logging (changed) | TC-AF-9-03-007 |
| 3.1 | Audit logging of the notification channel preferences | TC-AF-9-03-008 |
| 3.1 | Rule: The channels are in-app, email, and push. | TC-AF-9-03-001 |
| 3.1 | Rule: The notifications are delivered on enabled channels only. | TC-AF-9-03-002 |
| 3.1 | Rule: Preferences events (changed) are logged with the account and the timestamp. | TC-AF-9-03-003 |
| 3.1 | Rule: The notification channel preferences is audit-logged with the account and the timestamp. | TC-AF-9-03-004 |
| 3.2 | Choose notification categories | TC-AF-9-03-009 |
| 3.2 | Toggle a category on or off | TC-AF-9-03-010 |
| 3.2 | Only enabled categories are sent | TC-AF-9-03-011 |
| 3.2 | Critical categories always on | TC-AF-9-03-012 |
| 3.2 | Category preferences saved | TC-AF-9-03-013 |
| 3.2 | Preferences available on web and mobile | TC-AF-9-03-014 |
| 3.2 | Preferences event logging (changed) | TC-AF-9-03-015 |
| 3.2 | Audit logging of the notification category preferences | TC-AF-9-03-016 |
| 3.2 | Rule: The categories are commission, payout, referral, campaign, and milestone. | TC-AF-9-03-009 |
| 3.2 | Rule: The critical categories are always on. | TC-AF-9-03-010 |
| 3.2 | Rule: Preferences events (changed) are logged with the account and the timestamp. | TC-AF-9-03-011 |
| 3.2 | Rule: The notification category preferences is audit-logged with the account and the timestamp. | TC-AF-9-03-012 |
| 3.3 | Choose real-time or daily digest | TC-AF-9-03-017 |
| 3.3 | Set the digest frequency | TC-AF-9-03-018 |
| 3.3 | Set a quiet hours window | TC-AF-9-03-019 |
| 3.3 | Non-critical notifications batched in the digest | TC-AF-9-03-020 |
| 3.3 | Critical notifications always real-time | TC-AF-9-03-021 |
| 3.3 | Timing available on web and mobile | TC-AF-9-03-022 |
| 3.3 | Timing event logging (changed) | TC-AF-9-03-023 |
| 3.3 | Audit logging of the notification timing and digest | TC-AF-9-03-024 |
| 3.3 | Rule: The non-critical notifications are batched in the digest. | TC-AF-9-03-017 |
| 3.3 | Rule: The critical notifications are always real-time. | TC-AF-9-03-018 |
| 3.3 | Rule: Timing events (changed) are logged with the account and the timestamp. | TC-AF-9-03-019 |
| 3.3 | Rule: The notification timing and digest is audit-logged with the account and the timestamp. | TC-AF-9-03-020 |

## 3.1 Notification Channel Preferences

### TC-AF-9-03-001 — Choose notification channels (in-app, email, push)
**Type:** Positive
**Covers:** 3.1 → Choose notification channels (in-app, email, push); Rule: The channels are in-app, email, and push.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Choose notification channels (in-app, email, push).
2. Observe the result and verify the full behavior: Choose notification channels (in-app, email, push).
**Expected Result:** Choose notification channels (in-app, email, push) — delivered exactly as documented.
**Priority:** Critical

### TC-AF-9-03-002 — Toggle a channel on or off
**Type:** Positive
**Covers:** 3.1 → Toggle a channel on or off; Rule: The notifications are delivered on enabled channels only.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Toggle a channel on or off.
2. Observe the result and verify the full behavior: Toggle a channel on or off.
**Expected Result:** Toggle a channel on or off — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-003 — Notifications delivered on enabled channels only
**Type:** Positive
**Covers:** 3.1 → Notifications delivered on enabled channels only; Rule: Preferences events (changed) are logged with the account and the timestamp.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Notifications delivered on enabled channels only.
2. Observe the result and verify the full behavior: Notifications delivered on enabled channels only.
**Expected Result:** Notifications delivered on enabled channels only — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-004 — Default channel settings
**Type:** Positive
**Covers:** 3.1 → Default channel settings; Rule: The notification channel preferences is audit-logged with the account and the timestamp.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Default channel settings.
2. Observe the result and verify the full behavior: Default channel settings.
**Expected Result:** Default channel settings — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-005 — Channel preferences saved
**Type:** Positive
**Covers:** 3.1 → Channel preferences saved
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Channel preferences saved.
2. Observe the result and verify the full behavior: Channel preferences saved.
**Expected Result:** Channel preferences saved — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-006 — Preferences available on web and mobile
**Type:** Positive
**Covers:** 3.1 → Preferences available on web and mobile
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Preferences available on web and mobile.
2. Observe the result and verify the full behavior: Preferences available on web and mobile.
**Expected Result:** Preferences available on web and mobile — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-007 — Preferences event logging (changed)
**Type:** Positive
**Covers:** 3.1 → Preferences event logging (changed)
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Preferences event logging (changed).
2. Observe the result and verify the full behavior: Preferences event logging (changed).
**Expected Result:** Preferences event logging (changed) — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-008 — Audit logging of the notification channel preferences
**Type:** Positive
**Covers:** 3.1 → Audit logging of the notification channel preferences
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, perform the notification channel preferences action.
2. Open the audit log and verify the entry for the action.
**Expected Result:** The notification channel preferences action is recorded in the audit log with the account and the timestamp.
**Priority:** Critical


## 3.2 Notification Category Preferences

### TC-AF-9-03-009 — Choose notification categories
**Type:** Positive
**Covers:** 3.2 → Choose notification categories; Rule: The categories are commission, payout, referral, campaign, and milestone.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Choose notification categories.
2. Observe the result and verify the full behavior: Choose notification categories.
**Expected Result:** Choose notification categories — delivered exactly as documented.
**Priority:** Critical

### TC-AF-9-03-010 — Toggle a category on or off
**Type:** Positive
**Covers:** 3.2 → Toggle a category on or off; Rule: The critical categories are always on.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Toggle a category on or off.
2. Observe the result and verify the full behavior: Toggle a category on or off.
**Expected Result:** Toggle a category on or off — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-011 — Only enabled categories are sent
**Type:** Positive
**Covers:** 3.2 → Only enabled categories are sent; Rule: Preferences events (changed) are logged with the account and the timestamp.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Only enabled categories are sent.
2. Observe the result and verify the full behavior: Only enabled categories are sent.
**Expected Result:** Only enabled categories are sent — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-012 — Critical categories always on
**Type:** Positive
**Covers:** 3.2 → Critical categories always on; Rule: The notification category preferences is audit-logged with the account and the timestamp.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Critical categories always on.
2. Observe the result and verify the full behavior: Critical categories always on.
**Expected Result:** Critical categories always on — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-013 — Category preferences saved
**Type:** Positive
**Covers:** 3.2 → Category preferences saved
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Category preferences saved.
2. Observe the result and verify the full behavior: Category preferences saved.
**Expected Result:** Category preferences saved — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-014 — Preferences available on web and mobile
**Type:** Positive
**Covers:** 3.2 → Preferences available on web and mobile
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Preferences available on web and mobile.
2. Observe the result and verify the full behavior: Preferences available on web and mobile.
**Expected Result:** Preferences available on web and mobile — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-015 — Preferences event logging (changed)
**Type:** Positive
**Covers:** 3.2 → Preferences event logging (changed)
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Preferences event logging (changed).
2. Observe the result and verify the full behavior: Preferences event logging (changed).
**Expected Result:** Preferences event logging (changed) — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-016 — Audit logging of the notification category preferences
**Type:** Positive
**Covers:** 3.2 → Audit logging of the notification category preferences
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, perform the notification category preferences action.
2. Open the audit log and verify the entry for the action.
**Expected Result:** The notification category preferences action is recorded in the audit log with the account and the timestamp.
**Priority:** Critical


## 3.3 Notification Timing & Digest

### TC-AF-9-03-017 — Choose real-time or daily digest
**Type:** Positive
**Covers:** 3.3 → Choose real-time or daily digest; Rule: The non-critical notifications are batched in the digest.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Choose real-time or daily digest.
2. Observe the result and verify the full behavior: Choose real-time or daily digest.
**Expected Result:** Choose real-time or daily digest — delivered exactly as documented.
**Priority:** Critical

### TC-AF-9-03-018 — Set the digest frequency
**Type:** Positive
**Covers:** 3.3 → Set the digest frequency; Rule: The critical notifications are always real-time.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Set the digest frequency.
2. Observe the result and verify the full behavior: Set the digest frequency.
**Expected Result:** Set the digest frequency — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-019 — Set a quiet hours window
**Type:** Positive
**Covers:** 3.3 → Set a quiet hours window; Rule: Timing events (changed) are logged with the account and the timestamp.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Set a quiet hours window.
2. Observe the result and verify the full behavior: Set a quiet hours window.
**Expected Result:** Set a quiet hours window — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-020 — Non-critical notifications batched in the digest
**Type:** Positive
**Covers:** 3.3 → Non-critical notifications batched in the digest; Rule: The notification timing and digest is audit-logged with the account and the timestamp.
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Non-critical notifications batched in the digest.
2. Observe the result and verify the full behavior: Non-critical notifications batched in the digest.
**Expected Result:** Non-critical notifications batched in the digest — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-021 — Critical notifications always real-time
**Type:** Positive
**Covers:** 3.3 → Critical notifications always real-time
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Critical notifications always real-time.
2. Observe the result and verify the full behavior: Critical notifications always real-time.
**Expected Result:** Critical notifications always real-time — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-022 — Timing available on web and mobile
**Type:** Positive
**Covers:** 3.3 → Timing available on web and mobile
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Timing available on web and mobile.
2. Observe the result and verify the full behavior: Timing available on web and mobile.
**Expected Result:** Timing available on web and mobile — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-023 — Timing event logging (changed)
**Type:** Positive
**Covers:** 3.3 → Timing event logging (changed)
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, set up the precondition and perform: Timing event logging (changed).
2. Observe the result and verify the full behavior: Timing event logging (changed).
**Expected Result:** Timing event logging (changed) — delivered exactly as documented.
**Priority:** High

### TC-AF-9-03-024 — Audit logging of the notification timing and digest
**Type:** Positive
**Covers:** 3.3 → Audit logging of the notification timing and digest
**Preconditions:** A Affiliate account is active and the Affiliate is in the state required for this behavior.
**Steps:**
1. As a Affiliate, perform the notification timing and digest action.
2. Open the audit log and verify the entry for the action.
**Expected Result:** The notification timing and digest action is recorded in the audit log with the account and the timestamp.
**Priority:** Critical
