#!/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 "$@"