Files
bakery-ia/test_sales_import_fix.py

153 lines
6.2 KiB
Python
Raw Normal View History

2025-08-14 13:26:59 +02:00
#!/usr/bin/env python3
"""
Test script to verify the sales import fix for inventory_product_id issue
"""
import asyncio
import json
import httpx
import csv
import io
from uuid import uuid4
# Test configuration
GATEWAY_URL = "http://localhost:8000"
TENANT_ID = "946206b3-7446-436b-b29d-f265b28d9ff5"
# Test token
TEST_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIzOTUyYTEwOC1lNWFmLTRlMjktOTJkOC0xMjc0MTBiOWJiYmEiLCJ1c2VyX2lkIjoiMzk1MmExMDgtZTVhZi00ZTI5LTkyZDgtMTI3NDEwYjliYmJhIiwiZW1haWwiOiJkZnNmc2RAdGVzdC5jb20iLCJ0eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzU1MTY3NTk4LCJpYXQiOjE3NTUxNjU3OTgsImlzcyI6ImJha2VyeS1hdXRoIiwiZnVsbF9uYW1lIjoiZGZzZGZzZGYiLCJpc192ZXJpZmllZCI6ZmFsc2UsImlzX2FjdGl2ZSI6dHJ1ZSwicm9sZSI6InVzZXIifQ.hYyRqqqZ-Ud-uzn42l_ic-QjP-NWYvT8RmwmU12uaQU"
async def test_sales_import():
"""Test the sales import functionality with the inventory_product_id fix"""
print("🧪 Testing Sales Import Fix for inventory_product_id")
print("=" * 60)
headers = {
"Authorization": f"Bearer {TEST_TOKEN}",
"Content-Type": "application/json"
}
async with httpx.AsyncClient(timeout=60.0) as client:
# Step 1: Create test CSV data
print("\n1⃣ Creating Test CSV Data")
print("-" * 50)
csv_data = [
["date", "product_name", "quantity_sold", "revenue", "location_id"],
["2024-01-15", "Test Bread", "10", "25.50", "store-1"],
["2024-01-15", "Test Croissant", "5", "15.00", "store-1"],
["2024-01-15", "Test Muffin", "8", "20.00", "store-2"]
]
# Convert to CSV string
csv_string = io.StringIO()
writer = csv.writer(csv_string)
for row in csv_data:
writer.writerow(row)
csv_content = csv_string.getvalue()
print(f"CSV Content:")
print(csv_content)
# Step 2: Test the import endpoint
print("\n2⃣ Testing Sales Data Import")
print("-" * 50)
import_data = {
"csv_data": csv_content,
"import_type": "enhanced",
"overwrite_existing": False
}
import_url = f"{GATEWAY_URL}/api/v1/tenants/{TENANT_ID}/sales/import/csv"
print(f"URL: {import_url}")
try:
response = await client.post(import_url, json=import_data, headers=headers)
print(f"Status: {response.status_code}")
if response.status_code == 200:
result = response.json()
print(f"✅ Sales import completed!")
print(f"Records processed: {result.get('records_processed', 0)}")
print(f"Records created: {result.get('records_created', 0)}")
print(f"Records failed: {result.get('records_failed', 0)}")
print(f"Success: {result.get('success', False)}")
if result.get('errors'):
print(f"\n❌ Errors ({len(result['errors'])}):")
for error in result['errors'][:5]: # Show first 5 errors
print(f" - {error}")
if result.get('warnings'):
print(f"\n⚠️ Warnings ({len(result['warnings'])}):")
for warning in result['warnings'][:3]: # Show first 3 warnings
print(f" - {warning}")
else:
print("❌ Sales import FAILED!")
print(f"Response: {response.text}")
except Exception as e:
print(f"❌ Sales import ERROR: {e}")
# Step 3: Check if inventory items were created
print("\n3⃣ Checking Inventory Items Creation")
print("-" * 50)
try:
ingredients_url = f"{GATEWAY_URL}/api/v1/tenants/{TENANT_ID}/ingredients"
response = await client.get(ingredients_url, headers=headers)
if response.status_code == 200:
ingredients = response.json()
print(f"✅ Found {len(ingredients)} inventory items")
test_products = ["Test Bread", "Test Croissant", "Test Muffin"]
for product in test_products:
found = any(ingredient.get('name') == product for ingredient in ingredients)
status = "" if found else ""
print(f" {status} {product}")
else:
print(f"❌ Failed to fetch inventory items: {response.status_code}")
except Exception as e:
print(f"❌ Error checking inventory items: {e}")
# Step 4: Check sales records
print("\n4⃣ Checking Sales Records")
print("-" * 50)
try:
sales_url = f"{GATEWAY_URL}/api/v1/tenants/{TENANT_ID}/sales"
response = await client.get(sales_url, headers=headers)
if response.status_code == 200:
sales_data = response.json()
sales_count = len(sales_data) if isinstance(sales_data, list) else sales_data.get('total', 0)
print(f"✅ Found {sales_count} sales records")
# Show recent records
records = sales_data if isinstance(sales_data, list) else sales_data.get('records', [])
for i, record in enumerate(records[:3]): # Show first 3 records
inventory_id = record.get('inventory_product_id')
date = record.get('date', 'Unknown')
quantity = record.get('quantity_sold', 0)
revenue = record.get('revenue', 0)
print(f" Record {i+1}: Date={date}, Qty={quantity}, Revenue=${revenue}, InventoryID={inventory_id}")
else:
print(f"❌ Failed to fetch sales records: {response.status_code}")
except Exception as e:
print(f"❌ Error checking sales records: {e}")
if __name__ == "__main__":
print("Testing sales import fix...")
print("Make sure your services are running with docker-compose!")
print()
asyncio.run(test_sales_import())