الملفات
Task_api/test.sh

76 أسطر
2.1 KiB
Bash
خام الرابط الدائم اللوم التاريخ

هذا الملف يحتوي على أحرف Unicode غير مرئية

هذا الملف يحتوي على أحرف Unicode غير مرئية لا يمكن التمييز بينها بعين الإنسان ولكن قد تتم معالجتها بشكل مختلف بواسطة الحاسوب. إذا كنت تعتقد أن هذا مقصود، يمكنك تجاهل هذا التحذير بأمان. استخدم زر الهروب للكشف عنها.

#!/usr/bin/env bash
# test_api.sh — íÌÑøÈ ÇáÜ API æíÏæøä ÇáäÊÇÆÌ Ýí test_results.log
BASE_URL=${BASE_URL:-http://localhost:5000}
LOGFILE="./test_results.log"
timestamp(){ date +"%Y-%m-%d %H:%M:%S"; }
echo "=== TEST RUN $(timestamp) ===" >> "$LOGFILE"
run(){
method=$1; url=$2; data=$3
if [ -n "$data" ]; then
resp=$(curl -s -w "\n%{http_code}" -X "$method" -H "Content-Type: application/json" -d "$data" "$url")
else
resp=$(curl -s -w "\n%{http_code}" -X "$method" "$url")
fi
body=$(echo "$resp" | sed '$d')
code=$(echo "$resp" | tail -n1)
echo "[$(timestamp)] $method $url -> $code" >> "$LOGFILE"
echo "$body" >> "$LOGFILE"
echo "----" >> "$LOGFILE"
}
# 1. health
run GET "$BASE_URL/health"
# 2. list books (should be empty)
run GET "$BASE_URL/books"
# 3. add books
b1='{"id":1,"title":"Clean Code","author":"Robert C. Martin","year":2008,"copies":1}'
b2='{"id":2,"title":"The Pragmatic Programmer","author":"Andrew Hunt","year":1999,"copies":2}'
run POST "$BASE_URL/books" "$b1"
run POST "$BASE_URL/books" "$b2"
# 4. add users
u1='{"id":10,"name":"Mustafa","email":"m@example.com"}'
u2='{"id":11,"name":"Sara","email":"s@example.com"}'
run POST "$BASE_URL/users" "$u1"
run POST "$BASE_URL/users" "$u2"
# 5. borrow book id=1 by user 10 (should succeed)
loan1='{"user_id":10,"book_id":1}'
run POST "$BASE_URL/loans" "$loan1"
# 6. borrow same book id=1 again -> copies=1 so should fail (409)
run POST "$BASE_URL/loans" "$loan1"
# 7. borrow book id=2 twice (copies=2) by two users -> both succeed
loan2='{"user_id":11,"book_id":2}'
run POST "$BASE_URL/loans" "$loan2"
run POST "$BASE_URL/loans" '{"user_id":10,"book_id":2}'
# 8. list active loans
run GET "$BASE_URL/loans?active=true"
# 9. return loan id 1
run PUT "$BASE_URL/loans/1/return"
# 10. try returning again (should get 400)
run PUT "$BASE_URL/loans/1/return"
# 11. delete book 999 (not exist -> 404)
run DELETE "$BASE_URL/books/999"
# 12. update book 2
run PUT "$BASE_URL/books/2" '{"copies":1,"year":2000}'
# 13. list books & loans
run GET "$BASE_URL/books"
run GET "$BASE_URL/loans"
echo "=== END TEST RUN $(timestamp) ===" >> "$LOGFILE"
echo "" >> "$LOGFILE"