# 3. Content Organization — Test Cases

User Type: **Super Administrator**
Source: *Mi Digital Academy - Education CRM Features Document*
Spec: content_organization.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 Assign Content to Courses, Subjects, and Topics | Content assignment: a content item assigned to a course, subject, and topic | TC-SA-07-03-001 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Multi-level assignment: the content placed at the course, subject, and topic level as appropriate | TC-SA-07-03-002 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Assignment validation: the target nodes exist and are active | TC-SA-07-03-003 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Coverage view: the content per topic/course, so gaps are visible | TC-SA-07-03-004 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Reassignment: moving content to the correct node where misplaced | TC-SA-07-03-005 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Unassignment: removing a content item from a node (with the impact reviewed) | TC-SA-07-03-006 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Audit logging of assignment changes | TC-SA-07-03-007 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Rule: content is assigned to courses, subjects, and topics; the assignment places it in the learning structure | TC-SA-07-03-001 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Rule: the target nodes must exist and be active; an invalid node cannot be assigned | TC-SA-07-03-003 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Rule: the coverage view shows content per node; a gap (a topic with no content) is visible, not silent | TC-SA-07-03-004 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Rule: a reassignment moves content to the correct node; the change is recorded | TC-SA-07-03-005 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Rule: an unassignment is reviewed for impact (learners who had the content) before it is done | TC-SA-07-03-006 |
| 3.1 Assign Content to Courses, Subjects, and Topics | Rule: assignment changes are audit-logged with the content, nodes, and timestamp | TC-SA-07-03-007 |
| 3.2 Prerequisite Topic Linking | Prerequisite link: a content topic marked as a prerequisite of another | TC-SA-07-03-008 |
| 3.2 Prerequisite Topic Linking | Link creation: the Super Admin defines which topics are prerequisites of which | TC-SA-07-03-009 |
| 3.2 Prerequisite Topic Linking | Enforcement/recommendation: the order enforced or recommended per the rules | TC-SA-07-03-010 |
| 3.2 Prerequisite Topic Linking | Learner warning: a learner attempting content without its prerequisite is warned | TC-SA-07-03-011 |
| 3.2 Prerequisite Topic Linking | Recommended path: the prerequisite graph informs the suggested content order | TC-SA-07-03-012 |
| 3.2 Prerequisite Topic Linking | Prerequisite review: the links checked for correctness | TC-SA-07-03-013 |
| 3.2 Prerequisite Topic Linking | Audit logging of prerequisite link create/remove | TC-SA-07-03-014 |
| 3.2 Prerequisite Topic Linking | Rule: a prerequisite link is directional: topic A is a prerequisite of topic B (A before B) | TC-SA-07-03-008 |
| 3.2 Prerequisite Topic Linking | Rule: the behavior (enforce vs. recommend) is per the rules; a warning does not silently block where the rule is recommend | TC-SA-07-03-010 |
| 3.2 Prerequisite Topic Linking | Rule: the prerequisite graph informs the recommended path; the suggested order respects the dependencies | TC-SA-07-03-012 |
| 3.2 Prerequisite Topic Linking | Rule: links are reviewed for correctness; a wrong prerequisite is removed and recorded | TC-SA-07-03-013 |
| 3.2 Prerequisite Topic Linking | Rule: a topic can have multiple prerequisites; all unmet ones are surfaced to the learner | TC-SA-07-03-015 |
| 3.2 Prerequisite Topic Linking | Rule: prerequisite link changes are audit-logged with the topics, subject, and timestamp | TC-SA-07-03-014 |
| 3.3 Content Search and Retrieval | Content search: search across the content by its attributes | TC-SA-07-03-016 |
| 3.3 Content Search and Retrieval | Search attributes: title, topic, subject, type (video/podcast/document), difficulty | TC-SA-07-03-017 |
| 3.3 Content Search and Retrieval | Filtered search: narrowing the results by the attributes | TC-SA-07-03-018 |
| 3.3 Content Search and Retrieval | Result ranking: the results ordered by relevance | TC-SA-07-03-019 |
| 3.3 Content Search and Retrieval | Retrieval: opening the content from the search results (within access) | TC-SA-07-03-020 |
| 3.3 Content Search and Retrieval | Access-scoped results: the search returns only the content the searcher can access | TC-SA-07-03-021 |
| 3.3 Content Search and Retrieval | Audit logging of administrative content retrieval (where applicable) | TC-SA-07-03-022 |
| 3.3 Content Search and Retrieval | Rule: search is across the content by its attributes (title, topic, subject, type, difficulty); the attributes are the search keys | TC-SA-07-03-017 |
| 3.3 Content Search and Retrieval | Rule: results are ranked by relevance and can be filtered; the search is precise, not just a list | TC-SA-07-03-019 |
| 3.3 Content Search and Retrieval | Rule: results are access-scoped: a searcher sees only the content they can access; there is no leakage of inaccessible content | TC-SA-07-03-021 |
| 3.3 Content Search and Retrieval | Rule: a search returning no content confirms a gap; it is a signal, not an error | TC-SA-07-03-023 |
| 3.3 Content Search and Retrieval | Rule: poorly findable content is improved via its metadata (a clearer title/topic); the change is recorded | TC-SA-07-03-024 |
| 3.3 Content Search and Retrieval | Rule: administrative retrieval is audit-logged where applicable | TC-SA-07-03-022 |

