refactor: extract platform media crates
This commit is contained in:
84
server-rs/crates/platform-audio/tests/vector_engine_audio.rs
Normal file
84
server-rs/crates/platform-audio/tests/vector_engine_audio.rs
Normal file
@@ -0,0 +1,84 @@
|
||||
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 超过"));
|
||||
}
|
||||
Reference in New Issue
Block a user