From 9cef5a2730cb7e1f987fd14124252fef84904a48 Mon Sep 17 00:00:00 2001 From: milky0217 Date: Wed, 10 Jun 2026 13:31:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B5=8B=E8=AF=95SQL=E5=B7=A5=E5=85=B7h?= =?UTF-8?q?eredoc=E5=8F=98=E9=87=8F=E5=B1=95=E5=BC=80+=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/test.sh | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/lib/test.sh b/lib/test.sh index 6f7281e..2e894b3 100644 --- a/lib/test.sh +++ b/lib/test.sh @@ -307,38 +307,35 @@ test_payment_flow() { } # ---------- 订单去重测试 ---------- - +# ---------- 维护模式测试 ---------- test_payment_dedup() { log_info "开始订单去重测试..." - local uuid_prefix - uuid_prefix="dedup-test-$(date +%s)" + local uuid_prefix="dedup-test-$(date +%s)" local test_no1="${uuid_prefix}-1" local test_no2="${uuid_prefix}-2" local user_id=${TEST_USER_ID} + local sql_file="/tmp/test_dedup_$(date +%s).sql" # 清理可能残留的测试数据 - remote "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -c \"DELETE FROM payment_orders WHERE order_no LIKE '${uuid_prefix}%';\"" 2>/dev/null || true + remote "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -tAc \"DELETE FROM payment_orders WHERE order_no LIKE '${uuid_prefix}%';\"" 2>/dev/null || true - # 插入第一个 pending 订单 - local sql1="INSERT INTO payment_orders (user_id, order_no, package_type, amount, status, expires_at) - VALUES (${user_id}, '${test_no1}', 'monthly', 590, 'pending', NOW() + INTERVAL '30 days');" - remote "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -c \"${sql1}\"" 2>/dev/null || true - - # 插入第二个 pending 订单(同用户+同套餐,应被去重视为重复) - local sql2="INSERT INTO payment_orders (user_id, order_no, package_type, amount, status, expires_at) - VALUES (${user_id}, '${test_no2}', 'monthly', 590, 'pending', NOW() + INTERVAL '30 days');" - remote "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -c \"${sql2}\"" 2>/dev/null || true + # 创建 SQL 文件并执行(避免多行字符串引号嵌套问题) + remote "cat > '${sql_file}' << SQLEOF +INSERT INTO payment_orders (user_id, order_no, package_type, amount, status, expires_at) +VALUES (${user_id}, '${test_no1}', 'monthly', 590, 'pending', NOW() + INTERVAL '30 days'); +INSERT INTO payment_orders (user_id, order_no, package_type, amount, status, expires_at) +VALUES (${user_id}, '${test_no2}', 'monthly', 590, 'pending', NOW() + INTERVAL '30 days'); +SQLEOF +docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -f '${sql_file}' +rm -f '${sql_file}'" 2>/dev/null || true # 查询同用户同套餐的 pending 订单数量 local pending_count - pending_count=$(remote "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -tAc \" - SELECT COUNT(*) FROM payment_orders - WHERE user_id = ${user_id} AND package_type = 'monthly' AND status = 'pending'; - \"" 2>/dev/null || echo "0") + pending_count=$(remote "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -tAc \"SELECT COUNT(*) FROM payment_orders WHERE user_id = ${user_id} AND package_type = 'monthly' AND status = 'pending';\"" 2>/dev/null || echo "0") # 清理 - remote "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -c \"DELETE FROM payment_orders WHERE order_no LIKE '${uuid_prefix}%';\"" 2>/dev/null || true + remote "docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -tAc \"DELETE FROM payment_orders WHERE order_no LIKE '${uuid_prefix}%';\"" 2>/dev/null || true if [ "$pending_count" -ge 2 ] 2>/dev/null; then log_info " 同用户同套餐有 ${pending_count} 个 pending 订单(去重逻辑正常)✅" @@ -351,8 +348,6 @@ test_payment_dedup() { return 0 } -# ---------- 维护模式测试 ---------- - test_payment_maintenance() { if [ "${APP_ENV}" != "development" ]; then log_info " 维护模式测试仅在开发环境执行"