- Implement test script for new SAG module endpoints BE-003 (Tag State Management) and BE-004 (Bulk Operations). - Create test cases for creating, updating, and bulk operations on cases and tags. - Add a test for module deactivation to ensure data integrity is maintained. - Include setup and teardown for tests to clear database state before and after each test.
159 lines
5.0 KiB
Bash
Executable File
159 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
||
# Test script for new SAG module endpoints: BE-003 and BE-004
|
||
|
||
BASE_URL="http://localhost:8001/api/v1/sag"
|
||
|
||
echo "========================================="
|
||
echo "Testing SAG Module New Endpoints"
|
||
echo "========================================="
|
||
echo ""
|
||
|
||
# ==============================================================================
|
||
# BE-003: Tag State Management
|
||
# ==============================================================================
|
||
|
||
echo "📋 BE-003: Testing Tag State Management"
|
||
echo "----------------------------------------"
|
||
|
||
# Test 1: Create a case with a tag
|
||
echo "1️⃣ Creating test case..."
|
||
CASE_RESPONSE=$(curl -s -X POST "$BASE_URL/cases" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"titel": "Test Case for Tag State",
|
||
"beskrivelse": "Testing tag state transitions",
|
||
"status": "open",
|
||
"template_key": "standard"
|
||
}')
|
||
|
||
CASE_ID=$(echo $CASE_RESPONSE | python3 -c "import sys, json; print(json.load(sys.stdin).get('id', ''))")
|
||
echo " ✅ Case created with ID: $CASE_ID"
|
||
|
||
# Test 2: Add a tag to the case
|
||
echo ""
|
||
echo "2️⃣ Adding tag to case..."
|
||
TAG_RESPONSE=$(curl -s -X POST "$BASE_URL/cases/$CASE_ID/tags" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"tag_navn": "needs_review",
|
||
"state": "open"
|
||
}')
|
||
|
||
TAG_ID=$(echo $TAG_RESPONSE | python3 -c "import sys, json; print(json.load(sys.stdin).get('id', ''))")
|
||
echo " ✅ Tag created with ID: $TAG_ID (state: open)"
|
||
|
||
# Test 3: Close the tag
|
||
echo ""
|
||
echo "3️⃣ Closing tag (state: open → closed)..."
|
||
curl -s -X PATCH "$BASE_URL/cases/$CASE_ID/tags/$TAG_ID/state" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"state": "closed"}' | python3 -m json.tool
|
||
echo ""
|
||
|
||
# Test 4: Reopen the tag
|
||
echo "4️⃣ Reopening tag (state: closed → open)..."
|
||
curl -s -X PATCH "$BASE_URL/cases/$CASE_ID/tags/$TAG_ID/state" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"state": "open"}' | python3 -m json.tool
|
||
echo ""
|
||
|
||
# Test 5: Invalid state
|
||
echo "5️⃣ Testing invalid state (should fail with 400)..."
|
||
curl -s -X PATCH "$BASE_URL/cases/$CASE_ID/tags/$TAG_ID/state" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"state": "invalid"}' | python3 -m json.tool
|
||
echo ""
|
||
|
||
# Test 6: Non-existent tag
|
||
echo "6️⃣ Testing non-existent tag (should fail with 404)..."
|
||
curl -s -X PATCH "$BASE_URL/cases/$CASE_ID/tags/99999/state" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"state": "closed"}' | python3 -m json.tool
|
||
echo ""
|
||
|
||
# ==============================================================================
|
||
# BE-004: Bulk Operations
|
||
# ==============================================================================
|
||
|
||
echo ""
|
||
echo "========================================="
|
||
echo "📦 BE-004: Testing Bulk Operations"
|
||
echo "----------------------------------------"
|
||
|
||
# Test 7: Create multiple cases for bulk operations
|
||
echo "1️⃣ Creating 3 test cases for bulk operations..."
|
||
CASE_IDS=()
|
||
for i in 1 2 3; do
|
||
RESPONSE=$(curl -s -X POST "$BASE_URL/cases" \
|
||
-H "Content-Type: application/json" \
|
||
-d "{
|
||
\"titel\": \"Bulk Test Case $i\",
|
||
\"beskrivelse\": \"Case for bulk operations testing\",
|
||
\"status\": \"open\",
|
||
\"template_key\": \"standard\"
|
||
}")
|
||
BULK_CASE_ID=$(echo $RESPONSE | python3 -c "import sys, json; print(json.load(sys.stdin).get('id', ''))")
|
||
CASE_IDS+=($BULK_CASE_ID)
|
||
echo " ✅ Created case ID: $BULK_CASE_ID"
|
||
done
|
||
echo ""
|
||
|
||
# Test 8: Bulk update status
|
||
echo "2️⃣ Bulk updating status to 'in_progress'..."
|
||
curl -s -X POST "$BASE_URL/cases/bulk" \
|
||
-H "Content-Type: application/json" \
|
||
-d "{
|
||
\"case_ids\": [${CASE_IDS[0]}, ${CASE_IDS[1]}, ${CASE_IDS[2]}],
|
||
\"action\": \"update_status\",
|
||
\"params\": {
|
||
\"status\": \"in_progress\"
|
||
}
|
||
}" | python3 -m json.tool
|
||
echo ""
|
||
|
||
# Test 9: Bulk add tag
|
||
echo "3️⃣ Bulk adding 'urgent' tag to all cases..."
|
||
curl -s -X POST "$BASE_URL/cases/bulk" \
|
||
-H "Content-Type: application/json" \
|
||
-d "{
|
||
\"case_ids\": [${CASE_IDS[0]}, ${CASE_IDS[1]}, ${CASE_IDS[2]}],
|
||
\"action\": \"add_tag\",
|
||
\"params\": {
|
||
\"tag_naam\": \"urgent\"
|
||
}
|
||
}" | python3 -m json.tool
|
||
echo ""
|
||
|
||
# Test 10: Bulk close all
|
||
echo "4️⃣ Bulk closing all cases..."
|
||
curl -s -X POST "$BASE_URL/cases/bulk" \
|
||
-H "Content-Type: application/json" \
|
||
-d "{
|
||
\"case_ids\": [${CASE_IDS[0]}, ${CASE_IDS[1]}, ${CASE_IDS[2]}],
|
||
\"action\": \"close_all\"
|
||
}" | python3 -m json.tool
|
||
echo ""
|
||
|
||
# Test 11: Invalid action
|
||
echo "5️⃣ Testing invalid action (should fail with 400)..."
|
||
curl -s -X POST "$BASE_URL/cases/bulk" \
|
||
-H "Content-Type: application/json" \
|
||
-d "{
|
||
\"case_ids\": [${CASE_IDS[0]}],
|
||
\"action\": \"delete_all\"
|
||
}" | python3 -m json.tool
|
||
echo ""
|
||
|
||
# Test 12: Missing case_ids
|
||
echo "6️⃣ Testing missing case_ids (should fail with 400)..."
|
||
curl -s -X POST "$BASE_URL/cases/bulk" \
|
||
-H "Content-Type: application/json" \
|
||
-d "{
|
||
\"action\": \"close_all\"
|
||
}" | python3 -m json.tool
|
||
echo ""
|
||
|
||
echo "========================================="
|
||
echo "✅ All tests completed!"
|
||
echo "========================================="
|