角色重绘复用角色提示词限定
角色图层重绘提交为角色生成类型 补充角色重绘请求契约测试 更新图片画布重绘链路文档
This commit is contained in:
@@ -323,13 +323,15 @@ describe('useImageCanvasGenerationSubmissionWorkflow', () => {
|
||||
'quick-edit:generating:closed:-:placeholder:-',
|
||||
);
|
||||
await waitFor(() => {
|
||||
expect(generateEditorImageMock).toHaveBeenCalledWith({
|
||||
prompt: '快速修图',
|
||||
size: '1024x768',
|
||||
kind: 'quick-edit',
|
||||
model: 'gemini-3.1-flash-image-preview',
|
||||
referenceImageSrcs: ['data:image/png;base64,source.png'],
|
||||
});
|
||||
expect(generateEditorImageMock).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
prompt: '快速修图',
|
||||
size: '1024x768',
|
||||
kind: 'quick-edit',
|
||||
model: 'gemini-3.1-flash-image-preview',
|
||||
referenceImageSrcs: ['data:image/png;base64,source.png'],
|
||||
}),
|
||||
);
|
||||
});
|
||||
await waitFor(() => {
|
||||
expect(screen.getByTestId('layers').textContent).toContain(
|
||||
@@ -368,6 +370,53 @@ describe('useImageCanvasGenerationSubmissionWorkflow', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('submits character redraws through the character image prompt contract', async () => {
|
||||
generateEditorImageMock.mockResolvedValueOnce(
|
||||
createGenerated({ prompt: '角色换成蓝色披风' }),
|
||||
);
|
||||
render(
|
||||
<SubmissionWorkflowHarness
|
||||
initialLayers={[
|
||||
createLayer({
|
||||
assetKind: 'character',
|
||||
prompt: '原始角色设定',
|
||||
}),
|
||||
]}
|
||||
initialQuickEditPanel={{
|
||||
mode: 'redraw',
|
||||
sourceLayerId: 'layer-source',
|
||||
prompt: ' 角色换成蓝色披风 ',
|
||||
size: '1024x768',
|
||||
model: 'gpt-image-2',
|
||||
status: 'idle',
|
||||
}}
|
||||
/>,
|
||||
);
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: '提交快速编辑' }));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(generateEditorImageMock).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
prompt: '角色换成蓝色披风',
|
||||
size: '1024x768',
|
||||
kind: 'character',
|
||||
model: 'gpt-image-2',
|
||||
referenceImageSrcs: ['data:image/png;base64,source.png'],
|
||||
assetKind: 'character',
|
||||
}),
|
||||
);
|
||||
});
|
||||
await waitFor(() => {
|
||||
expect(screen.getByTestId('layers').textContent).toContain(
|
||||
'layer-quick-edit-1:源图 重绘:resource-source:character',
|
||||
);
|
||||
});
|
||||
expect(screen.getByTestId('quick-edit').textContent).toBe(
|
||||
'layer-source:idle:角色换成蓝色披风:-',
|
||||
);
|
||||
});
|
||||
|
||||
it('submits edit dialogs beside the source and clears the modal state', async () => {
|
||||
editEditorImageMock.mockResolvedValueOnce(
|
||||
createGenerated({ prompt: '修改当前图片' }),
|
||||
@@ -390,10 +439,12 @@ describe('useImageCanvasGenerationSubmissionWorkflow', () => {
|
||||
'edit:generating:open:-:-:-',
|
||||
);
|
||||
await waitFor(() => {
|
||||
expect(editEditorImageMock).toHaveBeenCalledWith({
|
||||
prompt: '修改当前图片',
|
||||
sourceImageSrc: 'data:image/png;base64,source.png',
|
||||
});
|
||||
expect(editEditorImageMock).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
prompt: '修改当前图片',
|
||||
sourceImageSrc: 'data:image/png;base64,source.png',
|
||||
}),
|
||||
);
|
||||
});
|
||||
await waitFor(() => {
|
||||
expect(screen.getByTestId('layers').textContent).toContain(
|
||||
@@ -492,13 +543,15 @@ describe('useImageCanvasGenerationSubmissionWorkflow', () => {
|
||||
'publication:generating:closed:-:placeholder:-',
|
||||
);
|
||||
await waitFor(() => {
|
||||
expect(generateEditorImageMock).toHaveBeenCalledWith({
|
||||
prompt: expect.stringContaining('【宣发素材类型】详情页单图'),
|
||||
size: '720x1280',
|
||||
kind: 'publication-material',
|
||||
model: 'gemini-3.1-flash-image-preview',
|
||||
referenceImageSrcs: ['data:image/png;base64,large-ref'],
|
||||
});
|
||||
expect(generateEditorImageMock).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
prompt: expect.stringContaining('【宣发素材类型】详情页单图'),
|
||||
size: '720x1280',
|
||||
kind: 'publication-material',
|
||||
model: 'gemini-3.1-flash-image-preview',
|
||||
referenceImageSrcs: ['data:image/png;base64,large-ref'],
|
||||
}),
|
||||
);
|
||||
});
|
||||
const prompt = generateEditorImageMock.mock.calls[0]?.[0]?.prompt ?? '';
|
||||
expect(prompt).toContain('游戏名:云朵消消乐');
|
||||
@@ -707,9 +760,11 @@ describe('useImageCanvasGenerationSubmissionWorkflow', () => {
|
||||
);
|
||||
});
|
||||
await waitFor(() => {
|
||||
expect(extractEditorUiDesignAssetsMock).toHaveBeenCalledWith({
|
||||
sourceImageSrc: 'data:image/png;base64,ui-design.png',
|
||||
});
|
||||
expect(extractEditorUiDesignAssetsMock).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
sourceImageSrc: 'data:image/png;base64,ui-design.png',
|
||||
}),
|
||||
);
|
||||
});
|
||||
await waitFor(() => {
|
||||
expect(screen.getByTestId('layers').textContent).toContain(
|
||||
|
||||
@@ -697,10 +697,12 @@ export function useImageCanvasGenerationSubmissionWorkflow({
|
||||
quickEditSourceLayer,
|
||||
quickEditReferences,
|
||||
);
|
||||
const isCharacterRedraw =
|
||||
panelMode === 'redraw' && quickEditSourceLayer.assetKind === 'character';
|
||||
const generated = await generateEditorImage({
|
||||
prompt: normalizedPrompt,
|
||||
size: quickEditPanel.size,
|
||||
kind: 'quick-edit',
|
||||
kind: isCharacterRedraw ? 'character' : 'quick-edit',
|
||||
model: normalizeEditorImageModel(quickEditPanel.model),
|
||||
referenceImageSrcs: [
|
||||
...extraReferenceImageSrcs,
|
||||
|
||||
Reference in New Issue
Block a user