From 14740e0ef6ee1c8c2993159dca95f93c1f886f24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 22 Sep 2026 13:40:13 +0800 Subject: [PATCH] =?UTF-8?q?3D=20=E4=BB=BB=E5=8A=A1=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E7=94=A8=E4=BE=8B=E6=94=B9=E4=B8=BA=E6=96=AD=E8=A8=80=E7=9C=9F?= =?UTF-8?q?=E5=AE=9E=E4=B8=BB=E5=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - server-rs/crates/api-server/src/tripo3d/job.rs:把 job_request_rejects_payload_without_fingerprint_stripping_support 改名为 job_request_stays_strict_after_stripping_platform_fingerprint 并补断言——带指纹 + 其它未知字段的合法 payload 仍必须被拒(摘下平台字段不等于放宽严格解析);原用例名声称验证指纹摘除,实际只断言了「缺字段的 payload 被拒」和「未知 job kind 被拒」 验证:cargo test -p api-server --locked job_request(2 个用例全绿)、npm run check:rustfmt --- .../crates/api-server/src/tripo3d/job.rs | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) 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());