# 4. Offline Analytics — Test Cases

User Type: **Super Administrator**
Source: *Mi Digital Academy - Education CRM Features Document*
Spec: offline_analytics.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 |
|---------|--------------------|----------|
| 4.1 Download Usage Analytics | Download volume | TC-SA-OFF-04-001 |
| 4.1 Download Usage Analytics | Download by type | TC-SA-OFF-04-002 |
| 4.1 Download Usage Analytics | Download by course | TC-SA-OFF-04-003 |
| 4.1 Download Usage Analytics | Download by institute | TC-SA-OFF-04-004 |
| 4.1 Download Usage Analytics | Download trend | TC-SA-OFF-04-005 |
| 4.1 Download Usage Analytics | Download top content | TC-SA-OFF-04-006 |
| 4.1 Download Usage Analytics | Rule: a volume counts completed downloads only | TC-SA-OFF-04-007 |
| 4.1 Download Usage Analytics | Rule: a report with no downloads shows zero | TC-SA-OFF-04-008 |
| 4.1 Download Usage Analytics | Rule: report generation is audit-logged | TC-SA-OFF-04-009 |
| 4.2 Offline Engagement Metrics | Offline watch time | TC-SA-OFF-04-010 |
| 4.2 Offline Engagement Metrics | Offline quiz completion | TC-SA-OFF-04-011 |
| 4.2 Offline Engagement Metrics | Offline worksheet completion | TC-SA-OFF-04-012 |
| 4.2 Offline Engagement Metrics | Offline sessions | TC-SA-OFF-04-013 |
| 4.2 Offline Engagement Metrics | Offline engagement rate | TC-SA-OFF-04-014 |
| 4.2 Offline Engagement Metrics | Offline retention | TC-SA-OFF-04-015 |
| 4.2 Offline Engagement Metrics | Rule: a watch time is recorded only for offline playback | TC-SA-OFF-04-016 |
| 4.2 Offline Engagement Metrics | Rule: a quiz completion is counted when synced | TC-SA-OFF-04-017 |
| 4.2 Offline Engagement Metrics | Rule: a metric with no activity shows zero | TC-SA-OFF-04-018 |
| 4.2 Offline Engagement Metrics | Rule: report generation is audit-logged | TC-SA-OFF-04-019 |
| 4.3 Sync Success and Failure Tracking | Sync success count | TC-SA-OFF-04-020 |
| 4.3 Sync Success and Failure Tracking | Sync failure count | TC-SA-OFF-04-021 |
| 4.3 Sync Success and Failure Tracking | Sync failure reasons | TC-SA-OFF-04-022 |
| 4.3 Sync Success and Failure Tracking | Sync retry count | TC-SA-OFF-04-023 |
| 4.3 Sync Success and Failure Tracking | Sync success rate | TC-SA-OFF-04-024 |
| 4.3 Sync Success and Failure Tracking | Sync failure trend | TC-SA-OFF-04-025 |
| 4.3 Sync Success and Failure Tracking | Rule: a failure count includes exhausted retries | TC-SA-OFF-04-026 |
| 4.3 Sync Success and Failure Tracking | Rule: a success rate is successes over attempts | TC-SA-OFF-04-027 |
| 4.3 Sync Success and Failure Tracking | Rule: report generation is audit-logged | TC-SA-OFF-04-028 |
| 4.4 Storage Usage Monitoring | Storage per learner | TC-SA-OFF-04-029 |
| 4.4 Storage Usage Monitoring | Storage by content type | TC-SA-OFF-04-030 |
| 4.4 Storage Usage Monitoring | Storage quota utilization | TC-SA-OFF-04-031 |
| 4.4 Storage Usage Monitoring | Storage top consumers | TC-SA-OFF-04-032 |
| 4.4 Storage Usage Monitoring | Storage trend | TC-SA-OFF-04-033 |
| 4.4 Storage Usage Monitoring | Storage alert | TC-SA-OFF-04-034 |
| 4.4 Storage Usage Monitoring | Rule: an alert is raised once per learner per breach | TC-SA-OFF-04-035 |
| 4.4 Storage Usage Monitoring | Rule: report generation is audit-logged | TC-SA-OFF-04-036 |
| 4.5 Offline Feature Adoption Report | Adoption rate | TC-SA-OFF-04-037 |
| 4.5 Offline Feature Adoption Report | Adoption by institute | TC-SA-OFF-04-038 |
| 4.5 Offline Feature Adoption Report | Adoption by tier | TC-SA-OFF-04-039 |
| 4.5 Offline Feature Adoption Report | Feature usage breakdown | TC-SA-OFF-04-040 |
| 4.5 Offline Feature Adoption Report | Adoption trend | TC-SA-OFF-04-041 |
| 4.5 Offline Feature Adoption Report | Adoption export | TC-SA-OFF-04-042 |
| 4.5 Offline Feature Adoption Report | Rule: an adoption rate counts learners with at least one offline action | TC-SA-OFF-04-043 |
| 4.5 Offline Feature Adoption Report | Rule: an export produces a file in the selected format | TC-SA-OFF-04-044 |
| 4.5 Offline Feature Adoption Report | Rule: report generation is audit-logged | TC-SA-OFF-04-045 |

