#!/bin/bash echo "๐Ÿงช Testing Training Safeguards" echo "=============================" # Create user and tenant without importing data echo "1. Creating user and tenant..." # Register user EMAIL="training.test.$(date +%s)@bakery.com" REGISTER_RESPONSE=$(curl -s -X POST "http://localhost:8000/api/v1/auth/register" \ -H "Content-Type: application/json" \ -d "{\"email\": \"$EMAIL\", \"password\": \"TestPassword123!\", \"full_name\": \"Training Test User\", \"role\": \"admin\"}") ACCESS_TOKEN=$(echo "$REGISTER_RESPONSE" | python3 -c " import json, sys try: data = json.load(sys.stdin) print(data.get('access_token', '')) except: pass " 2>/dev/null) if [ -z "$ACCESS_TOKEN" ]; then echo "โŒ User registration failed" echo "Response: $REGISTER_RESPONSE" exit 1 fi echo "โœ… User registered successfully" # Create tenant TENANT_RESPONSE=$(curl -s -X POST "http://localhost:8000/api/v1/tenants/register" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -d '{"name": "Training Test Bakery", "business_type": "bakery", "address": "Test Address", "city": "Madrid", "postal_code": "28001", "phone": "+34600123456"}') TENANT_ID=$(echo "$TENANT_RESPONSE" | python3 -c " import json, sys try: data = json.load(sys.stdin) print(data.get('id', '')) except: pass " 2>/dev/null) if [ -z "$TENANT_ID" ]; then echo "โŒ Tenant creation failed" echo "Response: $TENANT_RESPONSE" exit 1 fi echo "โœ… Tenant created: $TENANT_ID" # 2. Test training WITHOUT data (should fail gracefully) echo "" echo "2. Testing training WITHOUT sales data (should fail gracefully)..." TRAINING_RESPONSE=$(curl -s -X POST "http://localhost:8000/api/v1/tenants/$TENANT_ID/training/jobs" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -d '{}') echo "Training Response (no data):" echo "$TRAINING_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$TRAINING_RESPONSE" # Check if the job was created but will fail JOB_ID=$(echo "$TRAINING_RESPONSE" | python3 -c " import json, sys try: data = json.load(sys.stdin) print(data.get('job_id', '')) except: pass " 2>/dev/null) if [ -n "$JOB_ID" ]; then echo "โœ… Training job created: $JOB_ID" echo "โณ Waiting 10 seconds to see if safeguard triggers..." sleep 10 # Check training job status STATUS_RESPONSE=$(curl -s "http://localhost:8000/api/v1/tenants/$TENANT_ID/training/jobs/$JOB_ID/status" \ -H "Authorization: Bearer $ACCESS_TOKEN") echo "Job Status:" echo "$STATUS_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$STATUS_RESPONSE" else echo "โ„น๏ธ No job ID returned - training may have been rejected immediately" fi echo "" echo "3. Now importing some test data..." IMPORT_RESPONSE=$(curl -s -X POST "http://localhost:8000/api/v1/tenants/$TENANT_ID/sales/import" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -d '{"data": "date,product,quantity,revenue\n2024-01-01,bread,10,20.0\n2024-01-02,croissant,5,15.0\n2024-01-03,pastry,8,24.0", "data_format": "csv", "filename": "test_data.csv"}') echo "Import Response:" echo "$IMPORT_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$IMPORT_RESPONSE" echo "" echo "4. Testing training WITH sales data..." TRAINING_WITH_DATA_RESPONSE=$(curl -s -X POST "http://localhost:8000/api/v1/tenants/$TENANT_ID/training/jobs" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -d '{}') echo "Training Response (with data):" echo "$TRAINING_WITH_DATA_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$TRAINING_WITH_DATA_RESPONSE" JOB_ID_WITH_DATA=$(echo "$TRAINING_WITH_DATA_RESPONSE" | python3 -c " import json, sys try: data = json.load(sys.stdin) print(data.get('job_id', '')) except: pass " 2>/dev/null) if [ -n "$JOB_ID_WITH_DATA" ]; then echo "โœ… Training job with data created: $JOB_ID_WITH_DATA" echo "โณ Monitoring progress for 30 seconds..." for i in {1..6}; do sleep 5 STATUS_RESPONSE=$(curl -s "http://localhost:8000/api/v1/tenants/$TENANT_ID/training/jobs/$JOB_ID_WITH_DATA/status" \ -H "Authorization: Bearer $ACCESS_TOKEN") STATUS=$(echo "$STATUS_RESPONSE" | python3 -c " import json, sys try: data = json.load(sys.stdin) print(data.get('status', 'unknown')) except: print('error') " 2>/dev/null) echo "[$i/6] Status: $STATUS" if [ "$STATUS" = "completed" ] || [ "$STATUS" = "failed" ]; then echo "Final Status Response:" echo "$STATUS_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$STATUS_RESPONSE" break fi done fi echo "" echo "๐Ÿ Training safeguard test completed!"