use PicoBot::providers::{ChatCompletionRequest, Message}; /// Test that message with special characters is properly escaped #[test] fn test_message_special_characters() { let msg = Message { role: "user".to_string(), content: "Hello \"world\"\nNew line\tTab".to_string(), }; let json = serde_json::to_string(&msg).unwrap(); let deserialized: Message = serde_json::from_str(&json).unwrap(); assert_eq!(deserialized.content, "Hello \"world\"\nNew line\tTab"); } /// Test that multi-line system prompt is preserved #[test] fn test_multiline_system_prompt() { let messages = vec![ Message { role: "system".to_string(), content: "You are a helpful assistant.\n\nFollow these rules:\n1. Be kind\n2. Be accurate".to_string(), }, Message { role: "user".to_string(), content: "Hi".to_string(), }, ]; let json = serde_json::to_string(&messages[0]).unwrap(); assert!(json.contains("helpful assistant")); assert!(json.contains("rules")); assert!(json.contains("1. Be kind")); } /// Test ChatCompletionRequest serialization (without model field) #[test] fn test_chat_request_serialization() { let request = ChatCompletionRequest { messages: vec![ Message { role: "system".to_string(), content: "You are helpful".to_string(), }, Message { role: "user".to_string(), content: "Hello".to_string(), }, ], temperature: Some(0.7), max_tokens: Some(100), tools: None, }; let json = serde_json::to_string(&request).unwrap(); // Verify structure assert!(json.contains(r#""role":"system""#)); assert!(json.contains(r#""role":"user""#)); assert!(json.contains(r#""content":"You are helpful""#)); assert!(json.contains(r#""content":"Hello""#)); assert!(json.contains(r#""temperature":0.7"#)); assert!(json.contains(r#""max_tokens":100"#)); }