## 3.1 Assign Content to Courses, Subjects, and Topics

### TC-SA-07-03-001 — Content assignment: a content item assigned to a course, subject, and topic; the assignment places it in the learning structure
**Type:** Positive
**Covers:** 3.1 → Content assignment: a content item assigned to a course, subject, and topic; Rule: content is assigned to courses, subjects, and topics; the assignment places it in the learning structure
**Preconditions:** A new video tutorial is ready; the curriculum has the target course, subject, and topic.
**Steps:**
1. Assign the content item to its course, subject, and topic (the curriculum nodes it belongs to).
2. Save and verify the content is now in the learning structure.
3. Verify the content is surfaced to the learners in that context.
**Expected Result:** The content is assigned to the course, subject, and topic — it is placed in the learning structure and surfaced to the learners.
**Priority:** Critical

### TC-SA-07-03-002 — Multi-level assignment: the content placed at the course, subject, and topic level as appropriate
**Type:** Positive
**Covers:** 3.1 → Multi-level assignment: the content placed at the course, subject, and topic level as appropriate
**Preconditions:** Content items exist; the curriculum has course, subject, and topic levels.
**Steps:**
1. Assign one content item at the course level.
2. Assign another at the subject level.
3. Assign a third at the topic level.
4. Verify each is placed at the appropriate level.
**Expected Result:** The content is placed at the course, subject, and topic level as appropriate — multi-level assignment works.
**Priority:** High

### TC-SA-07-03-003 — Assignment validation: the target nodes exist and are active; an invalid node cannot be assigned
**Type:** Negative
**Covers:** 3.1 → Assignment validation: the target nodes exist and are active; Rule: the target nodes must exist and be active; an invalid node cannot be assigned
**Preconditions:** A content item is to be assigned; one target node is inactive (or does not exist).
**Steps:**
1. Attempt to assign the content to the invalid (inactive/non-existent) node.
2. Verify the assignment is validated and the invalid node is flagged.
3. Assign the content to a valid, active node and verify it succeeds.
**Expected Result:** The assignment is validated — the target nodes must exist and be active; an invalid node cannot be assigned.
**Priority:** Critical

### TC-SA-07-03-004 — Coverage view: the content per topic/course, so gaps are visible; a gap (a topic with no content) is visible, not silent
**Type:** Negative
**Covers:** 3.1 → Coverage view: the content per topic/course, so gaps are visible; Rule: the coverage view shows content per node; a gap (a topic with no content) is visible, not silent
**Preconditions:** A topic has no content assigned.
**Steps:**
1. Open the coverage view.
2. Verify the content per topic/course is shown.
3. Verify the topic with no content is a visible gap (not silent).
**Expected Result:** The coverage view shows content per node — the gap (a topic with no content) is visible, not silent.
**Priority:** High

