diff --git a/crates/schema/public/enums/src/common/generation/common_video_model.rs b/crates/schema/public/enums/src/common/generation/common_video_model.rs index c30d7ec40c..0a64ad6234 100644 --- a/crates/schema/public/enums/src/common/generation/common_video_model.rs +++ b/crates/schema/public/enums/src/common/generation/common_video_model.rs @@ -2,7 +2,7 @@ use utoipa::ToSchema; /// Video models available for generation. /// Mirrors artcraft_router::api::common_video_model::CommonVideoModel. -#[derive(Copy, Clone, Debug, Serialize, Deserialize, ToSchema)] +#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize, Deserialize, ToSchema)] #[serde(rename_all = "snake_case")] pub enum CommonVideoModel { #[serde(rename = "grok_video")] @@ -98,6 +98,94 @@ impl CommonVideoModel { mod tests { use super::*; use crate::common::generation::common_model_type::CommonModelType; + use crate::test_helpers::assert_serialization; + + #[test] + fn test_serialization() { + assert_serialization(CommonVideoModel::GrokVideo, "grok_video"); + assert_serialization(CommonVideoModel::Kling16Pro, "kling_1p6_pro"); + assert_serialization(CommonVideoModel::Kling21Pro, "kling_2p1_pro"); + assert_serialization(CommonVideoModel::Kling21Master, "kling_2p1_master"); + assert_serialization(CommonVideoModel::Kling2p5TurboPro, "kling_2p5_turbo_pro"); + assert_serialization(CommonVideoModel::Kling2p6Pro, "kling_2p6_pro"); + assert_serialization(CommonVideoModel::Kling3p0Standard, "kling_3p0_standard"); + assert_serialization(CommonVideoModel::Kling3p0Pro, "kling_3p0_pro"); + assert_serialization(CommonVideoModel::HappyHorse1p0, "happy_horse_1p0"); + assert_serialization(CommonVideoModel::Seedance10Lite, "seedance_1p0_lite"); + assert_serialization(CommonVideoModel::Seedance1p5Pro, "seedance_1p5_pro"); + assert_serialization(CommonVideoModel::Seedance2p0, "seedance_2p0"); + assert_serialization(CommonVideoModel::Seedance2p0Fast, "seedance_2p0_fast"); + assert_serialization(CommonVideoModel::Sora2, "sora_2"); + assert_serialization(CommonVideoModel::Sora2Pro, "sora_2_pro"); + assert_serialization(CommonVideoModel::Veo2, "veo_2"); + assert_serialization(CommonVideoModel::Veo3, "veo_3"); + assert_serialization(CommonVideoModel::Veo3Fast, "veo_3_fast"); + assert_serialization(CommonVideoModel::Veo3p1, "veo_3p1"); + assert_serialization(CommonVideoModel::Veo3p1Fast, "veo_3p1_fast"); + } + + #[test] + fn test_deserialization() { + let cases = [ + ("grok_video", CommonVideoModel::GrokVideo), + ("kling_1p6_pro", CommonVideoModel::Kling16Pro), + ("kling_2p1_pro", CommonVideoModel::Kling21Pro), + ("kling_2p1_master", CommonVideoModel::Kling21Master), + ("kling_2p5_turbo_pro", CommonVideoModel::Kling2p5TurboPro), + ("kling_2p6_pro", CommonVideoModel::Kling2p6Pro), + ("kling_3p0_standard", CommonVideoModel::Kling3p0Standard), + ("kling_3p0_pro", CommonVideoModel::Kling3p0Pro), + ("happy_horse_1p0", CommonVideoModel::HappyHorse1p0), + ("seedance_1p0_lite", CommonVideoModel::Seedance10Lite), + ("seedance_1p5_pro", CommonVideoModel::Seedance1p5Pro), + ("seedance_2p0", CommonVideoModel::Seedance2p0), + ("seedance_2p0_fast", CommonVideoModel::Seedance2p0Fast), + ("sora_2", CommonVideoModel::Sora2), + ("sora_2_pro", CommonVideoModel::Sora2Pro), + ("veo_2", CommonVideoModel::Veo2), + ("veo_3", CommonVideoModel::Veo3), + ("veo_3_fast", CommonVideoModel::Veo3Fast), + ("veo_3p1", CommonVideoModel::Veo3p1), + ("veo_3p1_fast", CommonVideoModel::Veo3p1Fast), + ]; + for (json_str, expected) in cases { + let json = format!("\"{}\"", json_str); + let deserialized: CommonVideoModel = serde_json::from_str(&json) + .unwrap_or_else(|e| panic!("Failed to deserialize {:?}: {}", json_str, e)); + assert_eq!(deserialized, expected, "Failed for {:?}", json_str); + } + } + + #[test] + fn test_round_trip() { + let all = [ + CommonVideoModel::GrokVideo, + CommonVideoModel::Kling16Pro, + CommonVideoModel::Kling21Pro, + CommonVideoModel::Kling21Master, + CommonVideoModel::Kling2p5TurboPro, + CommonVideoModel::Kling2p6Pro, + CommonVideoModel::Kling3p0Standard, + CommonVideoModel::Kling3p0Pro, + CommonVideoModel::HappyHorse1p0, + CommonVideoModel::Seedance10Lite, + CommonVideoModel::Seedance1p5Pro, + CommonVideoModel::Seedance2p0, + CommonVideoModel::Seedance2p0Fast, + CommonVideoModel::Sora2, + CommonVideoModel::Sora2Pro, + CommonVideoModel::Veo2, + CommonVideoModel::Veo3, + CommonVideoModel::Veo3Fast, + CommonVideoModel::Veo3p1, + CommonVideoModel::Veo3p1Fast, + ]; + for variant in all { + let json = serde_json::to_string(&variant).unwrap(); + let deserialized: CommonVideoModel = serde_json::from_str(&json).unwrap(); + assert_eq!(variant, deserialized, "Round-trip failed for {:?}", variant); + } + } #[test] fn all_video_models_convert_to_common_model_type() {