# 7.1 LMS Integration — Test Cases

User Type: **Corporate**
Source: *Mi Digital Academy - Education CRM Features Document*
Spec: lms_integration.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 |
|---------|--------------------|----------|
| 7.1.1 | Upload SCORM 1.2 / 2004 packages | TC-COR-7-01-001 |
| 7.1.1 | xAPI (Tin Can) statement capture | TC-COR-7-01-002 |
| 7.1.1 | Completion reporting from packages | TC-COR-7-01-003 |
| 7.1.1 | Package versioning | TC-COR-7-01-004 |
| 7.1.1 | Available on web and mobile | TC-COR-7-01-005 |
| 7.1.1 | Event logging (viewed) | TC-COR-7-01-006 |
| 7.1.1 | Audit logging of the SCORM/xAPI content | TC-COR-7-01-007 |
| 7.1.1 | Rule: Packages are validated before publishing; invalid packages are rejected. | TC-COR-7-01-008 |
| 7.1.1 | Rule: A new version does not reset completions of the old version. | TC-COR-7-01-009 |
| 7.1.1 | Rule: Events (viewed) are logged with the account and the timestamp. | TC-COR-7-01-010 |
| 7.1.1 | Rule: The SCORM/xAPI content is audit-logged with the account and the timestamp. | TC-COR-7-01-011 |
| 7.1.2 | Connector setup (endpoint, credentials) | TC-COR-7-01-012 |
| 7.1.2 | Inbound completion sync | TC-COR-7-01-013 |
| 7.1.2 | Outbound assignment push | TC-COR-7-01-014 |
| 7.1.2 | Connection health monitor | TC-COR-7-01-015 |
| 7.1.2 | Available on web and mobile | TC-COR-7-01-016 |
| 7.1.2 | Event logging (viewed) | TC-COR-7-01-017 |
| 7.1.2 | Audit logging of the LMS connector | TC-COR-7-01-018 |
| 7.1.2 | Rule: Inbound completions are deduplicated by activity ID. | TC-COR-7-01-019 |
| 7.1.2 | Rule: A failed sync retries with exponential backoff for 24 hours. | TC-COR-7-01-020 |
| 7.1.2 | Rule: Events (viewed) are logged with the account and the timestamp. | TC-COR-7-01-021 |
| 7.1.2 | Rule: The LMS connector is audit-logged with the account and the timestamp. | TC-COR-7-01-022 |
| 7.1.3 | Catalog sync (add / update / retire) | TC-COR-7-01-023 |
| 7.1.3 | Metadata propagation (title, duration, skills) | TC-COR-7-01-024 |
| 7.1.3 | Sync schedule (hourly / daily) | TC-COR-7-01-025 |
| 7.1.3 | Sync log with conflicts | TC-COR-7-01-026 |
| 7.1.3 | Available on web and mobile | TC-COR-7-01-027 |
| 7.1.3 | Event logging (viewed) | TC-COR-7-01-028 |
| 7.1.3 | Audit logging of the content sync | TC-COR-7-01-029 |
| 7.1.3 | Rule: Retired courses keep their completion history. | TC-COR-7-01-030 |
| 7.1.3 | Rule: Conflicts are resolved in favor of the source of truth set by the admin. | TC-COR-7-01-031 |
| 7.1.3 | Rule: Events (viewed) are logged with the account and the timestamp. | TC-COR-7-01-032 |
| 7.1.3 | Rule: The content sync is audit-logged with the account and the timestamp. | TC-COR-7-01-033 |


## 7.1.1 SCORM/xAPI Content

### TC-COR-7-01-001 — Upload SCORM 1.2 / 2004 packages

**Type:** Positive

**Covers:** 7.1.1 → Upload SCORM 1.2 / 2004 packages; Rule: Packages are validated before publishing; invalid packages are rejected.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Upload SCORM 1.2 / 2004 packages.

2. Observe the result and verify the full behavior: Upload SCORM 1.2 / 2004 packages.

**Expected Result:** Upload SCORM 1.2 / 2004 packages — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-002 — xAPI (Tin Can) statement capture

**Type:** Positive

**Covers:** 7.1.1 → xAPI (Tin Can) statement capture; Rule: Packages are validated before publishing; invalid packages are rejected.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: xAPI (Tin Can) statement capture.

2. Observe the result and verify the full behavior: xAPI (Tin Can) statement capture.

**Expected Result:** xAPI (Tin Can) statement capture — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-003 — Completion reporting from packages

