@@ -480,13 +480,59 @@ else
480480 fail " INT-12: SuiteCRM container cannot reach Odoo partner sync endpoint"
481481fi
482482
483+ # ── Phase 3f: INT-13 Nextcloud CalDAV CalDAV ↔ SuiteCRM Calendar Sync ────────
484+ section " Phase 3f: Nextcloud CalDAV Env Vars + CalDAV stub (INT-13)"
485+
486+ # Env var checks for INT-13
487+ for envpair in " NEXTCLOUD_USER=admin" " NEXTCLOUD_CALDAV_PATH=/remote.php/dav/calendars/admin" ; do
488+ KEY=" ${envpair%% =* } "
489+ VAL=" ${envpair#* =} "
490+ if docker exec suitecrm-i05-app env | grep -q " ${KEY} =${VAL} " ; then
491+ pass " INT-13: Env ${KEY} set correctly"
492+ else
493+ fail " INT-13: Env ${KEY} not set or wrong in SuiteCRM container"
494+ fi
495+ done
496+
497+ # Register CalDAV PROPFIND stub (Nextcloud calendars endpoint)
498+ HTTP_STATUS=$( curl -sf -o /dev/null -w " %{http_code}" \
499+ -X POST " ${MOCK_URL} /__admin/mappings" \
500+ -H " Content-Type: application/json" \
501+ -d ' {
502+ "request": {"method": "PROPFIND", "url": "/remote.php/dav/calendars/admin/"},
503+ "response": {"status": 207,
504+ "headers": {"Content-Type": "application/xml; charset=utf-8"},
505+ "body": "<?xml version=\\"1.0\\"?><d:multistatus xmlns:d=\\"DAV:\\"><d:response><d:href>/remote.php/dav/calendars/admin/</d:href><d:propstat><d:prop><d:displayname>admin</d:displayname></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response></d:multistatus>"}
506+ }' || echo " 000" )
507+ [ " ${HTTP_STATUS} " = " 201" ] \
508+ && pass " INT-13: WireMock stub CalDAV PROPFIND registered" \
509+ || fail " INT-13: WireMock stub CalDAV PROPFIND failed (HTTP ${HTTP_STATUS} )"
510+
511+ # Verify CalDAV PROPFIND stub responds with 207
512+ CALDAV_HTTP=$( curl -s -o /dev/null -w " %{http_code}" \
513+ -X PROPFIND " ${MOCK_URL} /remote.php/dav/calendars/admin/" \
514+ -H " Depth: 1" )
515+ [ " ${CALDAV_HTTP} " = " 207" ] \
516+ && pass " INT-13: WireMock CalDAV PROPFIND stub responds 207" \
517+ || fail " INT-13: WireMock CalDAV PROPFIND stub returned ${CALDAV_HTTP} "
518+
519+ # SuiteCRM container → WireMock CalDAV endpoint reachable
520+ if docker exec suitecrm-i05-app curl -sf \
521+ -X PROPFIND " http://suitecrm-i05-mock:8080/remote.php/dav/calendars/admin/" \
522+ -H " Depth: 1" > /dev/null 2>&1 ; then
523+ pass " INT-13: SuiteCRM container can reach Nextcloud CalDAV endpoint (WireMock)"
524+ else
525+ fail " INT-13: SuiteCRM container cannot reach Nextcloud CalDAV endpoint (WireMock)"
526+ fi
527+
483528# ── Results ───────────────────────────────────────────────────────────────────
484529echo " "
485530echo -e " ${CYAN} ============================================================${NC} "
486- echo -e " Lab ${LAB_ID} : INT-04 + INT-09 + INT-12 Complete"
531+ echo -e " Lab ${LAB_ID} : INT-04 + INT-09 + INT-12 + INT-13 Complete"
487532echo -e " INT-04: SuiteCRM ↔ Keycloak SAML"
488533echo -e " INT-09: SuiteCRM ↔ FreePBX CTI"
489534echo -e " INT-12: SuiteCRM ↔ Odoo customer sync"
535+ echo -e " INT-13: SuiteCRM ↔ Nextcloud CalDAV calendar sync"
490536echo -e " ${GREEN} PASS: ${PASS}${NC} | ${RED} FAIL: ${FAIL}${NC} "
491537echo -e " ${CYAN} ============================================================${NC} "
492538
0 commit comments