# 3. Podcast Player — Test Cases

User Type: **Student**
Source: *Mi Digital Academy - Education CRM Features Document*
Spec: podcast_player.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 |
|---------|--------------------|----------|
| 3.1 Audio Playback | Play/pause control for audio | TC-ST-03-03-001 |
| 3.1 Audio Playback | Seek bar with current time and total duration | TC-ST-03-03-002 |
| 3.1 Audio Playback | Playback speed selection (0.5x, 1x, 1.5x, 2x) | TC-ST-03-03-003 |
| 3.1 Audio Playback | Volume control and mute | TC-ST-03-03-004 |
| 3.1 Audio Playback | Playback position saved for resume | TC-ST-03-03-005 |
| 3.1 Audio Playback | Episode completion tracking | TC-ST-03-03-006 |
| 3.1 Audio Playback | Background playback on the mobile app | TC-ST-03-03-007 |
| 3.1 Audio Playback | Audio transcript view where available | TC-ST-03-03-008 |
| 3.1 Audio Playback | Playback event logging (start, pause, complete) | TC-ST-03-03-009 |
| 3.1 Audio Playback | Audit logging of the audio playback | TC-ST-03-03-010 |
| 3.1 Audio Playback | Rule: The playback position is saved per episode; resume returns to the saved position. | TC-ST-03-03-001 |
| 3.1 Audio Playback | Rule: Background playback is available on the mobile app; on the web, playback pauses when the tab is hidden. | TC-ST-03-03-002 |
| 3.1 Audio Playback | Rule: A transcript is shown only where provided for the episode. | TC-ST-03-03-003 |
| 3.1 Audio Playback | Rule: An episode is marked complete when listened to the end (or past a completion threshold). | TC-ST-03-03-004 |
| 3.1 Audio Playback | Rule: Playback events (start, pause, complete) are logged with the episode and the timestamp. | TC-ST-03-03-005 |
| 3.1 Audio Playback | Rule: The audio playback is audit-logged with the account, the episode, and the timestamp. | TC-ST-03-03-006 |
| 3.2 Podcast Download for Offline | Download an episode for offline listening | TC-ST-03-03-011 |
| 3.2 Podcast Download for Offline | Download progress indicator | TC-ST-03-03-012 |
| 3.2 Podcast Download for Offline | Offline library listing downloaded episodes | TC-ST-03-03-013 |
| 3.2 Podcast Download for Offline | Play a downloaded episode without a connection | TC-ST-03-03-014 |
| 3.2 Podcast Download for Offline | Delete a downloaded episode to free space | TC-ST-03-03-015 |
| 3.2 Podcast Download for Offline | Storage usage indicator | TC-ST-03-03-016 |
| 3.2 Podcast Download for Offline | Download gated by subscription | TC-ST-03-03-017 |
| 3.2 Podcast Download for Offline | Download event logging (started, completed, deleted) | TC-ST-03-03-018 |
| 3.2 Podcast Download for Offline | Audit logging of the podcast download | TC-ST-03-03-019 |
| 3.2 Podcast Download for Offline | Rule: Downloads require an active subscription; without it, the download button is disabled with a prompt. | TC-ST-03-03-011 |
| 3.2 Podcast Download for Offline | Rule: A download completes before the episode can be played offline. | TC-ST-03-03-012 |
| 3.2 Podcast Download for Offline | Rule: Deleting a downloaded episode removes it from the device but not from the course. | TC-ST-03-03-013 |
| 3.2 Podcast Download for Offline | Rule: Storage usage is shown; the Student is warned when approaching the device limit. | TC-ST-03-03-014 |
| 3.2 Podcast Download for Offline | Rule: Download events (started, completed, deleted) are logged with the episode and the timestamp. | TC-ST-03-03-015 |
| 3.2 Podcast Download for Offline | Rule: The podcast download is audit-logged with the account, the episode, and the timestamp. | TC-ST-03-03-016 |
| 3.3 Audio Progress Tracking | Per-episode status: not started, in progress, complete | TC-ST-03-03-020 |
| 3.3 Audio Progress Tracking | Course progress contribution from completed episodes | TC-ST-03-03-021 |
| 3.3 Audio Progress Tracking | "Continue learning" shows the next incomplete episode | TC-ST-03-03-022 |
| 3.3 Audio Progress Tracking | Progress visible on the course page and dashboard | TC-ST-03-03-023 |
| 3.3 Audio Progress Tracking | Completion feeds the analytics and progress modules | TC-ST-03-03-024 |
| 3.3 Audio Progress Tracking | Re-listen to a completed episode without losing completion status | TC-ST-03-03-025 |
| 3.3 Audio Progress Tracking | Progress sync across web and mobile | TC-ST-03-03-026 |
| 3.3 Audio Progress Tracking | Progress event logging | TC-ST-03-03-027 |
| 3.3 Audio Progress Tracking | Audit logging of the audio progress tracking | TC-ST-03-03-028 |
| 3.3 Audio Progress Tracking | Rule: An episode's status is one of: not started, in progress, complete. | TC-ST-03-03-020 |
| 3.3 Audio Progress Tracking | Rule: Course progress includes completed audio episodes alongside videos. | TC-ST-03-03-021 |
| 3.3 Audio Progress Tracking | Rule: Re-listening a completed episode does not revert its status. | TC-ST-03-03-022 |
| 3.3 Audio Progress Tracking | Rule: Progress is synchronized across web and mobile. | TC-ST-03-03-023 |
| 3.3 Audio Progress Tracking | Rule: Completion feeds the analytics and progress modules. | TC-ST-03-03-024 |
| 3.3 Audio Progress Tracking | Rule: Progress events are logged with the episode, the status change, and the timestamp. | TC-ST-03-03-025 |
| 3.3 Audio Progress Tracking | Rule: The audio progress tracking is audit-logged with the account, the episode, and the timestamp. | TC-ST-03-03-026 |

