use super::ConfigurationReasoning; use crate::ResponseItemId; use crate::models::ResponseItem; use crate::openai_models::ReasoningEffort; use pretty_assertions::assert_eq; use serde_json::json; #[test] fn configuration_update_round_trips_without_message_fields() { let value = json!({ "type": "configuration_update", "reasoning": { "effort": "high" } }); let mut item: ResponseItem = serde_json::from_value(value.clone()).unwrap(); assert_eq!( item, ResponseItem::ConfigurationUpdate { reasoning: ConfigurationReasoning { effort: ReasoningEffort::High, }, } ); item.set_id(Some(ResponseItemId::new("configuration-id"))); item.set_turn_id_if_missing("turn-id"); item.set_create_time_if_missing(serde_json::Number::from(123)); assert_eq!( (item.id(), item.id_prefix(), item.turn_id()), (None, None, None) ); assert_eq!(serde_json::to_value(item).unwrap(), value); } #[test] fn configuration_update_preserves_model_defined_effort() { let value = json!({ "type": "configuration_update", "reasoning": { "effort": "model-specific" } }); let item: ResponseItem = serde_json::from_value(value.clone()).unwrap(); assert_eq!( item, ResponseItem::ConfigurationUpdate { reasoning: ConfigurationReasoning { effort: ReasoningEffort::Custom("model-specific".to_string()), }, } ); assert_eq!(serde_json::to_value(item).unwrap(), value); }