Skip to content

Commit 9dfe75f

Browse files
committed
feat(integration): INT-12 SuiteCRM->Odoo partner sync Phase 3e + CI
1 parent ab662df commit 9dfe75f

2 files changed

Lines changed: 57 additions & 4 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ jobs:
188188
run: docker compose -f docker/docker-compose.sso.yml down -v
189189

190190
lab-05-smoke:
191-
name: Lab 05 — INT-04 SuiteCRM↔Keycloak SAML + INT-09 SuiteCRM↔FreePBX CTI
191+
name: Lab 05 — INT-04 SuiteCRM↔Keycloak SAML + INT-09 SuiteCRM↔FreePBX CTI + INT-12 SuiteCRM↔Odoo customer sync
192192
runs-on: ubuntu-latest
193193
needs: validate
194194
continue-on-error: true

tests/labs/test-lab-12-05.sh

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
#!/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)
33
# Module 12: SuiteCRM CRM
44
# Services: MariaDB · Redis · OpenLDAP · LDAP-seed · Keycloak · WireMock · Mailhog · SuiteCRM · Cron
55
# Ports: SuiteCRM:8362 WireMock:8363 KC:8461 LDAP:3895 MH:8661
66
# INT-04: Keycloak SAML client provisioning + FreeIPA LDAP federation + SP metadata check
77
# 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)
89
set -euo pipefail
910

1011
LAB_ID="12-05"
@@ -430,10 +431,62 @@ else
430431
fail "SuiteCRM container cannot reach WireMock (FreePBX mock)"
431432
fi
432433

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 ───────────────────────────────────────────────────────────────────
434484
echo ""
435485
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"
437490
echo -e " ${GREEN}PASS: ${PASS}${NC} | ${RED}FAIL: ${FAIL}${NC}"
438491
echo -e "${CYAN}============================================================${NC}"
439492

0 commit comments

Comments
 (0)