### TC-SA-OFF-04-001 — Download volume
**Type:** Positive
**Covers:** 4.1 → Download volume: the total downloads over a period
**Preconditions:** A Super Admin account is active; download data exists.
**Steps:**
1. As a Super Admin, open the download usage analytics for a period.
2. Observe the result and verify the full behavior: the total download volume is shown.
**Expected Result:** The volume is shown — the total is visible, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-002 — Download by type
**Type:** Positive
**Covers:** 4.1 → Download by type: the downloads broken down by content type
**Preconditions:** A Super Admin account is active; downloads exist for multiple types.
**Steps:**
1. As a Super Admin, open the download by type view.
2. Observe the result and verify the full behavior: the downloads are broken down by content type.
**Expected Result:** The breakdown is shown — the per-type counts are visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-003 — Download by course
**Type:** Positive
**Covers:** 4.1 → Download by course: the downloads broken down by course
**Preconditions:** A Super Admin account is active; downloads exist for multiple courses.
**Steps:**
1. As a Super Admin, open the download by course view.
2. Observe the result and verify the full behavior: the downloads are broken down by course.
**Expected Result:** The breakdown is shown — the per-course counts are visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-004 — Download by institute
**Type:** Positive
**Covers:** 4.1 → Download by institute: the downloads broken down by institute
**Preconditions:** A Super Admin account is active; downloads exist for multiple institutes.
**Steps:**
1. As a Super Admin, open the download by institute view.
2. Observe the result and verify the full behavior: the downloads are broken down by institute.
**Expected Result:** The breakdown is shown — the per-institute counts are visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-005 — Download trend
**Type:** Positive
**Covers:** 4.1 → Download trend: the download trend over time
**Preconditions:** A Super Admin account is active; download data spans multiple days.
**Steps:**
1. As a Super Admin, open the download trend at daily granularity.
2. Observe the result and verify the full behavior: the trend is plotted daily.
**Expected Result:** The trend is shown — the daily plot is visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-006 — Download top content
**Type:** Positive
**Covers:** 4.1 → Download top content: the most-downloaded content items
**Preconditions:** A Super Admin account is active; multiple items have downloads.
**Steps:**
1. As a Super Admin, open the top content list.
2. Observe the result and verify the full behavior: the items are ranked by download count.
**Expected Result:** The ranking is shown — the top items are listed, delivered exactly as documented.
**Priority:** Low

