use oli_server::apis::api_client::{
CompletionOptions, Message, SessionManager, ToolCall, ToolDefinition, ToolResult,
};
use serde_json::json;
#[test]
fn test_message_creation() {
let system_msg = Message::system("Test system message".to_string());
assert_eq!(system_msg.role, "system");
assert_eq!(system_msg.content, "Test system message");
let user_msg = Message::user("Test user message".to_string());
assert_eq!(user_msg.role, "user");
assert_eq!(user_msg.content, "Test user message");
let assistant_msg = Message::assistant("Test assistant message".to_string());
assert_eq!(assistant_msg.role, "assistant");
assert_eq!(assistant_msg.content, "Test assistant message");
}
#[test]
fn test_tool_structures() {
let tool_def = ToolDefinition {
name: "TestTool".to_string(),
description: "A test tool".to_string(),
parameters: json!({
"type": "object",
"required": ["test_param"],
"properties": {
"test_param": {
"type": "string",
"description": "A test parameter"
}
}
}),
};
assert_eq!(tool_def.name, "TestTool");
assert_eq!(tool_def.description, "A test tool");
let tool_call = ToolCall {
id: Some("call_123".to_string()),
name: "TestTool".to_string(),
arguments: json!({
"test_param": "test_value"
}),
};
assert_eq!(tool_call.id, Some("call_123".to_string()));
assert_eq!(tool_call.name, "TestTool");
assert_eq!(
tool_call
.arguments
.get("test_param")
.unwrap()
.as_str()
.unwrap(),
"test_value"
);
let tool_result = ToolResult {
tool_call_id: "call_123".to_string(),
output: "Tool execution result".to_string(),
};
assert_eq!(tool_result.tool_call_id, "call_123");
assert_eq!(tool_result.output, "Tool execution result");
}
#[test]
fn test_completion_options() {
let options = CompletionOptions::default();
assert!(options.max_tokens.unwrap() > 0);
assert!(options.temperature.unwrap() >= 0.0 && options.temperature.unwrap() <= 1.0);
let custom_options = CompletionOptions {
max_tokens: Some(1000),
temperature: Some(0.8),
tools: Some(vec![ToolDefinition {
name: "TestTool".to_string(),
description: "A test tool".to_string(),
parameters: json!({
"type": "object",
"properties": {}
}),
}]),
require_tool_use: false,
..Default::default()
};
assert_eq!(custom_options.max_tokens, Some(1000));
assert_eq!(custom_options.temperature, Some(0.8));
assert!(!custom_options.require_tool_use);
assert_eq!(
custom_options.tools.as_ref().unwrap()[0].name,
"TestTool".to_string()
);
}
#[cfg(test)]
pub mod session_manager_tests {
use super::*;
#[test]
fn test_session_manager_creation() {
let session_manager = SessionManager::new(100);
assert!(session_manager.messages.is_empty());
assert!(session_manager.system_message.is_none());
}
#[test]
fn test_with_system_message() {
let system_message = "You are a helpful assistant.";
let session_manager =
SessionManager::new(100).with_system_message(system_message.to_string());
assert_eq!(
session_manager.system_message.as_ref().unwrap().content,
system_message
);
}
#[test]
fn test_add_messages() {
let mut session_manager = SessionManager::new(100);
session_manager.add_user_message("Hello assistant".to_string());
assert_eq!(session_manager.messages.len(), 1);
assert_eq!(session_manager.messages[0].role, "user");
session_manager.add_assistant_message("Hello user".to_string());
assert_eq!(session_manager.messages.len(), 2);
assert_eq!(session_manager.messages[1].role, "assistant");
}
#[test]
fn test_get_messages_for_api() {
let mut session_manager = SessionManager::new(100)
.with_system_message("You are a helpful assistant.".to_string());
session_manager.add_user_message("Hello assistant".to_string());
session_manager.add_assistant_message("Hello user".to_string());
let api_messages = session_manager.get_messages_for_api();
assert_eq!(api_messages.len(), 3);
assert_eq!(api_messages[0].role, "system");
assert_eq!(api_messages[1].role, "user");
assert_eq!(api_messages[2].role, "assistant");
}
#[test]
fn test_clear() {
let mut session_manager =
SessionManager::new(100).with_system_message("System message".to_string());
session_manager.add_user_message("User message".to_string());
session_manager.clear();
assert!(session_manager.messages.is_empty());
assert!(session_manager.system_message.is_some());
}
#[test]
fn test_message_count() {
let mut session_manager = SessionManager::new(100);
session_manager.add_user_message("User message".to_string());
session_manager.add_assistant_message("Assistant message".to_string());
assert_eq!(session_manager.message_count(), 2);
}
#[test]
fn test_replace_with_summary() {
let mut session_manager = SessionManager::new(100);
for i in 0..5 {
session_manager.add_user_message(format!("User message {}", i));
session_manager.add_assistant_message(format!("Assistant message {}", i));
}
let original_count = session_manager.messages.len();
let summary = "This is a summary of the conversation.";
session_manager.replace_with_summary(summary.to_string());
assert_eq!(session_manager.messages.len(), 1);
assert!(session_manager.messages.len() < original_count);
assert!(session_manager.messages[0].content.contains(summary));
assert_eq!(session_manager.messages[0].role, "system");
}
}