#!/bin/bash # # 01_setup_users.sh # # 功能: # 1. 初始化三个核心测试账户:Admin, User1, User2 # 2. 验证基础认证功能(注册、登录、信息修改、密码修改、Token刷新、登出) # 3. 确保后续测试有稳定的测试账号 # set -e # 加载公共库 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/lib.sh" test_start "用户初始化与基础认证测试" # 检查服务 check_service # ========================================== # 定义测试账号 # ========================================== # 密码统一 COMMON_PASS="password123" # 1. Admin 用户 (系统第一个注册用户自动成为Admin) ADMIN_USER="admin_${TEST_TIMESTAMP}" ADMIN_EMAIL="${ADMIN_USER}@test.com" # 2. 普通用户 1 USER1_NAME="user1_${TEST_TIMESTAMP}" USER1_EMAIL="${USER1_NAME}@test.com" # 3. 普通用户 2 USER2_NAME="user2_${TEST_TIMESTAMP}" USER2_EMAIL="${USER2_NAME}@test.com" # 4. 临时用户 (用于测试改密、登出等破坏性操作) TEMP_USER="temp_${TEST_TIMESTAMP}" TEMP_EMAIL="${TEMP_USER}@test.com" # ========================================== # 1. 创建核心账户 # ========================================== # --- Admin --- step "1.1 注册 Admin 账户 (第一个用户)" RES=$(register_user "$ADMIN_USER" "$COMMON_PASS" "$ADMIN_EMAIL") check_http_code "$RES" "200" info "Admin 注册成功: $ADMIN_USER" # 验证 Admin 登录 RES=$(login_user "$ADMIN_USER" "$COMMON_PASS") check_http_code "$RES" "200" ADMIN_TOKEN=$(get_token "$RES") check_success "Admin 登录验证成功" # --- User1 --- step "1.2 注册 User1 账户" RES=$(register_user "$USER1_NAME" "$COMMON_PASS" "$USER1_EMAIL") check_http_code "$RES" "200" info "User1 注册成功: $USER1_NAME" # 验证 User1 登录 RES=$(login_user "$USER1_NAME" "$COMMON_PASS") check_http_code "$RES" "200" USER1_TOKEN=$(get_token "$RES") check_success "User1 登录验证成功" # --- User2 --- step "1.3 注册 User2 账户" RES=$(register_user "$USER2_NAME" "$COMMON_PASS" "$USER2_EMAIL") check_http_code "$RES" "200" info "User2 注册成功: $USER2_NAME" # 验证 User2 登录 RES=$(login_user "$USER2_NAME" "$COMMON_PASS") check_http_code "$RES" "200" check_success "User2 登录验证成功" # ========================================== # 2. 基础功能验证 (使用临时用户) # ========================================== step "2.1 注册临时用户用于功能验证" RES=$(register_user "$TEMP_USER" "$COMMON_PASS" "$TEMP_EMAIL") check_http_code "$RES" "200" # 登录 RES=$(login_user "$TEMP_USER" "$COMMON_PASS") TEMP_TOKEN=$(get_token "$RES") TEMP_ID=$(get_user_id "$RES") # 修改信息 step "2.2 验证修改个人信息" RES=$(api_patch "/api/users/$TEMP_ID" '{"nickname": "Temp Nick"}' "$TEMP_TOKEN") check_http_code "$RES" "200" check_success "修改信息成功" # 修改密码 step "2.3 验证修改密码" NEW_PASS="newpass123" RES=$(api_post "/api/auth/me/change-password" \ "{\"old_password\": \"$COMMON_PASS\", \"new_password\": \"$NEW_PASS\"}" \ "$TEMP_TOKEN") check_http_code "$RES" "200" check_success "密码修改成功" # 旧密码登录失败验证 step "2.4 验证旧密码登录失败" RES=$(login_user "$TEMP_USER" "$COMMON_PASS") code=$(echo "$RES" | jq -r '.code // 200') if [[ "$code" != "200" ]]; then check_success "旧密码登录被拒绝 (预期)" else error "旧密码仍然可以登录!" exit 1 fi # 新密码登录 step "2.5 验证新密码登录" RES=$(login_user "$TEMP_USER" "$NEW_PASS") check_http_code "$RES" "200" TEMP_TOKEN=$(get_token "$RES") # 更新 Token check_success "新密码登录成功" # Token 刷新 step "2.6 验证 Token 刷新" REFRESH_TOKEN=$(get_refresh_token "$RES") RES=$(api_post "/api/auth/refresh" "{\"refresh_token\": \"$REFRESH_TOKEN\"}" "") check_http_code "$RES" "200" NEW_ACCESS=$(echo "$RES" | jq -r '.access_token') if [ -n "$NEW_ACCESS" ] && [ "$NEW_ACCESS" != "null" ]; then check_success "Token 刷新成功" else error "Token 刷新失败" exit 1 fi # 登出 step "2.7 验证登出" RES=$(api_post "/api/auth/logout" "{}" "$TEMP_TOKEN") check_http_code "$RES" "200" check_success "登出成功" test_end