修复图集快速编辑后端校验与错误提示
后端允许完整图标图集进入图片快速编辑,仅继续禁止单个图标。 快速编辑失败时向红色错误框传递具体错误文案。 补充前后端回归测试并同步画布编辑器技术文档。
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -2099,14 +2099,14 @@ fn ensure_editor_image_edit_asset_kind_allowed(asset_kind: Option<&str>) -> Resu
|
||||
let Some(asset_kind) = asset_kind.map(str::trim).filter(|value| !value.is_empty()) else {
|
||||
return Ok(());
|
||||
};
|
||||
if !matches!(asset_kind, "icon" | "icon-spritesheet") {
|
||||
if asset_kind != "icon" {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
Err(
|
||||
AppError::from_status(StatusCode::BAD_REQUEST).with_details(json!({
|
||||
"provider": "editor-image-edit",
|
||||
"message": "图标与图标图集不支持快速编辑",
|
||||
"message": "单个图标不支持快速编辑",
|
||||
"assetKind": asset_kind,
|
||||
})),
|
||||
)
|
||||
@@ -9186,21 +9186,20 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn editor_image_edit_rejects_icons_but_allows_icon_specs() {
|
||||
for asset_kind in ["icon", "icon-spritesheet"] {
|
||||
let error = ensure_editor_image_edit_asset_kind_allowed(Some(asset_kind))
|
||||
.expect_err("icon assets should not support quick edit");
|
||||
assert_eq!(error.status_code(), StatusCode::BAD_REQUEST);
|
||||
assert_eq!(
|
||||
error.details().and_then(|details| details.get("message")),
|
||||
Some(&json!("图标与图标图集不支持快速编辑")),
|
||||
);
|
||||
assert_eq!(
|
||||
error.details().and_then(|details| details.get("assetKind")),
|
||||
Some(&json!(asset_kind)),
|
||||
);
|
||||
}
|
||||
fn editor_image_edit_rejects_individual_icons_but_allows_spritesheets_and_specs() {
|
||||
let error = ensure_editor_image_edit_asset_kind_allowed(Some("icon"))
|
||||
.expect_err("individual icon assets should not support quick edit");
|
||||
assert_eq!(error.status_code(), StatusCode::BAD_REQUEST);
|
||||
assert_eq!(
|
||||
error.details().and_then(|details| details.get("message")),
|
||||
Some(&json!("单个图标不支持快速编辑")),
|
||||
);
|
||||
assert_eq!(
|
||||
error.details().and_then(|details| details.get("assetKind")),
|
||||
Some(&json!("icon")),
|
||||
);
|
||||
|
||||
assert!(ensure_editor_image_edit_asset_kind_allowed(Some("icon-spritesheet")).is_ok());
|
||||
assert!(ensure_editor_image_edit_asset_kind_allowed(Some("icon-spec")).is_ok());
|
||||
assert!(ensure_editor_image_edit_asset_kind_allowed(Some("image")).is_ok());
|
||||
assert!(ensure_editor_image_edit_asset_kind_allowed(None).is_ok());
|
||||
|
||||
@@ -124,6 +124,27 @@ describe('ImageCanvasQuickEditPanelView', () => {
|
||||
expect(rememberImageModel).toHaveBeenCalledWith('gpt-image-2');
|
||||
});
|
||||
|
||||
it('renders the failure message inside the quick edit alert', () => {
|
||||
render(
|
||||
<QuickEditPanelHarness
|
||||
initialPanel={{
|
||||
sourceLayerId: 'layer-a',
|
||||
prompt: '调整图集布局',
|
||||
size: '1024x1024',
|
||||
aspectRatio: '1:1',
|
||||
imageSize: '1K',
|
||||
model: 'gpt-image-2',
|
||||
status: 'failed',
|
||||
errorMessage: '图集快速编辑失败',
|
||||
}}
|
||||
/>,
|
||||
);
|
||||
|
||||
expect(screen.getByRole('alert').textContent).toContain(
|
||||
'图集快速编辑失败',
|
||||
);
|
||||
});
|
||||
|
||||
it('submits without rendering a standalone close button', () => {
|
||||
const submitQuickEdit = vi.fn();
|
||||
render(
|
||||
|
||||
@@ -53,6 +53,7 @@ function createQuickEditDialog(
|
||||
mode: isQuickEdit ? 'quick-edit' : 'generate',
|
||||
prompt: panel.prompt,
|
||||
status: panel.status,
|
||||
errorMessage: panel.errorMessage,
|
||||
sourceLayerId: panel.sourceLayerId,
|
||||
generationReferences: panel.quickEditReferences,
|
||||
assetLabel: panel.assetLabel,
|
||||
|
||||
Reference in New Issue
Block a user