**Type:** Positive

**Covers:** 7.1.1 → Completion reporting from packages; Rule: Packages are validated before publishing; invalid packages are rejected.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Completion reporting from packages.

2. Observe the result and verify the full behavior: Completion reporting from packages.

**Expected Result:** Completion reporting from packages — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-004 — Package versioning

**Type:** Positive

**Covers:** 7.1.1 → Package versioning; Rule: Packages are validated before publishing; invalid packages are rejected.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Package versioning.

2. Observe the result and verify the full behavior: Package versioning.

**Expected Result:** Package versioning — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-005 — Available on web and mobile

**Type:** Positive

**Covers:** 7.1.1 → Available on web and mobile; Rule: Packages are validated before publishing; invalid packages are rejected.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Available on web and mobile.

2. Observe the result and verify the full behavior: Available on web and mobile.

**Expected Result:** Available on web and mobile — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-006 — Event logging (viewed)

**Type:** Positive

**Covers:** 7.1.1 → Event logging (viewed); Rule: Packages are validated before publishing; invalid packages are rejected.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Event logging (viewed).

2. Observe the result and verify the full behavior: Event logging (viewed).

**Expected Result:** Event logging (viewed) — delivered exactly as documented.

**Priority:** Medium

### TC-COR-7-01-007 — Audit logging of the SCORM/xAPI content

**Type:** Positive

**Covers:** 7.1.1 → Audit logging of the SCORM/xAPI content; Rule: Packages are validated before publishing; invalid packages are rejected.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Audit logging of the SCORM/xAPI content.

2. Observe the result and verify the full behavior: Audit logging of the SCORM/xAPI content.

**Expected Result:** Audit logging of the SCORM/xAPI content — delivered exactly as documented.

**Priority:** Medium

### TC-COR-7-01-008 — Rule: Packages are validated before publishing; invalid packages are rejected.

**Type:** Positive

**Covers:** 7.1.1 → Packages are validated before publishing; invalid packages are rejected.; Rule: Packages are validated before publishing; invalid packages are rejected..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Packages are validated before publishing; invalid packages are rejected..

2. Observe the result and verify the full behavior: Packages are validated before publishing; invalid packages are rejected..

**Expected Result:** Packages are validated before publishing; invalid packages are rejected. — delivered exactly as documented.

**Priority:** High

### TC-COR-7-01-009 — Rule: A new version does not reset completions of the old version.

**Type:** Positive

**Covers:** 7.1.1 → A new version does not reset completions of the old version.; Rule: A new version does not reset completions of the old version..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: A new version does not reset completions of the old version..

2. Observe the result and verify the full behavior: A new version does not reset completions of the old version..

**Expected Result:** A new version does not reset completions of the old version. — delivered exactly as documented.

**Priority:** High

### TC-COR-7-01-010 — Rule: Events (viewed) are logged with the account and the timestamp.

**Type:** Positive

**Covers:** 7.1.1 → Events (viewed) are logged with the account and the timestamp.; Rule: Events (viewed) are logged with the account and the timestamp..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Events (viewed) are logged with the account and the timestamp..

2. Observe the result and verify the full behavior: Events (viewed) are logged with the account and the timestamp..

**Expected Result:** Events (viewed) are logged with the account and the timestamp. — delivered exactly as documented.

**Priority:** High

### TC-COR-7-01-011 — Rule: The SCORM/xAPI content is audit-logged with the account and the timestamp.

**Type:** Positive

**Covers:** 7.1.1 → The SCORM/xAPI content is audit-logged with the account and the timestamp.; Rule: The SCORM/xAPI content is audit-logged with the account and the timestamp..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: The SCORM/xAPI content is audit-logged with the account and the timestamp..

2. Observe the result and verify the full behavior: The SCORM/xAPI content is audit-logged with the account and the timestamp..

**Expected Result:** The SCORM/xAPI content is audit-logged with the account and the timestamp. — delivered exactly as documented.

**Priority:** High


## 7.1.2 LMS Connector

### TC-COR-7-01-012 — Connector setup (endpoint, credentials)

**Type:** Positive

**Covers:** 7.1.2 → Connector setup (endpoint, credentials); Rule: Inbound completions are deduplicated by activity ID.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Connector setup (endpoint, credentials).

2. Observe the result and verify the full behavior: Connector setup (endpoint, credentials).

**Expected Result:** Connector setup (endpoint, credentials) — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-013 — Inbound completion sync

**Type:** Positive

