#!/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!"