### TC-SA-OFF-04-007 — Rule: a volume counts completed downloads only
**Type:** Positive
**Covers:** 4.1 → Rule: a download volume counts completed downloads, not started ones
**Preconditions:** A Super Admin account is active; a download is started but not completed.
**Steps:**
1. As a Super Admin, check the download volume.
2. Observe the result and verify the full behavior: the started download is not counted.
**Expected Result:** The volume is correct — only completed downloads are counted, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-008 — Rule: a report with no downloads shows zero
**Type:** Positive
**Covers:** 4.1 → Rule: a report with no downloads in the period shows zero, not an error
**Preconditions:** A Super Admin account is active; a period has no downloads.
**Steps:**
1. As a Super Admin, open the analytics for that period.
2. Observe the result and verify the full behavior: zero is shown, not an error.
**Expected Result:** Zero is shown — no error is displayed, delivered exactly as documented.
**Priority:** Low

### TC-SA-OFF-04-009 — Rule: report generation is audit-logged
**Type:** Positive
**Covers:** 4.1 → Audit logging of download usage analytics
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, generate the download usage report.
2. Open the audit log.
3. Observe the result and verify the full behavior: the action is recorded with the actor and timestamp.
**Expected Result:** The action is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-010 — Offline watch time
**Type:** Positive
**Covers:** 4.2 → Offline watch time: the total time spent watching offline video
**Preconditions:** A Super Admin account is active; offline watch data exists.
**Steps:**
1. As a Super Admin, open the offline engagement metrics.
2. Observe the result and verify the full behavior: the offline watch time is shown.
**Expected Result:** The watch time is shown — the total is visible, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-011 — Offline quiz completion
**Type:** Positive
**Covers:** 4.2 → Offline quiz completion: the offline quizzes completed
**Preconditions:** A Super Admin account is active; offline quizzes are completed and synced.
**Steps:**
1. As a Super Admin, open the offline quiz completion metric.
2. Observe the result and verify the full behavior: the completed offline quizzes are counted.
**Expected Result:** The completion is counted — the total is visible, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-012 — Offline worksheet completion
**Type:** Positive
**Covers:** 4.2 → Offline worksheet completion: the offline worksheets completed
**Preconditions:** A Super Admin account is active; offline worksheets are completed.
**Steps:**
1. As a Super Admin, open the offline worksheet completion metric.
2. Observe the result and verify the full behavior: the completed offline worksheets are counted.
**Expected Result:** The completion is counted — the total is visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-013 — Offline sessions
**Type:** Positive
**Covers:** 4.2 → Offline sessions: the number of offline learning sessions
**Preconditions:** A Super Admin account is active; offline sessions exist.
**Steps:**
1. As a Super Admin, open the offline sessions metric.
2. Observe the result and verify the full behavior: the offline sessions are counted.
**Expected Result:** The sessions are counted — the total is visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-014 — Offline engagement rate
**Type:** Positive
**Covers:** 4.2 → Offline engagement rate: the share of learning that happens offline
**Preconditions:** A Super Admin account is active; offline and online learning data exist.
**Steps:**
1. As a Super Admin, open the offline engagement rate.
2. Observe the result and verify the full behavior: the rate is shown as offline over total learning time.
**Expected Result:** The rate is shown — the percentage is visible, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-015 — Offline retention
**Type:** Positive
**Covers:** 4.2 → Offline retention: the retention of learners who use offline features
**Preconditions:** A Super Admin account is active; offline users exist over a period.
**Steps:**
1. As a Super Admin, open the offline retention metric.
2. Observe the result and verify the full behavior: the retention of offline users is shown.
**Expected Result:** The retention is shown — the percentage is visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-016 — Rule: a watch time is recorded only for offline playback
**Type:** Positive
**Covers:** 4.2 → Rule: an offline watch time is recorded only for offline playback
**Preconditions:** A Super Admin account is active; a learner watches video online.
**Steps:**
1. As a Super Admin, check the offline watch time.
2. Observe the result and verify the full behavior: the online watch time is not counted.
**Expected Result:** The watch time is correct — only offline playback is counted, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-017 — Rule: a quiz completion is counted when synced
**Type:** Positive
**Covers:** 4.2 → Rule: an offline quiz completion is counted when the quiz is synced
**Preconditions:** A Super Admin account is active; an offline quiz is completed but not synced.
**Steps:**
1. As a Super Admin, check the offline quiz completion metric.
2. Observe the result and verify the full behavior: the unsynced quiz is not counted.
**Expected Result:** The quiz is not counted — it is counted only on sync, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-018 — Rule: a metric with no activity shows zero
**Type:** Positive
**Covers:** 4.2 → Rule: a metric with no offline activity shows zero, not an error
**Preconditions:** A Super Admin account is active; a period has no offline activity.
**Steps:**
1. As a Super Admin, open the metrics for that period.
2. Observe the result and verify the full behavior: zero is shown, not an error.
**Expected Result:** Zero is shown — no error is displayed, delivered exactly as documented.
**Priority:** Low

