# 3. Third-Party Tool Integration — Test Cases

User Type: **Super Administrator**
Source: *Mi Digital Academy - Education CRM Features Document*
Spec: third_party_tool_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 |
|---------|--------------------|----------|
| 3.1 Google Drive Integration | OAuth connection (service account, user OAuth) | TC-SA-INT-15-001 |
| 3.1 Google Drive Integration | Content import (Drive files as platform content) | TC-SA-INT-15-002 |
| 3.1 Google Drive Integration | Content sharing (platform content to Drive) | TC-SA-INT-15-003 |
| 3.1 Google Drive Integration | Folder mapping (Drive folders to categories) | TC-SA-INT-15-004 |
| 3.1 Google Drive Integration | Rule: no read permission → skipped and flagged | TC-SA-INT-15-005 |
| 3.1 Google Drive Integration | Rule: unsupported type not imported, flagged | TC-SA-INT-15-006 |
| 3.1 Google Drive Integration | Rule: deleted Drive file → platform copy orphaned | TC-SA-INT-15-007 |
| 3.1 Google Drive Integration | Rule: re-import updates, not duplicates | TC-SA-INT-15-008 |
| 3.1 Google Drive Integration | Audit logging of Google Drive integration | TC-SA-INT-15-009 |
| 3.2 Video Conferencing Integration | Provider selection (Zoom, Teams) | TC-SA-INT-16-001 |
| 3.2 Video Conferencing Integration | API credentials and account binding | TC-SA-INT-16-002 |
| 3.2 Video Conferencing Integration | Meeting creation (auto for scheduled sessions) | TC-SA-INT-16-003 |
| 3.2 Video Conferencing Integration | Join-link generation and distribution | TC-SA-INT-16-004 |
| 3.2 Video Conferencing Integration | Rule: no provider → fallback or blocked | TC-SA-INT-16-005 |
| 3.2 Video Conferencing Integration | Rule: creation failure retried, session flagged | TC-SA-INT-16-006 |
| 3.2 Video Conferencing Integration | Rule: join link only for enrolled participants | TC-SA-INT-16-007 |
| 3.2 Video Conferencing Integration | Rule: credential expiry suspends and alerts | TC-SA-INT-16-008 |
| 3.2 Video Conferencing Integration | Audit logging of video conferencing integration | TC-SA-INT-16-009 |
| 3.3 Payment Gateway Integration | Gateway selection (Stripe, PayPal, Peach) | TC-SA-INT-17-001 |
| 3.3 Payment Gateway Integration | API keys and webhook endpoint | TC-SA-INT-17-002 |
| 3.3 Payment Gateway Integration | Payment method mapping (plans to products) | TC-SA-INT-17-003 |
| 3.3 Payment Gateway Integration | Currency and tax settings | TC-SA-INT-17-004 |
| 3.3 Payment Gateway Integration | Refund and chargeback handling | TC-SA-INT-17-005 |
| 3.3 Payment Gateway Integration | Rule: payment failure → no activation, retry prompt | TC-SA-INT-17-006 |
| 3.3 Payment Gateway Integration | Rule: webhook idempotent (no double-apply) | TC-SA-INT-17-007 |
| 3.3 Payment Gateway Integration | Rule: chargeback flags and suspends per policy | TC-SA-INT-17-008 |
| 3.3 Payment Gateway Integration | Rule: refund reverses access per policy | TC-SA-INT-17-009 |
| 3.3 Payment Gateway Integration | Rule: invalid keys → test fails, stays disabled | TC-SA-INT-17-010 |
| 3.3 Payment Gateway Integration | Audit logging of payment gateway integration | TC-SA-INT-17-011 |
| 3.4 Email Marketing Integration | API key and audience selection | TC-SA-INT-18-001 |
| 3.4 Email Marketing Integration | Audience sync (students, parents, leads) | TC-SA-INT-18-002 |
| 3.4 Email Marketing Integration | Campaign triggers (welcome, milestone, re-engagement) | TC-SA-INT-18-003 |
| 3.4 Email Marketing Integration | Tag and segment mapping | TC-SA-INT-18-004 |
| 3.4 Email Marketing Integration | Rule: unsubscribed not re-added | TC-SA-INT-18-005 |
| 3.4 Email Marketing Integration | Rule: failure logged, retried, last good kept | TC-SA-INT-18-006 |
| 3.4 Email Marketing Integration | Rule: trigger fires once per event per user | TC-SA-INT-18-007 |
| 3.4 Email Marketing Integration | Rule: missing API key suspends and alerts | TC-SA-INT-18-008 |
| 3.4 Email Marketing Integration | Audit logging of email marketing integration | TC-SA-INT-18-009 |
| 3.5 CRM Integration | CRM selection (Salesforce, HubSpot) | TC-SA-INT-19-001 |
| 3.5 CRM Integration | API credentials and object mapping | TC-SA-INT-19-002 |
| 3.5 CRM Integration | Sync direction (platform → CRM, CRM → platform, both) | TC-SA-INT-19-003 |
| 3.5 CRM Integration | Field mapping and deduplication rules | TC-SA-INT-19-004 |
| 3.5 CRM Integration | Rule: duplicate lead merged, not created twice | TC-SA-INT-19-005 |
| 3.5 CRM Integration | Rule: conflict resolved by source of truth | TC-SA-INT-19-006 |
| 3.5 CRM Integration | Rule: failure logged, retried, no corruption | TC-SA-INT-19-007 |
| 3.5 CRM Integration | Rule: deleted record deactivates, not hard-deletes | TC-SA-INT-19-008 |
| 3.5 CRM Integration | Audit logging of CRM integration | TC-SA-INT-19-009 |

