#!/usr/bin/env python3 """ Test script to demonstrate the improved document handover mechanism. This shows how documents are properly stored and retrieved between actions. """ import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) from modules.workflow.serviceContainer import ServiceContainer from modules.interfaces.interfaceAppModel import User from modules.interfaces.interfaceChatModel import ChatWorkflow, ChatMessage, ChatDocument from datetime import datetime, UTC import json def test_document_handover(): """Test the document handover mechanism""" # Create test user and workflow user = User( id="test_user", username="testuser", language="en", mandateId="test_mandate" ) workflow = ChatWorkflow( id="test_workflow", mandateId="test_mandate", startedAt=datetime.now(UTC).isoformat(), status="active", currentRound=1, lastActivity=datetime.now(UTC).isoformat(), messages=[] ) # Create service container container = ServiceContainer(user, workflow) print("=" * 80) print("DOCUMENT HANDOVER MECHANISM TEST") print("=" * 80) # Simulate action execution and document creation print("\n1. SIMULATING ACTION EXECUTION") print("-" * 40) # Simulate first action: SharePoint search action1_result = { "result": "Found 5 sales documents in SharePoint", "resultLabel": "documentList_abc123_sales_documents", "documents": [ "document_001_sales_report_q1.xlsx", "document_002_sales_report_q2.xlsx", "document_003_sales_report_q3.xlsx" ], "error": None } print(f"Action 1 Result: {json.dumps(action1_result, indent=2)}") # Simulate second action: Excel analysis action2_result = { "result": "Analyzed sales data and created summary report", "resultLabel": "documentList_def456_analysis_results", "documents": [ "document_004_sales_analysis_summary.xlsx", "document_005_sales_trends_chart.png" ], "error": None } print(f"\nAction 2 Result: {json.dumps(action2_result, indent=2)}") # Simulate workflow messages with documents print("\n2. SIMULATING WORKFLOW MESSAGES") print("-" * 40) # Create mock messages to simulate the workflow messages = [] # Message 1: SharePoint search result message1 = ChatMessage( id="msg_001", workflowId=workflow.id, role="assistant", message=action1_result["result"], status="step", sequenceNr=1, publishedAt=datetime.now(UTC).isoformat(), actionId="action_001", actionMethod="sharepoint", actionName="search", documentsLabel=action1_result["resultLabel"], documents=[ ChatDocument(id="001", fileId="file_001", filename="sales_report_q1.xlsx", fileSize=1024, mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"), ChatDocument(id="002", fileId="file_002", filename="sales_report_q2.xlsx", fileSize=2048, mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"), ChatDocument(id="003", fileId="file_003", filename="sales_report_q3.xlsx", fileSize=1536, mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") ] ) messages.append(message1) # Message 2: Excel analysis result message2 = ChatMessage( id="msg_002", workflowId=workflow.id, role="assistant", message=action2_result["result"], status="step", sequenceNr=2, publishedAt=datetime.now(UTC).isoformat(), actionId="action_002", actionMethod="excel", actionName="analyze", documentsLabel=action2_result["resultLabel"], documents=[ ChatDocument(id="004", fileId="file_004", filename="sales_analysis_summary.xlsx", fileSize=3072, mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"), ChatDocument(id="005", fileId="file_005", filename="sales_trends_chart.png", fileSize=512, mimeType="image/png") ] ) messages.append(message2) # Add messages to workflow workflow.messages = messages print(f"Created {len(messages)} workflow messages with documents") # Test document reference retrieval print("\n3. TESTING DOCUMENT REFERENCE RETRIEVAL") print("-" * 40) doc_refs = container.getDocumentReferenceList() print("Available Documents:") for i, doc in enumerate(doc_refs.get('chat', []), 1): print(f"{i}. {doc['documentReference']}") print(f" Source: {doc['actionMethod']}.{doc['actionName']}") print(f" Documents: {doc['documentCount']}") print(f" Time: {doc['datetime']}") print() # Test document retrieval by reference print("4. TESTING DOCUMENT RETRIEVAL BY REFERENCE") print("-" * 40) test_refs = [ "documentList_abc123_sales_documents", "documentList_def456_analysis_results" ] for ref in test_refs: documents = container.getChatDocumentsFromDocumentReference(ref) print(f"Reference: {ref}") print(f"Found {len(documents)} documents:") for doc in documents: print(f" - {doc.filename} (ID: {doc.id}, Size: {doc.fileSize})") print() print("=" * 80) print("HANDOVER MECHANISM SUMMARY") print("=" * 80) print("✅ Documents are properly stored in workflow messages") print("✅ Result labels are correctly formatted") print("✅ Document references are retrievable") print("✅ Subsequent actions can find previous results") print("✅ Clear handover chain between actions") if __name__ == "__main__": test_document_handover()