### TC-SA-OFF-04-019 — Rule: report generation is audit-logged
**Type:** Positive
**Covers:** 4.2 → Audit logging of offline engagement metrics
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, generate the offline engagement report.
2. Open the audit log.
3. Observe the result and verify the full behavior: the action is recorded with the actor and timestamp.
**Expected Result:** The action is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-020 — Sync success count
**Type:** Positive
**Covers:** 4.3 → Sync success count: the number of successful syncs
**Preconditions:** A Super Admin account is active; sync data exists.
**Steps:**
1. As a Super Admin, open the sync tracking.
2. Observe the result and verify the full behavior: the successful syncs are counted.
**Expected Result:** The count is shown — the successes are visible, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-021 — Sync failure count
**Type:** Positive
**Covers:** 4.3 → Sync failure count: the number of failed syncs
**Preconditions:** A Super Admin account is active; some syncs failed.
**Steps:**
1. As a Super Admin, open the sync failure count.
2. Observe the result and verify the full behavior: the failed syncs are counted.
**Expected Result:** The count is shown — the failures are visible, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-022 — Sync failure reasons
**Type:** Positive
**Covers:** 4.3 → Sync failure reasons: the failures broken down by reason
**Preconditions:** A Super Admin account is active; failures have various reasons.
**Steps:**
1. As a Super Admin, open the failure reasons view.
2. Observe the result and verify the full behavior: the failures are broken down by reason.
**Expected Result:** The breakdown is shown — the per-reason counts are visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-023 — Sync retry count
**Type:** Positive
**Covers:** 4.3 → Sync retry count: the number of retries performed
**Preconditions:** A Super Admin account is active; retries have occurred.
**Steps:**
1. As a Super Admin, open the sync retry count.
2. Observe the result and verify the full behavior: the retries are counted.
**Expected Result:** The count is shown — the retries are visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-024 — Sync success rate
**Type:** Positive
**Covers:** 4.3 → Sync success rate: the share of syncs that succeed
**Preconditions:** A Super Admin account is active; sync data exists.
**Steps:**
1. As a Super Admin, open the sync success rate.
2. Observe the result and verify the full behavior: the rate is shown.
**Expected Result:** The rate is shown — the percentage is visible, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-025 — Sync failure trend
**Type:** Positive
**Covers:** 4.3 → Sync failure trend: the failure trend over time
**Preconditions:** A Super Admin account is active; failure data spans multiple days.
**Steps:**
1. As a Super Admin, open the failure trend at daily granularity.
2. Observe the result and verify the full behavior: the trend is plotted daily.
**Expected Result:** The trend is shown — the daily plot is visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-026 — Rule: a failure count includes exhausted retries
**Type:** Positive
**Covers:** 4.3 → Rule: a sync failure count includes syncs that exhausted retries
**Preconditions:** A Super Admin account is active; a sync exhausted its retries.
**Steps:**
1. As a Super Admin, check the failure count.
2. Observe the result and verify the full behavior: the exhausted sync is counted as a failure.
**Expected Result:** The failure is counted — the exhausted sync is included, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-027 — Rule: a success rate is successes over attempts
**Type:** Positive
**Covers:** 4.3 → Rule: a sync success rate is successes over total sync attempts
**Preconditions:** A Super Admin account is active; 90 of 100 syncs succeeded.
**Steps:**
1. As a Super Admin, check the success rate.
2. Observe the result and verify the full behavior: the rate is 90%.
**Expected Result:** The rate is correct — it is successes over attempts, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-028 — Rule: report generation is audit-logged
**Type:** Positive
**Covers:** 4.3 → Audit logging of sync success and failure tracking
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, generate the sync tracking report.
2. Open the audit log.
3. Observe the result and verify the full behavior: the action is recorded with the actor and timestamp.
**Expected Result:** The action is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-029 — Storage per learner
**Type:** Positive
**Covers:** 4.4 → Storage per learner: the offline storage used per learner
**Preconditions:** A Super Admin account is active; learners have downloads.
**Steps:**
1. As a Super Admin, open the storage per learner view.
2. Observe the result and verify the full behavior: the storage used per learner is shown.
**Expected Result:** The storage is shown — the per-learner usage is visible, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-030 — Storage by content type
**Type:** Positive
**Covers:** 4.4 → Storage by content type: the storage broken down by content type
**Preconditions:** A Super Admin account is active; storage exists for multiple types.
**Steps:**
1. As a Super Admin, open the storage by type view.
2. Observe the result and verify the full behavior: the storage is broken down by content type.
**Expected Result:** The breakdown is shown — the per-type usage is visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-031 — Storage quota utilization
**Type:** Positive
**Covers:** 4.4 → Storage quota utilization: the quota utilization per learner
**Preconditions:** A Super Admin account is active; learners have quotas and usage.
**Steps:**
1. As a Super Admin, open the quota utilization view.
2. Observe the result and verify the full behavior: the utilization per learner is shown.
**Expected Result:** The utilization is shown — the per-learner percentage is visible, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-032 — Storage top consumers
**Type:** Positive
**Covers:** 4.4 → Storage top consumers: the learners with the highest storage usage
**Preconditions:** A Super Admin account is active; learners have varying usage.
**Steps:**
1. As a Super Admin, open the top consumers list.
2. Observe the result and verify the full behavior: the learners are ranked by usage.
**Expected Result:** The ranking is shown — the top consumers are listed, delivered exactly as documented.
**Priority:** Low