## 3.1 Audio Playback

### TC-ST-03-03-001 — Play/pause control for audio
**Type:** Positive
**Covers:** 3.1 → Play/pause control for audio; Rule: The playback position is saved per episode; resume returns to the saved position.
**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: Play/pause control for audio.
2. Observe the result and verify the full behavior: Play/pause control for audio.
**Expected Result:** Play/pause control for audio — delivered exactly as documented.
**Priority:** Critical

### TC-ST-03-03-002 — Seek bar with current time and total duration
**Type:** Positive
**Covers:** 3.1 → Seek bar with current time and total duration; Rule: Background playback is available on the mobile app; on the web, playback pauses when the tab is hidden.
**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: Seek bar with current time and total duration.
2. Observe the result and verify the full behavior: Seek bar with current time and total duration.
**Expected Result:** Seek bar with current time and total duration — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-003 — Playback speed selection (0.5x, 1x, 1.5x, 2x)
**Type:** Positive
**Covers:** 3.1 → Playback speed selection (0.5x, 1x, 1.5x, 2x); Rule: A transcript is shown only where provided for the episode.
**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: Playback speed selection (0.5x.
2. Observe the result and verify the full behavior: Playback speed selection (0.5x, 1x, 1.5x, 2x).
**Expected Result:** Playback speed selection (0.5x, 1x, 1.5x, 2x) — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-004 — Volume control and mute
**Type:** Positive
**Covers:** 3.1 → Volume control and mute; Rule: An episode is marked complete when listened to the end (or past a completion threshold).
**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: Volume control and mute.
2. Observe the result and verify the full behavior: Volume control and mute.
**Expected Result:** Volume control and mute — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-005 — Playback position saved for resume
**Type:** Positive
**Covers:** 3.1 → Playback position saved for resume; Rule: Playback events (start, pause, complete) are logged with the episode 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: Playback position saved for resume.
2. Observe the result and verify the full behavior: Playback position saved for resume.
**Expected Result:** Playback position saved for resume — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-006 — Episode completion tracking
**Type:** Positive
**Covers:** 3.1 → Episode completion tracking; Rule: The audio playback is audit-logged with the account, the episode, 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: Episode completion tracking.
2. Observe the result and verify the full behavior: Episode completion tracking.
**Expected Result:** Episode completion tracking — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-007 — Background playback on the mobile app
**Type:** Positive
**Covers:** 3.1 → Background playback on the mobile app
**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: Background playback on the mobile app.
2. Observe the result and verify the full behavior: Background playback on the mobile app.
**Expected Result:** Background playback on the mobile app — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-008 — Audio transcript view where available
**Type:** Positive
**Covers:** 3.1 → Audio transcript view where available
**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: Audio transcript view where available.
2. Observe the result and verify the full behavior: Audio transcript view where available.
**Expected Result:** Audio transcript view where available — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-009 — Playback event logging (start, pause, complete)
**Type:** Positive
**Covers:** 3.1 → Playback event logging (start, pause, complete)
**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: Playback event logging (start.
2. Observe the result and verify the full behavior: Playback event logging (start, pause, complete).
**Expected Result:** Playback event logging (start, pause, complete) — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-010 — Audit logging of the audio playback
**Type:** Positive
**Covers:** 3.1 → Audit logging of the audio playback
**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 audio playback.
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

## 3.2 Podcast Download for Offline

### TC-ST-03-03-011 — Download an episode for offline listening
**Type:** Positive
**Covers:** 3.2 → Download an episode for offline listening; Rule: Downloads require an active subscription; without it, the download button is disabled with a prompt.
**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: Download an episode for offline listening.
2. Observe the result and verify the full behavior: Download an episode for offline listening.
**Expected Result:** Download an episode for offline listening — delivered exactly as documented.
**Priority:** Critical

### TC-ST-03-03-012 — Download progress indicator
**Type:** Positive
**Covers:** 3.2 → Download progress indicator; Rule: A download completes before the episode can be played offline.
**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: Download progress indicator.
2. Observe the result and verify the full behavior: Download progress indicator.
**Expected Result:** Download progress indicator — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-013 — Offline library listing downloaded episodes
**Type:** Positive
**Covers:** 3.2 → Offline library listing downloaded episodes; Rule: Deleting a downloaded episode removes it from the device but not from the course.
**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: Offline library listing downloaded episodes.
2. Observe the result and verify the full behavior: Offline library listing downloaded episodes.
**Expected Result:** Offline library listing downloaded episodes — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-014 — Play a downloaded episode without a connection
**Type:** Positive
**Covers:** 3.2 → Play a downloaded episode without a connection; Rule: Storage usage is shown; the Student is warned when approaching the device limit.
**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: Play a downloaded episode without a connection.
2. Observe the result and verify the full behavior: Play a downloaded episode without a connection.
**Expected Result:** Play a downloaded episode without a connection — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-015 — Delete a downloaded episode to free space
**Type:** Positive
**Covers:** 3.2 → Delete a downloaded episode to free space; Rule: Download events (started, completed, deleted) are logged with the episode 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: Delete a downloaded episode to free space.
2. Observe the result and verify the full behavior: Delete a downloaded episode to free space.
**Expected Result:** Delete a downloaded episode to free space — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-016 — Storage usage indicator
**Type:** Positive
**Covers:** 3.2 → Storage usage indicator; Rule: The podcast download is audit-logged with the account, the episode, 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: Storage usage indicator.
2. Observe the result and verify the full behavior: Storage usage indicator.
**Expected Result:** Storage usage indicator — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-017 — Download gated by subscription
**Type:** Positive
**Covers:** 3.2 → Download gated by subscription
**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: Download gated by subscription.
2. Observe the result and verify the full behavior: Download gated by subscription.
**Expected Result:** Download gated by subscription — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-018 — Download event logging (started, completed, deleted)
**Type:** Positive
**Covers:** 3.2 → Download event logging (started, completed, deleted)
**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: Download event logging (started.
2. Observe the result and verify the full behavior: Download event logging (started, completed, deleted).
**Expected Result:** Download event logging (started, completed, deleted) — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-019 — Audit logging of the podcast download
**Type:** Positive
**Covers:** 3.2 → Audit logging of the podcast download
**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 podcast download.
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

## 3.3 Audio Progress Tracking

### TC-ST-03-03-020 — Per-episode status: not started, in progress, complete
**Type:** Positive
**Covers:** 3.3 → Per-episode status: not started, in progress, complete; Rule: An episode's status is one of: not started, in progress, complete.
**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-episode status: not started.
2. Observe the result and verify the full behavior: Per-episode status: not started, in progress, complete.
**Expected Result:** Per-episode status: not started, in progress, complete — delivered exactly as documented.
**Priority:** Critical

### TC-ST-03-03-021 — Course progress contribution from completed episodes
**Type:** Positive
**Covers:** 3.3 → Course progress contribution from completed episodes; Rule: Course progress includes completed audio episodes alongside videos.
**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: Course progress contribution from completed episodes.
2. Observe the result and verify the full behavior: Course progress contribution from completed episodes.
**Expected Result:** Course progress contribution from completed episodes — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-022 — "Continue learning" shows the next incomplete episode
**Type:** Positive
**Covers:** 3.3 → "Continue learning" shows the next incomplete episode; Rule: Re-listening a completed episode does not revert its status.
**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: "Continue learning" shows the next incomplete episode.
2. Observe the result and verify the full behavior: "Continue learning" shows the next incomplete episode.
**Expected Result:** "Continue learning" shows the next incomplete episode — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-023 — Progress visible on the course page and dashboard
**Type:** Positive
**Covers:** 3.3 → Progress visible on the course page and dashboard; Rule: Progress is synchronized across web and mobile.
**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: Progress visible on the course page and dashboard.
2. Observe the result and verify the full behavior: Progress visible on the course page and dashboard.
**Expected Result:** Progress visible on the course page and dashboard — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-024 — Completion feeds the analytics and progress modules
**Type:** Positive
**Covers:** 3.3 → Completion feeds the analytics and progress modules; Rule: Completion feeds the analytics and progress modules.
**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: Completion feeds the analytics and progress modules.
2. Observe the result and verify the full behavior: Completion feeds the analytics and progress modules.
**Expected Result:** Completion feeds the analytics and progress modules — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-025 — Re-listen to a completed episode without losing completion status
**Type:** Positive
**Covers:** 3.3 → Re-listen to a completed episode without losing completion status; Rule: Progress events are logged with the episode, the status change, 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: Re-listen to a completed episode without losing completion status.
2. Observe the result and verify the full behavior: Re-listen to a completed episode without losing completion status.
**Expected Result:** Re-listen to a completed episode without losing completion status — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-026 — Progress sync across web and mobile
**Type:** Positive
**Covers:** 3.3 → Progress sync across web and mobile; Rule: The audio progress tracking is audit-logged with the account, the episode, 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: Progress sync across web and mobile.
2. Observe the result and verify the full behavior: Progress sync across web and mobile.
**Expected Result:** Progress sync across web and mobile — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-027 — Progress event logging
**Type:** Positive
**Covers:** 3.3 → Progress 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: Progress event logging.
2. Observe the result and verify the full behavior: Progress event logging.
**Expected Result:** Progress event logging — delivered exactly as documented.
**Priority:** High

### TC-ST-03-03-028 — Audit logging of the audio progress tracking
**Type:** Positive
**Covers:** 3.3 → Audit logging of the audio progress tracking
**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 audio progress tracking.
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
