#!/usr/bin/env python3 """ Test script for create_draft_document tool """ import asyncio import os import sys from pathlib import Path # Add parent directory to path sys.path.insert(0, str(Path(__file__).parent.parent)) from utils.tools import create_draft_document, _create_draft_document async def test_tool_facade(): """Test the facade version of the tool""" print("๐Ÿงช Testing create_draft_document (facade)...") # This should return immediately (facade just returns) result = await create_draft_document.ainvoke({ "path_with_filename": "Test/Test_Document.pdf", "plan_to_build_document": "1. Create title\n2. Add content", "instruction": "Create a test document" }) print(f"โœ… Facade test passed: {result}") return result async def test_tool_real(): """Test the real implementation of the tool""" print("\n๐Ÿงช Testing _create_draft_document (real implementation)...") # Mock user_id test_user_id = os.getenv("TEST_USER_ID", "test-user-uuid-123") # Test with various paths and plans test_cases = [ { "path_with_filename": "Contracts/Contract_de_bail.pdf", "plan_to_build_document": """1. Create header with title "Contrat de bail" 2. Add section for parties (bailleur and preneur) 3. Add main clauses for the lease 4. Add signature section""", "instruction": "Create a commercial lease contract", "expected_path": "Contracts/Contract_de_bail.pdf" }, { "path_with_filename": "Mon_document.pdf", "plan_to_build_document": """1. Add document title 2. Add introductory paragraph 3. Add main content sections""", "instruction": "Create a simple document", "expected_path": "Mon_document.pdf" }, { "path_with_filename": "Drafts/Legal/Note_juridique.pdf", "plan_to_build_document": """1. Create title "Note juridique" 2. Add legal context 3. Add analysis section 4. Add conclusions""", "instruction": "Create a legal note", "expected_path": "Drafts/Legal/Note_juridique.pdf" } ] for i, test_case in enumerate(test_cases, 1): print(f"\n Test case {i}: {test_case['path_with_filename']}") print(f" Instruction: {test_case['instruction']}") print(f" Expected: {test_case['expected_path']}") result = await _create_draft_document.ainvoke({ "user_id": test_user_id, "path_with_filename": test_case["path_with_filename"], "plan_to_build_document": test_case["plan_to_build_document"], "instruction": test_case["instruction"] }) print(f" Result: {result}") # Check if the path is correct in the result if test_case["expected_path"] in result: print(f" โœ… Path is correct") else: print(f" โš ๏ธ Expected path not found in result") print("\nโœ… Real implementation test completed") return True async def test_path_parsing(): """Test path parsing logic""" print("\n๐Ÿงช Testing path parsing...") test_cases = [ ("Contracts/Test.pdf", "Contracts", "Test.pdf", "Test"), ("Test.pdf", "", "Test.pdf", "Test"), ("Drafts/Legal/Note.pdf", "Drafts/Legal", "Note.pdf", "Note"), ("./Contracts/Test.pdf", "./Contracts", "Test.pdf", "Test"), ] for path_with_filename, expected_path, expected_filename, expected_title in test_cases: # Simulate the path parsing logic parts = path_with_filename.split('/') if len(parts) > 1: path = '/'.join(parts[:-1]) filename = parts[-1] else: path = '' filename = parts[0] # Remove .pdf extension title = filename.replace('.pdf', '') print(f" Input: '{path_with_filename}'") print(f" โ†’ Path: '{path}'") print(f" โ†’ Filename: '{filename}'") print(f" โ†’ Title: '{title}'") if path == expected_path and filename == expected_filename and title == expected_title: print(f" โœ… Correct") else: print(f" โš ๏ธ Mismatch - Expected: path='{expected_path}', filename='{expected_filename}', title='{expected_title}'") print("\nโœ… Path parsing test completed") return True async def main(): """Run all tests""" print("=" * 80) print("๐Ÿš€ Testing create_draft_document tool") print("=" * 80) try: # Test facade await test_tool_facade() # Test real implementation await test_tool_real() # Test path parsing await test_path_parsing() print("\n" + "=" * 80) print("โœ… All tests completed successfully!") print("=" * 80) except Exception as e: print(f"\nโŒ Test failed with error: {str(e)}") import traceback traceback.print_exc() if __name__ == "__main__": asyncio.run(main())