7.1 KiB
7.1 KiB
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
- Odoo remains the single source of truth: Inventory, prices, variants, customers, and orders reside in Odoo.
- Meta Commerce Catalog sync: Full batch synchronization and catalog feed endpoints.
- Instagram Shopping discovery: Synced catalog products link directly to Odoo product URLs.
- WhatsApp Business Cloud API: Compliant v19.0 client with approved template mapping.
- WhatsApp Webhook: Verified challenge and POST message processing.
- Deduplication Engine: Zero duplicate notifications or message records.
- Non-blocking API safety: Checkout, sales orders, POS, and inventory are immune to external API failures.
- Security & Credentials: Tokens and secrets protected with security groups, never exposed to public frontend or unmasked in logs.
- Admin Dashboard: Live KPI counters, connection tests, and sync buttons.
- Multi-company & Multi-website safety: Independent credentials per website and company.
- Zero fake Marketplace APIs: Complies with official Meta Commerce Catalog standards.