""" Test script for the quote generation tool. """ import sys import os # Add the src directory to the path so we can import from sales_assistant sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src')) from sales_assistant.agent_tools.create_quote import create_quote, create_sample_quote def test_basic_quote(): """Test basic quote creation functionality.""" print("=== Testing Basic Quote Creation ===") # Test data sample_items = [ { "product_name": "Samsung Galaxy S24 Ultra", "description": "Samsung Galaxy S24 Ultra 512GB, Titanium Black, 5G smartphone with S Pen", "quantity": 1, "unit_price": 1399.99, "currency": "EUR" }, { "product_name": "Apple MacBook Pro 14\"", "description": "MacBook Pro 14-inch, M3 Pro chip, 18GB RAM, 512GB SSD, Space Black", "quantity": 2, "unit_price": 2499.00, "currency": "EUR" } ] # Invoke the tool result = create_quote.invoke({ "customer_name": "Alice Johnson", "customer_email": "alice.johnson@company.com", "customer_company": "Innovation Labs Inc.", "customer_address": "456 Tech Street, Silicon Valley, CA 94000", "customer_phone": "+1 (555) 987-6543", "items": sample_items, "target_currency": "EUR", "tax_rate": 0.21, # 21% VAT "notes": "Corporate discount applied" }) print("Result:") print(result) return result def test_currency_conversion(): """Test quote creation with currency conversion.""" print("\n=== Testing Currency Conversion ===") # Items in different currencies mixed_currency_items = [ { "product_name": "Dell XPS 15", "description": "Dell XPS 15 laptop, Intel i7, 16GB RAM, 1TB SSD", "quantity": 1, "unit_price": 1899.99, "currency": "USD" # Will be converted to EUR }, { "product_name": "Sony Camera", "description": "Sony Alpha 7R V mirrorless camera with 61MP sensor", "quantity": 1, "unit_price": 3899.00, "currency": "EUR" # Already in target currency } ] result = create_quote.invoke({ "customer_name": "Bob Wilson", "customer_email": "bob@techstudio.com", "customer_company": "TechStudio Photography", "items": mixed_currency_items, "target_currency": "EUR" }) print("Result:") print(result) return result def test_single_item_quote(): """Test quote with single item.""" print("\n=== Testing Single Item Quote ===") single_item = [{ "product_name": "iPad Pro 12.9\"", "description": "iPad Pro 12.9-inch (6th generation) with M2 chip, 128GB, WiFi", "quantity": 3, "unit_price": 1199.00, "currency": "EUR" }] result = create_quote.invoke({ "customer_name": "Carol Davis", "customer_email": "carol@school.edu", "customer_company": "Mountain View School District", "items": single_item, "target_currency": "EUR", "tax_rate": 0.0, # Tax-exempt organization "notes": "Educational institution - tax exempt" }) print("Result:") print(result) return result def test_error_handling(): """Test error handling in quote creation.""" print("\n=== Testing Error Handling ===") # Test missing customer name print("Test 1: Missing customer name") result1 = create_quote.invoke({ "customer_name": "", "items": [{"product_name": "Test", "description": "Test", "quantity": 1, "unit_price": 100}] }) print("Result:", result1) # Test empty items print("\nTest 2: Empty items list") result2 = create_quote.invoke({ "customer_name": "Test Customer", "items": [] }) print("Result:", result2) # Test invalid item data print("\nTest 3: Invalid item data") result3 = create_quote.invoke({ "customer_name": "Test Customer", "items": [{"product_name": "Test", "quantity": "invalid", "unit_price": "invalid"}] }) print("Result:", result3) def test_sample_quote_function(): """Test the sample quote creation function.""" print("\n=== Testing Sample Quote Function ===") result = create_sample_quote() print("Sample quote result:") print(result) return result if __name__ == "__main__": print("🧪 Starting Quote Generation Tool Tests\n") try: # Run all tests test_basic_quote() test_currency_conversion() test_single_item_quote() test_sample_quote_function() test_error_handling() print("\n✅ All tests completed!") except Exception as e: print(f"\n❌ Test failed with error: {e}") import traceback traceback.print_exc()