85 lines
2.6 KiB
Rust
85 lines
2.6 KiB
Rust
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 超过"));
|
|
}
|