|
1 | 1 | #!/usr/bin/env bash |
2 | | -# test-lab-12-05.sh — Lab 12-05: Advanced Integration (INT-04 + INT-09) |
| 2 | +# test-lab-12-05.sh — Lab 12-05: Advanced Integration (INT-04 + INT-09 + INT-12) |
3 | 3 | # Module 12: SuiteCRM CRM |
4 | 4 | # Services: MariaDB · Redis · OpenLDAP · LDAP-seed · Keycloak · WireMock · Mailhog · SuiteCRM · Cron |
5 | 5 | # Ports: SuiteCRM:8362 WireMock:8363 KC:8461 LDAP:3895 MH:8661 |
6 | 6 | # INT-04: Keycloak SAML client provisioning + FreeIPA LDAP federation + SP metadata check |
7 | 7 | # INT-09: FreePBX CTI click-to-call WireMock stubs + env var validation |
| 8 | +# INT-12: Odoo customer sync (JSONRPC WireMock stub + env var validation + container reach) |
8 | 9 | set -euo pipefail |
9 | 10 |
|
10 | 11 | LAB_ID="12-05" |
@@ -430,10 +431,62 @@ else |
430 | 431 | fail "SuiteCRM container cannot reach WireMock (FreePBX mock)" |
431 | 432 | fi |
432 | 433 |
|
433 | | -# ── Results (INT-04 + INT-09) ───────────────────────────────────────────────── |
| 434 | +# ── Phase 3e: INT-12 Odoo ↔ SuiteCRM Customer Sync (partner API + env vars) ── |
| 435 | +section "Phase 3e: Odoo Customer Sync Env Vars + partner stub (INT-12)" |
| 436 | + |
| 437 | +# Register res.partners search stub |
| 438 | +HTTP_STATUS=$(curl -sf -o /dev/null -w "%{http_code}" \ |
| 439 | + -X POST "${MOCK_URL}/__admin/mappings" \ |
| 440 | + -H "Content-Type: application/json" \ |
| 441 | + -d '{ |
| 442 | + "request": {"method": "POST", "urlPattern": "/web/dataset/call_kw.*"}, |
| 443 | + "response": {"status": 200, |
| 444 | + "headers": {"Content-Type": "application/json"}, |
| 445 | + "body": "{\\"jsonrpc\\":\\"2.0\\",\\"id\\":3,\\"result\\":[{\\"id\\":1,\\"name\\":\\"Acme Corp\\",\\"email\\":\\"acme@lab.local\\",\\"is_company\\":true}]}"} |
| 446 | + }' || echo "000") |
| 447 | +[ "${HTTP_STATUS}" = "201" ] \ |
| 448 | + && pass "INT-12: WireMock stub /web/dataset/call_kw (res.partner search) registered" \ |
| 449 | + || fail "INT-12: WireMock stub /web/dataset/call_kw failed (HTTP ${HTTP_STATUS})" |
| 450 | + |
| 451 | +# Verify res.partner call_kw stub responds |
| 452 | +if curl -sf -X POST "${MOCK_URL}/web/dataset/call_kw" \ |
| 453 | + -H "Content-Type: application/json" \ |
| 454 | + -d '{"jsonrpc":"2.0","method":"call","id":3,"params":{"model":"res.partner","method":"search_read","args":[[]]}}' \ |
| 455 | + | grep -q '"name"'; then |
| 456 | + pass "INT-12: WireMock Odoo res.partner search_read responds correctly" |
| 457 | +else |
| 458 | + fail "INT-12: WireMock Odoo res.partner search_read not responding" |
| 459 | +fi |
| 460 | + |
| 461 | +# Env var checks for INT-12 |
| 462 | +for envpair in "ODOO_DB=odoo" "ODOO_USER=admin" "ODOO_API_KEY=lab-odoo-key-05" "ODOO_JSONRPC_ENDPOINT=/jsonrpc"; do |
| 463 | + KEY="${envpair%%=*}" |
| 464 | + VAL="${envpair#*=}" |
| 465 | + if docker exec suitecrm-i05-app env | grep -q "${KEY}=${VAL}"; then |
| 466 | + pass "INT-12: Env ${KEY} set correctly" |
| 467 | + else |
| 468 | + fail "INT-12: Env ${KEY} not set or wrong in SuiteCRM container" |
| 469 | + fi |
| 470 | +done |
| 471 | + |
| 472 | +# SuiteCRM can reach Odoo endpoint (via WireMock) |
| 473 | +if docker exec suitecrm-i05-app curl -sf \ |
| 474 | + -X POST "http://suitecrm-i05-mock:8080/web/dataset/call_kw" \ |
| 475 | + -H "Content-Type: application/json" \ |
| 476 | + -d '{"jsonrpc":"2.0","method":"call","id":4,"params":{"model":"res.partner","method":"search_read","args":[[]]}}' \ |
| 477 | + > /dev/null 2>&1; then |
| 478 | + pass "INT-12: SuiteCRM container can reach Odoo partner sync endpoint (WireMock)" |
| 479 | +else |
| 480 | + fail "INT-12: SuiteCRM container cannot reach Odoo partner sync endpoint" |
| 481 | +fi |
| 482 | + |
| 483 | +# ── Results ─────────────────────────────────────────────────────────────────── |
434 | 484 | echo "" |
435 | 485 | echo -e "${CYAN}============================================================${NC}" |
436 | | -echo -e " Lab ${LAB_ID} INT-04 + INT-09 Complete" |
| 486 | +echo -e " Lab ${LAB_ID}: INT-04 + INT-09 + INT-12 Complete" |
| 487 | +echo -e " INT-04: SuiteCRM ↔ Keycloak SAML" |
| 488 | +echo -e " INT-09: SuiteCRM ↔ FreePBX CTI" |
| 489 | +echo -e " INT-12: SuiteCRM ↔ Odoo customer sync" |
437 | 490 | echo -e " ${GREEN}PASS: ${PASS}${NC} | ${RED}FAIL: ${FAIL}${NC}" |
438 | 491 | echo -e "${CYAN}============================================================${NC}" |
439 | 492 |
|
|
0 commit comments