### TC-SA-OFF-04-033 — Storage trend
**Type:** Positive
**Covers:** 4.4 → Storage trend: the storage usage trend over time
**Preconditions:** A Super Admin account is active; storage data spans multiple days.
**Steps:**
1. As a Super Admin, open the storage trend at daily granularity.
2. Observe the result and verify the full behavior: the trend is plotted daily.
**Expected Result:** The trend is shown — the daily plot is visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-034 — Storage alert
**Type:** Positive
**Covers:** 4.4 → Storage alert: the alert on quota utilization above a threshold
**Preconditions:** A Super Admin account is active; the alert threshold is 90%; a learner is at 95%.
**Steps:**
1. As a Super Admin, check the alert state.
2. Observe the result and verify the full behavior: an alert is raised for the learner.
**Expected Result:** The alert is raised — the threshold breach is detected, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-035 — Rule: an alert is raised once per learner per breach
**Type:** Positive
**Covers:** 4.4 → Rule: a storage alert is raised once per learner per threshold breach
**Preconditions:** A Super Admin account is active; a learner is above the threshold.
**Steps:**
1. As a Super Admin, observe the alerts for the learner.
2. Observe the result and verify the full behavior: a single alert is raised.
**Expected Result:** The alert is single — it is not repeated, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-036 — Rule: report generation is audit-logged
**Type:** Positive
**Covers:** 4.4 → Audit logging of storage usage monitoring
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, generate the storage report.
2. Open the audit log.
3. Observe the result and verify the full behavior: the action is recorded with the actor and timestamp.
**Expected Result:** The action is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-037 — Adoption rate
**Type:** Positive
**Covers:** 4.5 → Adoption rate: the share of learners using offline features
**Preconditions:** A Super Admin account is active; learners have offline activity.
**Steps:**
1. As a Super Admin, open the adoption report.
2. Observe the result and verify the full behavior: the adoption rate is shown.
**Expected Result:** The rate is shown — the percentage is visible, delivered exactly as documented.
**Priority:** High

