diff --git a/infra/run-domain-check.sh b/infra/run-domain-check.sh index a701b21..74d6122 100755 --- a/infra/run-domain-check.sh +++ b/infra/run-domain-check.sh @@ -79,9 +79,9 @@ fl="$(docker ps -q --filter 'name=flowable-rest' | head -1)" fl_base="http://$(ip "$fl"):8080/flowable-rest/service" reg_id="${loc##*/}" -# Extracts the Beoordelen task id for our registration from a Flowable task-query response on stdin. -# Tolerates an empty/non-JSON body (a transient failure during the poll) by printing nothing. -task_for_reg() { REG_ID="$reg_id" python3 -c "import os,sys,json +# Extracts the Beoordelen task id for a given registration from a Flowable task-query response on +# stdin. Tolerates an empty/non-JSON body (a transient failure during the poll) by printing nothing. +task_for_reg() { REG_ID="$1" python3 -c "import os,sys,json try: d=json.load(sys.stdin) except Exception: @@ -98,7 +98,7 @@ echo ">> polling Flowable for the Beoordelen user task (werkbak)" task_id="" for _ in $(seq 1 30); do resp="$(flcurl -X POST "$fl_base/query/tasks" -H 'Content-Type: application/json' -d "$query" 2>/dev/null || true)" - task_id="$(printf '%s' "$resp" | task_for_reg)" + task_id="$(printf '%s' "$resp" | task_for_reg "$reg_id")" [ -n "$task_id" ] && break sleep 2 done @@ -115,7 +115,44 @@ flcurl -X POST "$fl_base/runtime/tasks/$task_id" -H 'Content-Type: application/j echo ">> asserting the process finished (no Beoordelen task remains for the registration)" resp="$(flcurl -X POST "$fl_base/query/tasks" -H 'Content-Type: application/json' -d "$query")" -still="$(printf '%s' "$resp" | task_for_reg)" +still="$(printf '%s' "$resp" | task_for_reg "$reg_id")" [ -z "$still" ] || { echo "FAIL — Beoordelen task $still still active after completion" >&2; exit 1; } echo "OK — behandelaar claimed and completed the Beoordelen task; the registratie process finished" + +# ── S-11: withdrawal. A second registration parks at Beoordelen; the citizen withdraws it via the +# domain, which delivers the RegistratieIngetrokken message to the task's execution, tripping the +# BPMN boundary event so the process ends and the Beoordelen task disappears (ADR-0014). ──────────── +echo ">> submitting a second registration to withdraw" +loc2="$(docker run --rm --network "$net" curlimages/curl:latest \ + -fsS -D - -o /dev/null -X POST "http://$dom_ip:8080/registrations" \ + -H 'Content-Type: application/json' -d '{"bsn":"123456782"}' \ + | sed -n 's/\r$//; s/^[Ll]ocation: //p' | head -1)" +[ -n "$loc2" ] || { echo "FAIL — second POST /registrations returned no Location" >&2; exit 1; } +reg_id2="${loc2##*/}" +echo ">> second registration $reg_id2" + +echo ">> polling Flowable for its Beoordelen task" +task_id2="" +for _ in $(seq 1 30); do + resp="$(flcurl -X POST "$fl_base/query/tasks" -H 'Content-Type: application/json' -d "$query" 2>/dev/null || true)" + task_id2="$(printf '%s' "$resp" | task_for_reg "$reg_id2")" + [ -n "$task_id2" ] && break + sleep 2 +done +[ -n "$task_id2" ] || { echo "FAIL — no Beoordelen task appeared for registration $reg_id2" >&2; docker logs "$dom" 2>&1 | tail -15 >&2; exit 1; } +echo ">> Beoordelen task $task_id2 is waiting; withdrawing the registration via the domain" + +docker run --rm --network "$net" curlimages/curl:latest \ + -fsS -X POST "http://$dom_ip:8080/registrations/$reg_id2/withdraw" >/dev/null + +echo ">> asserting the process was cancelled (no Beoordelen task remains for the registration)" +gone="" +for _ in $(seq 1 15); do + resp="$(flcurl -X POST "$fl_base/query/tasks" -H 'Content-Type: application/json' -d "$query" 2>/dev/null || true)" + still2="$(printf '%s' "$resp" | task_for_reg "$reg_id2")" + [ -z "$still2" ] && { gone=1; break; } + sleep 2 +done +[ -n "$gone" ] || { echo "FAIL — Beoordelen task for $reg_id2 still active after withdrawal" >&2; docker logs "$dom" 2>&1 | tail -15 >&2; exit 1; } +echo "OK — withdrawal cancelled the Beoordelen task; the registratie process ended (ingetrokken)" exit 0