diff --git a/server-rs/crates/api-server/src/tripo3d/job.rs b/server-rs/crates/api-server/src/tripo3d/job.rs index 0c63406b1..31a6bc9a8 100644 --- a/server-rs/crates/api-server/src/tripo3d/job.rs +++ b/server-rs/crates/api-server/src/tripo3d/job.rs @@ -157,7 +157,31 @@ mod tests { } #[test] - fn job_request_rejects_payload_without_fingerprint_stripping_support() { + fn job_request_stays_strict_after_stripping_platform_fingerprint() { + // 摘指纹只摘平台注入的那一个字段:其余未知字段仍走 deny_unknown_fields。 + let payload_with_unknown_field = json!({ + "generation": { + "prompt": "一只木箱", + "model": "v3.1-20260211", + "texture": true, + "pbr": true, + "textureQuality": "standard", + "geometryQuality": "standard", + "quad": false, + "smartLowPoly": false, + "generateParts": false + }, + "target": { "kind": "projectResource", "projectId": "project-1" }, + "_externalApiRequestFingerprint": "fingerprint-1", + "unexpectedField": true + }) + .to_string(); + assert!( + parse_model3d_job_request(MODEL3D_TEXT_TO_MODEL_JOB_KIND, &payload_with_unknown_field) + .is_err() + ); + + // 缺 generation / target 的 payload 与未知 job kind 都必须被拒。 let payload = json!({ "prompt": "一只木箱" }).to_string(); assert!(parse_model3d_job_request(MODEL3D_TEXT_TO_MODEL_JOB_KIND, &payload).is_err()); assert!(parse_model3d_job_request("unknown_job_kind", &payload).is_err());