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

153 lines
6.2 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 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())