#!/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())