补齐画布合并后2MiB校验

在生成完成态合并与元数据迁移后重新校验最终布局大小

新增合并结果超过2MiB时拒绝保存的边界测试
This commit is contained in:
2026-07-19 19:21:51 +08:00
parent d0278f0370
commit 3478854385
@@ -1549,6 +1549,7 @@ fn persist_editor_project_layout(
input_layers_json,
now,
)?;
let layers_json = normalize_layout_json(layers_json)?;
ctx.db.editor_canvas().canvas_id().delete(&canvas.canvas_id);
ctx.db.editor_canvas().insert(EditorCanvas {
@@ -5021,6 +5022,50 @@ mod tests {
assert_eq!(error, "图片画布图层布局过大");
}
#[test]
fn editor_layout_rejects_merged_result_over_two_mib() {
let incoming = json!([{
"itemType": "generation-dialog",
"layerId": "generation-dialog:dialog-1",
"resourceId": "generation-dialog:dialog-1",
"padding": "x".repeat(EDITOR_PROJECT_MAX_LAYOUT_JSON_BYTES - 200),
"dialog": {
"id": "dialog-1",
"mode": "generate",
"status": "generating"
}
}]);
let current = json!([
{
"layerId": "layer-generated",
"resourceId": "resource-generated",
"title": "生成结果"
},
{
"itemType": "generation-dialog",
"layerId": "generation-dialog:dialog-1",
"resourceId": "generation-dialog:dialog-1",
"dialog": {
"id": "dialog-1",
"mode": "generate",
"status": "idle",
"generatedLayerId": "layer-generated"
}
}
]);
let merged = merge_completed_canvas_generation_items(
current.to_string().as_str(),
incoming.to_string(),
)
.expect("merge itself should succeed");
assert!(merged.len() > EDITOR_PROJECT_MAX_LAYOUT_JSON_BYTES);
assert_eq!(
normalize_layout_json(merged).expect_err("final merged layout should fail"),
"图片画布图层布局过大"
);
}
fn public_showcase_asset() -> EditorShowcaseAsset {
let now = Timestamp::from_micros_since_unix_epoch(1_000_000);
EditorShowcaseAsset {