## 3.1 Google Drive Integration

### TC-SA-INT-15-001 — OAuth connection (service account, user OAuth)
**Type:** Positive
**Covers:** 3.1 → OAuth connection
**Preconditions:** A Super Admin account is active.
**Steps:**
1. As a Super Admin, open Integrations & APIs → Third-Party Tools → Google Drive and connect via OAuth (service account or user OAuth).
2. Verify the connection is established.
**Expected Result:** OAuth connection — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-15-002 — Content import (Drive files as platform content)
**Type:** Positive
**Covers:** 3.1 → Content import
**Preconditions:** Google Drive is connected.
**Steps:**
1. Import a Drive file as platform content.
2. Verify the file appears as platform content.
**Expected Result:** Content import — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-15-003 — Content sharing (platform content to Drive)
**Type:** Positive
**Covers:** 3.1 → Content sharing
**Preconditions:** Google Drive is connected.
**Steps:**
1. Share a platform content item to Drive.
2. Verify the content appears in the connected Drive.
**Expected Result:** Content sharing — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-15-004 — Folder mapping (Drive folders to categories)
**Type:** Positive
**Covers:** 3.1 → Folder mapping
**Preconditions:** Google Drive is connected.
**Steps:**
1. Map Drive folders to platform categories.
2. Import files and verify they land in the mapped categories.
**Expected Result:** Folder mapping — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-15-005 — Rule: no read permission → skipped and flagged
**Type:** Negative
**Covers:** 3.1 → Rule: permission
**Preconditions:** A Drive file has no read permission.
**Steps:**
1. Run the import.
2. Verify the file is skipped and flagged.
**Expected Result:** A file without read permission is skipped and flagged — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-15-006 — Rule: unsupported type not imported, flagged
**Type:** Negative
**Covers:** 3.1 → Rule: unsupported type
**Preconditions:** A Drive file is an unsupported type.
**Steps:**
1. Run the import.
2. Verify the file is not imported and is flagged.
**Expected Result:** An unsupported file type is not imported and is flagged — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-15-007 — Rule: deleted Drive file → platform copy orphaned
**Type:** Edge
**Covers:** 3.1 → Rule: orphaned copy
**Preconditions:** A Drive file is imported, then deleted in Drive.
**Steps:**
1. Delete the Drive file after import.
2. Verify the platform copy is intact (marked orphaned).
**Expected Result:** A Drive file deleted after import leaves the platform copy intact (marked orphaned) — delivered exactly as documented.
**Priority:** Medium

