From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-flow-engine/test/contract-smoke.sh |   42 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/jnpf-flow-engine/test/contract-smoke.sh b/jnpf-flow-engine/test/contract-smoke.sh
new file mode 100644
index 0000000..efb5f07
--- /dev/null
+++ b/jnpf-flow-engine/test/contract-smoke.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+# 濂戠害鍐掔儫锛氬鍗曚釜寮曟搸瀹炰緥閫愮鐐规柇瑷� /api/Flow/* 鐨勫搷搴旓紝瑕嗙洊 27 绔偣鐨勯敊璇爜/绌烘暟鎹矾寰勩��
+# 鐢ㄦ硶锛�./contract-smoke.sh [寮曟搸base锛岄粯璁� http://127.0.0.1:31000]
+#
+# 浣滀负 A/B 瀵规瘮鐢紙鏂版棫寮曟搸閫愬瓧鑺傛瘮瀵癸級鏃讹紝鎶婁袱涓疄渚嬪垎鍒窇涓�閬嶅啀 diff 杈撳嚭锛屼緥濡傦細
+#   ./contract-smoke.sh http://127.0.0.1:31000 > /tmp/a.txt
+#   ./contract-smoke.sh http://127.0.0.1:31001 > /tmp/b.txt
+#   diff /tmp/a.txt /tmp/b.txt
+# 宸茬煡闈炲绾﹀樊寮傦細move 绯诲垪鍙傛暟鏍¢獙鐨勫瀛楁閿欒娑堟伅 join 椤哄簭锛圔ean Validation 鏈畾涔夐亶鍘嗗簭锛�
+# 璋冪敤鏂� jnpf-flowable 鍙垽 success/code 涓嶈В鏋� msg锛夛紝A/B diff 鏃跺彲蹇界暐璇ヨ銆�
+set -uo pipefail
+BASE="${1:-http://127.0.0.1:31000}"
+J='-H Content-Type:application/json'
+run() { local d="$1"; shift; printf '%-42s %s\n' "$d" "$(curl -sS --noproxy '*' "$@")"; }
+
+run 'task/list 绌哄疄渚�'          "$BASE/api/Flow/task/list/nonexistent-id"
+run 'definition/list'           "$BASE/api/Flow/definition/list"
+run 'instance/get鈫�9003'         "$BASE/api/Flow/instance/nonexistent-id"
+run 'task/fallbacks鈫�9004'       "$BASE/api/Flow/task/fallbacks/nonexistent"
+run 'complete 绌烘牎楠屸啋9701'      -X POST $J -d '{}' "$BASE/api/Flow/task/complete"
+run 'complete 鍋噄d鈫�9004'        -X POST $J -d '{"taskId":"nope"}' "$BASE/api/Flow/task/complete"
+run 'start 鍋嘾ep鈫�9002'          -X POST $J -d '{"deploymentId":"nope"}' "$BASE/api/Flow/instance/start"
+run 'jump 鍋囧疄渚嬧啋9003'          -X POST $J -d '{"instanceId":"nope","source":["a"],"target":["b"]}' "$BASE/api/Flow/task/jump"
+run 'historic 绌�'               "$BASE/api/Flow/task/historic/nonexistent"
+run 'historic/end 绌�'           "$BASE/api/Flow/task/historic/end/nonexistent"
+run 'tobe/pass 绌�'              "$BASE/api/Flow/task/tobe/pass/nonexistent"
+run 'finished/keys鈫�9003'        "$BASE/api/Flow/task/finished/keys/nonexistent"
+run 'definition/structure 绌�'   "$BASE/api/Flow/definition/nonexistent-dep"
+run 'task/prev鈫�9004'            "$BASE/api/Flow/task/prev?taskId=nope"
+run 'task/next鈫�9004'            "$BASE/api/Flow/task/next?taskId=nope"
+run 'outgoing/flows鈫�9004'       "$BASE/api/Flow/task/outgoing/flows?taskId=nope"
+run 'incoming/flows null'       "$BASE/api/Flow/task/incoming/flows/nope"
+run 'element/info鈫�9002'         "$BASE/api/Flow/task/element/info?deploymentId=nope&key=k"
+run 'flow/target鈫�9002'          "$BASE/api/Flow/task/flow/target?deploymentId=nope&flowKey=k"
+run 'task/after鈫�9002'           -X POST $J -d '{"deploymentId":"nope","taskKeys":["a"]}' "$BASE/api/Flow/task/after"
+run 'back 绌烘牎楠屸啋9701'          -X POST $J -d '{}' "$BASE/api/Flow/task/back"
+run 'retract 鍋噄d鈫�1108'         -X POST "$BASE/api/Flow/task/retract/nope"
+run 'move single 鏍¢獙鈫�9701'     -X POST $J -d '{}' "$BASE/api/Flow/task/move/single/to/multi"
+run 'move multi 鍋囧疄渚嬧啋9003'    -X POST $J -d '{"instanceId":"nope","sourceKeys":["a"],"targetKey":"b"}' "$BASE/api/Flow/task/move/multi/to/single"
+run 'instance/delete鈫�1102'      -X DELETE "$BASE/api/Flow/instance?instanceId=nope&deleteReason=t"
+run 'definition/delete鈫�1102'    -X DELETE "$BASE/api/Flow/definition?deploymentId=nope"
+run 'deploy 绌烘牎楠屸啋9701'        -X POST $J -d '{}' "$BASE/api/Flow/definition/deploy"

--
Gitblit v1.8.0