174 lines
5.5 KiB
Bash
174 lines
5.5 KiB
Bash
![]() |
#!/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!"
|