dotnet-cqrs/test-http-endpoints.sh

154 lines
5.1 KiB
Bash
Executable File

#!/bin/bash
# HTTP Endpoint Testing Script for Phase 1
# Run this after starting the Svrnty.Sample application
set -e
BASE_URL="http://localhost:6001"
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}Phase 1 HTTP Endpoint Tests${NC}"
echo -e "${BLUE}================================${NC}"
echo ""
# Check if server is running
echo -e "${YELLOW}Checking if server is running...${NC}"
if ! curl -s --fail "${BASE_URL}/swagger" > /dev/null; then
echo "❌ Server is not running on ${BASE_URL}"
echo "Please start the application first: cd Svrnty.Sample && dotnet run"
exit 1
fi
echo -e "${GREEN}✓ Server is running${NC}"
echo ""
# Test 1: Add User Command
echo -e "${YELLOW}Test 1: Add User Command${NC}"
echo "POST ${BASE_URL}/api/command/addUser"
RESPONSE=$(curl -s -X POST "${BASE_URL}/api/command/addUser" \
-H "Content-Type: application/json" \
-d '{
"name": "John Doe",
"email": "john@example.com"
}')
echo "Response: ${RESPONSE}"
if [ -n "$RESPONSE" ] && [ "$RESPONSE" -gt 0 ] 2>/dev/null; then
echo -e "${GREEN}✓ Test 1 passed: User created with ID ${RESPONSE}${NC}"
else
echo -e "❌ Test 1 failed: Unexpected response"
fi
echo ""
# Test 2: Invite User Command
echo -e "${YELLOW}Test 2: Invite User Command${NC}"
echo "POST ${BASE_URL}/api/command/inviteUser"
INVITATION_ID=$(curl -s -X POST "${BASE_URL}/api/command/inviteUser" \
-H "Content-Type: application/json" \
-d '{
"email": "jane@example.com",
"inviterName": "Admin"
}' | tr -d '"')
echo "Invitation ID: ${INVITATION_ID}"
if [ -n "$INVITATION_ID" ]; then
echo -e "${GREEN}✓ Test 2 passed: Invitation created with ID ${INVITATION_ID}${NC}"
else
echo -e "❌ Test 2 failed: No invitation ID returned"
fi
echo ""
# Test 3: Accept Invitation
echo -e "${YELLOW}Test 3: Accept Invitation${NC}"
echo "POST ${BASE_URL}/api/command/acceptInvite"
ACCEPT_RESPONSE=$(curl -s -X POST "${BASE_URL}/api/command/acceptInvite" \
-H "Content-Type: application/json" \
-d "{
\"invitationId\": \"${INVITATION_ID}\",
\"email\": \"jane@example.com\",
\"name\": \"Jane Doe\"
}")
echo "Response: ${ACCEPT_RESPONSE}"
if [ -n "$ACCEPT_RESPONSE" ] && [ "$ACCEPT_RESPONSE" -gt 0 ] 2>/dev/null; then
echo -e "${GREEN}✓ Test 3 passed: Invitation accepted, User ID ${ACCEPT_RESPONSE}${NC}"
else
echo -e "❌ Test 3 failed: Unexpected response"
fi
echo ""
# Test 4: Multiple Events (Broadcast Test)
echo -e "${YELLOW}Test 4: Multiple Events (Testing Broadcast Mode)${NC}"
echo "Adding 5 users in sequence..."
for i in {1..5}; do
RESPONSE=$(curl -s -X POST "${BASE_URL}/api/command/addUser" \
-H "Content-Type: application/json" \
-d "{\"name\": \"User $i\", \"email\": \"user$i@example.com\"}")
echo " User $i created with ID: ${RESPONSE}"
sleep 0.5
done
echo -e "${GREEN}✓ Test 4 passed: 5 events generated${NC}"
echo -e "${BLUE}Check the application logs to verify EventConsumerBackgroundService received all 5 events${NC}"
echo ""
# Test 5: Validation Error
echo -e "${YELLOW}Test 5: Validation Error (Invalid Command)${NC}"
echo "POST ${BASE_URL}/api/command/addUser (empty body)"
VALIDATION_RESPONSE=$(curl -s -w "\nHTTP_STATUS:%{http_code}" -X POST "${BASE_URL}/api/command/addUser" \
-H "Content-Type: application/json" \
-d '{}')
HTTP_STATUS=$(echo "$VALIDATION_RESPONSE" | grep "HTTP_STATUS" | cut -d: -f2)
if [ "$HTTP_STATUS" = "400" ]; then
echo -e "${GREEN}✓ Test 5 passed: Validation error returned HTTP 400${NC}"
else
echo -e "❌ Test 5 failed: Expected HTTP 400, got ${HTTP_STATUS}"
fi
echo ""
# Test 6: Query Endpoint
echo -e "${YELLOW}Test 6: Query Endpoint${NC}"
echo "GET ${BASE_URL}/api/query/fetchUser?userId=1234"
QUERY_RESPONSE=$(curl -s "${BASE_URL}/api/query/fetchUser?userId=1234")
echo "Response: ${QUERY_RESPONSE}"
if echo "$QUERY_RESPONSE" | grep -q "userId"; then
echo -e "${GREEN}✓ Test 6 passed: Query endpoint works${NC}"
else
echo -e "❌ Test 6 failed: Unexpected response"
fi
echo ""
# Test 7: Decline Invitation
echo -e "${YELLOW}Test 7: Decline Invitation${NC}"
echo "Creating new invitation..."
INVITATION_ID_2=$(curl -s -X POST "${BASE_URL}/api/command/inviteUser" \
-H "Content-Type: application/json" \
-d '{
"email": "bob@example.com",
"inviterName": "Admin"
}' | tr -d '"')
echo "Invitation ID: ${INVITATION_ID_2}"
echo "Declining invitation..."
curl -s -X POST "${BASE_URL}/api/command/declineInvite" \
-H "Content-Type: application/json" \
-d "{
\"invitationId\": \"${INVITATION_ID_2}\",
\"reason\": \"Not interested\"
}" > /dev/null
echo -e "${GREEN}✓ Test 7 passed: Invitation declined${NC}"
echo ""
# Summary
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}Test Summary${NC}"
echo -e "${BLUE}================================${NC}"
echo -e "All HTTP endpoint tests completed!"
echo -e ""
echo -e "${YELLOW}Next Steps:${NC}"
echo -e "1. Check application logs to verify events were received by EventConsumerBackgroundService"
echo -e "2. Run gRPC tests: ./test-grpc-endpoints.sh"
echo -e "3. Review full test results in PHASE1-TESTING-GUIDE.md"
echo ""