You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/scripts/tests/01_basic_auth.sh

100 lines
2.7 KiB
Bash

#!/bin/bash
#
# 基础认证测试
# 测试内容注册、登录、修改信息、改密码、刷新token、登出
#
set -e
# 加载公共库
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/lib.sh"
# 测试配置
TEST_USER="basic_user_$TEST_TIMESTAMP"
TEST_PASS="password123"
TEST_EMAIL="$TEST_USER@test.com"
test_start "基础认证测试"
# 检查服务
check_service
# 1. 用户注册
step "1. 用户注册"
REGISTER_RES=$(register_user "$TEST_USER" "$TEST_PASS" "$TEST_EMAIL")
echo "注册响应: $REGISTER_RES"
check_http_code "$REGISTER_RES" "200"
check_success "用户注册成功"
# 2. 用户登录
step "2. 用户登录"
LOGIN_RES=$(login_user "$TEST_USER" "$TEST_PASS")
echo "登录响应: $LOGIN_RES"
check_http_code "$LOGIN_RES" "200"
TOKEN=$(get_token "$LOGIN_RES")
USER_ID=$(get_user_id "$LOGIN_RES")
info "Token: ${TOKEN:0:20}..."
info "User ID: $USER_ID"
check_success "用户登录成功"
# 3. 获取当前用户信息
step "3. 获取当前用户信息"
ME_RES=$(api_get "/api/auth/me" "$TOKEN")
echo "用户信息: $ME_RES"
check_http_code "$ME_RES" "200"
check_success "获取用户信息成功"
# 4. 修改自己的信息
step "4. 修改自己的信息"
UPDATE_RES=$(api_patch "/api/users/$USER_ID" '{"nickname": "Updated Nickname"}' "$TOKEN")
echo "更新响应: $UPDATE_RES"
check_http_code "$UPDATE_RES" "200"
NICKNAME=$(echo "$UPDATE_RES" | jq -r '.nickname')
if [ "$NICKNAME" == "Updated Nickname" ]; then
check_success "修改用户信息成功"
else
error "修改用户信息失败"
exit 1
fi
# 5. 修改密码
step "5. 修改密码"
CHANGE_PW_RES=$(api_post "/api/auth/me/change-password" \
"{\"old_password\": \"$TEST_PASS\", \"new_password\": \"newpassword123\"}" \
"$TOKEN")
echo "改密码响应: $CHANGE_PW_RES"
check_http_code "$CHANGE_PW_RES" "200"
check_success "修改密码成功"
# 6. 使用新密码登录
step "6. 使用新密码登录"
LOGIN_NEW_RES=$(login_user "$TEST_USER" "newpassword123")
check_http_code "$LOGIN_NEW_RES" "200"
TOKEN=$(get_token "$LOGIN_NEW_RES")
check_success "新密码登录成功"
# 7. Token 刷新
step "7. Token 刷新"
REFRESH_RES=$(api_post "/api/auth/refresh" "{}" "$TOKEN")
echo "刷新响应: $REFRESH_RES"
check_http_code "$REFRESH_RES" "200"
NEW_TOKEN=$(echo "$REFRESH_RES" | jq -r '.access_token')
if [ -n "$NEW_TOKEN" ] && [ "$NEW_TOKEN" != "null" ]; then
TOKEN="$NEW_TOKEN"
check_success "Token 刷新成功"
else
error "Token 刷新失败"
exit 1
fi
# 8. 用户登出
step "8. 用户登出"
LOGOUT_RES=$(api_post "/api/auth/logout" "{}" "$TOKEN")
echo "登出响应: $LOGOUT_RES"
check_http_code "$LOGOUT_RES" "200"
check_success "用户登出成功"
test_end