**Covers:** 7.1.2 → Inbound completion sync; Rule: Inbound completions are deduplicated by activity ID.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Inbound completion sync.

2. Observe the result and verify the full behavior: Inbound completion sync.

**Expected Result:** Inbound completion sync — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-014 — Outbound assignment push

**Type:** Positive

**Covers:** 7.1.2 → Outbound assignment push; Rule: Inbound completions are deduplicated by activity ID.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Outbound assignment push.

2. Observe the result and verify the full behavior: Outbound assignment push.

**Expected Result:** Outbound assignment push — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-015 — Connection health monitor

**Type:** Positive

**Covers:** 7.1.2 → Connection health monitor; Rule: Inbound completions are deduplicated by activity ID.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Connection health monitor.

2. Observe the result and verify the full behavior: Connection health monitor.

**Expected Result:** Connection health monitor — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-016 — Available on web and mobile

**Type:** Positive

**Covers:** 7.1.2 → Available on web and mobile; Rule: Inbound completions are deduplicated by activity ID.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Available on web and mobile.

2. Observe the result and verify the full behavior: Available on web and mobile.

**Expected Result:** Available on web and mobile — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-017 — Event logging (viewed)

**Type:** Positive

**Covers:** 7.1.2 → Event logging (viewed); Rule: Inbound completions are deduplicated by activity ID.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Event logging (viewed).

2. Observe the result and verify the full behavior: Event logging (viewed).

**Expected Result:** Event logging (viewed) — delivered exactly as documented.

**Priority:** Medium

### TC-COR-7-01-018 — Audit logging of the LMS connector

**Type:** Positive

**Covers:** 7.1.2 → Audit logging of the LMS connector; Rule: Inbound completions are deduplicated by activity ID.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Audit logging of the LMS connector.

2. Observe the result and verify the full behavior: Audit logging of the LMS connector.

**Expected Result:** Audit logging of the LMS connector — delivered exactly as documented.

**Priority:** Medium

### TC-COR-7-01-019 — Rule: Inbound completions are deduplicated by activity ID.

**Type:** Positive

**Covers:** 7.1.2 → Inbound completions are deduplicated by activity ID.; Rule: Inbound completions are deduplicated by activity ID..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Inbound completions are deduplicated by activity ID..

2. Observe the result and verify the full behavior: Inbound completions are deduplicated by activity ID..

**Expected Result:** Inbound completions are deduplicated by activity ID. — delivered exactly as documented.

**Priority:** High

### TC-COR-7-01-020 — Rule: A failed sync retries with exponential backoff for 24 hours.

**Type:** Positive

**Covers:** 7.1.2 → A failed sync retries with exponential backoff for 24 hours.; Rule: A failed sync retries with exponential backoff for 24 hours..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: A failed sync retries with exponential backoff for 24 hours..

2. Observe the result and verify the full behavior: A failed sync retries with exponential backoff for 24 hours..

**Expected Result:** A failed sync retries with exponential backoff for 24 hours. — delivered exactly as documented.

**Priority:** High

### TC-COR-7-01-021 — Rule: Events (viewed) are logged with the account and the timestamp.

**Type:** Positive

**Covers:** 7.1.2 → Events (viewed) are logged with the account and the timestamp.; Rule: Events (viewed) are logged with the account and the timestamp..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Events (viewed) are logged with the account and the timestamp..

2. Observe the result and verify the full behavior: Events (viewed) are logged with the account and the timestamp..

**Expected Result:** Events (viewed) are logged with the account and the timestamp. — delivered exactly as documented.

**Priority:** High

### TC-COR-7-01-022 — Rule: The LMS connector is audit-logged with the account and the timestamp.

**Type:** Positive

**Covers:** 7.1.2 → The LMS connector is audit-logged with the account and the timestamp.; Rule: The LMS connector is audit-logged with the account and the timestamp..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: The LMS connector is audit-logged with the account and the timestamp..

2. Observe the result and verify the full behavior: The LMS connector is audit-logged with the account and the timestamp..

**Expected Result:** The LMS connector is audit-logged with the account and the timestamp. — delivered exactly as documented.

**Priority:** High


## 7.1.3 Content Sync

### TC-COR-7-01-023 — Catalog sync (add / update / retire)

**Type:** Positive

**Covers:** 7.1.3 → Catalog sync (add / update / retire); Rule: Retired courses keep their completion history.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Catalog sync (add / update / retire).

2. Observe the result and verify the full behavior: Catalog sync (add / update / retire).

