use prodigy::cook::execution::{ClaudeExecutor, ClaudeExecutorImpl, RealCommandRunner};
use std::collections::HashMap;
use std::path::Path;
#[tokio::test]
async fn test_claude_streaming_mode_flag() {
let runner = RealCommandRunner::new();
let executor = ClaudeExecutorImpl::new(runner);
let mut env_vars = HashMap::new();
env_vars.insert("PRODIGY_CLAUDE_STREAMING".to_string(), "false".to_string());
let result = executor
.execute_claude_command("/help", Path::new("/tmp"), env_vars.clone())
.await;
assert!(result.is_ok() || result.is_err());
env_vars.insert("PRODIGY_CLAUDE_STREAMING".to_string(), "true".to_string());
let result = executor
.execute_claude_command("/help", Path::new("/tmp"), env_vars)
.await;
assert!(result.is_ok() || result.is_err());
}
#[test]
fn test_claude_event_variants() {
use chrono::Utc;
use prodigy::cook::execution::events::MapReduceEvent;
use serde_json::json;
let event = MapReduceEvent::ClaudeToolInvoked {
agent_id: "test-agent".to_string(),
tool_name: "Read".to_string(),
tool_id: "tool-123".to_string(),
parameters: json!({"file": "test.rs"}),
timestamp: Utc::now(),
};
let json = serde_json::to_string(&event).unwrap();
assert!(json.contains("claude_tool_invoked"));
let event = MapReduceEvent::ClaudeTokenUsage {
agent_id: "test-agent".to_string(),
input_tokens: 100,
output_tokens: 200,
cache_tokens: 50,
};
let json = serde_json::to_string(&event).unwrap();
assert!(json.contains("claude_token_usage"));
let event = MapReduceEvent::ClaudeSessionStarted {
agent_id: "test-agent".to_string(),
session_id: "session-123".to_string(),
model: "claude-3-opus".to_string(),
tools: vec!["Read".to_string(), "Write".to_string()],
};
let json = serde_json::to_string(&event).unwrap();
assert!(json.contains("claude_session_started"));
let event = MapReduceEvent::ClaudeMessage {
agent_id: "test-agent".to_string(),
content: "Test message".to_string(),
message_type: "text".to_string(),
json_log_location: None,
};
let json = serde_json::to_string(&event).unwrap();
assert!(json.contains("claude_message"));
}