### TC-SA-OFF-04-038 — Adoption by institute
**Type:** Positive
**Covers:** 4.5 → Adoption by institute: the adoption broken down by institute
**Preconditions:** A Super Admin account is active; adoption exists for multiple institutes.
**Steps:**
1. As a Super Admin, open the adoption by institute view.
2. Observe the result and verify the full behavior: the adoption is broken down by institute.
**Expected Result:** The breakdown is shown — the per-institute adoption is visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-039 — Adoption by tier
**Type:** Positive
**Covers:** 4.5 → Adoption by tier: the adoption broken down by subscription tier
**Preconditions:** A Super Admin account is active; adoption exists for multiple tiers.
**Steps:**
1. As a Super Admin, open the adoption by tier view.
2. Observe the result and verify the full behavior: the adoption is broken down by tier.
**Expected Result:** The breakdown is shown — the per-tier adoption is visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-040 — Feature usage breakdown
**Type:** Positive
**Covers:** 4.5 → Feature usage breakdown: the usage per offline feature
**Preconditions:** A Super Admin account is active; multiple offline features are used.
**Steps:**
1. As a Super Admin, open the feature usage breakdown.
2. Observe the result and verify the full behavior: the usage per feature is shown.
**Expected Result:** The breakdown is shown — the per-feature usage is visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-041 — Adoption trend
**Type:** Positive
**Covers:** 4.5 → Adoption trend: the adoption trend over time
**Preconditions:** A Super Admin account is active; adoption data spans multiple months.
**Steps:**
1. As a Super Admin, open the adoption trend at monthly granularity.
2. Observe the result and verify the full behavior: the trend is plotted monthly.
**Expected Result:** The trend is shown — the monthly plot is visible, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-042 — Adoption export
**Type:** Positive
**Covers:** 4.5 → Adoption export: the export of the adoption report
**Preconditions:** A Super Admin account is active; the adoption report is generated.
**Steps:**
1. As a Super Admin, export the report as CSV.
2. Observe the result and verify the full behavior: a CSV file is produced.
**Expected Result:** The export works — the file is produced, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-043 — Rule: an adoption rate counts learners with at least one offline action
**Type:** Positive
**Covers:** 4.5 → Rule: an adoption rate counts learners with at least one offline action in the period
**Preconditions:** A Super Admin account is active; a learner has one offline action in the period.
**Steps:**
1. As a Super Admin, check the adoption rate.
2. Observe the result and verify the full behavior: the learner is counted as adopting.
**Expected Result:** The learner is counted — the adoption criterion is met, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-044 — Rule: an export produces a file in the selected format
**Type:** Positive
**Covers:** 4.5 → Rule: an adoption export produces a file in the selected format
**Preconditions:** A Super Admin account is active; the report is generated.
**Steps:**
1. As a Super Admin, export the report as PDF.
2. Observe the result and verify the full behavior: a PDF file is produced.
**Expected Result:** The export is correct — the file is in the selected format, delivered exactly as documented.
**Priority:** Medium

### TC-SA-OFF-04-045 — Rule: report generation is audit-logged
**Type:** Positive
**Covers:** 4.5 → Audit logging of offline feature adoption report
**Preconditions:** A Super Admin account is active; the audit log is accessible.
**Steps:**
1. As a Super Admin, generate and export the adoption report.
2. Open the audit log.
3. Observe the result and verify the full behavior: the action is recorded with the actor and timestamp.
**Expected Result:** The action is audit-logged — the actor and timestamp are recorded, delivered exactly as documented.
**Priority:** High