### TC-SA-07-03-005 — Reassignment: moving content to the correct node where misplaced; the change is recorded
**Type:** Positive
**Covers:** 3.1 → Reassignment: moving content to the correct node where misplaced; Rule: a reassignment moves content to the correct node; the change is recorded
**Preconditions:** A content item is misplaced (assigned to the wrong topic).
**Steps:**
1. Reassign the content to the correct node.
2. Verify the content is now at the correct node.
3. Verify the change is recorded in the audit trail.
**Expected Result:** The reassignment moves the content to the correct node — the change is recorded.
**Priority:** High

### TC-SA-07-03-006 — Unassignment: removing a content item from a node (with the impact reviewed); the impact is handled
**Type:** Negative
**Covers:** 3.1 → Unassignment: removing a content item from a node (with the impact reviewed); Rule: an unassignment is reviewed for impact (learners who had the content) before it is done
**Preconditions:** A content item is assigned to a topic; learners had the content (a syllabus change means it is no longer part of the topic).
**Steps:**
1. Initiate the unassignment of the content from the node.
2. Verify the impact (learners who had the content) is reviewed before it is done.
3. Complete the unassignment and verify the impact is handled.
**Expected Result:** The unassignment is reviewed for impact (learners who had the content) before it is done — the impact is handled.
**Priority:** Critical

### TC-SA-07-03-007 — Assignment changes are audit-logged with the content, nodes, and timestamp
**Type:** Positive
**Covers:** 3.1 → Audit logging of assignment changes; Rule: assignment changes are audit-logged with the content, nodes, and timestamp
**Preconditions:** Content assignment changes have occurred (assign, reassign, unassign).
**Steps:**
1. Open the audit trail and filter by "content assignment".
2. Verify entries show the content, the nodes, and the timestamp.
**Expected Result:** The assignment changes are audit-logged with the content, nodes, and timestamp.
**Priority:** Critical

## 3.2 Prerequisite Topic Linking

### TC-SA-07-03-008 — Prerequisite link: a content topic marked as a prerequisite of another; the link is directional (A before B)
**Type:** Positive
**Covers:** 3.2 → Prerequisite link: a content topic marked as a prerequisite of another; Rule: a prerequisite link is directional: topic A is a prerequisite of topic B (A before B)
**Preconditions:** Two content topics exist (a foundational topic A and an advanced topic B).
**Steps:**
1. Mark topic A as a prerequisite of topic B.
2. Verify the link is directional (A before B).
3. Verify the content dependencies are explicit in the topic structure.
**Expected Result:** The prerequisite link is created — topic A is a prerequisite of topic B (A before B), directional.
**Priority:** Critical

### TC-SA-07-03-009 — Link creation: the Super Admin defines which topics are prerequisites of which
**Type:** Positive
**Covers:** 3.2 → Link creation: the Super Admin defines which topics are prerequisites of which
**Preconditions:** A subject's content has foundational and advanced topics.
**Steps:**
1. Define the prerequisite links: the foundational topics that must come before the advanced ones (e.g., basic concepts before applications).
2. Verify the links are created so the content dependencies are explicit.
**Expected Result:** The prerequisite links are defined — the foundational topics come before the advanced ones.
**Priority:** High

### TC-SA-07-03-010 — Enforcement/recommendation: the order enforced or recommended per the rules; a warning does not silently block where the rule is recommend
**Type:** Negative
**Covers:** 3.2 → Enforcement/recommendation: the order enforced or recommended per the rules; Rule: the behavior (enforce vs. recommend) is per the rules; a warning does not silently block where the rule is recommend
**Preconditions:** A prerequisite link exists; the behavior is set to recommend (not enforce).
**Steps:**
1. As a learner, attempt advanced content without completing its prerequisite.
2. Verify the platform shows the warning (the order is recommended).
3. Verify the learner can proceed (the warning does not silently block where the rule is recommend).
**Expected Result:** The behavior is per the rules — under recommend, the learner is warned but can proceed (not silently blocked).
**Priority:** Critical

