# 6. Content Moderation — Test Cases

User Type: **Super Administrator**
Source: *Mi Digital Academy - Education CRM Features Document*
Spec: content_moderation.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 |
|---------|--------------------|----------|
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Community content: the flashcards, the forum posts, and the Q&A submissions | TC-SA-10-06-001 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Moderation queue: the community content queued for review | TC-SA-10-06-002 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Moderation review: the content reviewed (the accuracy, the appropriateness) | TC-SA-10-06-003 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Moderation action: the action per the review (approve, reject, remove) | TC-SA-10-06-004 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Moderation scope: the moderation per the content type (the flashcards, the forums, the Q&A) | TC-SA-10-06-005 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Moderation record: the moderation recorded (the content, the action, the time) | TC-SA-10-06-006 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Audit logging of the moderation | TC-SA-10-06-007 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Rule: the community content is the flashcards, the forum posts, and the Q&A submissions; it is moderated, not auto-published | TC-SA-10-06-001, TC-SA-10-06-008 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Rule: the moderation queue is the entry point; the content is reviewed before it is live | TC-SA-10-06-002 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Rule: the moderation review checks the accuracy and the appropriateness; the quality gate is the review | TC-SA-10-06-003 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Rule: a moderation action is recorded (the content, the action, the time); it is auditable | TC-SA-10-06-006 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Rule: the moderation scope is per the content type (the flashcards, the forums, the Q&A); the load is managed | TC-SA-10-06-005 |
| 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A) | Rule: moderation is audit-logged with the content, action, and timestamp | TC-SA-10-06-007 |
| 6.2 Reporting System for Inappropriate Content | Content reporting: the content reported (the issue surfaced) | TC-SA-10-06-009 |
| 6.2 Reporting System for Inappropriate Content | Report submission: a learner/teacher submits a report (the content, the reason) | TC-SA-10-06-010 |
| 6.2 Reporting System for Inappropriate Content | Report queue: the reports queued for review | TC-SA-10-06-011 |
| 6.2 Reporting System for Inappropriate Content | Report review: the report reviewed (the content, the reason, the validity) | TC-SA-10-06-012 |
| 6.2 Reporting System for Inappropriate Content | Report action: the action per the review (the takedown, the correction, the dismissal) | TC-SA-10-06-013 |
| 6.2 Reporting System for Inappropriate Content | Report resolution: the report resolved (the issue addressed, the report closed) | TC-SA-10-06-014 |
| 6.2 Reporting System for Inappropriate Content | Audit logging of the reports | TC-SA-10-06-015 |
| 6.2 Reporting System for Inappropriate Content | Rule: a report is the issue surfaced (the content, the reason); it is not an accusation, it is a signal | TC-SA-10-06-009 |
| 6.2 Reporting System for Inappropriate Content | Rule: the report queue is the entry point; the report is reviewed before the action | TC-SA-10-06-011 |
| 6.2 Reporting System for Inappropriate Content | Rule: a valid report triggers the action (the takedown, the correction); the content is handled | TC-SA-10-06-013 |
| 6.2 Reporting System for Inappropriate Content | Rule: an invalid report is dismissed (the reason noted); the content is not affected by a bad report | TC-SA-10-06-016 |
| 6.2 Reporting System for Inappropriate Content | Rule: a report is resolved (the issue addressed, the report closed); it is not left open indefinitely | TC-SA-10-06-014 |
| 6.2 Reporting System for Inappropriate Content | Rule: reports are audit-logged with the content, report, action, and timestamp | TC-SA-10-06-015 |
| 6.3 Age-Appropriate Content Filtering | Age-appropriate filtering: the content filtered by the age group | TC-SA-10-06-017 |
| 6.3 Age-Appropriate Content Filtering | Age group: the learner's age group (the grade, the age band) | TC-SA-10-06-018 |
| 6.3 Age-Appropriate Content Filtering | Content age rating: the content rated for the age group (the appropriate, the advanced) | TC-SA-10-06-019 |
| 6.3 Age-Appropriate Content Filtering | Age gate: the age gate enforced (the learner sees the appropriate content) | TC-SA-10-06-020 |
| 6.3 Age-Appropriate Content Filtering | Filtering configuration: the filtering set (the age groups, the content ratings) | TC-SA-10-06-021 |
| 6.3 Age-Appropriate Content Filtering | Filtering review: the filtering reviewed (the content in the right age group) | TC-SA-10-06-022 |
| 6.3 Age-Appropriate Content Filtering | Audit logging of the filtering configuration | TC-SA-10-06-023 |
| 6.3 Age-Appropriate Content Filtering | Rule: the age-appropriate filtering is by the age group (the grade, the age band); the content is filtered for the learner's age | TC-SA-10-06-017 |
| 6.3 Age-Appropriate Content Filtering | Rule: the age gate is enforced (the learner sees the appropriate content); the gate is not bypassed | TC-SA-10-06-020 |
| 6.3 Age-Appropriate Content Filtering | Rule: the content age rating is the filter key (the appropriate, the advanced); the rating is specific | TC-SA-10-06-019 |
| 6.3 Age-Appropriate Content Filtering | Rule: a mis-rated content item is corrected (the rating fixed); the change is recorded | TC-SA-10-06-024 |
| 6.3 Age-Appropriate Content Filtering | Rule: a new age group extends the filtering (the age group, the content ratings); the new group is covered | TC-SA-10-06-025 |
| 6.3 Age-Appropriate Content Filtering | Rule: filtering configuration is audit-logged with the age groups, content ratings, and timestamp | TC-SA-10-06-023 |