### TC-SA-INT-15-008 — Rule: re-import updates, not duplicates
**Type:** Negative
**Covers:** 3.1 → Rule: re-import
**Preconditions:** A Drive file was previously imported.
**Steps:**
1. Re-import the same file.
2. Verify the existing content is updated (not a duplicate created).
**Expected Result:** A re-import of the same file updates the existing content (not a duplicate) — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-15-009 — Audit logging of Google Drive integration
**Type:** Positive
**Covers:** 3.1 → Audit logging
**Preconditions:** Google Drive integration changes have been made.
**Steps:**
1. Open the audit trail and filter by Google Drive integration.
2. Verify entries show the action, the change, and the timestamp.
**Expected Result:** Audit logging of Google Drive integration — delivered exactly as documented.
**Priority:** Critical

## 3.2 Video Conferencing Integration

### TC-SA-INT-16-001 — Provider selection (Zoom, Teams)
**Type:** Positive
**Covers:** 3.2 → Provider selection
**Preconditions:** A Super Admin is configuring video conferencing.
**Steps:**
1. Open Third-Party Tools → Video Conferencing and select the provider (Zoom or Microsoft Teams).
2. Verify the selected provider is used for sessions.
**Expected Result:** Provider selection — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-16-002 — API credentials and account binding
**Type:** Positive
**Covers:** 3.2 → Credentials and binding
**Preconditions:** A video conferencing provider is selected.
**Steps:**
1. Enter the API credentials and bind the provider account.
2. Verify the account is bound.
**Expected Result:** API credentials and account binding — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-16-003 — Meeting creation (auto for scheduled sessions)
**Type:** Positive
**Covers:** 3.2 → Meeting creation
**Preconditions:** Video conferencing is configured.
**Steps:**
1. Schedule a session.
2. Verify a meeting is auto-created for the scheduled session.
**Expected Result:** Meeting creation — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-16-004 — Join-link generation and distribution
**Type:** Positive
**Covers:** 3.2 → Join-link generation
**Preconditions:** A meeting is created.
**Steps:**
1. Generate the join link.
2. Verify the join link is distributed to enrolled participants.
**Expected Result:** Join-link generation and distribution — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-16-005 — Rule: no provider → fallback or blocked
**Type:** Negative
**Covers:** 3.2 → Rule: no provider
**Preconditions:** No video conferencing provider is available.
**Steps:**
1. Schedule a session requiring video.
2. Verify it falls back to the built-in option or is blocked.
**Expected Result:** A session with no provider available falls back to the built-in option or is blocked — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-16-006 — Rule: creation failure retried, session flagged
**Type:** Negative
**Covers:** 3.2 → Rule: creation failure
**Preconditions:** Meeting creation fails.
**Steps:**
1. Trigger a meeting creation that fails.
2. Verify it is retried and logged; the session is flagged.
**Expected Result:** A meeting creation failure is retried and logged; the session is flagged — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-16-007 — Rule: join link only for enrolled participants
**Type:** Negative
**Covers:** 3.2 → Rule: link access
**Preconditions:** A meeting has enrolled and non-enrolled users.
**Steps:**
1. Attempt to generate/access a join link as a non-enrolled user.
2. Verify a join link is only generated for enrolled participants.
**Expected Result:** A join link is only generated for enrolled participants — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-16-008 — Rule: credential expiry suspends and alerts
**Type:** Negative
**Covers:** 3.2 → Rule: credential expiry
**Preconditions:** The provider credentials expire.
**Steps:**
1. Let the credentials expire.
2. Verify the integration is suspended and an alert is raised.
**Expected Result:** A credential expiry suspends the integration and raises an alert — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-16-009 — Audit logging of video conferencing integration
**Type:** Positive
**Covers:** 3.2 → Audit logging
**Preconditions:** Video conferencing configuration changes have been made.
**Steps:**
1. Open the audit trail and filter by video conferencing integration.
2. Verify entries show the setting, the change, and the timestamp.
**Expected Result:** Audit logging of video conferencing integration — delivered exactly as documented.
**Priority:** Critical