### TC-SA-07-03-011 — Learner warning: a learner attempting content without its prerequisite is warned
**Type:** Positive
**Covers:** 3.2 → Learner warning: a learner attempting content without its prerequisite is warned
**Preconditions:** A prerequisite link exists; a learner has not completed the prerequisite.
**Steps:**
1. As the learner, attempt the advanced content without completing its prerequisite.
2. Verify the platform shows the warning: "Complete the prerequisite topic first."
**Expected Result:** The learner is warned when attempting content without its prerequisite.
**Priority:** High

### TC-SA-07-03-012 — Recommended path: the prerequisite graph informs the suggested content order; the suggested order respects the dependencies
**Type:** Positive
**Covers:** 3.2 → Recommended path: the prerequisite graph informs the suggested content order; Rule: the prerequisite graph informs the recommended path; the suggested order respects the dependencies
**Preconditions:** A prerequisite graph exists for a subject's content.
**Steps:**
1. View the recommended path for the subject.
2. Verify the suggested content order respects the dependencies (a learner following it is always ready).
**Expected Result:** The recommended path reflects the prerequisite graph — the suggested order respects the dependencies.
**Priority:** High

### TC-SA-07-03-013 — Prerequisite review: the links checked for correctness; a wrong prerequisite is removed and recorded
**Type:** Negative
**Covers:** 3.2 → Prerequisite review: the links checked for correctness; Rule: links are reviewed for correctness; a wrong prerequisite is removed and recorded
**Preconditions:** A prerequisite link is wrong (a dependency that is not genuine).
**Steps:**
1. Review the prerequisite links for correctness.
2. Identify the wrong prerequisite.
3. Remove it and verify the removal is recorded (the order is not artificially constrained).
**Expected Result:** The links are reviewed for correctness — the wrong prerequisite is removed and recorded.
**Priority:** High

### TC-SA-07-03-014 — Prerequisite link create and remove events are audit-logged with the topics, subject, and timestamp
**Type:** Positive
**Covers:** 3.2 → Audit logging of prerequisite link create/remove; Rule: prerequisite link changes are audit-logged with the topics, subject, and timestamp
**Preconditions:** Prerequisite links have been created and removed.
**Steps:**
1. Open the audit trail and filter by "prerequisite link".
2. Verify entries for create and remove show the topics, the subject, and the timestamp.
**Expected Result:** The prerequisite link create and remove events are audit-logged with the topics, subject, and timestamp.
**Priority:** Critical

### TC-SA-07-03-015 — A topic can have multiple prerequisites; all unmet ones are surfaced to the learner
**Type:** Edge
**Covers:** 3.2 → Rule: a topic can have multiple prerequisites; all unmet ones are surfaced to the learner
**Preconditions:** A topic has multiple prerequisites; a learner has not completed any of them.
**Steps:**
1. Confirm all prerequisites are linked for the topic.
2. As the learner, attempt the topic.
3. Verify all unmet prerequisites are surfaced to the learner (warned about each).
**Expected Result:** The topic has multiple prerequisites — all unmet ones are surfaced to the learner.
**Priority:** High

## 3.3 Content Search and Retrieval

### TC-SA-07-03-016 — Content search: search across the content by its attributes
**Type:** Positive
**Covers:** 3.3 → Content search: search across the content by its attributes
**Preconditions:** Content items exist across the platform.
**Steps:**
1. Open content search.
2. Search for content by its attributes (e.g., a topic).
3. Verify the search returns the matching content.
**Expected Result:** The content search works — it searches across the content by its attributes.
**Priority:** Critical

### TC-SA-07-03-017 — Search attributes: title, topic, subject, type (video/podcast/document), difficulty; the attributes are the search keys
**Type:** Positive
**Covers:** 3.3 → Search attributes: title, topic, subject, type (video/podcast/document), difficulty; Rule: search is across the content by its attributes (title, topic, subject, type, difficulty); the attributes are the search keys
**Preconditions:** Content items with various attributes exist.
**Steps:**
1. Search by title and verify the results match.
2. Search by topic, subject, type (video/podcast/document), and difficulty and verify the results match each attribute.
**Expected Result:** The search works by all attributes (title, topic, subject, type, difficulty) — the attributes are the search keys.
**Priority:** High

