|
1 | 1 | #!/usr/bin/env bash |
2 | 2 | # test-lab-13-05.sh — Lab 13-05: Advanced Integration |
3 | | -# Module 13: Odoo ERP · INT-05: Odoo↔Keycloak OIDC |
| 3 | +# Module 13: Odoo ERP · INT-05: Odoo↔Keycloak OIDC · INT-12: Odoo↔SuiteCRM customer sync |
4 | 4 | # Services: PostgreSQL · Redis · OpenLDAP · Keycloak · WireMock (Snipe-IT/SuiteCRM-mock) · Mailhog · Odoo |
5 | 5 | # Ports: Odoo:8370 Gevent:8371 WireMock:8372 KC:8470 LDAP:3896 MH:8670 |
6 | 6 | # INT-05: LDAP seed (odooadmin/odoouser1/odoouser2) · KC LDAP federation · Odoo OIDC provider · token issuance |
| 7 | +# INT-12: SuiteCRM JSONRPC WireMock stub · SUITECRM_URL/JSONRPC_ENDPOINT env vars · container reach |
7 | 8 | set -euo pipefail |
8 | 9 |
|
9 | 10 | LAB_ID="13-05" |
@@ -489,10 +490,61 @@ if [ -n "${OIDC_ACCESS}" ]; then |
489 | 490 | fi |
490 | 491 | fi |
491 | 492 |
|
| 493 | +# ── Phase 7: INT-12 SuiteCRM ↔ Odoo customer sync (partner API WireMock) ────── |
| 494 | +section "Phase 7: SuiteCRM Customer Sync WireMock + Env Vars (INT-12)" |
| 495 | + |
| 496 | +# 7.1 -- Register SuiteCRM JSONRPC contact list stub |
| 497 | +HTTP_STATUS=$(curl -sf -o /dev/null -w "%{http_code}" \ |
| 498 | + -X POST "${MOCK_URL}/__admin/mappings" \ |
| 499 | + -H "Content-Type: application/json" \ |
| 500 | + -d '{ |
| 501 | + "request": {"method": "POST", "urlPattern": "/jsonrpc.*"}, |
| 502 | + "response": {"status": 200, |
| 503 | + "headers": {"Content-Type": "application/json"}, |
| 504 | + "body": "{\\"result\\":{\\"entry_list\\":[{\\"id\\":\\"contact-001\\",\\"name\\":\\"Alice Odoo\\",\\"email1\\":\\"alice@lab.local\\",\\"account_name\\":\\"Odoo Corp\\"}]}}"}} |
| 505 | + }' || echo "000") |
| 506 | +[ "${HTTP_STATUS}" = "201" ] \ |
| 507 | + && pass "INT-12: WireMock stub /jsonrpc (SuiteCRM contact list) registered" \ |
| 508 | + || fail "INT-12: WireMock stub /jsonrpc failed (HTTP ${HTTP_STATUS})" |
| 509 | + |
| 510 | +# 7.2 -- Verify SuiteCRM JSONRPC stub responds |
| 511 | +if curl -sf -X POST "${MOCK_URL}/jsonrpc" \ |
| 512 | + -H "Content-Type: application/json" \ |
| 513 | + -d '{"method":"get_entry_list","parameters":{"module_name":"Contacts"}}' \ |
| 514 | + | grep -q 'entry_list'; then |
| 515 | + pass "INT-12: WireMock SuiteCRM JSONRPC contact list responds correctly" |
| 516 | +else |
| 517 | + fail "INT-12: WireMock SuiteCRM JSONRPC contact list not responding" |
| 518 | +fi |
| 519 | + |
| 520 | +# 7.3 -- Env var checks for INT-12 |
| 521 | +for envpair in "SUITECRM_URL=http://odoo-i05-mock" "SUITECRM_JSONRPC_ENDPOINT=/jsonrpc"; do |
| 522 | + KEY="${envpair%%=*}" |
| 523 | + VAL="${envpair#*=}" |
| 524 | + if docker exec odoo-i05-app env 2>/dev/null | grep -q "${KEY}=${VAL}"; then |
| 525 | + pass "INT-12: Env ${KEY} set correctly in Odoo container" |
| 526 | + else |
| 527 | + fail "INT-12: Env ${KEY} not set or wrong in Odoo container" |
| 528 | + fi |
| 529 | +done |
| 530 | + |
| 531 | +# 7.4 -- Odoo container → SuiteCRM WireMock reachable |
| 532 | +if docker exec odoo-i05-app curl -sf \ |
| 533 | + -X POST "http://odoo-i05-mock:8080/jsonrpc" \ |
| 534 | + -H "Content-Type: application/json" \ |
| 535 | + -d '{"method":"get_entry_list","parameters":{"module_name":"Contacts"}}' \ |
| 536 | + > /dev/null 2>&1; then |
| 537 | + pass "INT-12: Odoo container can reach SuiteCRM JSONRPC endpoint (WireMock)" |
| 538 | +else |
| 539 | + fail "INT-12: Odoo container cannot reach SuiteCRM JSONRPC endpoint" |
| 540 | +fi |
| 541 | + |
492 | 542 | # ── Results ─────────────────────────────────────────────────────────────────── |
493 | 543 | echo "" |
494 | 544 | echo -e "${CYAN}============================================================${NC}" |
495 | | -echo -e " Lab ${LAB_ID} Complete — INT-05: Odoo↔Keycloak OIDC" |
| 545 | +echo -e " Lab ${LAB_ID}: INT-05 + INT-12 Complete" |
| 546 | +echo -e " INT-05: Odoo ↔ Keycloak OIDC" |
| 547 | +echo -e " INT-12: Odoo ↔ SuiteCRM customer sync" |
496 | 548 | echo -e " ${GREEN}PASS: ${PASS}${NC} | ${RED}FAIL: ${FAIL}${NC}" |
497 | 549 | echo -e "${CYAN}============================================================${NC}" |
498 | 550 |
|
|
0 commit comments