use platform_audio::{ AudioTaskKind, BackgroundMusicTaskRequest, SUNO_DEFAULT_MODEL, VIDU_PROMPT_MAX_CHARS, audio_mime_to_extension, build_background_music_task_body, build_sound_effect_task_body, extract_audio_urls, is_failed_task_status, is_pending_task_status, normalize_audio_mime_type, normalize_task_status, }; use serde_json::json; #[test] fn normalizes_audio_mime_type_from_content_type_and_url() { assert_eq!( normalize_audio_mime_type("audio/x-wav; charset=utf-8", "https://x/a.bin"), "audio/wav" ); assert_eq!( normalize_audio_mime_type("application/octet-stream", "https://x/a.m4a?token=1"), "audio/mp4" ); assert_eq!(audio_mime_to_extension("audio/mp4"), "m4a"); } #[test] fn extracts_nested_audio_urls() { let payload = json!({ "Response": { "Status": "FINISH", "Task": { "Output": { "FileInfos": [ { "FileUrl": "https://cdn.example.test/audio.wav" } ] } } } }); assert_eq!( extract_audio_urls(&payload), vec!["https://cdn.example.test/audio.wav".to_string()] ); } #[test] fn vector_engine_task_status_is_stable() { assert_eq!(normalize_task_status("FINISH"), "completed"); assert!(is_pending_task_status("processing")); assert!(is_failed_task_status("failed")); } #[test] fn background_music_request_body_uses_default_model_and_optional_instrumental_flag() { let body = build_background_music_task_body(BackgroundMusicTaskRequest { prompt: " 风里的木琴 ".to_string(), title: " 林间 ".to_string(), tags: Some(" warm, wood ".to_string()), model: None, instrumental: true, }) .expect("request body should be valid"); assert_eq!(body["prompt"], "风里的木琴"); assert_eq!(body["title"], "林间"); assert_eq!(body["tags"], "warm, wood"); assert_eq!(body["mv"], SUNO_DEFAULT_MODEL); assert_eq!(body["task"], "generate"); assert_eq!(body["make_instrumental"], true); assert_eq!( AudioTaskKind::BackgroundMusic.provider(), "vector-engine-suno" ); } #[test] fn sound_effect_request_rejects_overlong_prompt() { let prompt = "声".repeat(VIDU_PROMPT_MAX_CHARS + 1); let error = build_sound_effect_task_body(platform_audio::SoundEffectTaskRequest { prompt, duration: 5, seed: None, }) .expect_err("long prompt should fail"); assert!(error.message().contains("prompt 超过")); }