pub mod request;
pub mod response;
#[cfg(test)]
mod tests {
use crate::images::request::{ImageModel, ImageQuality, ImageSize, ImageStyle, ResponseFormat};
use crate::images::response::ImageResponse;
#[test]
fn test_image_response_deserialization() {
let json = r#"{
"created": 1704067200,
"data": [
{
"url": "https://example.com/image.png"
}
]
}"#;
let response: ImageResponse = serde_json::from_str(json).expect("Should deserialize ImageResponse");
assert_eq!(response.created, 1704067200);
assert_eq!(response.data.len(), 1);
assert_eq!(response.data[0].url, Some("https://example.com/image.png".to_string()));
}
#[test]
fn test_image_response_with_b64() {
let json = r#"{
"created": 1704067200,
"data": [
{
"b64_json": "aGVsbG8gd29ybGQ="
}
]
}"#;
let response: ImageResponse = serde_json::from_str(json).expect("Should deserialize ImageResponse with b64");
assert!(response.data[0].has_b64());
assert!(!response.data[0].has_url());
let bytes = response.data[0].as_bytes().expect("Should have bytes").expect("Should decode");
assert_eq!(bytes, b"hello world");
}
#[test]
fn test_image_response_with_revised_prompt() {
let json = r#"{
"created": 1704067200,
"data": [
{
"url": "https://example.com/image.png",
"revised_prompt": "A detailed painting of a sunset over calm waters"
}
]
}"#;
let response: ImageResponse = serde_json::from_str(json).expect("Should deserialize with revised_prompt");
assert_eq!(response.data[0].revised_prompt, Some("A detailed painting of a sunset over calm waters".to_string()));
}
#[test]
fn test_image_model_serialization() {
assert_eq!(serde_json::to_string(&ImageModel::DallE2).unwrap(), "\"dall-e-2\"");
assert_eq!(serde_json::to_string(&ImageModel::DallE3).unwrap(), "\"dall-e-3\"");
assert_eq!(serde_json::to_string(&ImageModel::GptImage1).unwrap(), "\"gpt-image-1\"");
}
#[test]
fn test_image_size_serialization() {
assert_eq!(serde_json::to_string(&ImageSize::Size256x256).unwrap(), "\"256x256\"");
assert_eq!(serde_json::to_string(&ImageSize::Size1024x1024).unwrap(), "\"1024x1024\"");
assert_eq!(serde_json::to_string(&ImageSize::Size1792x1024).unwrap(), "\"1792x1024\"");
}
#[test]
fn test_image_quality_serialization() {
assert_eq!(serde_json::to_string(&ImageQuality::Standard).unwrap(), "\"standard\"");
assert_eq!(serde_json::to_string(&ImageQuality::Hd).unwrap(), "\"hd\"");
}
#[test]
fn test_image_style_serialization() {
assert_eq!(serde_json::to_string(&ImageStyle::Vivid).unwrap(), "\"vivid\"");
assert_eq!(serde_json::to_string(&ImageStyle::Natural).unwrap(), "\"natural\"");
}
#[test]
fn test_response_format_serialization() {
assert_eq!(serde_json::to_string(&ResponseFormat::Url).unwrap(), "\"url\"");
assert_eq!(serde_json::to_string(&ResponseFormat::B64Json).unwrap(), "\"b64_json\"");
}
#[test]
fn test_defaults() {
assert_eq!(ImageModel::default(), ImageModel::DallE3);
assert_eq!(ImageSize::default(), ImageSize::Size1024x1024);
assert_eq!(ImageQuality::default(), ImageQuality::Standard);
assert_eq!(ImageStyle::default(), ImageStyle::Vivid);
assert_eq!(ResponseFormat::default(), ResponseFormat::Url);
}
#[test]
fn test_multiple_images_response() {
let json = r#"{
"created": 1704067200,
"data": [
{"url": "https://example.com/image1.png"},
{"url": "https://example.com/image2.png"},
{"url": "https://example.com/image3.png"}
]
}"#;
let response: ImageResponse = serde_json::from_str(json).expect("Should deserialize multiple images");
assert_eq!(response.data.len(), 3);
}
}