Files
bakery-ia/test_onboarding_debug.py
2025-08-14 13:26:59 +02:00

162 lines
6.6 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Test script to debug onboarding inventory creation step by step
"""
import asyncio
import json
import httpx
import sys
from uuid import uuid4
# Test configuration
GATEWAY_URL = "http://localhost:8000"
TENANT_ID = "946206b3-7446-436b-b29d-f265b28d9ff5"
# Test token (you'll need to replace this with a real token)
TEST_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIzOTUyYTEwOC1lNWFmLTRlMjktOTJkOC0xMjc0MTBiOWJiYmEiLCJ1c2VyX2lkIjoiMzk1MmExMDgtZTVhZi00ZTI5LTkyZDgtMTI3NDEwYjliYmJhIiwiZW1haWwiOiJkZnNmc2RAdGVzdC5jb20iLCJ0eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzU1MTY3NTk4LCJpYXQiOjE3NTUxNjU3OTgsImlzcyI6ImJha2VyeS1hdXRoIiwiZnVsbF9uYW1lIjoiZGZzZGZzZGYiLCJpc192ZXJpZmllZCI6ZmFsc2UsImlzX2FjdGl2ZSI6dHJ1ZSwicm9sZSI6InVzZXIifQ.hYyRqqqZ-Ud-uzn42l_ic-QjP-NWYvT8RmwmU12uaQU"
async def test_onboarding_flow():
"""Test the complete onboarding inventory creation flow"""
print("🧪 Testing Onboarding Inventory Creation Flow")
print("=" * 60)
headers = {
"Authorization": f"Bearer {TEST_TOKEN}",
"Content-Type": "application/json"
}
async with httpx.AsyncClient(timeout=30.0) as client:
# Step 1: Test direct ingredient creation via inventory service
print("\n1⃣ Testing Direct Ingredient Creation via Inventory Service")
print("-" * 50)
ingredient_data = {
"name": "Test Flour",
"description": "Test ingredient for debugging",
"category": "flour", # Use valid enum value
"unit_of_measure": "kg", # Use correct field name
"brand": "Test Supplier",
"is_active": True
}
ingredient_url = f"{GATEWAY_URL}/api/v1/tenants/{TENANT_ID}/ingredients"
print(f"URL: {ingredient_url}")
print(f"Data: {json.dumps(ingredient_data, indent=2)}")
try:
response = await client.post(ingredient_url, json=ingredient_data, headers=headers)
print(f"Status: {response.status_code}")
print(f"Response: {response.text}")
if response.status_code == 201:
print("✅ Direct ingredient creation SUCCESS!")
created_ingredient = response.json()
ingredient_id = created_ingredient.get('id')
print(f"Created ingredient ID: {ingredient_id}")
else:
print("❌ Direct ingredient creation FAILED!")
if response.status_code == 401:
print("❌ Authentication failed - token might be expired")
return
except Exception as e:
print(f"❌ Direct ingredient creation ERROR: {e}")
# Step 2: Test onboarding inventory creation endpoint
print("\n2⃣ Testing Onboarding Inventory Creation Endpoint")
print("-" * 50)
# Create test suggestions like the frontend sends
suggestions = [
{
"suggestion_id": str(uuid4()),
"approved": True,
"modifications": {},
"original_name": "Pan",
"suggested_name": "Pan",
"product_type": "finished_product",
"category": "other_products",
"unit_of_measure": "units",
"confidence_score": 0.9,
"estimated_shelf_life_days": None,
"requires_refrigeration": False,
"requires_freezing": False,
"is_seasonal": False,
"suggested_supplier": None,
"notes": "Test bread product"
},
{
"suggestion_id": str(uuid4()),
"approved": True,
"modifications": {},
"original_name": "Test Croissant",
"suggested_name": "Test Croissant",
"product_type": "finished_product",
"category": "pastries",
"unit_of_measure": "units",
"confidence_score": 0.8,
"estimated_shelf_life_days": 2,
"requires_refrigeration": False,
"requires_freezing": False,
"is_seasonal": False,
"suggested_supplier": "Test Bakery",
"notes": "Test pastry product"
}
]
onboarding_data = {"suggestions": suggestions}
onboarding_url = f"{GATEWAY_URL}/api/v1/tenants/{TENANT_ID}/onboarding/create-inventory"
print(f"URL: {onboarding_url}")
print(f"Suggestions count: {len(suggestions)}")
try:
response = await client.post(onboarding_url, json=onboarding_data, headers=headers)
print(f"Status: {response.status_code}")
print(f"Response: {response.text}")
if response.status_code == 200:
result = response.json()
print(f"✅ Onboarding inventory creation completed!")
print(f"Created items: {len(result.get('created_items', []))}")
print(f"Failed items: {len(result.get('failed_items', []))}")
print(f"Success rate: {result.get('success_rate', 0)}")
if result.get('failed_items'):
print("\n❌ Failed items details:")
for item in result['failed_items']:
print(f" - {item.get('suggestion_id')}: {item.get('error')}")
else:
print("❌ Onboarding inventory creation FAILED!")
except Exception as e:
print(f"❌ Onboarding inventory creation ERROR: {e}")
# Step 3: Test service health
print("\n3⃣ Testing Service Health")
print("-" * 50)
services = [
("Gateway", f"{GATEWAY_URL}/health"),
("Inventory Service", "http://localhost:8008/health"),
("Sales Service", "http://localhost:8004/health")
]
for service_name, health_url in services:
try:
response = await client.get(health_url)
status = "✅ Healthy" if response.status_code == 200 else f"❌ Unhealthy ({response.status_code})"
print(f"{service_name}: {status}")
except Exception as e:
print(f"{service_name}: ❌ Error - {e}")
if __name__ == "__main__":
print("Starting onboarding flow debug test...")
print("Make sure your services are running with docker-compose!")
print()
asyncio.run(test_onboarding_flow())