diff --git a/scripts/rfcp-backend-smoke-test.sh b/scripts/rfcp-backend-smoke-test.sh new file mode 100644 index 0000000..d30d9fc --- /dev/null +++ b/scripts/rfcp-backend-smoke-test.sh @@ -0,0 +1,100 @@ +#!/bin/bash +# RFCP Backend Smoke Test +# Usage: ./rfcp-backend-smoke-test.sh [base_url] + +BASE_URL="${1:-https://api.rfcp.eliah.one}" +PASSED=0 +FAILED=0 + +# Colors +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +NC='\033[0m' + +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo " RFCP Backend Smoke Test" +echo " Target: $BASE_URL" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "" + +test_endpoint() { + local name="$1" + local method="$2" + local endpoint="$3" + local expected="$4" + local data="$5" + + if [ "$method" == "GET" ]; then + response=$(curl -s "$BASE_URL$endpoint") + else + response=$(curl -s -X "$method" "$BASE_URL$endpoint" \ + -H "Content-Type: application/json" \ + -d "$data") + fi + + if echo "$response" | grep -q "$expected"; then + echo -e "${GREEN}✓${NC} $name" + ((PASSED++)) + else + echo -e "${RED}✗${NC} $name" + echo " Expected: $expected" + echo " Got: $response" + ((FAILED++)) + fi +} + +# 1. Root +test_endpoint "Root endpoint" "GET" "/" "RFCP Backend API" + +# 2. Health +test_endpoint "Health check" "GET" "/api/health/" '"status":"ok"' + +# 3. Database +test_endpoint "Database connection" "GET" "/api/health/db" '"database":"connected"' + +# 4. Get project (auto-creates) +test_endpoint "Get global project" "GET" "/api/projects/current" '"name":"global"' + +# 5. Get settings +test_endpoint "Get coverage settings" "GET" "/api/projects/current/settings" '"radius"' + +# 6. PUT sites +test_endpoint "Update sites" "PUT" "/api/projects/current/sites" '"updated"' \ + '[{"id":"smoke-test","name":"Smoke Test Site","lat":48.5,"lon":35.0,"height":30,"power":43}]' + +# 7. GET sites (verify write) +test_endpoint "Verify sites saved" "GET" "/api/projects/current/sites" "Smoke Test Site" + +# 8. PUT settings +test_endpoint "Update settings" "PUT" "/api/projects/current/settings" '"radius":15000' \ + '{"radius":15000,"resolution":200,"min_signal":-105,"max_signal":-65}' + +# 9. Swagger docs +swagger_response=$(curl -s -o /dev/null -w "%{http_code}" "$BASE_URL/docs") +if [ "$swagger_response" == "200" ]; then + echo -e "${GREEN}✓${NC} Swagger UI accessible" + ((PASSED++)) +else + echo -e "${RED}✗${NC} Swagger UI (HTTP $swagger_response)" + ((FAILED++)) +fi + +# 10. OpenAPI schema +test_endpoint "OpenAPI schema" "GET" "/openapi.json" '"openapi"' + +# Cleanup - restore default settings +curl -s -X PUT "$BASE_URL/api/projects/current/settings" \ + -H "Content-Type: application/json" \ + -d '{"radius":10000,"resolution":200,"min_signal":-105,"max_signal":-65}' > /dev/null + +echo "" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +if [ $FAILED -eq 0 ]; then + echo -e " ${GREEN}All tests passed!${NC} ($PASSED/$((PASSED+FAILED)))" +else + echo -e " ${YELLOW}Results:${NC} ${GREEN}$PASSED passed${NC}, ${RED}$FAILED failed${NC}" +fi +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +exit $FAILED \ No newline at end of file