## 6.1 Content Moderation for Community-Created Content (Flashcards, Forums, Q&A)

### TC-SA-10-06-001 — Community content: the flashcards, the forum posts, and the Q&A submissions; it is moderated, not auto-published
**Type:** Positive
**Covers:** 6.1 → Community content: the flashcards, the forum posts, and the Q&A submissions; Rule: the community content is the flashcards, the forum posts, and the Q&A submissions; it is moderated, not auto-published
**Preconditions:** A learner/teacher creates community content (a flashcard, a forum post, a Q&A submission).
**Steps:**
1. Submit a flashcard, a forum post, and a Q&A submission.
2. Verify each is captured as community content.
3. Verify the content is moderated (not auto-published).
**Expected Result:** The community content (the flashcards, the forum posts, and the Q&A submissions) is moderated — it is not auto-published.
**Priority:** Critical

### TC-SA-10-06-002 — Moderation queue: the community content queued for review; the content is reviewed before it is live
**Type:** Positive
**Covers:** 6.1 → Moderation queue: the community content queued for review; Rule: the moderation queue is the entry point; the content is reviewed before it is live
**Preconditions:** Community content has been submitted.
**Steps:**
1. Open the moderation queue.
2. Verify the community content is queued for review.
3. Verify the content is not live until it is reviewed.
**Expected Result:** The community content is queued for review — it is reviewed before it is live.
**Priority:** Critical

### TC-SA-10-06-003 — Moderation review: the content reviewed (the accuracy, the appropriateness); the quality gate is the review
**Type:** Positive
**Covers:** 6.1 → Moderation review: the content reviewed (the accuracy, the appropriateness); Rule: the moderation review checks the accuracy and the appropriateness; the quality gate is the review
**Preconditions:** A community content item is in the moderation queue.
**Steps:**
1. Review the content item: check the accuracy (the content is correct) and the appropriateness (the content is suitable).
2. Verify the review checks both the accuracy and the appropriateness.
**Expected Result:** The content is reviewed — the accuracy and the appropriateness are checked; the quality gate is the review.
**Priority:** Critical

### TC-SA-10-06-004 — Moderation action: the action per the review (approve, reject, remove)
**Type:** Positive
**Covers:** 6.1 → Moderation action: the action per the review (approve, reject, remove)
**Preconditions:** A community content item has been reviewed.
**Steps:**
1. Take the moderation action per the review: approve (the content is live), reject (the content is not live), or remove (the content is taken down).
2. Verify the action is applied.
**Expected Result:** The moderation action is applied per the review — approve, reject, or remove.
**Priority:** Critical

