use super::helpers::*;
use crate::providers::openai_shared::utils;
use crate::provider::LLMRequestConfig;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_config_enables_structured_story_analysis_across_providers() {
let mut request = create_openai_request_for_testing();
let story_analysis_format = create_test_story_emotional_analysis_schema();
let config = LLMRequestConfig {
temperature: Some(0.1), max_tokens: Some(2000),
response_format: Some(story_analysis_format.clone()),
..Default::default()
};
utils::apply_config_to_request(&mut request, Some(config));
assert_eq!(request.temperature, Some(0.1));
assert_eq!(request.max_tokens, Some(2000));
assert!(request.response_format.is_some());
let openai_format = request.response_format.unwrap();
assert_eq!(openai_format.format_type, "json_schema");
assert!(openai_format.json_schema.is_some());
let schema = openai_format.json_schema.unwrap();
assert_eq!(schema.name, "story_emotional_analysis");
assert_eq!(schema.strict, Some(true));
let schema_props = &schema.schema["properties"];
assert!(schema_props["emotional_intensity"].is_object());
assert!(schema_props["primary_emotion"].is_object());
}
#[test]
fn test_config_preserves_request_when_no_story_schema_provided() {
let mut request = create_openai_request_for_testing();
request.temperature = Some(0.7); request.max_tokens = Some(1000);
let config = LLMRequestConfig {
temperature: Some(0.8), response_format: None, ..Default::default()
};
utils::apply_config_to_request(&mut request, Some(config));
assert_eq!(request.temperature, Some(0.8));
assert!(request.response_format.is_none());
assert_eq!(request.model, "test-model");
assert!(request.stream.is_some());
}
#[test]
fn test_complex_story_schema_application_preserves_narrative_structure() {
let mut request = create_openai_request_for_testing();
let complex_story_schema = create_test_complex_story_schema();
let config = LLMRequestConfig {
temperature: Some(0.0), response_format: Some(complex_story_schema.clone()),
..Default::default()
};
utils::apply_config_to_request(&mut request, Some(config));
assert!(request.response_format.is_some());
assert_eq!(request.temperature, Some(0.0));
let openai_format = request.response_format.unwrap();
let applied_schema = openai_format.json_schema.unwrap();
assert_eq!(applied_schema.schema, complex_story_schema.schema);
assert_eq!(applied_schema.name, "complex_story_analysis");
assert_eq!(applied_schema.strict, Some(true));
let analysis_props = &applied_schema.schema["properties"]["analysis"]["properties"];
assert!(analysis_props["emotional_content"]["properties"]["primary_emotion"].is_object());
assert!(analysis_props["emotional_content"]["properties"]["intensity"].is_object());
assert!(analysis_props["story_elements"]["properties"]["characters"].is_object());
assert!(analysis_props["story_elements"]["properties"]["locations"].is_object());
}
#[test]
fn test_configuration_handles_missing_config_gracefully() {
let mut original_request = create_openai_request_for_testing();
original_request.temperature = Some(0.5);
let mut request = original_request.clone();
utils::apply_config_to_request(&mut request, None);
assert_eq!(request.temperature, original_request.temperature);
assert_eq!(request.max_tokens, original_request.max_tokens);
assert_eq!(request.response_format, original_request.response_format);
assert_eq!(request.model, original_request.model);
assert!(request.response_format.is_none()); assert_eq!(request.stream, Some(false)); }
}