优化
This commit is contained in:
205
tests/integration_test.sh
Normal file
205
tests/integration_test.sh
Normal file
@@ -0,0 +1,205 @@
|
||||
#!/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 "$@"
|
||||
123
tests/test_sales_module.sh
Executable file
123
tests/test_sales_module.sh
Executable file
@@ -0,0 +1,123 @@
|
||||
#!/bin/bash
|
||||
# ============================================
|
||||
# Tailchat Sales 销售模块验证脚本
|
||||
# ============================================
|
||||
set -e
|
||||
|
||||
echo "🔍 [验证] Tailchat Sales 模块状态检查"
|
||||
echo "================================"
|
||||
|
||||
# ==================== 1. 检查 Docker 服务 ====================
|
||||
echo ""
|
||||
echo "1️⃣ 检查 Docker 服务状态..."
|
||||
if docker ps &>/dev/null; then
|
||||
if docker ps | grep -q "tailchat"; then
|
||||
echo "✅ Tailchat 服务运行中"
|
||||
docker ps | grep "tailchat" | awk '{print $1, $2}'
|
||||
else
|
||||
echo "⚠️ Tailchat 服务未运行"
|
||||
echo "启动命令: cd /Users/sion/Desktop/projects/tailchat-sales && docker-compose up -d"
|
||||
fi
|
||||
else
|
||||
echo "❌ Docker 未运行"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ==================== 2. 检查 MongoDB 连接 ====================
|
||||
echo ""
|
||||
echo "2️⃣ 检查 MongoDB 连接..."
|
||||
MONGO_CONTAINER=$(docker ps | grep mongo | awk '{print $1}' | head -1)
|
||||
if [ -n "$MONGO_CONTAINER" ]; then
|
||||
echo "✅ MongoDB 容器运行中: $MONGO_CONTAINER"
|
||||
|
||||
# 检查 sales_invites 表
|
||||
if docker exec $MONGO_CONTAINER mongo tailchat --eval "db.sales_invites.count()" 2>/dev/null | grep -q "[0-9]"; then
|
||||
COUNT=$(docker exec $MONGO_CONTAINER mongo tailchat --eval "db.sales_invites.count()" 2>/dev/null | tail -1)
|
||||
echo "✅ sales_invites 表存在,记录数: $COUNT"
|
||||
else
|
||||
echo "⚠️ sales_invites 表不存在或为空"
|
||||
fi
|
||||
|
||||
# 检查 sales_stats 表
|
||||
if docker exec $MONGO_CONTAINER mongo tailchat --eval "db.sales_stats.count()" 2>/dev/null | grep -q "[0-9]"; then
|
||||
COUNT=$(docker exec $MONGO_CONTAINER mongo tailchat --eval "db.sales_stats.count()" 2>/dev/null | tail -1)
|
||||
echo "✅ sales_stats 表存在,记录数: $COUNT"
|
||||
else
|
||||
echo "⚠️ sales_stats 表不存在或为空"
|
||||
fi
|
||||
else
|
||||
echo "❌ MongoDB 容器未运行"
|
||||
fi
|
||||
|
||||
# ==================== 3. 检查 Redis 连接 ====================
|
||||
echo ""
|
||||
echo "3️⃣ 检查 Redis 连接..."
|
||||
REDIS_CONTAINER=$(docker ps | grep redis | awk '{print $1}' | head -1)
|
||||
if [ -n "$REDIS_CONTAINER" ]; then
|
||||
echo "✅ Redis 容器运行中: $REDIS_CONTAINER"
|
||||
|
||||
# 测试 Redis 连接
|
||||
if docker exec $REDIS_CONTAINER redis-cli ping 2>/dev/null | grep -q "PONG"; then
|
||||
echo "✅ Redis 连接正常"
|
||||
else
|
||||
echo "❌ Redis 连接失败"
|
||||
fi
|
||||
else
|
||||
echo "❌ Redis 容器未运行"
|
||||
fi
|
||||
|
||||
# ==================== 4. 检查销售模块 API ====================
|
||||
echo ""
|
||||
echo "4️⃣ 检查销售模块 API..."
|
||||
TAILCHAT_URL="http://localhost:11000"
|
||||
|
||||
# 检查服务健康状态
|
||||
if curl -s "$TAILCHAT_URL/health" | grep -q "ok"; then
|
||||
echo "✅ Tailchat 服务健康"
|
||||
else
|
||||
echo "⚠️ Tailchat 服务未响应: $TAILCHAT_URL"
|
||||
fi
|
||||
|
||||
# 测试邀请 API (需要 token)
|
||||
# echo "测试邀请 API: POST $TAILCHAT_URL/api/plugin/com.msgbyte.saleschat/invite/create"
|
||||
|
||||
# ==================== 5. 检查用户表关联 ====================
|
||||
echo ""
|
||||
echo "5️⃣ 检查用户表关联..."
|
||||
if [ -n "$MONGO_CONTAINER" ]; then
|
||||
# 检查 Tailchat 用户表
|
||||
USER_COUNT=$(docker exec $MONGO_CONTAINER mongo tailchat --eval "db.users.count()" 2>/dev/null | tail -1)
|
||||
if [[ "$USER_COUNT" =~ ^[0-9]+$ ]]; then
|
||||
echo "✅ Tailchat 用户表存在,用户数: $USER_COUNT"
|
||||
else
|
||||
echo "⚠️ Tailchat 用户表不存在或为空"
|
||||
fi
|
||||
|
||||
# 检查 sales_invites 是否引用了有效用户
|
||||
if docker exec $MONGO_CONTAINER mongo tailchat --eval "db.sales_invites.findOne()" 2>/dev/null | grep -q "salesId"; then
|
||||
echo "✅ sales_invites 表有数据且包含 salesId 字段"
|
||||
else
|
||||
echo "⚠️ sales_invites 表无数据或缺少 salesId 字段"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ==================== 6. 检查插件加载状态 ====================
|
||||
echo ""
|
||||
echo "6️⃣ 检查插件加载状态..."
|
||||
PLUGIN_DIR="/Users/sion/Desktop/projects/tailchat-sales/server/plugins/com.msgbyte.saleschat"
|
||||
if [ -d "$PLUGIN_DIR" ]; then
|
||||
echo "✅ 销售插件目录存在"
|
||||
echo " 路径: $PLUGIN_DIR"
|
||||
|
||||
# 检查关键文件
|
||||
[ -f "$PLUGIN_DIR/services/index.ts" ] && echo " ✅ services/index.ts"
|
||||
[ -f "$PLUGIN_DIR/services/invite.service.ts" ] && echo " ✅ invite.service.ts"
|
||||
[ -f "$PLUGIN_DIR/services/stats.service.ts" ] && echo " ✅ stats.service.ts"
|
||||
[ -f "$PLUGIN_DIR/services/admin.service.ts" ] && echo " ✅ admin.service.ts"
|
||||
else
|
||||
echo "❌ 销售插件目录不存在"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "================================"
|
||||
echo "🏁 验证完成"
|
||||
Reference in New Issue
Block a user