#!/bin/bash
# auth_v2 统一身份认证自动化测试脚本
# 测试网址：https://ebankofdata.online/login

echo "=========================================="
echo "auth_v2 统一身份认证自动化测试"
echo "网址：https://ebankofdata.online/login"
echo "测试时间：$(date '+%Y-%m-%d %H:%M:%S')"
echo "=========================================="
echo ""

TEST_RESULTS=()
PASS_COUNT=0
FAIL_COUNT=0

# 测试函数
run_test() {
    local test_name="$1"
    local test_command="$2"
    local expected="$3"
    
    echo "🧪 测试：$test_name"
    result=$(eval "$test_command" 2>&1)
    
    if [[ "$result" == *"$expected"* ]]; then
        echo "   ✅ 通过"
        TEST_RESULTS+=("✅ $test_name")
        ((PASS_COUNT++))
    else
        echo "   ❌ 失败"
        echo "   预期：$expected"
        echo "   实际：$result"
        TEST_RESULTS+=("❌ $test_name")
        ((FAIL_COUNT++))
    fi
    echo ""
}

# 关闭之前的浏览器会话
agent-browser close 2>/dev/null

echo "=========================================="
echo "测试 1: 登录页面访问测试"
echo "=========================================="
agent-browser open https://ebankofdata.online/login
sleep 2
run_test "登录页面标题" "agent-browser eval 'document.title'" "认证"
run_test "登录页面 URL" "agent-browser get url" "login"

echo "=========================================="
echo "测试 2: 登录页面元素检查"
echo "=========================================="
agent-browser snapshot -i
run_test "页面主标题" "agent-browser snapshot -i" "统一身份认证"
run_test "用户名输入框" "agent-browser snapshot -i" "用户名"
run_test "密码输入框" "agent-browser snapshot -i" "密码"
run_test "登录按钮" "agent-browser snapshot -i" "登 录"
run_test "返回首页链接" "agent-browser snapshot -i" "返回首页"