### TC-SA-10-06-005 — Moderation scope: the moderation per the content type (the flashcards, the forums, the Q&A); the load is managed
**Type:** Positive
**Covers:** 6.1 → Moderation scope: the moderation per the content type (the flashcards, the forums, the Q&A); Rule: the moderation scope is per the content type (the flashcards, the forums, the Q&A); the load is managed
**Preconditions:** Community content of multiple types is in the moderation queue.
**Steps:**
1. Filter the moderation queue by content type (the flashcards, the forums, the Q&A).
2. Verify the moderation scope is per the content type.
3. Verify the load is managed per type.
**Expected Result:** The moderation scope is per the content type (the flashcards, the forums, the Q&A) — the load is managed.
**Priority:** High

### TC-SA-10-06-006 — Moderation record: the moderation recorded (the content, the action, the time); it is auditable
**Type:** Positive
**Covers:** 6.1 → Moderation record: the moderation recorded (the content, the action, the time); Rule: a moderation action is recorded (the content, the action, the time); it is auditable
**Preconditions:** A moderation action has been taken.
**Steps:**
1. Open the moderation record.
2. Verify it shows the content, the action, and the time.
3. Verify the record is auditable.
**Expected Result:** The moderation is recorded (the content, the action, the time) — it is auditable.
**Priority:** Critical

### TC-SA-10-06-007 — Moderation is audit-logged with the content, the action, and the timestamp
**Type:** Positive
**Covers:** 6.1 → Audit logging of the moderation; Rule: moderation is audit-logged with the content, action, and timestamp
**Preconditions:** Moderation events have occurred.
**Steps:**
1. Open the audit trail and filter by "content moderation".
2. Verify entries show the content, the action, and the timestamp.
**Expected Result:** The moderation is audit-logged with the content, action, and timestamp.
**Priority:** Critical

### TC-SA-10-06-008 — Community content is not auto-published: a submitted item is not visible to learners until approved
**Type:** Negative
**Covers:** 6.1 → Rule: the community content is the flashcards, the forum posts, and the Q&A submissions; it is moderated, not auto-published
**Preconditions:** A learner submits a forum post.
**Steps:**
1. Submit the forum post.
2. As another learner, attempt to view the post before it is reviewed.
3. Verify the post is not visible (it is not auto-published).
**Expected Result:** The submitted content is not visible to learners until it is reviewed and approved — it is not auto-published.
**Priority:** Critical

## 6.2 Reporting System for Inappropriate Content

### TC-SA-10-06-009 — Content reporting: the content reported (the issue surfaced); a report is the issue surfaced; it is not an accusation, it is a signal
**Type:** Positive
**Covers:** 6.2 → Content reporting: the content reported (the issue surfaced); Rule: a report is the issue surfaced (the content, the reason); it is not an accusation, it is a signal
**Preconditions:** A learner/teacher identifies inappropriate content.
**Steps:**
1. Report the content (the issue is surfaced).
2. Verify the report captures the content and the reason.
3. Verify the report is treated as a signal (not an accusation).
**Expected Result:** The content is reported — the issue is surfaced; the report is a signal, not an accusation.
**Priority:** Critical

### TC-SA-10-06-010 — Report submission: a learner/teacher submits a report (the content, the reason)
**Type:** Positive
**Covers:** 6.2 → Report submission: a learner/teacher submits a report (the content, the reason)
**Preconditions:** A learner/teacher identifies inappropriate content.
**Steps:**
1. As a learner/teacher, submit a report: select the content and provide the reason.
2. Verify the report is submitted.
**Expected Result:** The report is submitted — the content and the reason are captured.
**Priority:** Critical

### TC-SA-10-06-011 — Report queue: the reports queued for review; the report is reviewed before the action
**Type:** Positive
**Covers:** 6.2 → Report queue: the reports queued for review; Rule: the report queue is the entry point; the report is reviewed before the action
**Preconditions:** Reports have been submitted.
**Steps:**
1. Open the report queue.
2. Verify the reports are queued for review.
3. Verify no action is taken before the report is reviewed.
**Expected Result:** The reports are queued for review — the report is reviewed before the action.
**Priority:** Critical

