97 lines
3.6 KiB
Bash
Executable File
97 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Simple FK error handling test - covers main scenarios we handle
|
|
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
source "$SCRIPT_DIR/../test-config.sh"
|
|
|
|
print_blue "🔗 Testing FK error handling..."
|
|
|
|
API_BASE="$TEST_API_BASE"
|
|
|
|
# Get admin token for table operations
|
|
ADMIN_TOKEN=$(get_admin_token)
|
|
if [ -z "$ADMIN_TOKEN" ]; then
|
|
print_fail "Could not get admin token"
|
|
exit 1
|
|
fi
|
|
|
|
# Dynamic table names
|
|
USERS_TABLE="users_$(date +%s)"
|
|
POSTS_TABLE="posts_$(date +%s)"
|
|
|
|
# Register for cleanup
|
|
register_test_table "$USERS_TABLE"
|
|
register_test_table "$POSTS_TABLE"
|
|
|
|
TOTAL_TESTS=0
|
|
PASSED_TESTS=0
|
|
|
|
test_fk() {
|
|
local method=$1 endpoint=$2 data=$3 desc=$4 expected=${5:-200}
|
|
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
|
|
|
print_info "Test $TOTAL_TESTS: $desc"
|
|
|
|
response=$(curl -s -w "\n%{http_code}" -X "$method" "$API_BASE$endpoint" \
|
|
-H "Authorization: Bearer $ADMIN_TOKEN" -H "Content-Type: application/json" ${data:+-d "$data"})
|
|
|
|
status=$(echo "$response" | tail -n 1)
|
|
|
|
if [ "$status" = "$expected" ]; then
|
|
print_success "✅ ($status)"
|
|
PASSED_TESTS=$((PASSED_TESTS + 1))
|
|
else
|
|
print_fail "❌ Expected $expected, got $status"
|
|
fi
|
|
echo ""
|
|
}
|
|
|
|
main_test() {
|
|
print_info "Test tables: $USERS_TABLE, $POSTS_TABLE"
|
|
|
|
# Setup tables
|
|
test_fk "POST" "/database/tables" \
|
|
"{\"tableName\":\"$USERS_TABLE\",\"rlsEnabled\":false,\"columns\":[{\"columnName\":\"name\",\"type\":\"string\",\"isNullable\":false,\"isUnique\":false}]}" \
|
|
"Create users table" 201
|
|
|
|
test_fk "POST" "/database/tables" \
|
|
"{\"tableName\":\"$POSTS_TABLE\",\"rlsEnabled\":false,\"columns\":[{\"columnName\":\"author_id\",\"type\":\"uuid\",\"isNullable\":true,\"isUnique\":false}]}" \
|
|
"Create posts table" 201
|
|
|
|
# Test our error handling
|
|
test_fk "PATCH" "/database/tables/$POSTS_TABLE/schema" \
|
|
"{\"addForeignKeys\":[{\"referenceTable\":\"fake_table\",\"referenceColumns\":[{\"sourceColumn\":\"author_id\",\"referenceColumn\":\"id\"}],\"onDelete\":\"CASCADE\",\"onUpdate\":\"CASCADE\"}]}" \
|
|
"Non-existent table → 400" 400
|
|
|
|
test_fk "PATCH" "/database/tables/$POSTS_TABLE/schema" \
|
|
"{\"addForeignKeys\":[{\"referenceTable\":\"$USERS_TABLE\",\"referenceColumns\":[{\"sourceColumn\":\"author_id\",\"referenceColumn\":\"name\"}],\"onDelete\":\"CASCADE\",\"onUpdate\":\"CASCADE\"}]}" \
|
|
"Type mismatch → 400" 400
|
|
|
|
test_fk "PATCH" "/database/tables/$POSTS_TABLE/schema" \
|
|
"{\"addColumns\":[{\"columnName\":\"cat_id\",\"type\":\"uuid\",\"isNullable\":true,\"isUnique\":false}],\"addForeignKeys\":[{\"referenceTable\":\"fake_cats\",\"referenceColumns\":[{\"sourceColumn\":\"cat_id\",\"referenceColumn\":\"id\"}],\"onDelete\":\"CASCADE\",\"onUpdate\":\"CASCADE\"}]}" \
|
|
"New column with non-existent table → 400" 400
|
|
|
|
# Valid FK should work
|
|
test_fk "PATCH" "/database/tables/$POSTS_TABLE/schema" \
|
|
"{\"addForeignKeys\":[{\"referenceTable\":\"$USERS_TABLE\",\"referenceColumns\":[{\"sourceColumn\":\"author_id\",\"referenceColumn\":\"id\"}],\"onDelete\":\"CASCADE\",\"onUpdate\":\"CASCADE\"}]}" \
|
|
"Valid FK constraint → 200" 200
|
|
|
|
# Summary
|
|
print_blue "Results: $PASSED_TESTS/$TOTAL_TESTS passed"
|
|
if [ $PASSED_TESTS -eq $TOTAL_TESTS ]; then
|
|
print_success "🎉 FK error handling working correctly!"
|
|
return 0
|
|
else
|
|
print_fail "❌ Some FK error tests failed"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Check requirements
|
|
if ! curl -s "$API_BASE/health" > /dev/null; then
|
|
print_fail "Server not running at $API_BASE"
|
|
exit 1
|
|
fi
|
|
|
|
main_test |