## 3.3 Payment Gateway Integration

### TC-SA-INT-17-001 — Gateway selection (Stripe, PayPal, Peach)
**Type:** Positive
**Covers:** 3.3 → Gateway selection
**Preconditions:** A Super Admin is configuring the payment gateway.
**Steps:**
1. Open Third-Party Tools → Payment Gateway and select the gateway (Stripe, PayPal, Peach Payments).
2. Verify the selected gateway processes payments.
**Expected Result:** Gateway selection — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-17-002 — API keys and webhook endpoint
**Type:** Positive
**Covers:** 3.3 → API keys and webhook
**Preconditions:** A payment gateway is selected.
**Steps:**
1. Enter the API keys and configure the webhook endpoint.
2. Verify the keys are accepted and the webhook is registered.
**Expected Result:** API keys and webhook endpoint configuration — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-17-003 — Payment method mapping (plans to products)
**Type:** Positive
**Covers:** 3.3 → Payment method mapping
**Preconditions:** The payment gateway is configured.
**Steps:**
1. Map plans to gateway products/prices.
2. Purchase a plan and verify the mapped product is charged.
**Expected Result:** Payment method mapping — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-17-004 — Currency and tax settings
**Type:** Positive
**Covers:** 3.3 → Currency and tax
**Preconditions:** The payment gateway is configured.
**Steps:**
1. Set the currency and tax settings.
2. Process a payment and verify the currency and tax are applied.
**Expected Result:** Currency and tax settings — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-17-005 — Refund and chargeback handling
**Type:** Positive
**Covers:** 3.3 → Refund and chargeback
**Preconditions:** The payment gateway is configured.
**Steps:**
1. Configure the refund and chargeback handling.
2. Process a refund and a chargeback and verify each is handled per the policy.
**Expected Result:** Refund and chargeback handling — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-17-006 — Rule: payment failure → no activation, retry prompt
**Type:** Negative
**Covers:** 3.3 → Rule: payment failure
**Preconditions:** A payment fails at the gateway.
**Steps:**
1. Attempt a payment that fails.
2. Verify the subscription is not activated and the user is prompted to retry.
**Expected Result:** A payment failure does not activate the subscription; the user is prompted to retry — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-17-007 — Rule: webhook idempotent (no double-apply)
**Type:** Negative
**Covers:** 3.3 → Rule: idempotency
**Preconditions:** A duplicate webhook event is received.
**Steps:**
1. Send the same webhook event twice.
2. Verify the event is applied only once (no double-apply).
**Expected Result:** A webhook event is idempotent (duplicate events do not double-apply) — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-17-008 — Rule: chargeback flags and suspends per policy
**Type:** Negative
**Covers:** 3.3 → Rule: chargeback
**Preconditions:** A chargeback is filed.
**Steps:**
1. Process the chargeback.
2. Verify the account is flagged and access suspended per the policy.
**Expected Result:** A chargeback flags the account and suspends access per the policy — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-17-009 — Rule: refund reverses access per policy
**Type:** Negative
**Covers:** 3.3 → Rule: refund
**Preconditions:** A refund is issued.
**Steps:**
1. Process the refund.
2. Verify the subscription access is reversed per the refund policy.
**Expected Result:** A refund reverses the subscription access per the refund policy — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-17-010 — Rule: invalid keys → test fails, stays disabled
**Type:** Negative
**Covers:** 3.3 → Rule: invalid keys
**Preconditions:** The gateway has invalid API keys.
**Steps:**
1. Run a test transaction.
2. Verify the test fails and the gateway stays disabled.
**Expected Result:** A gateway with invalid API keys fails the test transaction and stays disabled — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-17-011 — Audit logging of payment gateway integration
**Type:** Positive
**Covers:** 3.3 → Audit logging
**Preconditions:** Payment gateway configuration changes have been made.
**Steps:**
1. Open the audit trail and filter by payment gateway integration.
2. Verify entries show the setting, the change, and the timestamp.
**Expected Result:** Audit logging of payment gateway integration — delivered exactly as documented.
**Priority:** Critical

