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" ); }