Files
Genarrative/server-rs/crates/platform-hyper3d/tests/hyper3d_rodin.rs
2026-05-26 13:18:13 +08:00

62 lines
1.8 KiB
Rust

use base64::{Engine as _, engine::general_purpose::STANDARD as BASE64_STANDARD};
use serde_json::json;
use shared_contracts::hyper3d as contract;
#[test]
fn submits_response_contract_keeps_kebab_case_mode() {
let payload = serde_json::to_value(contract::Hyper3dTaskSubmitResponse {
ok: true,
provider: "hyper3d-rodin".to_string(),
mode: contract::Hyper3dGenerationMode::ImageToModel,
task_uuid: "task-1".to_string(),
subscription_key: "sub-1".to_string(),
job_uuids: vec!["job-1".to_string()],
message: Some("submitted".to_string()),
tier: "Gen-2".to_string(),
})
.expect("response should serialize");
assert_eq!(payload["mode"], json!("image-to-model"));
assert_eq!(payload["subscriptionKey"], json!("sub-1"));
}
#[tokio::test]
async fn image_data_url_limit_error_is_bad_request() {
let payload = contract::Hyper3dImageToModelRequest {
image_data_urls: vec![
format!(
"data:image/png;base64,{}",
BASE64_STANDARD.encode(b"\x89PNG\r\n\x1A\nrest")
);
6
],
image_urls: Vec::new(),
prompt: None,
condition_mode: None,
seed: None,
geometry_file_format: None,
material: None,
quality: None,
mesh_mode: None,
addons: Vec::new(),
bbox_condition: None,
preview_render: None,
};
let error = platform_hyper3d::submit_image_to_model(
&platform_hyper3d::Hyper3dSettings {
base_url: "https://invalid.local".to_string(),
api_key: "test".to_string(),
request_timeout_ms: 1,
},
payload,
)
.await
.expect_err("too many images should fail before request");
assert_eq!(
error.status_hint(),
platform_hyper3d::Hyper3dStatusHint::BadRequest
);
}