### TC-SA-10-06-012 — Report review: the report reviewed (the content, the reason, the validity)
**Type:** Positive
**Covers:** 6.2 → Report review: the report reviewed (the content, the reason, the validity)
**Preconditions:** A report is in the report queue.
**Steps:**
1. Review the report: examine the content, the reason, and the validity.
2. Verify the review assesses the validity of the report.
**Expected Result:** The report is reviewed — the content, the reason, and the validity are assessed.
**Priority:** Critical

### TC-SA-10-06-013 — Report action: the action per the review (the takedown, the correction, the dismissal); a valid report triggers the action; the content is handled
**Type:** Positive
**Covers:** 6.2 → Report action: the action per the review (the takedown, the correction, the dismissal); Rule: a valid report triggers the action (the takedown, the correction); the content is handled
**Preconditions:** A valid report has been reviewed.
**Steps:**
1. Take the action per the review: the takedown (the content is removed), the correction (the content is fixed), or the dismissal (the report is invalid).
2. Verify the action is applied.
3. Verify the content is handled.
**Expected Result:** The action is taken per the review — the takedown, the correction, or the dismissal; the content is handled.
**Priority:** Critical

### TC-SA-10-06-014 — Report resolution: the report resolved (the issue addressed, the report closed); it is not left open indefinitely
**Type:** Negative
**Covers:** 6.2 → Report resolution: the report resolved (the issue addressed, the report closed); Rule: a report is resolved (the issue addressed, the report closed); it is not left open indefinitely
**Preconditions:** A report has been reviewed and an action taken.
**Steps:**
1. Resolve the report (the issue is addressed).
2. Verify the report is closed.
3. Verify the report is not left open indefinitely.
**Expected Result:** The report is resolved — the issue is addressed, the report is closed; it is not left open indefinitely.
**Priority:** Critical

### TC-SA-10-06-015 — Reports are audit-logged with the content, the report, the action, and the timestamp
**Type:** Positive
**Covers:** 6.2 → Audit logging of the reports; Rule: reports are audit-logged with the content, report, action, and timestamp
**Preconditions:** Report events have occurred.
**Steps:**
1. Open the audit trail and filter by "content report".
2. Verify entries show the content, the report, the action, and the timestamp.
**Expected Result:** The reports are audit-logged with the content, report, action, and timestamp.
**Priority:** Critical

### TC-SA-10-06-016 — An invalid report is dismissed (the reason noted); the content is not affected by a bad report
**Type:** Negative
**Covers:** 6.2 → Rule: an invalid report is dismissed (the reason noted); the content is not affected by a bad report
**Preconditions:** An invalid report (the content is actually appropriate) is in the report queue.
**Steps:**
1. Review the report and determine it is invalid.
2. Dismiss the report (the reason is noted).
3. Verify the content is not affected by the bad report (it remains live).
**Expected Result:** The invalid report is dismissed (the reason noted) — the content is not affected by the bad report.
**Priority:** Critical

## 6.3 Age-Appropriate Content Filtering

### TC-SA-10-06-017 — Age-appropriate filtering: the content filtered by the age group; the content is filtered for the learner's age
**Type:** Positive
**Covers:** 6.3 → Age-appropriate filtering: the content filtered by the age group; Rule: the age-appropriate filtering is by the age group (the grade, the age band); the content is filtered for the learner's age
**Preconditions:** Content is rated for different age groups.
**Steps:**
1. Configure the age-appropriate filtering by the age group (the grade, the age band).
2. Verify the content is filtered for the learner's age.
**Expected Result:** The content is filtered by the age group — the content is filtered for the learner's age.
**Priority:** Critical

### TC-SA-10-06-018 — Age group: the learner's age group (the grade, the age band)
**Type:** Positive
**Covers:** 6.3 → Age group: the learner's age group (the grade, the age band)
**Preconditions:** Learners are enrolled in different grades/age bands.
**Steps:**
1. Verify the learner's age group is determined (the grade, the age band).
2. Verify the age group is used for the filtering.
**Expected Result:** The learner's age group is determined (the grade, the age band) — it is used for the filtering.
**Priority:** High