## 3.4 Email Marketing Integration

### TC-SA-INT-18-001 — API key and audience selection
**Type:** Positive
**Covers:** 3.4 → API key and audience
**Preconditions:** A Super Admin is configuring email marketing.
**Steps:**
1. Open Third-Party Tools → Email Marketing and enter the Mailchimp API key and select the audience.
2. Verify the connection is established.
**Expected Result:** API key and audience selection — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-18-002 — Audience sync (students, parents, leads)
**Type:** Positive
**Covers:** 3.4 → Audience sync
**Preconditions:** Email marketing is configured.
**Steps:**
1. Map the audience sync (students, parents, leads to Mailchimp lists).
2. Run a sync and verify the audiences are synced to the lists.
**Expected Result:** Audience sync — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-18-003 — Campaign triggers (welcome, milestone, re-engagement)
**Type:** Positive
**Covers:** 3.4 → Campaign triggers
**Preconditions:** Email marketing is configured.
**Steps:**
1. Configure the campaign triggers (welcome, milestone, re-engagement).
2. Trigger each event and verify the campaign fires.
**Expected Result:** Campaign triggers — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-18-004 — Tag and segment mapping
**Type:** Positive
**Covers:** 3.4 → Tag and segment mapping
**Preconditions:** Email marketing is configured.
**Steps:**
1. Map the tags and segments.
2. Sync users and verify they receive the mapped tags/segments.
**Expected Result:** Tag and segment mapping — delivered exactly as documented.
**Priority:** Medium

### TC-SA-INT-18-005 — Rule: unsubscribed not re-added
**Type:** Negative
**Covers:** 3.4 → Rule: unsubscribe
**Preconditions:** A user unsubscribes in Mailchimp.
**Steps:**
1. Run the next audience sync.
2. Verify the unsubscribed user is not re-added.
**Expected Result:** A user who unsubscribes in Mailchimp is not re-added on the next sync — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-18-006 — Rule: failure logged, retried, last good kept
**Type:** Negative
**Covers:** 3.4 → Rule: failure
**Preconditions:** The audience sync fails.
**Steps:**
1. Run a sync that fails.
2. Verify it is logged and retried; the last good audience state is kept.
**Expected Result:** A sync failure is logged and retried; the last good audience state is kept — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-18-007 — Rule: trigger fires once per event per user
**Type:** Negative
**Covers:** 3.4 → Rule: trigger dedup
**Preconditions:** A campaign trigger event occurs multiple times for a user.
**Steps:**
1. Trigger the same event multiple times for the same user.
2. Verify the campaign fires only once per event per user.
**Expected Result:** A campaign trigger fires only once per event per user (no duplicates) — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-18-008 — Rule: missing API key suspends and alerts
**Type:** Negative
**Covers:** 3.4 → Rule: missing key
**Preconditions:** The Mailchimp API key is missing.
**Steps:**
1. Attempt to run a sync.
2. Verify the integration is suspended and an alert is raised.
**Expected Result:** A missing API key suspends the integration and raises an alert — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-18-009 — Audit logging of email marketing integration
**Type:** Positive
**Covers:** 3.4 → Audit logging
**Preconditions:** Email marketing configuration changes have been made.
**Steps:**
1. Open the audit trail and filter by email marketing integration.
2. Verify entries show the setting, the change, and the timestamp.
**Expected Result:** Audit logging of email marketing integration — delivered exactly as documented.
**Priority:** Critical

