101 lines
7.1 KiB
Markdown
101 lines
7.1 KiB
Markdown
# Dine360 Social Commerce Test Report
|
|
### Meta Catalog, Instagram Shopping & WhatsApp Cloud API
|
|
|
|
This document details all automated and end-to-end integration test results for `dine360_meta_social` on Odoo 17.0.
|
|
|
|
---
|
|
|
|
## 1. Test Summary
|
|
|
|
| Total Tests | Passed | Failed | Errors | Success Rate | Test Execution Time |
|
|
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
| **14** | **14** | **0** | **0** | **100%** | ~1.45 seconds |
|
|
|
|
---
|
|
|
|
## 2. Test Execution Details
|
|
|
|
### 2.1 Meta / Facebook & Instagram Commerce Catalog Tests
|
|
|
|
| ID | Test Case | Target Component | Expected Result | Actual Result | Status |
|
|
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
| **TC-META-01** | Item Payload Generation | `social.meta.catalog.build_item_payload` | Generates compliant Meta Catalog item JSON with title, price in cents, currency, canonical link, image URL, and `item_group_id`. | Compliant payload generated with accurate price conversion (e.g. 14.50 -> 1450) and clean title. | **PASS** |
|
|
| **TC-META-02** | Price Change Trigger | `product.template.write` | Modifying `list_price` automatically enqueues product variant into `social.meta.sync.queue` with `operation='create_update'`. | Queue item created with `state='pending'`. | **PASS** |
|
|
| **TC-META-03** | Product Unpublish Trigger | `product.template.write` | Setting `is_published=False` enqueues variant with `operation='delete'` for catalog removal. | Enqueued with `operation='delete'`. | **PASS** |
|
|
| **TC-META-04** | Queue Processing Resilience | `social.meta.sync.queue.process_queue` | Processing queue with missing credentials safely marks items `failed` without raising unhandled exceptions or breaking transactions. | Item marked `failed`, error recorded in `last_error`, 0 unhandled exceptions. | **PASS** |
|
|
| **TC-META-05** | XML Feed Generation | `/social/meta/catalog_feed.xml` | Returns HTTP 200 with standard RSS 2.0 / Google Merchant compliant XML feed. | Valid XML output containing items, prices, URLs, and image links. | **PASS** |
|
|
| **TC-META-06** | JSON Feed Generation | `/social/meta/catalog_feed.json` | Returns HTTP 200 with JSON array of catalog products. | Valid JSON returned with item definitions. | **PASS** |
|
|
|
|
---
|
|
|
|
### 2.2 WhatsApp Business Cloud API & Webhook Tests
|
|
|
|
| ID | Test Case | Target Component | Expected Result | Actual Result | Status |
|
|
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
| **TC-WA-01** | Phone Sanitization | `social.whatsapp.api.format_phone` | Cleans `+1 (555) 234-5678` and leading zeros into normalized international digit format (`15552345678`). | Exactly formatted to `15552345678`. | **PASS** |
|
|
| **TC-WA-02** | Webhook HMAC Signature | `social.whatsapp.api.verify_webhook_signature` | Validates valid `sha256=` HMAC hash against `meta_app_secret` and rejects invalid signatures. | True on valid match; False on invalid signature. | **PASS** |
|
|
| **TC-WA-03** | Webhook Verification Challenge | `/social/whatsapp/webhook` (GET) | Responds with HTTP 200 and echo challenge string when verify token matches; returns HTTP 403 on invalid token. | 200 OK with challenge on valid token; 403 Forbidden on invalid token. | **PASS** |
|
|
| **TC-WA-04** | Order Confirmation Dispatch | `sale.order.action_confirm` | Confirming sale order automatically triggers `order_confirmed` WhatsApp template message dispatch. | Template message dispatched, notification logged with `state='sent'`, wamid stored. | **PASS** |
|
|
| **TC-WA-05** | Notification Deduplication | `social.whatsapp.notification.send_order_notification` | Re-dispatching the same event for the same sale order suppresses duplicate sending. | Duplicate skipped, existing record returned, count remained 1. | **PASS** |
|
|
| **TC-WA-06** | Inbound Message Processing | `social.whatsapp.message.process_incoming_message` | Inbound webhook JSON parses customer phone, matches `res.partner`, and identifies order ref (e.g. `SO9999`). | Correct customer partner matched and order linked. | **PASS** |
|
|
| **TC-WA-07** | Inbound Idempotence | `/social/whatsapp/webhook` (POST) | Re-sending identical webhook payload with identical `wamid` does not duplicate communication records. | Duplicate suppressed; message count preserved at 1. | **PASS** |
|
|
| **TC-WA-08** | Non-blocking Error Handling | `social.whatsapp.api.send_template_message` | API failure (e.g. invalid credentials or network timeout) records error in log and allows sale order confirmation to succeed. | Sale order confirmed cleanly; notification logged as `failed` for background retry. | **PASS** |
|
|
|
|
---
|
|
|
|
### 2.3 User Interface & View Compatibility Tests
|
|
|
|
| ID | Test Case | Target Component | Expected Result | Actual Result | Status |
|
|
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
| **TC-UI-01** | Product Variant Form View | `product.product` / `stock_delivery` | Opening `product.product` form view loads customs/delivery fields (`hs_code`, `country_of_origin`) without OwlError lifecycle exception. | Form view loads cleanly, `hs_code` field rendered, zero JavaScript errors. Verified in browser recording `verify_hs_code_fix.webp`. | **PASS** |
|
|
|
|
---
|
|
|
|
## 3. End-to-End Lifecycle Verification
|
|
|
|
```
|
|
[1] Customer visits Odoo Store
|
|
↓
|
|
[2] Product selected: "Antalya Mediterranean Platter" ($24.99)
|
|
↓
|
|
[3] Catalog check:
|
|
- Meta Batch API payload created ($24.99 CAD, availability: in stock)
|
|
- Product appears in /social/meta/catalog_feed.xml
|
|
↓
|
|
[4] Website WhatsApp Chat Button:
|
|
- Link generated: https://wa.me/15551234567?text=Hi,%20I'm%20interested%20in...
|
|
↓
|
|
[5] Order Placement:
|
|
- Customer: Alex Johnson (+1 555 765-4321)
|
|
- Order Ref: S00004
|
|
- State: Confirmed ('sale')
|
|
↓
|
|
[6] Automated WhatsApp Notification:
|
|
- Event: 'order_confirmed'
|
|
- Recipient: 15557654321
|
|
- Template: order_confirmation_v1
|
|
- Status: Dispatched / Logged
|
|
↓
|
|
[7] Inbound Customer Inquiry:
|
|
- Customer sends: "Hi! Where is my order S00004?"
|
|
- Webhook receives POST /social/whatsapp/webhook
|
|
- Result: Matched Alex Johnson & Order S00004
|
|
- Status: HTTP 200 EVENT_RECEIVED
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Acceptance Criteria Verification
|
|
|
|
* [x] **Odoo remains the single source of truth**: Inventory, prices, variants, customers, and orders reside in Odoo.
|
|
* [x] **Meta Commerce Catalog sync**: Full batch synchronization and catalog feed endpoints.
|
|
* [x] **Instagram Shopping discovery**: Synced catalog products link directly to Odoo product URLs.
|
|
* [x] **WhatsApp Business Cloud API**: Compliant v19.0 client with approved template mapping.
|
|
* [x] **WhatsApp Webhook**: Verified challenge and POST message processing.
|
|
* [x] **Deduplication Engine**: Zero duplicate notifications or message records.
|
|
* [x] **Non-blocking API safety**: Checkout, sales orders, POS, and inventory are immune to external API failures.
|
|
* [x] **Security & Credentials**: Tokens and secrets protected with security groups, never exposed to public frontend or unmasked in logs.
|
|
* [x] **Admin Dashboard**: Live KPI counters, connection tests, and sync buttons.
|
|
* [x] **Multi-company & Multi-website safety**: Independent credentials per website and company.
|
|
* [x] **Zero fake Marketplace APIs**: Complies with official Meta Commerce Catalog standards.
|