File size: 2,264 Bytes
06ca3b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/bin/bash

LOG_FILE="api_test_results.log"
echo "=== Starting API E2E Test Suite ($(date)) ===" > $LOG_FILE

# 1. Start BE Server in background
echo "[INFO] Starting Backend Server..." | tee -a $LOG_FILE
export ALLOW_TEST_BYPASS=true
export LOG_LEVEL=info
export CELERY_TASK_ALWAYS_EAGER=true
export CELERY_RESULT_BACKEND=rpc://
export MOCK_VIDEO=true
PYTHONPATH=. venv/bin/python -m uvicorn app.main:app --port 8000 > server_debug.log 2>&1 &
SERVER_PID=$!

# 2. Wait for server to be ready
echo "[INFO] Waiting for server (PID: $SERVER_PID) on port 8000..." | tee -a $LOG_FILE
MAX_RETRIES=15
READY=0
for i in $(seq 1 $MAX_RETRIES); do
    if curl -s http://localhost:8000/ > /dev/null; then
        READY=1
        break
    fi
    sleep 2
done

if [ $READY -eq 0 ]; then
    echo "[ERROR] Server failed to start in time. Check server_debug.log" | tee -a $LOG_FILE
    kill $SERVER_PID
    exit 1
fi
echo "[INFO] Server is READY." | tee -a $LOG_FILE

# 3. Prepare Test Data
echo "[INFO] Preparing fresh test data..." | tee -a $LOG_FILE
PREP_OUTPUT=$(PYTHONPATH=. venv/bin/python scripts/prepare_api_test.py)
echo "$PREP_OUTPUT" >> $LOG_FILE

export TEST_USER_ID=$(echo "$PREP_OUTPUT" | grep "RESULT:USER_ID=" | cut -d'=' -f2)
export TEST_SESSION_ID=$(echo "$PREP_OUTPUT" | grep "RESULT:SESSION_ID=" | cut -d'=' -f2)

if [ -z "$TEST_USER_ID" ] || [ -z "$TEST_SESSION_ID" ]; then
    echo "[ERROR] Failed to prepare test data." | tee -a $LOG_FILE
    kill $SERVER_PID
    exit 1
fi

echo "[INFO] Test Data: User=$TEST_USER_ID, Session=$TEST_SESSION_ID" | tee -a $LOG_FILE

# 4. Run Pytest
echo "[INFO] Running API E2E Tests..." | tee -a $LOG_FILE
PYTHONPATH=. venv/bin/python -m pytest tests/test_api_real_e2e.py -m "smoke and real_api" -s \
  --junitxml=pytest_smoke.xml >> $LOG_FILE 2>&1
TEST_EXIT_CODE=$?

# 5. Cleanup
echo "[INFO] Shutting down Server..." | tee -a $LOG_FILE
kill $SERVER_PID

echo "==========================================" | tee -a $LOG_FILE
if [ $TEST_EXIT_CODE -eq 0 ]; then
    echo "FINAL RESULT: ✅ ALL API TESTS PASSED" | tee -a $LOG_FILE
else
    echo "FINAL RESULT: ❌ SOME API TESTS FAILED (Code: $TEST_EXIT_CODE)" | tee -a $LOG_FILE
fi
echo "==========================================" | tee -a $LOG_FILE

exit $TEST_EXIT_CODE