## 3.5 CRM Integration

### TC-SA-INT-19-001 — CRM selection (Salesforce, HubSpot)
**Type:** Positive
**Covers:** 3.5 → CRM selection
**Preconditions:** A Super Admin is configuring CRM integration.
**Steps:**
1. Open Third-Party Tools → CRM and select the CRM (Salesforce or HubSpot).
2. Verify the selected CRM is used for sync.
**Expected Result:** CRM selection — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-19-002 — API credentials and object mapping
**Type:** Positive
**Covers:** 3.5 → Credentials and object mapping
**Preconditions:** A CRM is selected.
**Steps:**
1. Enter the API credentials and map the objects (lead, contact, account).
2. Verify the credentials are accepted and objects are mapped.
**Expected Result:** API credentials and object mapping — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-19-003 — Sync direction (platform → CRM, CRM → platform, both)
**Type:** Positive
**Covers:** 3.5 → Sync direction
**Preconditions:** CRM integration is configured.
**Steps:**
1. Set the sync direction to platform → CRM and verify records flow one way.
2. Set it to bidirectional and verify records flow both ways.
**Expected Result:** Sync direction — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-19-004 — Field mapping and deduplication rules
**Type:** Positive
**Covers:** 3.5 → Field mapping and dedup
**Preconditions:** CRM integration is configured.
**Steps:**
1. Map the fields and set the deduplication rules.
2. Run a sync and verify fields map and duplicates are deduped.
**Expected Result:** Field mapping and deduplication rules — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-19-005 — Rule: duplicate lead merged, not created twice
**Type:** Negative
**Covers:** 3.5 → Rule: dedup
**Preconditions:** A lead matches an existing CRM lead by the dedup rule.
**Steps:**
1. Run the sync.
2. Verify the duplicate lead is merged, not created twice.
**Expected Result:** A duplicate lead (matched by dedup rule) is merged, not created twice — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-19-006 — Rule: conflict resolved by source of truth
**Type:** Negative
**Covers:** 3.5 → Rule: conflict
**Preconditions:** The platform and CRM have conflicting data for a record.
**Steps:**
1. Run the sync.
2. Verify the conflict is resolved by the configured source of truth.
**Expected Result:** A sync conflict is resolved by the configured source of truth — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-19-007 — Rule: failure logged, retried, no corruption
**Type:** Negative
**Covers:** 3.5 → Rule: failure
**Preconditions:** The CRM sync fails.
**Steps:**
1. Run a sync that fails.
2. Verify it is logged and retried; existing records are not corrupted.
**Expected Result:** A sync failure is logged and retried; existing records are not corrupted — delivered exactly as documented.
**Priority:** Critical

### TC-SA-INT-19-008 — Rule: deleted record deactivates, not hard-deletes
**Type:** Negative
**Covers:** 3.5 → Rule: deletion
**Preconditions:** A platform record is deleted.
**Steps:**
1. Delete the record and run the sync.
2. Verify the CRM record is deactivated (not hard-deleted).
**Expected Result:** A deleted platform record deactivates (not hard-deletes) the CRM record — delivered exactly as documented.
**Priority:** High

### TC-SA-INT-19-009 — Audit logging of CRM integration
**Type:** Positive
**Covers:** 3.5 → Audit logging
**Preconditions:** CRM integration configuration changes have been made.
**Steps:**
1. Open the audit trail and filter by CRM integration.
2. Verify entries show the setting, the change, and the timestamp.
**Expected Result:** Audit logging of CRM integration — delivered exactly as documented.
**Priority:** Critical
