89 lines
2.5 KiB
Rust
89 lines
2.5 KiB
Rust
use serde_json::json;
|
|
use shared_contracts::hyper3d as contract;
|
|
|
|
use super::status::normalize_task_status;
|
|
use super::{
|
|
build_submit_response, extract_download_files, extract_job_statuses,
|
|
resolve_hyper3d_overall_status,
|
|
};
|
|
|
|
#[test]
|
|
fn extracts_submit_response_from_nested_payload() {
|
|
let response = build_submit_response(
|
|
contract::Hyper3dGenerationMode::TextToModel,
|
|
json!({
|
|
"uuid": "task-1",
|
|
"jobs": {
|
|
"uuids": ["job-1", "job-2"],
|
|
"subscription_key": "sub-1"
|
|
},
|
|
"message": "submitted"
|
|
}),
|
|
)
|
|
.expect("submit response should build");
|
|
|
|
assert_eq!(response.task_uuid, "task-1");
|
|
assert_eq!(response.subscription_key, "sub-1");
|
|
assert_eq!(response.job_uuids, vec!["job-1", "job-2"]);
|
|
}
|
|
|
|
#[test]
|
|
fn extracts_download_files_from_file_url_aliases() {
|
|
let files = extract_download_files(&json!({
|
|
"result": {
|
|
"files": [
|
|
{
|
|
"fileName": "rodin-result.glb",
|
|
"fileUrl": "https://cdn.example/rodin-result.glb?token=1"
|
|
},
|
|
{
|
|
"displayName": "preview.png",
|
|
"signedUrl": "https://cdn.example/preview.png?token=1"
|
|
}
|
|
]
|
|
}
|
|
}));
|
|
|
|
assert_eq!(files.len(), 2);
|
|
assert_eq!(files[0].name, "rodin-result.glb");
|
|
assert_eq!(files[0].url, "https://cdn.example/rodin-result.glb?token=1");
|
|
}
|
|
|
|
#[test]
|
|
fn normalizes_status_values() {
|
|
assert_eq!(normalize_task_status("Waiting"), "waiting");
|
|
assert_eq!(normalize_task_status("Generating"), "generating");
|
|
assert_eq!(normalize_task_status("Done"), "done");
|
|
assert_eq!(normalize_task_status("Failed"), "failed");
|
|
}
|
|
|
|
#[test]
|
|
fn resolves_status_done_only_when_all_jobs_done() {
|
|
let jobs = extract_job_statuses(&json!({
|
|
"jobs": [
|
|
{ "uuid": "preview", "status": "Done" },
|
|
{ "uuid": "model", "status": "Generating" }
|
|
]
|
|
}));
|
|
|
|
assert_eq!(
|
|
resolve_hyper3d_overall_status(&json!({ "status": "Done" }), &jobs),
|
|
"generating"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn resolves_status_failed_when_any_job_failed() {
|
|
let jobs = extract_job_statuses(&json!({
|
|
"jobs": [
|
|
{ "uuid": "preview", "status": "Done" },
|
|
{ "uuid": "model", "status": "Failed", "message": "bad input" }
|
|
]
|
|
}));
|
|
|
|
assert_eq!(
|
|
resolve_hyper3d_overall_status(&json!({ "status": "Generating" }), &jobs),
|
|
"failed"
|
|
);
|
|
}
|