feat: 同步最新生图与身份能力
This commit is contained in:
@@ -140,4 +140,59 @@ describe('镜头生产数据契约', () => {
|
||||
await flushPromises()
|
||||
expect(wrapper.emitted('generate')?.at(-1)).toEqual([{ setPrimary: false }])
|
||||
})
|
||||
|
||||
it('首帧生成前可预览后端最终选图规划和 Prompt', async () => {
|
||||
const fetcher = vi.fn<typeof fetch>().mockResolvedValue(
|
||||
new Response(
|
||||
JSON.stringify({
|
||||
data: {
|
||||
shotId: 'shot-1',
|
||||
episodeNo: 1,
|
||||
beatNo: 1,
|
||||
shotNo: 1,
|
||||
provider: 'seedream',
|
||||
model: 'image-model',
|
||||
generationConfig: {},
|
||||
references: [],
|
||||
referencePlan: {
|
||||
provider: 'seedream',
|
||||
maxReferenceImages: 4,
|
||||
totalCandidates: 2,
|
||||
strategy: 'subject-coverage',
|
||||
selected: [
|
||||
{
|
||||
subjectRef: '@CH0001',
|
||||
module: 'character',
|
||||
role: 'identity-anchor',
|
||||
imageId: 'anchor-1'
|
||||
}
|
||||
],
|
||||
omitted: [
|
||||
{
|
||||
subjectRef: '@SC0001',
|
||||
module: 'scene',
|
||||
role: 'form-primary',
|
||||
imageId: 'scene-1'
|
||||
}
|
||||
]
|
||||
},
|
||||
providerPrompt: '最终首帧 Prompt'
|
||||
}
|
||||
})
|
||||
)
|
||||
)
|
||||
vi.stubGlobal('fetch', fetcher)
|
||||
wrapper = mount(KeyframeDialog, {
|
||||
attachTo: document.body,
|
||||
props: { open: true, shotId: 'shot-1', shotTitle: '开场', keyframes: [], disabled: false }
|
||||
})
|
||||
await flushPromises()
|
||||
button('预览实际生成输入').click()
|
||||
await flushPromises()
|
||||
expect(fetcher.mock.calls[0]?.[0]).toBe('/api/storyboard-shots/shot-1/keyframe/preview')
|
||||
expect(document.body.textContent).toContain('已选 1 / 2 张')
|
||||
expect(document.body.textContent).toContain('省略 1 张')
|
||||
expect(document.body.textContent).toContain('最终首帧 Prompt')
|
||||
expect(wrapper.emitted('generate')).toBeUndefined()
|
||||
})
|
||||
})
|
||||
|
||||
@@ -70,6 +70,41 @@ describe('形态图片选择与操作', () => {
|
||||
expect(document.body.textContent).toContain('母版')
|
||||
expect(document.body.textContent).not.toContain('道具形态生图暂不自动引用')
|
||||
})
|
||||
it('按需预览正式形态的实际参考图和 Provider Prompt,不触发生图事件', async () => {
|
||||
const fetcher = vi.fn<typeof fetch>().mockResolvedValue(
|
||||
new Response(
|
||||
JSON.stringify({
|
||||
data: {
|
||||
subjectFormId: 'form-db-1',
|
||||
provider: 'seedream',
|
||||
model: 'image-model',
|
||||
generationConfig: { width: 2048 },
|
||||
references: [
|
||||
{
|
||||
imageNumber: 1,
|
||||
role: 'identity-anchor',
|
||||
imageId: 'anchor-1',
|
||||
imageUrl: '/storage/anchor.png'
|
||||
}
|
||||
],
|
||||
providerPrompt: '最终形态 Prompt'
|
||||
}
|
||||
})
|
||||
)
|
||||
)
|
||||
vi.stubGlobal('fetch', fetcher)
|
||||
wrapper = mount(GenerateImageDialog, {
|
||||
attachTo: document.body,
|
||||
props: { open: true, form: formFixture(), disabled: false }
|
||||
})
|
||||
await flushPromises()
|
||||
button('预览实际生成输入').click()
|
||||
await flushPromises()
|
||||
expect(fetcher.mock.calls[0]?.[0]).toBe('/api/subject-forms/form-db-1/images/preview')
|
||||
expect(document.body.textContent).toContain('seedream / image-model')
|
||||
expect(document.body.textContent).toContain('最终形态 Prompt')
|
||||
expect(wrapper.emitted('generate')).toBeUndefined()
|
||||
})
|
||||
it('已有主图优先于新候选图和失败记录,无主图才回退到成功候选图', () => {
|
||||
const form = formFixture()
|
||||
form.images.unshift(
|
||||
|
||||
@@ -112,6 +112,14 @@ describe('形态正式提示词与批量配置', () => {
|
||||
expect(service.session.value.promptReceipt?.result.failures[0]?.error).toBe('模型拒绝')
|
||||
expect(service.session.value.receipt).toBeNull()
|
||||
})
|
||||
it('批量提示词和图片可按主体模块缩小范围', async () => {
|
||||
const { service, posts } = await setup()
|
||||
service.batchModule.value = 'scene'
|
||||
await service.generatePrompts()
|
||||
await service.generateProject()
|
||||
expect(JSON.parse(String(posts()[0]?.[1]?.body))).toMatchObject({ module: 'scene' })
|
||||
expect(JSON.parse(String(posts()[1]?.[1]?.body))).toMatchObject({ module: 'scene' })
|
||||
})
|
||||
it('图片数量上限可选,非法上限和并发阻止提交', async () => {
|
||||
const { service, posts } = await setup()
|
||||
for (const limit of [0, -1, 1.5]) {
|
||||
|
||||
Reference in New Issue
Block a user