合并编辑器场景生成与图片编辑契约
合并生成目标预检与图片编辑权威来源校验 保留场景生成前端分流与外部 API 契约 同步 Rust facade、后端架构文档和前端提交工作流
This commit is contained in:
@@ -17,6 +17,7 @@ import {
|
||||
generateEditorCharacterAnimation,
|
||||
generateEditorIconSpritesheet,
|
||||
generateEditorImage,
|
||||
generateEditorScene,
|
||||
generateEditorSoundEffect,
|
||||
generateEditorVideo,
|
||||
listEditorProjects,
|
||||
@@ -966,6 +967,60 @@ describe('editorProjectClient', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('generates editor scenes through the structured endpoint without automatic retries', async () => {
|
||||
requestJsonMock.mockResolvedValueOnce({
|
||||
queueState: { jobId: 'scene-job-1', status: 'pending' },
|
||||
});
|
||||
|
||||
await generateEditorScene({
|
||||
sceneContent: '雨夜中的欧洲小镇街道',
|
||||
stylePreset: 'anime',
|
||||
model: 'gemini-3.1-flash-image-preview',
|
||||
aspectRatio: '16:9',
|
||||
imageSize: '1K',
|
||||
referenceImageSrcs: ['editor-resource-reference'],
|
||||
});
|
||||
|
||||
expect(requestJsonMock).toHaveBeenCalledWith(
|
||||
'/api/editor/scenes/generations',
|
||||
expect.objectContaining({
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
sceneContent: '雨夜中的欧洲小镇街道',
|
||||
stylePreset: 'anime',
|
||||
model: 'gemini-3.1-flash-image-preview',
|
||||
aspectRatio: '16:9',
|
||||
imageSize: '1K',
|
||||
referenceImageSrcs: ['editor-resource-reference'],
|
||||
}),
|
||||
}),
|
||||
'生成游戏场景失败',
|
||||
expect.objectContaining({
|
||||
timeoutMs: 1_200_000,
|
||||
retry: {
|
||||
maxRetries: 0,
|
||||
retryUnsafeMethods: false,
|
||||
},
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
it('rejects scene reference overflow without sending an HTTP request', async () => {
|
||||
await expect(
|
||||
generateEditorScene({
|
||||
sceneContent: '雨夜中的欧洲小镇街道',
|
||||
stylePreset: 'anime',
|
||||
referenceImageSrcs: Array.from(
|
||||
{ length: 6 },
|
||||
(_, index) =>
|
||||
`/generated-images/editor/scene-reference-${index + 1}.png`,
|
||||
),
|
||||
}),
|
||||
).rejects.toThrow('场景参考图最多允许 5 张');
|
||||
|
||||
expect(requestJsonMock).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('rejects inline media before submitting editor generation requests', async () => {
|
||||
await expect(
|
||||
generateEditorImage({
|
||||
|
||||
Reference in New Issue
Block a user