veza/tools/tests/test_registration_fixed.sh
2025-12-03 22:56:50 +01:00

112 lines
No EOL
3.5 KiB
Bash

#!/bin/bash
# Test script to verify registration fix works correctly
# This should be GREEN after the fix
set -euo pipefail
# Source test environment
cd "$(dirname "${BASH_SOURCE[0]}")"
source .env
source http/http_assert.sh
echo "🔍 Testing registration fix..."
echo "================================"
# Test 1: Valid registration should return 201
echo -e "\n1. Testing valid registration..."
TEST_EMAIL="user+fixed$(date +%s)@lab.veza"
TEST_PASSWORD="V3za!test-$(date +%s)"
USERNAME="testuser$(date +%s)"
response=$(curl -skw '\n%{http_code}\n%{time_total}\n' \
-H 'Content-Type: application/json' \
-d "{\"username\":\"$USERNAME\",\"email\":\"$TEST_EMAIL\",\"password\":\"$TEST_PASSWORD\"}" \
"$API_ORIGIN/api/auth/register")
body=$(echo "$response" | sed -n '1,/^$/p' | head -n -3)
code=$(echo "$response" | tail -n 2 | head -n 1)
time_ms=$(echo "$response" | tail -n 1 | awk '{print int($1*1000)}')
echo "Response code: $code"
echo "Response time: ${time_ms}ms"
if [ "$code" -eq 201 ]; then
echo "✅ Valid registration returns 201 (FIXED!)"
# Check response structure
echo "$body" | jq -e '.access_token' >/dev/null && echo "✅ Has access_token"
echo "$body" | jq -e '.refresh_token' >/dev/null && echo "✅ Has refresh_token"
echo "$body" | jq -e '.user.email' >/dev/null && echo "✅ Has user object"
else
echo "❌ Registration returned $code instead of 201"
echo "Response: $body"
exit 1
fi
# Test 2: Invalid email should return 400
echo -e "\n2. Testing invalid email..."
response=$(curl -skw '\n%{http_code}\n' \
-H 'Content-Type: application/json' \
-d '{"username":"test","email":"not-an-email","password":"ValidPass123!"}' \
"$API_ORIGIN/api/auth/register")
body=$(echo "$response" | sed '$d')
code=$(echo "$response" | tail -1)
if [ "$code" -eq 400 ]; then
echo "✅ Invalid email returns 400"
else
echo "❌ Invalid email returned $code instead of 400"
echo "Response: $body"
fi
# Test 3: Short password should return 400
echo -e "\n3. Testing short password..."
response=$(curl -skw '\n%{http_code}\n' \
-H 'Content-Type: application/json' \
-d '{"username":"test","email":"test@valid.com","password":"123"}' \
"$API_ORIGIN/api/auth/register")
code=$(echo "$response" | tail -1)
if [ "$code" -eq 400 ]; then
echo "✅ Short password returns 400"
else
echo "❌ Short password returned $code instead of 400"
fi
# Test 4: Duplicate registration should return 409
echo -e "\n4. Testing duplicate registration..."
response=$(curl -skw '\n%{http_code}\n' \
-H 'Content-Type: application/json' \
-d "{\"username\":\"$USERNAME\",\"email\":\"$TEST_EMAIL\",\"password\":\"$TEST_PASSWORD\"}" \
"$API_ORIGIN/api/auth/register")
body=$(echo "$response" | sed '$d')
code=$(echo "$response" | tail -1)
if [ "$code" -eq 409 ]; then
echo "✅ Duplicate registration returns 409"
echo "$body" | jq -r '.error' | grep -i "already exists" && echo "✅ Error message is correct"
else
echo "❌ Duplicate registration returned $code instead of 409"
echo "Response: $body"
fi
# Test 5: Missing fields should return 400
echo -e "\n5. Testing missing fields..."
response=$(curl -skw '\n%{http_code}\n' \
-H 'Content-Type: application/json' \
-d '{"email":"test@example.com"}' \
"$API_ORIGIN/api/auth/register")
code=$(echo "$response" | tail -1)
if [ "$code" -eq 400 ]; then
echo "✅ Missing fields returns 400"
else
echo "❌ Missing fields returned $code instead of 400"
fi
echo -e "\n================================"
echo "✅ All registration tests passed!"
echo "🎉 Registration bug is FIXED!"