WFULLSMOKE1 增加三天全域最终目标测试

这个提交包含在:
2026-05-20 19:46:15 +08:00
父节点 dcb6913e2f
当前提交 728e61876d
共修改 11 个文件,包含 561 行新增和 55 行删除
+21 -10
查看文件
@@ -9,6 +9,13 @@ MANAGER_IDENTIFIER="${MANAGER_IDENTIFIER:[email protected]}"
MANAGER_PASSWORD="${MANAGER_PASSWORD:-ManagerPassword1234}"
FINANCE_MGR_IDENTIFIER="${FINANCE_MGR_IDENTIFIER:-finance_mgr@hyinda.com}"
FINANCE_MGR_PASSWORD="${FINANCE_MGR_PASSWORD:-FinanceMgrPassword1234}"
PROCUREMENT_REGRESSION_MARKER_PREFIX="${PROCUREMENT_REGRESSION_MARKER_PREFIX:-}"
PROCUREMENT_APPROVED_TITLE="${PROCUREMENT_APPROVED_TITLE:-${PROCUREMENT_REGRESSION_MARKER_PREFIX:+$PROCUREMENT_REGRESSION_MARKER_PREFIX }procurement regression approved}"
PROCUREMENT_WITHDRAWN_TITLE="${PROCUREMENT_WITHDRAWN_TITLE:-${PROCUREMENT_REGRESSION_MARKER_PREFIX:+$PROCUREMENT_REGRESSION_MARKER_PREFIX }procurement regression withdrawn}"
PROCUREMENT_APPROVED_ITEM_DESCRIPTION="${PROCUREMENT_APPROVED_ITEM_DESCRIPTION:-${PROCUREMENT_REGRESSION_MARKER_PREFIX:+$PROCUREMENT_REGRESSION_MARKER_PREFIX }Laptop}"
PROCUREMENT_WITHDRAWN_ITEM_DESCRIPTION="${PROCUREMENT_WITHDRAWN_ITEM_DESCRIPTION:-${PROCUREMENT_REGRESSION_MARKER_PREFIX:+$PROCUREMENT_REGRESSION_MARKER_PREFIX }Desk}"
PROCUREMENT_PO_NO="${PROCUREMENT_PO_NO:-PO-P17B-001}"
PROCUREMENT_CONTRACT_NO="${PROCUREMENT_CONTRACT_NO:-CT-P17B-001}"
if ! command -v curl >/dev/null 2>&1; then
echo "[ERROR] curl not found" >&2
@@ -55,7 +62,8 @@ assert_jq() {
local file_path="$1"
local jq_expr="$2"
local name="$3"
if ! jq -e "$jq_expr" "$file_path" >/dev/null; then
shift 3
if ! jq -e "$@" "$jq_expr" "$file_path" >/dev/null; then
echo "[ERROR] $name assertion failed: $jq_expr" >&2
cat "$file_path" >&2
exit 1
@@ -166,9 +174,11 @@ assert_procurement_budget_state() {
local approved_id="$1"
local withdrawn_id="$2"
local budget_pool_id="$3"
local expected_po_no="$4"
local expected_contract_no="$5"
DATABASE_URL="$DATABASE_URL" node - "$approved_id" "$withdrawn_id" "$budget_pool_id" <<'NODE'
const [approvedId, withdrawnId, budgetPoolId] = process.argv.slice(2);
DATABASE_URL="$DATABASE_URL" node - "$approved_id" "$withdrawn_id" "$budget_pool_id" "$expected_po_no" "$expected_contract_no" <<'NODE'
const [approvedId, withdrawnId, budgetPoolId, expectedPoNo, expectedContractNo] = process.argv.slice(2);
const { createPrismaClient } = require('./src/prismaClient');
(async () => {
@@ -206,7 +216,7 @@ const { createPrismaClient } = require('./src/prismaClient');
process.exit(1);
}
if (!archive || archive.po_no !== 'PO-P17B-001' || archive.contract_no !== 'CT-P17B-001') {
if (!archive || archive.po_no !== expectedPoNo || archive.contract_no !== expectedContractNo) {
console.error('[ERROR] purchase order archive mismatch', archive);
process.exit(1);
}
@@ -247,7 +257,7 @@ echo "[3/8] create + submit purchase request => reserve budget"
create_status="$(api_json_auth POST "$BASE_URL/api/purchase-requests" "$EMPLOYEE_TOKEN" "$TMP_DIR/create.json" '{}')"
assert_status "$create_status" "200" "create purchase request" "$TMP_DIR/create.json"
PURCHASE_ID_APPROVED="$(jq -er '.data.purchaseRequest.id' "$TMP_DIR/create.json")"
PATCH_BODY="$(jq -nc --arg le "$LEGAL_ENTITY_ID" --arg cc "$COST_CENTER_ID" --arg sp "$SUPPLIER_ID" --arg dc "$DOCUMENT_CATEGORY_ID" '{title:"procurement regression approved", legalEntityId:$le, costCenterId:$cc, supplierId:$sp, documentCategoryId:$dc, items:[{description:"Laptop", specification:"14 inch", quantity:"2.00", unitPrice:"100.00", isAssetCandidate:true}] }')"
PATCH_BODY="$(jq -nc --arg le "$LEGAL_ENTITY_ID" --arg cc "$COST_CENTER_ID" --arg sp "$SUPPLIER_ID" --arg dc "$DOCUMENT_CATEGORY_ID" --arg title "$PROCUREMENT_APPROVED_TITLE" --arg description "$PROCUREMENT_APPROVED_ITEM_DESCRIPTION" '{title:$title, legalEntityId:$le, costCenterId:$cc, supplierId:$sp, documentCategoryId:$dc, items:[{description:$description, specification:"14 inch", quantity:"2.00", unitPrice:"100.00", isAssetCandidate:true}] }')"
patch_status="$(api_json_auth PATCH "$BASE_URL/api/purchase-requests/$PURCHASE_ID_APPROVED" "$EMPLOYEE_TOKEN" "$TMP_DIR/patch.json" "$PATCH_BODY")"
assert_status "$patch_status" "200" "patch purchase request" "$TMP_DIR/patch.json"
submit_status="$(api_json_auth POST "$BASE_URL/api/purchase-requests/$PURCHASE_ID_APPROVED/submit" "$EMPLOYEE_TOKEN" "$TMP_DIR/submit.json" '{}')"
@@ -263,20 +273,21 @@ assert_jq "$TMP_DIR/approve.json" '.data.outcome == "approved" and .data.purchas
echo "[5/8] only procurement.manage can archive PO/contract"
archive_forbidden_status="$(api_json_auth POST "$BASE_URL/api/purchase-requests/$PURCHASE_ID_APPROVED/archive-order" "$EMPLOYEE_TOKEN" "$TMP_DIR/archive-forbidden.json" '{"poNo":"PO-FAIL"}')"
assert_status "$archive_forbidden_status" "403" "archive order forbidden for employee" "$TMP_DIR/archive-forbidden.json"
archive_status="$(api_json_auth POST "$BASE_URL/api/purchase-requests/$PURCHASE_ID_APPROVED/archive-order" "$FINANCE_MGR_TOKEN" "$TMP_DIR/archive.json" '{"poNo":"PO-P17B-001","contractNo":"CT-P17B-001","archivedFiles":[]}')"
ARCHIVE_BODY="$(jq -nc --arg po "$PROCUREMENT_PO_NO" --arg contract "$PROCUREMENT_CONTRACT_NO" '{poNo:$po, contractNo:$contract, archivedFiles:[]}')"
archive_status="$(api_json_auth POST "$BASE_URL/api/purchase-requests/$PURCHASE_ID_APPROVED/archive-order" "$FINANCE_MGR_TOKEN" "$TMP_DIR/archive.json" "$ARCHIVE_BODY")"
assert_status "$archive_status" "200" "archive order" "$TMP_DIR/archive.json"
assert_jq "$TMP_DIR/archive.json" '.data.archiveOrder.poNo == "PO-P17B-001" and .data.archiveOrder.contractNo == "CT-P17B-001"' "archive order response"
assert_jq "$TMP_DIR/archive.json" '.data.archiveOrder.poNo == $po and .data.archiveOrder.contractNo == $contract' "archive order response" --arg po "$PROCUREMENT_PO_NO" --arg contract "$PROCUREMENT_CONTRACT_NO"
echo "[6/8] archive order readable by purchase participants"
archive_get_status="$(api_json_auth GET "$BASE_URL/api/purchase-requests/$PURCHASE_ID_APPROVED/archive-order" "$EMPLOYEE_TOKEN" "$TMP_DIR/archive-get.json")"
assert_status "$archive_get_status" "200" "get archive order" "$TMP_DIR/archive-get.json"
assert_jq "$TMP_DIR/archive-get.json" '.data.archiveOrder.poNo == "PO-P17B-001"' "get archive order response"
assert_jq "$TMP_DIR/archive-get.json" '.data.archiveOrder.poNo == $po' "get archive order response" --arg po "$PROCUREMENT_PO_NO"
echo "[7/8] submit + withdraw purchase request => release budget"
create2_status="$(api_json_auth POST "$BASE_URL/api/purchase-requests" "$EMPLOYEE_TOKEN" "$TMP_DIR/create2.json" '{}')"
assert_status "$create2_status" "200" "create purchase request 2" "$TMP_DIR/create2.json"
PURCHASE_ID_WITHDRAWN="$(jq -er '.data.purchaseRequest.id' "$TMP_DIR/create2.json")"
PATCH2_BODY="$(jq -nc --arg le "$LEGAL_ENTITY_ID" --arg cc "$COST_CENTER_ID" --arg sp "$SUPPLIER_ID" --arg dc "$DOCUMENT_CATEGORY_ID" '{title:"procurement regression withdrawn", legalEntityId:$le, costCenterId:$cc, supplierId:$sp, documentCategoryId:$dc, items:[{description:"Desk", specification:null, quantity:"1.00", unitPrice:"50.00", isAssetCandidate:false}] }')"
PATCH2_BODY="$(jq -nc --arg le "$LEGAL_ENTITY_ID" --arg cc "$COST_CENTER_ID" --arg sp "$SUPPLIER_ID" --arg dc "$DOCUMENT_CATEGORY_ID" --arg title "$PROCUREMENT_WITHDRAWN_TITLE" --arg description "$PROCUREMENT_WITHDRAWN_ITEM_DESCRIPTION" '{title:$title, legalEntityId:$le, costCenterId:$cc, supplierId:$sp, documentCategoryId:$dc, items:[{description:$description, specification:null, quantity:"1.00", unitPrice:"50.00", isAssetCandidate:false}] }')"
patch2_status="$(api_json_auth PATCH "$BASE_URL/api/purchase-requests/$PURCHASE_ID_WITHDRAWN" "$EMPLOYEE_TOKEN" "$TMP_DIR/patch2.json" "$PATCH2_BODY")"
assert_status "$patch2_status" "200" "patch purchase request 2" "$TMP_DIR/patch2.json"
submit2_status="$(api_json_auth POST "$BASE_URL/api/purchase-requests/$PURCHASE_ID_WITHDRAWN/submit" "$EMPLOYEE_TOKEN" "$TMP_DIR/submit2.json" '{}')"
@@ -286,7 +297,7 @@ assert_status "$withdraw_status" "200" "withdraw purchase request" "$TMP_DIR/wit
assert_jq "$TMP_DIR/withdraw2.json" '.data.status == "draft" and (.data.budgetRelease.applied == true)' "withdraw release budget"
echo "[8/8] verify budget ledger + archive DB state"
assert_procurement_budget_state "$PURCHASE_ID_APPROVED" "$PURCHASE_ID_WITHDRAWN" "$BUDGET_POOL_ID"
assert_procurement_budget_state "$PURCHASE_ID_APPROVED" "$PURCHASE_ID_WITHDRAWN" "$BUDGET_POOL_ID" "$PROCUREMENT_PO_NO" "$PROCUREMENT_CONTRACT_NO"
echo "[OK] Procurement regression passed"
echo "- approved purchaseRequestId: $PURCHASE_ID_APPROVED"