205 lines
6.8 KiB
Bash
Executable File
205 lines
6.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Test script for ID field functionality
|
|
|
|
# Get the directory where this script is located
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
# Source the test configuration
|
|
source "$SCRIPT_DIR/../test-config.sh"
|
|
|
|
echo "=== Testing User Creation with ID Field ==="
|
|
|
|
# Use configuration from test-config.sh
|
|
API_URL="$TEST_API_BASE"
|
|
ANON_KEY=$(get_anon_key)
|
|
|
|
# Test users for cleanup tracking
|
|
USER1_EMAIL="${TEST_USER_EMAIL_PREFIX}id_test1_$(date +%s)@example.com"
|
|
USER2_EMAIL="${TEST_USER_EMAIL_PREFIX}id_test2_$(date +%s)@example.com"
|
|
USER3_EMAIL="${TEST_USER_EMAIL_PREFIX}id_test3_$(date +%s)@example.com"
|
|
|
|
# Register users for cleanup
|
|
register_test_user "$USER1_EMAIL"
|
|
register_test_user "$USER2_EMAIL"
|
|
register_test_user "$USER3_EMAIL"
|
|
|
|
# Test 1: Create user without ID (should auto-generate)
|
|
print_info "1. Creating user without ID (auto-generate):"
|
|
response1=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/auth/users" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer $ANON_KEY" \
|
|
-d "{
|
|
\"email\": \"$USER1_EMAIL\",
|
|
\"password\": \"password123\",
|
|
\"name\": \"Test User 1\"
|
|
}")
|
|
|
|
body1=$(echo "$response1" | sed '$d')
|
|
status1=$(echo "$response1" | tail -n 1)
|
|
|
|
if [ "$status1" -ge 200 ] && [ "$status1" -lt 300 ]; then
|
|
print_success "User created without ID ($status1)"
|
|
echo "Response: $body1" | head -c 200
|
|
echo ""
|
|
else
|
|
print_fail "User creation without ID failed ($status1)"
|
|
echo "Error: $body1"
|
|
fi
|
|
|
|
# Test 2: Create user with custom ID
|
|
print_info "2. Creating user with custom ID:"
|
|
# Generate a valid UUID v4
|
|
CUSTOM_ID="$(uuidgen | tr '[:upper:]' '[:lower:]')"
|
|
response2=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/auth/users" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer $ANON_KEY" \
|
|
-d "{
|
|
\"id\": \"$CUSTOM_ID\",
|
|
\"email\": \"$USER2_EMAIL\",
|
|
\"password\": \"password123\",
|
|
\"name\": \"Test User 2\"
|
|
}")
|
|
|
|
body2=$(echo "$response2" | sed '$d')
|
|
status2=$(echo "$response2" | tail -n 1)
|
|
|
|
if [ "$status2" -ge 200 ] && [ "$status2" -lt 300 ]; then
|
|
print_success "User created with custom ID ($status2)"
|
|
echo "Response: $body2" | head -c 200
|
|
echo ""
|
|
else
|
|
print_fail "User creation with custom ID failed ($status2)"
|
|
echo "Error: $body2"
|
|
fi
|
|
|
|
# Test 3: Try to create user with duplicate ID (JWT auth doesn't support custom IDs)
|
|
print_info "3. Creating user with duplicate ID (JWT auth ignores custom ID):"
|
|
response3=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/auth/users" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer $ANON_KEY" \
|
|
-d "{
|
|
\"id\": \"$CUSTOM_ID\",
|
|
\"email\": \"$USER3_EMAIL\",
|
|
\"password\": \"password123\",
|
|
\"name\": \"Test User 3\"
|
|
}")
|
|
|
|
body3=$(echo "$response3" | sed '$d')
|
|
status3=$(echo "$response3" | tail -n 1)
|
|
|
|
# JWT auth doesn't support custom IDs, so it will always succeed with a new generated ID
|
|
if [ "$status3" -eq 200 ] || [ "$status3" -eq 201 ]; then
|
|
print_success "JWT auth created user with generated ID (expected behavior)"
|
|
print_info "Note: JWT auth doesn't support custom user IDs"
|
|
else
|
|
print_fail "Unexpected response ($status3)"
|
|
echo "Error: $body3"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Testing Record Creation with ID Field ==="
|
|
|
|
# Get admin token for table creation
|
|
admin_token=$(get_admin_token)
|
|
if [ -z "$admin_token" ]; then
|
|
print_fail "Could not get admin token for table creation"
|
|
fi
|
|
|
|
# Create a test table
|
|
TEST_TABLE="test_items_$(date +%s)"
|
|
register_test_table "$TEST_TABLE"
|
|
|
|
print_info "4. Creating test table: $TEST_TABLE"
|
|
create_response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/database/tables" \
|
|
-H "Authorization: Bearer $admin_token" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{
|
|
\"tableName\": \"$TEST_TABLE\",
|
|
\"rlsEnabled\": false,
|
|
\"columns\": [
|
|
{\"columnName\": \"title\", \"type\": \"string\", \"isNullable\": false, \"isUnique\": false},
|
|
{\"columnName\": \"description\", \"type\": \"string\", \"isNullable\": true, \"isUnique\": false},
|
|
{\"columnName\": \"status\", \"type\": \"string\", \"isNullable\": false, \"isUnique\": false}
|
|
]
|
|
}")
|
|
|
|
create_body=$(echo "$create_response" | sed '$d')
|
|
create_status=$(echo "$create_response" | tail -n 1)
|
|
|
|
if [ "$create_status" -ge 200 ] && [ "$create_status" -lt 300 ]; then
|
|
print_success "Test table created successfully ($create_status)"
|
|
# Wait for the table to be created and synced
|
|
sleep 1
|
|
else
|
|
print_fail "Test table creation failed ($create_status)"
|
|
echo "Error: $create_body"
|
|
fi
|
|
|
|
# Test 5: Create record without ID (should auto-generate)
|
|
print_info "5. Creating record without ID (auto-generate):"
|
|
record1_response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/database/records/$TEST_TABLE" \
|
|
-H "Authorization: Bearer $admin_token" \
|
|
-H "Content-Type: application/json" \
|
|
-d '[{
|
|
"title": "Test Item 1",
|
|
"description": "This is a test item",
|
|
"status": "active"
|
|
}]')
|
|
|
|
record1_body=$(echo "$record1_response" | sed '$d')
|
|
record1_status=$(echo "$record1_response" | tail -n 1)
|
|
|
|
if [ "$record1_status" -ge 200 ] && [ "$record1_status" -lt 300 ]; then
|
|
print_success "Record created without ID ($record1_status)"
|
|
echo "Response: $record1_body" | head -c 200
|
|
echo ""
|
|
else
|
|
print_fail "Record creation without ID failed ($record1_status)"
|
|
echo "Error: $record1_body"
|
|
fi
|
|
|
|
# Test 6: Create record with custom ID
|
|
print_info "6. Creating record with custom ID:"
|
|
# Generate a valid UUID v4
|
|
CUSTOM_RECORD_ID="$(uuidgen | tr '[:upper:]' '[:lower:]')"
|
|
record2_response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/database/records/$TEST_TABLE" \
|
|
-H "Authorization: Bearer $admin_token" \
|
|
-H "Content-Type: application/json" \
|
|
-d "[{
|
|
\"id\": \"$CUSTOM_RECORD_ID\",
|
|
\"title\": \"Test Item 2\",
|
|
\"description\": \"This has a custom ID\",
|
|
\"status\": \"active\"
|
|
}]")
|
|
|
|
record2_body=$(echo "$record2_response" | sed '$d')
|
|
record2_status=$(echo "$record2_response" | tail -n 1)
|
|
|
|
if [ "$record2_status" -ge 200 ] && [ "$record2_status" -lt 300 ]; then
|
|
print_success "Record created with custom ID ($record2_status)"
|
|
echo "Response: $record2_body" | head -c 200
|
|
echo ""
|
|
else
|
|
print_fail "Record creation with custom ID failed ($record2_status)"
|
|
echo "Error: $record2_body"
|
|
fi
|
|
|
|
# Test 7: Query records to verify IDs
|
|
print_info "7. Querying all records to verify IDs:"
|
|
query_response=$(curl -s -w "\n%{http_code}" -X GET "$API_URL/database/records/$TEST_TABLE" \
|
|
-H "Authorization: Bearer $admin_token")
|
|
|
|
query_body=$(echo "$query_response" | sed '$d')
|
|
query_status=$(echo "$query_response" | tail -n 1)
|
|
|
|
if [ "$query_status" -ge 200 ] && [ "$query_status" -lt 300 ]; then
|
|
print_success "Records queried successfully ($query_status)"
|
|
echo "Records: $query_body" | head -c 500
|
|
echo ""
|
|
else
|
|
print_fail "Record query failed ($query_status)"
|
|
echo "Error: $query_body"
|
|
fi
|
|
|
|
print_success "🎉 ID field tests completed!" |