174 lines
5.5 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# Configuration
API_URL="http://localhost:8000"
TEST_ALARM_NAME="Test Alarm"
TEST_ALARM_TIME="08:30:00"
TEST_AUDIO_FILE="/tmp/test.mp3"
# Color codes for output
GREEN='\033[0;32m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Helper function to print status messages
print_status() {
echo -e "${BLUE}=== $1 ===${NC}"
}
# Helper function to check test results
check_result() {
if [ $? -eq 0 ]; then
echo -e "${GREEN}$1${NC}"
else
echo -e "${RED}$1${NC}"
exit 1
fi
}
# 1. Test server connectivity
print_status "Testing server connectivity"
curl -s "$API_URL" > /dev/null
check_result "Server connectivity check"
# 2. Get initial state
print_status "Getting initial state"
INITIAL_STATE=$(curl -s -X GET "$API_URL")
echo "$INITIAL_STATE" | jq .
check_result "Retrieved initial state"
# 3. Add a new alarm (POST)
print_status "Adding new alarm"
POST_DATA=$(jq -n \
--arg name "$TEST_ALARM_NAME" \
--arg time "$TEST_ALARM_TIME" \
'{
"name": $name,
"time": $time,
"repeat_rule": {
"type": "weekly",
"days_of_week": ["monday", "wednesday", "friday"]
},
"enabled": true,
"snooze": {
"enabled": true,
"duration": 5,
"max_count": 3
},
"metadata": {
"volume": 75,
"notes": "Test alarm with full configuration"
}
}'
)
ADD_RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d "$POST_DATA" "$API_URL")
NEW_ALARM_ID=$(echo "$ADD_RESPONSE" | jq -r '.data.id')
if [[ "$NEW_ALARM_ID" == "null" || -z "$NEW_ALARM_ID" ]]; then
echo -e "${RED}Failed to add alarm${NC}"
echo "Response: $ADD_RESPONSE"
exit 1
fi
echo -e "${GREEN}Added alarm with ID: $NEW_ALARM_ID${NC}"
#j# 4. Test duplicate alarm detection
#jprint_status "Testing duplicate alarm detection"
#jDUPLICATE_RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d "$POST_DATA" "$API_URL")
#jif [[ $(echo "$DUPLICATE_RESPONSE" | jq -r '.error') == *"Duplicate alarm detected"* ]]; then
#j echo -e "${GREEN}✓ Duplicate detection working${NC}"
#jelse
#j echo -e "${RED}✗ Duplicate detection failed${NC}"
#j echo "Response: $DUPLICATE_RESPONSE"
#jfi
#j
#j# 5. Update the alarm (PUT)
#jprint_status "Updating alarm"
#jUPDATE_DATA=$(jq -n \
#j --arg name "$TEST_ALARM_NAME Updated" \
#j --arg time "$TEST_ALARM_TIME" \
#j --argjson id "$NEW_ALARM_ID" \
#j '{
#j "id": $id,
#j "name": $name,
#j "time": $time,
#j "repeat_rule": {
#j "type": "daily"
#j },
#j "enabled": true,
#j "snooze": {
#j "enabled": false,
#j "duration": 10,
#j "max_count": 2
#j },
#j "metadata": {
#j "volume": 90,
#j "notes": "Updated test alarm"
#j }
#j }'
#j)
#j
#jUPDATE_RESPONSE=$(curl -s -X PUT -H "Content-Type: application/json" -d "$UPDATE_DATA" "$API_URL")
#jif [[ $(echo "$UPDATE_RESPONSE" | jq -r '.data.message') == "Alarm updated successfully" ]]; then
#j echo -e "${GREEN}✓ Alarm update successful${NC}"
#jelse
#j echo -e "${RED}✗ Alarm update failed${NC}"
#j echo "Response: $UPDATE_RESPONSE"
#jfi
#j
#j# 6. Verify the update
#jprint_status "Verifying update"
#jUPDATED_STATE=$(curl -s -X GET "$API_URL")
#jUPDATED_ALARM=$(echo "$UPDATED_STATE" | jq -r ".data[] | select(.id == $NEW_ALARM_ID)")
#jif [[ $(echo "$UPDATED_ALARM" | jq -r '.name') == "$TEST_ALARM_NAME Updated" ]]; then
#j echo -e "${GREEN}✓ Update verification successful${NC}"
#jelse
#j echo -e "${RED}✗ Update verification failed${NC}"
#j echo "Current alarm state: $UPDATED_ALARM"
#jfi
#j
#j# 7. Test invalid inputs
#jprint_status "Testing invalid inputs"
#j
#j# Test invalid time format
#jINVALID_TIME_DATA=$(echo "$POST_DATA" | jq '. + {"time": "25:00:00"}')
#jINVALID_TIME_RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d "$INVALID_TIME_DATA" "$API_URL")
#jif [[ $(echo "$INVALID_TIME_RESPONSE" | jq -r '.error') == *"Invalid alarm configuration"* ]]; then
#j echo -e "${GREEN}✓ Invalid time format detection working${NC}"
#jelse
#j echo -e "${RED}✗ Invalid time format detection failed${NC}"
#jfi
#j
#j# Test invalid repeat rule
#jINVALID_REPEAT_DATA=$(echo "$POST_DATA" | jq '.repeat_rule.type = "monthly"')
#jINVALID_REPEAT_RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d "$INVALID_REPEAT_DATA" "$API_URL")
#jif [[ $(echo "$INVALID_REPEAT_RESPONSE" | jq -r '.error') == *"Invalid alarm configuration"* ]]; then
#j echo -e "${GREEN}✓ Invalid repeat rule detection working${NC}"
#jelse
#j echo -e "${RED}✗ Invalid repeat rule detection failed${NC}"
#jfi
#j
#j# 8. Delete the test alarm
#jprint_status "Deleting test alarm"
#jDELETE_RESPONSE=$(curl -s -X DELETE -H "Content-Type: application/json" -d "{\"id\":$NEW_ALARM_ID}" "$API_URL")
#jif [[ $(echo "$DELETE_RESPONSE" | jq -r '.data.message') == "Alarm removed successfully" ]]; then
#j echo -e "${GREEN}✓ Alarm deletion successful${NC}"
#jelse
#j echo -e "${RED}✗ Alarm deletion failed${NC}"
#j echo "Response: $DELETE_RESPONSE"
#jfi
#j
#j# 9. Verify deletion
#jprint_status "Verifying deletion"
#jFINAL_STATE=$(curl -s -X GET "$API_URL")
#jif [[ $(echo "$FINAL_STATE" | jq ".data[] | select(.id == $NEW_ALARM_ID)") == "" ]]; then
#j echo -e "${GREEN}✓ Deletion verification successful${NC}"
#jelse
#j echo -e "${RED}✗ Deletion verification failed${NC}"
#j echo "Current state: $FINAL_STATE"
#jfi
#j
#jprint_status "Test suite completed!"