### TC-SA-07-03-018 — Filtered search: narrowing the results by the attributes
**Type:** Positive
**Covers:** 3.3 → Filtered search: narrowing the results by the attributes
**Preconditions:** A search returns multiple results.
**Steps:**
1. Run a search that returns multiple results.
2. Filter by the subject and difficulty to narrow further.
3. Verify the results are narrowed by the attributes.
**Expected Result:** The filtered search narrows the results by the attributes.
**Priority:** High

### TC-SA-07-03-019 — Result ranking: the results ordered by relevance; the search is precise, not just a list
**Type:** Positive
**Covers:** 3.3 → Result ranking: the results ordered by relevance; Rule: results are ranked by relevance and can be filtered; the search is precise, not just a list
**Preconditions:** A search returns multiple results with varying relevance.
**Steps:**
1. Run a search that returns multiple results.
2. Verify the results are ordered by relevance (the most relevant first).
**Expected Result:** The results are ranked by relevance — the search is precise, not just a list.
**Priority:** High

### TC-SA-07-03-020 — Retrieval: opening the content from the search results (within access); the content opens correctly
**Type:** Positive
**Covers:** 3.3 → Retrieval: opening the content from the search results (within access)
**Preconditions:** A search returns a content item the searcher can access.
**Steps:**
1. Open the content from the search results (within access).
2. Verify the content is retrieved and available.
3. Verify the content opens correctly (end-to-end retrieval works).
**Expected Result:** The retrieval works — the content is opened from the search results and opens correctly.
**Priority:** High

### TC-SA-07-03-021 — Access-scoped results: the search returns only the content the searcher can access; there is no leakage of inaccessible content
**Type:** Negative
**Covers:** 3.3 → Access-scoped results: the search returns only the content the searcher can access; Rule: results are access-scoped: a searcher sees only the content they can access; there is no leakage of inaccessible content
**Preconditions:** A learner has access to a subset of the catalog; content outside their access exists.
**Steps:**
1. As the learner, run a search that would match content outside their access.
2. Verify the search returns only the content they can access (their courses/entitlement).
3. Verify there is no leakage of inaccessible content.
**Expected Result:** The search is access-scoped — the learner sees only the content they can access; there is no leakage of inaccessible content.
**Priority:** Critical

### TC-SA-07-03-022 — Administrative content retrieval is audit-logged where applicable (the search, the content, the timestamp)
**Type:** Positive
**Covers:** 3.3 → Audit logging of administrative content retrieval (where applicable); Rule: administrative retrieval is audit-logged where applicable
**Preconditions:** Super Admin has performed administrative content retrieval.
**Steps:**
1. Open the audit trail and filter by "content retrieval".
2. Verify entries show the search, the content, and the timestamp (where applicable).
**Expected Result:** The administrative content retrieval is audit-logged where applicable — the search, the content, and the timestamp.
**Priority:** Medium

### TC-SA-07-03-023 — A search returning no content confirms a gap; it is a signal, not an error
**Type:** Edge
**Covers:** 3.3 → Rule: a search returning no content confirms a gap; it is a signal, not an error
**Preconditions:** A topic has no content (a gap).
**Steps:**
1. Search for the topic.
2. Verify the search returns no content, confirming the gap.
3. Verify the gap is a signal (routed to the content owners), not an error.
**Expected Result:** The search returning no content confirms a gap — it is a signal, not an error.
**Priority:** Medium

### TC-SA-07-03-024 — Poorly findable content is improved via its metadata (a clearer title/topic); the change is recorded
**Type:** Positive
**Covers:** 3.3 → Rule: poorly findable content is improved via its metadata (a clearer title/topic); the change is recorded
**Preconditions:** A content item is hard to find (poorly titled).
**Steps:**
1. Improve the content's metadata (a clearer title/topic) so it is findable.
2. Verify the content is now findable via search.
3. Verify the change is recorded in the audit trail.
**Expected Result:** The poorly findable content is improved via its metadata — the change is recorded.
**Priority:** Medium
