-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApiCheck.sh
More file actions
executable file
·275 lines (220 loc) · 12.8 KB
/
ApiCheck.sh
File metadata and controls
executable file
·275 lines (220 loc) · 12.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
#!/bin/bash
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
BACKEND_URL="${API_URL:-http://localhost:3000}"
API_URL="${BACKEND_URL}/api"
BOT_TOKEN_ENCODED="Ym90XzlhNzc1MDk2NGI3NWEwMmEwM2MwNzY5YTljZjY0NGU0MmRhMDcyN2QwYTI3ZjBmZGRiMDdmNTFhMjA5NzA1MTQ="
BOT_TOKEN=$(echo "$BOT_TOKEN_ENCODED" | base64 -d)
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}TaskPulse API Chain Test${NC}"
echo -e "${BLUE}======================================${NC}"
echo "Testing API at: ${API_URL}"
echo -e "${GREEN}✓ Bot token decoded successfully${NC}"
BOT_USER_RESPONSE=$(curl -s "${API_URL}/auth/me" -H "x-api-token: ${BOT_TOKEN}")
BOT_USER_ID=$(echo "$BOT_USER_RESPONSE" | jq -r '.user.id')
BOT_USERNAME=$(echo "$BOT_USER_RESPONSE" | jq -r '.user.username')
echo -e "${GREEN}✓ Authenticated as: $BOT_USERNAME (ID: $BOT_USER_ID)${NC}"
TIMESTAMP=$(date +%s)
PROJECT_NAME="API_TEST_PROJECT_${TIMESTAMP}"
PROJECT_DESC="Automated API test project created at $(date)"
TASK1_NAME="API_Test_Task_1_${TIMESTAMP}"
TASK2_NAME="API_Test_Task_2_${TIMESTAMP}"
TASK3_NAME="API_Test_Task_3_${TIMESTAMP}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Pre-run Cleanup${NC}"
echo -e "${BLUE}======================================${NC}"
PROJECTS=$(curl -s "${API_URL}/projects" -H "x-api-token: ${BOT_TOKEN}")
echo "$PROJECTS" | jq -c '.[] | select(.name | startswith("API_TEST_"))' | while read -r project; do
PROJECT_ID=$(echo "$project" | jq -r '.id')
PROJECT_NAME_DEL=$(echo "$project" | jq -r '.name')
echo -e "${CYAN}ℹ Deleting project: $PROJECT_NAME_DEL (ID: $PROJECT_ID)${NC}"
DELETE_RESPONSE=$(curl -s -X DELETE "${API_URL}/projects/${PROJECT_ID}" -H "x-api-token: ${BOT_TOKEN}")
if echo "$DELETE_RESPONSE" | jq -e '.deleted' > /dev/null 2>&1; then
echo -e "${GREEN}✓ Deleted project: $PROJECT_NAME_DEL${NC}"
fi
done
PROJECT_ID=""
TASK1_ID=""
TASK2_ID=""
TASK3_ID=""
SUBTASK1_ID=""
SUBTASK2_ID=""
SUBTASK3_ID=""
SUBTASK4_ID=""
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 1: Create Project${NC}"
echo -e "${BLUE}======================================${NC}"
PROJECT_RESPONSE=$(curl -s -X POST "${API_URL}/projects" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"name\":\"${PROJECT_NAME}\",\"description\":\"${PROJECT_DESC}\"}")
PROJECT_ID=$(echo "$PROJECT_RESPONSE" | jq -r '.id')
echo -e "${GREEN}✓ Creating project: ${PROJECT_NAME}${NC}"
echo -e "${CYAN}ℹ Project ID: $PROJECT_ID${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 2: Update Project${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X PUT "${API_URL}/projects/${PROJECT_ID}" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"name\":\"${PROJECT_NAME}_UPDATED\",\"description\":\"Updated description at $(date)\"}" > /dev/null
echo -e "${GREEN}✓ Updating project name and description${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 3: Create Task 1${NC}"
echo -e "${BLUE}======================================${NC}"
TASK1_RESPONSE=$(curl -s -X POST "${API_URL}/tasks" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"title\":\"${TASK1_NAME}\",\"projectId\":${PROJECT_ID},\"description\":\"Test task 1\",\"priority\":\"high\",\"assignedTo\":${BOT_USER_ID}}")
TASK1_ID=$(echo "$TASK1_RESPONSE" | jq -r '.id')
TASK1_OWNER=$(echo "$TASK1_RESPONSE" | jq -r '.owner_id')
TASK1_ASSIGNED=$(echo "$TASK1_RESPONSE" | jq -r '.assigned_to')
echo -e "${GREEN}✓ Creating task 1 with assignment: ${TASK1_NAME}${NC}"
echo -e "${CYAN}ℹ Task ID: $TASK1_ID, Owner: $TASK1_OWNER, Assigned: $TASK1_ASSIGNED${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 4: Create Task 2${NC}"
echo -e "${BLUE}======================================${NC}"
TASK2_RESPONSE=$(curl -s -X POST "${API_URL}/tasks" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"title\":\"${TASK2_NAME}\",\"projectId\":${PROJECT_ID},\"description\":\"Test task 2\",\"priority\":\"medium\"}")
TASK2_ID=$(echo "$TASK2_RESPONSE" | jq -r '.id')
echo -e "${GREEN}✓ Creating task 2 unassigned: ${TASK2_NAME}${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 5: Update Task 1${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X PUT "${API_URL}/tasks/${TASK1_ID}" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"title\":\"${TASK1_NAME}_UPDATED\",\"description\":\"Updated description at $(date)\",\"priority\":\"low\"}" > /dev/null
echo -e "${GREEN}✓ Updating task 1 (title, description, priority)${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 6: Create Subtask 1${NC}"
echo -e "${BLUE}======================================${NC}"
SUBTASK1_RESPONSE=$(curl -s -X POST "${API_URL}/subtasks" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"taskId\":${TASK1_ID},\"question\":\"What is your favorite color?\",\"type\":\"multiple_choice\",\"options\":[\"Red\",\"Blue\",\"Green\",\"Yellow\"]}")
SUBTASK1_ID=$(echo "$SUBTASK1_RESPONSE" | jq -r '.id')
echo -e "${GREEN}✓ Creating multiple_choice subtask${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 7: Create Subtask 2${NC}"
echo -e "${BLUE}======================================${NC}"
SUBTASK2_RESPONSE=$(curl -s -X POST "${API_URL}/subtasks" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"taskId\":${TASK2_ID},\"question\":\"Describe your testing approach\",\"type\":\"open_answer\"}")
echo -e "${GREEN}✓ Creating open_answer subtask${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 8: Assign Task 2${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X POST "${API_URL}/tasks/${TASK2_ID}/assign" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"assignedTo\":${BOT_USER_ID}}" > /dev/null
echo -e "${GREEN}✓ Assigning task 2 to bot${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 9: Start Task 1${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X POST "${API_URL}/tasks/${TASK1_ID}/start" -H "x-api-token: ${BOT_TOKEN}" > /dev/null
echo -e "${GREEN}✓ Starting task 1${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 10: Answer Subtask 1${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X POST "${API_URL}/subtasks/${SUBTASK1_ID}/answer" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"selectedOption\":\"Blue\"}" > /dev/null
echo -e "${GREEN}✓ Answering subtask${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 11: Complete Task 1${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X POST "${API_URL}/tasks/${TASK1_ID}/complete" -H "x-api-token: ${BOT_TOKEN}" > /dev/null
echo -e "${GREEN}✓ Completing task 1${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 12: Reopen Task 1${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X POST "${API_URL}/tasks/${TASK1_ID}/reopen" -H "x-api-token: ${BOT_TOKEN}" > /dev/null
echo -e "${GREEN}✓ Reopening task 1${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 13: Get Task with Subtasks${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X GET "${API_URL}/tasks/${TASK1_ID}/full" -H "x-api-token: ${BOT_TOKEN}" > /dev/null
echo -e "${GREEN}✓ Getting task with subtasks${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 14: Get Project with Tasks${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X GET "${API_URL}/projects/${PROJECT_ID}/full" -H "x-api-token: ${BOT_TOKEN}" > /dev/null
echo -e "${GREEN}✓ Getting project with tasks${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 15: Create Task 3 with Multiple Subtasks${NC}"
echo -e "${BLUE}======================================${NC}"
TASK3_RESPONSE=$(curl -s -X POST "${API_URL}/tasks" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"title\":\"${TASK3_NAME}\",\"projectId\":${PROJECT_ID},\"description\":\"Test task 3 for deletion tests\",\"priority\":\"medium\"}")
TASK3_ID=$(echo "$TASK3_RESPONSE" | jq -r '.id')
echo -e "${GREEN}✓ Creating task 3 for deletion tests${NC}"
echo -e "${CYAN}ℹ Task ID: $TASK3_ID${NC}"
SUBTASK3_RESPONSE=$(curl -s -X POST "${API_URL}/subtasks" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"taskId\":${TASK3_ID},\"question\":\"Subtask 3A\",\"type\":\"multiple_choice\",\"options\":[\"A\",\"B\",\"C\"]}")
SUBTASK3_ID=$(echo "$SUBTASK3_RESPONSE" | jq -r '.id')
SUBTASK4_RESPONSE=$(curl -s -X POST "${API_URL}/subtasks" -H "Content-Type: application/json" -H "x-api-token: ${BOT_TOKEN}" -d "{\"taskId\":${TASK3_ID},\"question\":\"Subtask 3B\",\"type\":\"open_answer\"}")
SUBTASK4_ID=$(echo "$SUBTASK4_RESPONSE" | jq -r '.id')
echo -e "${GREEN}✓ Creating 2 subtasks for task 3${NC}"
echo -e "${CYAN}ℹ Subtask IDs: $SUBTASK3_ID, $SUBTASK4_ID${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 16: Delete Individual Subtask${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X DELETE "${API_URL}/subtasks/${SUBTASK3_ID}" -H "x-api-token: ${BOT_TOKEN}" > /dev/null
echo -e "${GREEN}✓ Deleting subtask 3A (ID: $SUBTASK3_ID)${NC}"
TASK3_FULL=$(curl -s -X GET "${API_URL}/tasks/${TASK3_ID}/full" -H "x-api-token: ${BOT_TOKEN}")
SUBTASK_COUNT=$(echo "$TASK3_FULL" | jq '.subtasks | length')
echo -e "${GREEN}✓ Task 3 still has $SUBTASK_COUNT subtask(s)${NC}"
echo -e "${CYAN}ℹ Individual subtask deletion works correctly${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 17: Delete Individual Task${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X DELETE "${API_URL}/tasks/${TASK3_ID}" -H "x-api-token: ${BOT_TOKEN}" > /dev/null
echo -e "${GREEN}✓ Deleting task 3 (ID: $TASK3_ID)${NC}"
PROJECT_FULL=$(curl -s -X GET "${API_URL}/projects/${PROJECT_ID}/full" -H "x-api-token: ${BOT_TOKEN}")
TASK_COUNT=$(echo "$PROJECT_FULL" | jq '.tasks | length')
echo -e "${GREEN}✓ Project still has $TASK_COUNT task(s)${NC}"
echo -e "${CYAN}ℹ Task deletion cascaded to subtasks correctly${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 18: Delete Tasks 1 & 2${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X DELETE "${API_URL}/tasks/${TASK1_ID}" -H "x-api-token: ${BOT_TOKEN}" > /dev/null
echo -e "${GREEN}✓ Deleting task 1${NC}"
curl -s -X DELETE "${API_URL}/tasks/${TASK2_ID}" -H "x-api-token: ${BOT_TOKEN}" > /dev/null
echo -e "${GREEN}✓ Deleting task 2${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${BLUE}Test 19: Delete Project${NC}"
echo -e "${BLUE}======================================${NC}"
curl -s -X DELETE "${API_URL}/projects/${PROJECT_ID}" -H "x-api-token: ${BOT_TOKEN}" > /dev/null
echo -e "${GREEN}✓ Deleting project${NC}"
echo -e "${CYAN}ℹ Project deletion cascaded to all tasks and subtasks${NC}"
echo ""
echo -e "${BLUE}======================================${NC}"
echo -e "${GREEN}✓ All API Tests Passed!${NC}"
echo -e "${BLUE}======================================${NC}"
echo -e "${GREEN}TaskPulse API is fully functional!${NC}"
echo ""
echo "Tests performed:"
echo " ✓ Authentication (bot token)"
echo " ✓ Create project"
echo " ✓ Update project (name, description)"
echo " ✓ Create task with owner and assignment"
echo " ✓ Create task unassigned"
echo " ✓ Update task (name, description, priority)"
echo " ✓ Create subtask (multiple_choice)"
echo " ✓ Create subtask (open_answer)"
echo " ✓ Assign task to user"
echo " ✓ Start task (pending → in-progress)"
echo " ✓ Answer subtask"
echo " ✓ Complete task (in-progress → done)"
echo " ✓ Reopen task (done → pending)"
echo " ✓ Get task with subtasks"
echo " ✓ Get project with tasks"
echo " ✓ Create task 3 with multiple subtasks"
echo " ✓ Delete individual subtask (verify CASCADE)"
echo " ✓ Delete individual task (verify CASCADE to subtasks)"
echo " ✓ Delete tasks 1 & 2"
echo " ✓ Delete project (verify CASCADE through all levels)"
echo ""
echo -e "${GREEN}✓ All endpoints working correctly!${NC}"
echo -e "${GREEN}✓ CASCADE behavior verified at all levels!${NC}"