Files
chat/tests/integration_test.sh
2026-04-25 16:36:34 +08:00

206 lines
6.2 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Sales Chat Plugin 集成测试
# 测试业务闭环:创建邀请 → 用户加入 → 统计更新
set -e
BASE_URL="${BASE_URL:-http://localhost:11000}"
API_URL="$BASE_URL/api/plugin/com.msgbyte.saleschat"
echo "🧪 Sales Chat Plugin 集成测试"
echo "================================"
echo "API URL: $API_URL"
echo ""
# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 测试计数器
TOTAL_TESTS=0
PASSED_TESTS=0
FAILED_TESTS=0
# 测试函数
test_case() {
local name="$1"
local cmd="$2"
TOTAL_TESTS=$((TOTAL_TESTS + 1))
echo -n "测试 $TOTAL_TESTS: $name ... "
if eval "$cmd" > /tmp/test_output.txt 2>&1; then
echo -e "${GREEN}✓ PASS${NC}"
PASSED_TESTS=$((PASSED_TESTS + 1))
else
echo -e "${RED}✗ FAIL${NC}"
FAILED_TESTS=$((FAILED_TESTS + 1))
echo " 错误信息:"
cat /tmp/test_output.txt | sed 's/^/ /'
fi
}
# 等待服务启动
wait_for_service() {
echo -n "等待服务启动..."
for i in {1..30}; do
if curl -s "$BASE_URL/health" > /dev/null 2>&1; then
echo -e " ${GREEN}${NC}"
return 0
fi
sleep 1
echo -n "."
done
echo -e " ${RED}${NC}"
echo "服务未启动"
exit 1
}
# 主测试流程
main() {
# 1. 健康检查
echo ""
echo "📋 Phase 1: 健康检查"
echo "-------------------"
wait_for_service
test_case "插件加载状态" \
"curl -s '$BASE_URL/api/plugin/list' | grep -q 'com.msgbyte.saleschat'"
# 2. 用户认证
echo ""
echo "📋 Phase 2: 用户认证"
echo "-------------------"
# 登录获取 Token
TOKEN=$(curl -s -X POST "$BASE_URL/api/user/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}' | jq -r '.data.token')
if [ -z "$TOKEN" ] || [ "$TOKEN" = "null" ]; then
echo -e "${RED}✗ 无法获取认证 Token${NC}"
exit 1
fi
test_case "用户登录" "[ -n '$TOKEN' ] && [ '$TOKEN' != 'null' ]"
# 3. 邀请管理
echo ""
echo "📋 Phase 3: 邀请管理"
echo "-------------------"
# 创建邀请
INVITE_RESPONSE=$(curl -s -X POST "$API_URL/invite/create" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"groupId":"test-group","expiresIn":7}')
INVITE_CODE=$(echo "$INVITE_RESPONSE" | jq -r '.code')
test_case "创建邀请" "[ -n '$INVITE_CODE' ] && [ '$INVITE_CODE' != 'null' ]"
# 获取邀请列表
test_case "获取我的邀请列表" \
"curl -s '$API_URL/invite/my' -H 'Authorization: Bearer $TOKEN' | jq -e '. | length > 0'"
# 获取邀请详情
test_case "获取邀请详情" \
"curl -s '$API_URL/invite/$INVITE_CODE' | jq -e '.code == \"$INVITE_CODE\"'"
# 获取邀请统计
test_case "获取邀请统计" \
"curl -s '$API_URL/invite/$INVITE_CODE/stats' -H 'Authorization: Bearer $TOKEN' | jq -e '.stats'"
# 4. 统计功能
echo ""
echo "📋 Phase 4: 统计功能"
echo "-------------------"
test_case "获取我的统计" \
"curl -s '$API_URL/stats/my' -H 'Authorization: Bearer $TOKEN' | jq -e '.total'"
test_case "获取排行榜" \
"curl -s '$API_URL/stats/ranking' -H 'Authorization: Bearer $TOKEN' | jq -e '. | length >= 0'"
# 5. 管理功能(需要管理员权限)
echo ""
echo "📋 Phase 5: 管理功能"
echo "-------------------"
test_case "获取用户列表" \
"curl -s '$API_URL/admin/users' -H 'Authorization: Bearer $TOKEN' | jq -e '. | length >= 0'"
test_case "获取群组列表" \
"curl -s '$API_URL/admin/groups' -H 'Authorization: Bearer $TOKEN' | jq -e '. | length >= 0'"
# 6. 业务闭环测试
echo ""
echo "📋 Phase 6: 业务闭环测试"
echo "------------------------"
# 创建第二个用户
USER2_TOKEN=$(curl -s -X POST "$BASE_URL/api/user/register" \
-H "Content-Type: application/json" \
-d '{"username":"testuser2","password":"test123","nickname":"Test User 2"}' | jq -r '.data.token')
if [ -z "$USER2_TOKEN" ] || [ "$USER2_TOKEN" = "null" ]; then
# 如果注册失败,尝试登录
USER2_TOKEN=$(curl -s -X POST "$BASE_URL/api/user/login" \
-H "Content-Type: application/json" \
-d '{"username":"testuser2","password":"test123"}' | jq -r '.data.token')
fi
# 通过邀请加入群组
test_case "通过邀请加入群组" \
"curl -s -X POST '$API_URL/invite/join' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer $USER2_TOKEN' \
-d '{\"code\":\"$INVITE_CODE\"}' | jq -e '.message == \"加入成功\"'"
# 验证统计更新
sleep 2 # 等待异步更新
test_case "验证统计更新join +1" \
"curl -s '$API_URL/stats/my' -H 'Authorization: Bearer $TOKEN' | jq -e '.total.totalJoins > 0'"
# 停用邀请
test_case "停用邀请" \
"curl -s -X POST '$API_URL/invite/$INVITE_CODE/deactivate' \
-H 'Authorization: Bearer $TOKEN' | jq -e '.message == \"邀请已停用\"'"
# 验证邀请已停用
test_case "验证邀请已停用" \
"! curl -s -X POST '$API_URL/invite/join' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer $USER2_TOKEN' \
-d '{\"code\":\"$INVITE_CODE\"}' | jq -e '.message == \"加入成功\"'"
# 7. 清理
echo ""
echo "🧹 清理测试数据..."
# 这里可以添加清理逻辑
# 测试结果
echo ""
echo "================================"
echo "测试结果汇总"
echo "================================"
echo -e "总测试数: $TOTAL_TESTS"
echo -e "通过: ${GREEN}$PASSED_TESTS${NC}"
echo -e "失败: ${RED}$FAILED_TESTS${NC}"
if [ $FAILED_TESTS -eq 0 ]; then
echo -e "\n${GREEN}✅ 所有测试通过!${NC}"
exit 0
else
echo -e "\n${RED}❌ 有 $FAILED_TESTS 个测试失败${NC}"
exit 1
fi
}
# 运行主函数
main "$@"