|
|
@@ -339,53 +339,58 @@ describe('web e2e: Models settings page configures a dormant provider', () => {
|
|
|
}])
|
|
|
const dialog = page.getByRole('dialog', { name: '设置' })
|
|
|
const edit = dialog.getByRole('button', { name: '编辑 openai', exact: true })
|
|
|
- await edit.click()
|
|
|
- await dialog.getByText('自定义设置').click()
|
|
|
- await dialog.getByRole('button', { name: '模型选项 1' }).click()
|
|
|
- const types = dialog.getByRole('group', { name: '输入类型 1' })
|
|
|
- const image = types.getByRole('checkbox', { name: '图片', exact: true })
|
|
|
- await expect.poll(() => image.isChecked()).toBe(true)
|
|
|
- expect(await types.getByRole('checkbox', { name: '文本', exact: true }).isChecked()).toBe(true)
|
|
|
- const before = await readFile(join(scaffold.harnessHome, 'settings.yaml'), 'utf8')
|
|
|
- await compareOrRefreshGolden(join(SNAPSHOT_DIR, 'catalog-inputs.expected.md'),
|
|
|
- await captureStableAria(page, '[role="dialog"]', scaffold.workspaceCwd), MODE)
|
|
|
- await dialog.getByRole('button', { name: '保存', exact: true }).click()
|
|
|
- await types.waitFor({ state: 'detached' })
|
|
|
- expect(await readFile(join(scaffold.harnessHome, 'settings.yaml'), 'utf8')).toBe(before)
|
|
|
+ try {
|
|
|
+ await edit.click()
|
|
|
+ await dialog.getByText('自定义设置').click()
|
|
|
+ await dialog.getByRole('button', { name: '模型选项 1' }).click()
|
|
|
+ const types = dialog.getByRole('group', { name: '输入类型 1' })
|
|
|
+ const image = types.getByRole('checkbox', { name: '图片', exact: true })
|
|
|
+ await expect.poll(() => image.isChecked()).toBe(true)
|
|
|
+ expect(await types.getByRole('checkbox', { name: '文本', exact: true }).isChecked()).toBe(true)
|
|
|
+ const before = await readFile(join(scaffold.harnessHome, 'settings.yaml'), 'utf8')
|
|
|
+ await compareOrRefreshGolden(join(SNAPSHOT_DIR, 'catalog-inputs.expected.md'),
|
|
|
+ await captureStableAria(page, '[role="dialog"]', scaffold.workspaceCwd), MODE)
|
|
|
+ await dialog.getByRole('button', { name: '保存', exact: true }).click()
|
|
|
+ await types.waitFor({ state: 'detached' })
|
|
|
+ expect(await readFile(join(scaffold.harnessHome, 'settings.yaml'), 'utf8')).toBe(before)
|
|
|
|
|
|
- await edit.click()
|
|
|
- await dialog.getByText('自定义设置').click()
|
|
|
- await dialog.getByRole('button', { name: '模型选项 1' }).click()
|
|
|
- await expect.poll(() => image.isEnabled()).toBe(true)
|
|
|
- await image.uncheck()
|
|
|
- await dialog.getByRole('button', { name: '保存', exact: true }).click()
|
|
|
- await types.waitFor({ state: 'detached' })
|
|
|
- await expect(scaffold.ctx.llm.resolveModelInfo('openai', 'gpt-6-astra')).resolves.toMatchObject({ inputModalities: ['text'] })
|
|
|
- await edit.click()
|
|
|
- await dialog.getByText('自定义设置').click()
|
|
|
- await dialog.getByRole('button', { name: '模型选项 1' }).click()
|
|
|
- await expect.poll(() => image.isEnabled()).toBe(true)
|
|
|
- expect(await image.isChecked()).toBe(false)
|
|
|
+ await edit.click()
|
|
|
+ await dialog.getByText('自定义设置').click()
|
|
|
+ await dialog.getByRole('button', { name: '模型选项 1' }).click()
|
|
|
+ await expect.poll(() => image.isEnabled()).toBe(true)
|
|
|
+ await image.uncheck()
|
|
|
+ await dialog.getByRole('button', { name: '保存', exact: true }).click()
|
|
|
+ await types.waitFor({ state: 'detached' })
|
|
|
+ await expect(scaffold.ctx.llm.resolveModelInfo('openai', 'gpt-6-astra')).resolves.toMatchObject({ inputModalities: ['text'] })
|
|
|
+ await edit.click()
|
|
|
+ await dialog.getByText('自定义设置').click()
|
|
|
+ await dialog.getByRole('button', { name: '模型选项 1' }).click()
|
|
|
+ await expect.poll(() => image.isEnabled()).toBe(true)
|
|
|
+ expect(await image.isChecked()).toBe(false)
|
|
|
|
|
|
- await dialog.getByRole('button', { name: '删除模型 1' }).click()
|
|
|
- await dialog.getByRole('button', { name: '获取可用模型' }).click()
|
|
|
- const picker = page.getByRole('dialog', { name: '选择要添加的模型' })
|
|
|
- await picker.getByRole('button', { name: '取消全选' }).click()
|
|
|
- await picker.getByRole('searchbox', { name: '搜索模型' }).fill('gpt-6-astra')
|
|
|
- await picker.getByRole('checkbox', { name: 'gpt-6-astra', exact: true }).check()
|
|
|
- await picker.getByRole('button', { name: '添加所选' }).click()
|
|
|
- await dialog.getByRole('button', { name: '模型选项 1' }).click()
|
|
|
- expect(await image.isChecked()).toBe(true)
|
|
|
- await dialog.getByRole('button', { name: '保存', exact: true }).click()
|
|
|
- await types.waitFor({ state: 'detached' })
|
|
|
- await expect(scaffold.ctx.llm.resolveModelInfo('openai', 'gpt-6-astra')).resolves.toMatchObject({ inputModalities: ['text', 'image'] })
|
|
|
- await scaffold.ctx.settings.mutate('llm-pi-ai', [{ op: 'unset', path: ['providers', 'openai'] }])
|
|
|
- await edit.waitFor({ state: 'detached' })
|
|
|
+ await dialog.getByRole('button', { name: '删除模型 1' }).click()
|
|
|
+ await dialog.getByRole('button', { name: '获取可用模型' }).click()
|
|
|
+ const picker = page.getByRole('dialog', { name: '选择要添加的模型' })
|
|
|
+ await picker.getByRole('button', { name: '取消全选' }).click()
|
|
|
+ await picker.getByRole('searchbox', { name: '搜索模型' }).fill('gpt-6-astra')
|
|
|
+ await picker.getByRole('checkbox', { name: 'gpt-6-astra', exact: true }).check()
|
|
|
+ await picker.getByRole('button', { name: '添加所选' }).click()
|
|
|
+ await dialog.getByRole('button', { name: '模型选项 1' }).click()
|
|
|
+ expect(await image.isChecked()).toBe(true)
|
|
|
+ await dialog.getByRole('button', { name: '保存', exact: true }).click()
|
|
|
+ await types.waitFor({ state: 'detached' })
|
|
|
+ await expect(scaffold.ctx.llm.resolveModelInfo('openai', 'gpt-6-astra')).resolves.toMatchObject({ inputModalities: ['text', 'image'] })
|
|
|
+ } finally {
|
|
|
+ await scaffold.ctx.settings.mutate('llm-pi-ai', [{ op: 'unset', path: ['providers', 'openai'] }])
|
|
|
+ await edit.waitFor({ state: 'detached' })
|
|
|
+ await page.getByRole('dialog', { name: '选择要添加的模型' }).waitFor({ state: 'detached' })
|
|
|
+ }
|
|
|
expect(tripwire.pageErrors).toEqual([])
|
|
|
}, 60_000)
|
|
|
|
|
|
it('confirms an identified provider deletion before removing its profile and key', async () => {
|
|
|
onTestFailed(() => saveFailureShot(page, 'web-e2e-models-delete'))
|
|
|
+ expect(await readFile(join(scaffold.harnessHome, 'settings.yaml'), 'utf8')).not.toContain('openai:')
|
|
|
const settingsDialog = page.getByRole('dialog', { name: '设置' })
|
|
|
await settingsDialog.getByRole('button', { name: '删除 minimax-cn', exact: true }).click()
|
|
|
const deleteDialog = page.getByRole('dialog', { name: '删除 minimax-cn?' })
|