Files
chat/tests/integration_test.sh

206 lines
6.2 KiB
Bash
Raw Normal View History

2026-04-25 16:36:34 +08:00
#!/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 "$@"