use crate::basic::keywords::orchestration::*; use crate::basic::keywords::events::*; use crate::basic::keywords::enhanced_memory::*; use crate::core::shared::state::AppState; use crate::basic::UserSession; use std::sync::Arc; use uuid::Uuid; #[tokio::test] async fn test_orchestrate_workflow_keyword() { let mut engine = rhai::Engine::new(); let mock_state = create_mock_app_state().await; let mock_user = create_mock_user_session(); register_orchestrate_workflow(mock_state.clone(), mock_user.clone(), &mut engine); register_step_keyword(mock_state.clone(), mock_user.clone(), &mut engine); let script = r#" ORCHESTRATE WORKFLOW "test-workflow" STEP 1: BOT "test-bot" "analyze" "#; let result = engine.eval::<()>(script); assert!(result.is_ok(), "Workflow orchestration should execute without errors"); } #[tokio::test] async fn test_event_system() { let mut engine = rhai::Engine::new(); let mock_state = create_mock_app_state().await; let mock_user = create_mock_user_session(); register_on_event(mock_state.clone(), mock_user.clone(), &mut engine); register_publish_event(mock_state.clone(), mock_user.clone(), &mut engine); let script = r#" ON EVENT "test_event" DO PUBLISH EVENT "test_event" "#; let result = engine.eval::<()>(script); assert!(result.is_ok(), "Event system should execute without errors"); } #[tokio::test] async fn test_bot_memory_sharing() { let mut engine = rhai::Engine::new(); let mock_state = create_mock_app_state().await; let mock_user = create_mock_user_session(); register_bot_share_memory(mock_state.clone(), mock_user.clone(), &mut engine); register_bot_sync_memory(mock_state.clone(), mock_user.clone(), &mut engine); let script = r#" BOT SHARE MEMORY "test_key" WITH "target-bot" BOT SYNC MEMORY FROM "source-bot" "#; let result = engine.eval::<()>(script); assert!(result.is_ok(), "Bot memory sharing should execute without errors"); } async fn create_mock_app_state() -> Arc { // This would need to be implemented with proper mock setup // For now, this is a placeholder todo!("Implement mock AppState for testing") } fn create_mock_user_session() -> UserSession { UserSession { id: Uuid::new_v4(), user_id: Uuid::new_v4(), bot_id: Uuid::new_v4(), title: "Test Session".to_string(), context_data: serde_json::Value::Null, current_tool: None, created_at: chrono::Utc::now(), updated_at: chrono::Utc::now(), } }