fix: 测试SQL工具heredoc变量展开+移除重复函数
This commit is contained in:
35
lib/test.sh
35
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 " 维护模式测试仅在开发环境执行"
|
||||
|
||||
Reference in New Issue
Block a user