botserver/src/basic/keywords/orchestration_tests.rs

83 lines
2.6 KiB
Rust

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<AppState> {
// 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(),
}
}