**Expected Result:** Catalog sync (add / update / retire) — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-024 — Metadata propagation (title, duration, skills)

**Type:** Positive

**Covers:** 7.1.3 → Metadata propagation (title, duration, skills); Rule: Retired courses keep their completion history.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Metadata propagation (title, duration, skills).

2. Observe the result and verify the full behavior: Metadata propagation (title, duration, skills).

**Expected Result:** Metadata propagation (title, duration, skills) — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-025 — Sync schedule (hourly / daily)

**Type:** Positive

**Covers:** 7.1.3 → Sync schedule (hourly / daily); Rule: Retired courses keep their completion history.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Sync schedule (hourly / daily).

2. Observe the result and verify the full behavior: Sync schedule (hourly / daily).

**Expected Result:** Sync schedule (hourly / daily) — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-026 — Sync log with conflicts

**Type:** Positive

**Covers:** 7.1.3 → Sync log with conflicts; Rule: Retired courses keep their completion history.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Sync log with conflicts.

2. Observe the result and verify the full behavior: Sync log with conflicts.

**Expected Result:** Sync log with conflicts — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-027 — Available on web and mobile

**Type:** Positive

**Covers:** 7.1.3 → Available on web and mobile; Rule: Retired courses keep their completion history.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Available on web and mobile.

2. Observe the result and verify the full behavior: Available on web and mobile.

**Expected Result:** Available on web and mobile — delivered exactly as documented.

**Priority:** Critical

### TC-COR-7-01-028 — Event logging (viewed)

**Type:** Positive

**Covers:** 7.1.3 → Event logging (viewed); Rule: Retired courses keep their completion history.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Event logging (viewed).

2. Observe the result and verify the full behavior: Event logging (viewed).

**Expected Result:** Event logging (viewed) — delivered exactly as documented.

**Priority:** Medium

### TC-COR-7-01-029 — Audit logging of the content sync

**Type:** Positive

**Covers:** 7.1.3 → Audit logging of the content sync; Rule: Retired courses keep their completion history.

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Audit logging of the content sync.

2. Observe the result and verify the full behavior: Audit logging of the content sync.

**Expected Result:** Audit logging of the content sync — delivered exactly as documented.

**Priority:** Medium

### TC-COR-7-01-030 — Rule: Retired courses keep their completion history.

**Type:** Positive

**Covers:** 7.1.3 → Retired courses keep their completion history.; Rule: Retired courses keep their completion history..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Retired courses keep their completion history..

2. Observe the result and verify the full behavior: Retired courses keep their completion history..

**Expected Result:** Retired courses keep their completion history. — delivered exactly as documented.

**Priority:** High

### TC-COR-7-01-031 — Rule: Conflicts are resolved in favor of the source of truth set by the admin.

**Type:** Positive

**Covers:** 7.1.3 → Conflicts are resolved in favor of the source of truth set by the admin.; Rule: Conflicts are resolved in favor of the source of truth set by the admin..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Conflicts are resolved in favor of the source of truth set by the admin..

2. Observe the result and verify the full behavior: Conflicts are resolved in favor of the source of truth set by the admin..

**Expected Result:** Conflicts are resolved in favor of the source of truth set by the admin. — delivered exactly as documented.

**Priority:** High

### TC-COR-7-01-032 — Rule: Events (viewed) are logged with the account and the timestamp.

**Type:** Positive

**Covers:** 7.1.3 → Events (viewed) are logged with the account and the timestamp.; Rule: Events (viewed) are logged with the account and the timestamp..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: Events (viewed) are logged with the account and the timestamp..

2. Observe the result and verify the full behavior: Events (viewed) are logged with the account and the timestamp..

**Expected Result:** Events (viewed) are logged with the account and the timestamp. — delivered exactly as documented.

**Priority:** High

### TC-COR-7-01-033 — Rule: The content sync is audit-logged with the account and the timestamp.

**Type:** Positive

**Covers:** 7.1.3 → The content sync is audit-logged with the account and the timestamp.; Rule: The content sync is audit-logged with the account and the timestamp..

**Preconditions:** A Corporate account is active and the Corporate user is in the state required for this behavior.

**Steps:**

1. As a Corporate user, set up the precondition and perform: The content sync is audit-logged with the account and the timestamp..

2. Observe the result and verify the full behavior: The content sync is audit-logged with the account and the timestamp..

**Expected Result:** The content sync is audit-logged with the account and the timestamp. — delivered exactly as documented.

**Priority:** High