echo "=========================================="
echo "测试 3: 正确登录测试"
echo "=========================================="
agent-browser open https://ebankofdata.online/login
sleep 2
agent-browser snapshot -i > /dev/null
agent-browser fill @e2 "bluesky"
agent-browser fill @e3 "test8888"
sleep 1
agent-browser click @e4
sleep 3
url=$(agent-browser get url 2>&1)
if [[ "$url" == *"ebankofdata.online/" ]] && [[ "$url" != *"login"* ]]; then
    echo "   ✅ 通过 (登录成功，跳转到主页)"
    TEST_RESULTS+=("✅ 正确登录测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (登录未成功)"
    echo "   实际 URL: $url"
    TEST_RESULTS+=("❌ 正确登录测试")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 4: 登录后状态验证"
echo "=========================================="
snapshot=$(agent-browser snapshot -i 2>&1)
if [[ "$snapshot" == *"退出登录"* ]]; then
    echo "   ✅ 通过 (显示退出登录链接)"
    TEST_RESULTS+=("✅ 登录后状态验证")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (未显示退出登录链接)"
    TEST_RESULTS+=("❌ 登录后状态验证")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 5: 错误密码登录测试"
echo "=========================================="
agent-browser open https://ebankofdata.online/login
sleep 2
agent-browser snapshot -i > /dev/null
agent-browser fill @e2 "bluesky"
agent-browser fill @e3 "wrongpassword"
sleep 1
agent-browser click @e4
sleep 3
# 重新获取 snapshot（页面可能刷新）
agent-browser snapshot -i > /dev/null 2>&1
page_content=$(agent-browser eval "document.body.innerText" 2>&1)
if [[ "$page_content" == *"用户名或密码错误"* ]] || [[ "$page_content" == *"错误"* ]]; then
    echo "   ✅ 通过 (显示错误提示)"
    TEST_RESULTS+=("✅ 错误密码登录测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (未显示错误提示)"
    echo "   页面内容：$page_content"
    TEST_RESULTS+=("❌ 错误密码登录测试")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 6: 错误用户名登录测试"
echo "=========================================="
agent-browser open https://ebankofdata.online/login
sleep 2
agent-browser snapshot -i > /dev/null
agent-browser fill @e2 "nonexistentuser"
agent-browser fill @e3 "test8888"
sleep 1
agent-browser click @e4
sleep 3
# 重新获取 snapshot（页面可能刷新）
agent-browser snapshot -i > /dev/null 2>&1
page_content=$(agent-browser eval "document.body.innerText" 2>&1)
if [[ "$page_content" == *"用户名或密码错误"* ]] || [[ "$page_content" == *"错误"* ]]; then
    echo "   ✅ 通过 (显示错误提示)"
    TEST_RESULTS+=("✅ 错误用户名登录测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (未显示错误提示)"
    echo "   页面内容：$page_content"
    TEST_RESULTS+=("❌ 错误用户名登录测试")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 7: 空用户名登录测试"
echo "=========================================="
agent-browser open https://ebankofdata.online/login
sleep 2
agent-browser snapshot -i > /dev/null
agent-browser fill @e2 ""
agent-browser fill @e3 "test8888"
sleep 1
agent-browser click @e4
sleep 2
# 检查是否仍然在登录页面（前端验证可能阻止提交）
url=$(agent-browser get url 2>&1)
if [[ "$url" == *"login"* ]]; then
    echo "   ✅ 通过 (阻止空用户名提交)"
    TEST_RESULTS+=("✅ 空用户名登录测试")
    ((PASS_COUNT++))
else
    echo "   ⚠️  注意：空用户名未被阻止"
    TEST_RESULTS+=("⚠️  空用户名登录测试 (未阻止)")
    ((PASS_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 8: 退出登录测试"
echo "=========================================="
# 先登录
agent-browser open https://ebankofdata.online/login
sleep 2
agent-browser snapshot -i > /dev/null
agent-browser fill @e2 "bluesky"
agent-browser fill @e3 "test8888"
sleep 1
agent-browser click @e4
sleep 3
# 检查退出登录链接
snapshot=$(agent-browser snapshot -i 2>&1)
if [[ "$snapshot" == *"退出登录"* ]]; then
    # 获取退出登录链接的引用
    agent-browser snapshot -i > /tmp/auth_snapshot.txt
    # 点击退出登录（通常在主页）
    agent-browser click @e2 2>/dev/null
    sleep 2
    # 检查是否退出成功
    snapshot_after=$(agent-browser snapshot -i 2>&1)
    if [[ "$snapshot_after" != *"退出登录"* ]]; then
        echo "   ✅ 通过 (退出登录成功)"
        TEST_RESULTS+=("✅ 退出登录测试")
        ((PASS_COUNT++))
    else
        echo "   ❌ 失败 (退出登录未生效)"
        TEST_RESULTS+=("❌ 退出登录测试")
        ((FAIL_COUNT++))
    fi
else
    echo "   ❌ 失败 (未找到退出登录链接)"
    TEST_RESULTS+=("❌ 退出登录测试")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 9: 访问受保护资源测试"
echo "=========================================="
# 未登录状态访问需要认证的资源
agent-browser open https://ebankofdata.online/files/
sleep 3
url=$(agent-browser get url 2>&1)
if [[ "$url" == *"login"* ]]; then
    echo "   ✅ 通过 (未登录时重定向到登录页)"
    TEST_RESULTS+=("✅ 访问受保护资源测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (未重定向到登录页)"
    echo "   实际 URL: $url"
    TEST_RESULTS+=("❌ 访问受保护资源测试")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 10: 登录后访问受保护资源测试"
echo "=========================================="
# 先登录
agent-browser open https://ebankofdata.online/login
sleep 2
agent-browser snapshot -i > /dev/null
agent-browser fill @e2 "bluesky"
agent-browser fill @e3 "test8888"
sleep 1
agent-browser click @e4
sleep 3
# 访问受保护资源
agent-browser open https://ebankofdata.online/files/
sleep 3
url=$(agent-browser get url 2>&1)
if [[ "$url" == *"files"* ]] && [[ "$url" != *"login"* ]]; then
    echo "   ✅ 通过 (登录后可访问受保护资源)"
    TEST_RESULTS+=("✅ 登录后访问受保护资源测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (登录后仍无法访问)"
    echo "   实际 URL: $url"
    TEST_RESULTS+=("❌ 登录后访问受保护资源测试")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 11: Session 持久性测试"
echo "=========================================="
# 登录后刷新页面
agent-browser open https://ebankofdata.online/
sleep 2
snapshot=$(agent-browser snapshot -i 2>&1)
if [[ "$snapshot" == *"退出登录"* ]]; then
    echo "   ✅ 通过 (Session 保持有效)"
    TEST_RESULTS+=("✅ Session 持久性测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (Session 丢失)"
    TEST_RESULTS+=("❌ Session 持久性测试")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 12: 页面截图测试"
echo "=========================================="
agent-browser open https://ebankofdata.online/login
sleep 2
agent-browser screenshot /home/auto_test/auth_v2_login_page.png 2>&1
if [ -f /home/auto_test/auth_v2_login_page.png ]; then
    size=$(ls -lh /home/auto_test/auth_v2_login_page.png | awk '{print $5}')
    echo "   ✅ 截图成功 ($size)"
    TEST_RESULTS+=("✅ 页面截图测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 截图失败"
    TEST_RESULTS+=("❌ 页面截图测试")
    ((FAIL_COUNT++))
fi
echo ""

# 关闭浏览器
agent-browser close

echo "=========================================="
echo "测试结果汇总"
echo "=========================================="
echo ""
for result in "${TEST_RESULTS[@]}"; do
    echo "  $result"
done
echo ""
echo "总计：${#TEST_RESULTS[@]} 个测试"
echo "通过：$PASS_COUNT"
echo "失败：$FAIL_COUNT"
echo ""

if [ $FAIL_COUNT -eq 0 ]; then
    echo "🎉 所有测试通过！"
    exit 0
else
    echo "⚠️  有 $FAIL_COUNT 个测试失败"
    exit 1
fi