### TC-SA-10-06-019 — Content age rating: the content rated for the age group (the appropriate, the advanced); the rating is specific
**Type:** Positive
**Covers:** 6.3 → Content age rating: the content rated for the age group (the appropriate, the advanced); Rule: the content age rating is the filter key (the appropriate, the advanced); the rating is specific
**Preconditions:** Content items exist.
**Steps:**
1. Rate the content for the age group (the appropriate, the advanced).
2. Verify the content age rating is the filter key.
3. Verify the rating is specific.
**Expected Result:** The content is rated for the age group (the appropriate, the advanced) — the rating is the filter key and is specific.
**Priority:** High

### TC-SA-10-06-020 — Age gate: the age gate enforced (the learner sees the appropriate content); the gate is not bypassed
**Type:** Negative
**Covers:** 6.3 → Age gate: the age gate enforced (the learner sees the appropriate content); Rule: the age gate is enforced (the learner sees the appropriate content); the gate is not bypassed
**Preconditions:** A learner is in a specific age group and content is rated for other age groups.
**Steps:**
1. As the learner, attempt to access content rated for a different age group.
2. Verify the age gate is enforced (the learner sees only the appropriate content).
3. Verify the gate is not bypassed.
**Expected Result:** The age gate is enforced — the learner sees only the appropriate content; the gate is not bypassed.
**Priority:** Critical

### TC-SA-10-06-021 — Filtering configuration: the filtering set (the age groups, the content ratings)
**Type:** Positive
**Covers:** 6.3 → Filtering configuration: the filtering set (the age groups, the content ratings)
**Preconditions:** The Super Admin opens the filtering configuration.
**Steps:**
1. Set the filtering: the age groups and the content ratings.
2. Verify the filtering configuration is set.
**Expected Result:** The filtering is set — the age groups and the content ratings are configured.
**Priority:** High

### TC-SA-10-06-022 — Filtering review: the filtering reviewed (the content in the right age group)
**Type:** Positive
**Covers:** 6.3 → Filtering review: the filtering reviewed (the content in the right age group)
**Preconditions:** The filtering is configured.
**Steps:**
1. Review the filtering: verify the content is in the right age group.
2. Verify the filtering is correct.
**Expected Result:** The filtering is reviewed — the content is in the right age group.
**Priority:** Medium

### TC-SA-10-06-023 — Filtering configuration is audit-logged with the age groups, the content ratings, and the timestamp
**Type:** Positive
**Covers:** 6.3 → Audit logging of the filtering configuration; Rule: filtering configuration is audit-logged with the age groups, content ratings, and timestamp
**Preconditions:** Filtering configuration events have occurred.
**Steps:**
1. Open the audit trail and filter by "filtering configuration".
2. Verify entries show the age groups, the content ratings, and the timestamp.
**Expected Result:** The filtering configuration is audit-logged with the age groups, content ratings, and timestamp.
**Priority:** Critical

### TC-SA-10-06-024 — A mis-rated content item is corrected (the rating fixed); the change is recorded
**Type:** Negative
**Covers:** 6.3 → Rule: a mis-rated content item is corrected (the rating fixed); the change is recorded
**Preconditions:** A content item is mis-rated (rated for the wrong age group).
**Steps:**
1. Identify the mis-rated content item.
2. Correct the rating (fix it to the right age group).
3. Verify the change is recorded.
**Expected Result:** The mis-rated content item is corrected (the rating fixed) — the change is recorded.
**Priority:** High

### TC-SA-10-06-025 — A new age group extends the filtering (the age group, the content ratings); the new group is covered
**Type:** Positive
**Covers:** 6.3 → Rule: a new age group extends the filtering (the age group, the content ratings); the new group is covered
**Preconditions:** A new age group is introduced.
**Steps:**
1. Add the new age group to the filtering.
2. Set the content ratings for the new age group.
3. Verify the new group is covered by the filtering.
**Expected Result:** The new age group extends the filtering (the age group, the content ratings) — the new group is covered.
**Priority:** High
