feat: 完善图像工作区与创作工具体验
This commit is contained in:
@@ -2,6 +2,7 @@ import { closeElectronApp, expect, getStableWindow, test } from './fixtures/elec
|
||||
|
||||
test.describe('AI Design workspace', () => {
|
||||
test('keeps the conversation and generation task panes full height', async ({ launchElectronApp }) => {
|
||||
test.setTimeout(150_000);
|
||||
const app = await launchElectronApp({
|
||||
imageWorkspaceMode: 'local',
|
||||
skipSetup: true,
|
||||
@@ -12,6 +13,10 @@ test.describe('AI Design workspace', () => {
|
||||
await expect(page.getByTestId('ai-module-selection-page')).toBeVisible();
|
||||
await page.getByTestId('ai-module-option-painting').click();
|
||||
|
||||
const imageSidebar = page.getByTestId('sidebar-image-workspace');
|
||||
await expect(imageSidebar.getByTestId('sidebar-open-image-prompt-museum')).toBeVisible();
|
||||
await expect(imageSidebar.getByTestId('sidebar-create-image-project')).toBeVisible();
|
||||
|
||||
await page.getByTestId('sidebar-create-image-project').click();
|
||||
await page.getByLabel('项目名称').fill('多会话验收项目');
|
||||
await page.getByRole('button', { name: '创建项目' }).click();
|
||||
@@ -81,11 +86,17 @@ test.describe('AI Design workspace', () => {
|
||||
await expect(page.getByText('设计 Agent', { exact: true })).toHaveCount(0);
|
||||
await expect(page.getByText('你', { exact: true })).toHaveCount(0);
|
||||
await expect(page.getByTestId('image-workspace-message').first()).toHaveClass(/w-full/);
|
||||
const firstQuote = page.locator('[data-testid^="design-quote-"]').first();
|
||||
await expect(firstQuote.getByRole('button', { name: '继续调整' })).toBeVisible();
|
||||
await expect(firstQuote).not.toContainText('提示词模式');
|
||||
await page.getByRole('button', { name: '确认并开始生成' }).click();
|
||||
await expect(page.getByRole('button', { name: '确认生成' })).toHaveCount(0);
|
||||
await expect(page.getByRole('button', { name: '继续调整' })).toHaveCount(0);
|
||||
|
||||
const task = page.locator('[data-testid^="design-task-"]').first();
|
||||
const task = page
|
||||
.locator('[data-testid^="design-task-local-task-"]')
|
||||
.filter({ hasText: firstPrompt })
|
||||
.first();
|
||||
await expect(task).toContainText(firstPrompt);
|
||||
await expect(task).toContainText(firstPrompt);
|
||||
const firstConversation = page.locator('[data-testid^="sidebar-image-conversation-"]').first();
|
||||
@@ -98,17 +109,65 @@ test.describe('AI Design workspace', () => {
|
||||
.getAttribute('data-testid');
|
||||
expect(firstConversationTestId).toBeTruthy();
|
||||
|
||||
await projectCard.hover();
|
||||
await page.getByRole('button', { name: '新建设计会话' }).click();
|
||||
await expect(page.locator('[data-testid^="sidebar-image-conversation-"]')).toHaveCount(2);
|
||||
|
||||
const secondPrompt = '这一条会话只讨论红色角色立绘';
|
||||
const secondPrompt = '这一条会话只讨论红色角色动态视频';
|
||||
await page.getByLabel('设计需求').fill(secondPrompt);
|
||||
await page.getByRole('button', { name: '发送给设计 Agent' }).click();
|
||||
await expect(page.getByTestId('image-workspace-conversation')).toContainText(secondPrompt);
|
||||
await expect(page.getByTestId('design-quote-final-prompt')).toHaveValue(secondPrompt);
|
||||
await page.getByTestId('design-quote-final-prompt').fill('用户编辑后的动态视频完整提示词');
|
||||
await page.getByTestId('design-quote-resolution').selectOption('720P');
|
||||
await page.getByTestId('design-quote-aspect-ratio').selectOption('9:16');
|
||||
await page.getByTestId('design-quote-duration').selectOption('4');
|
||||
await expect(page.getByRole('button', { name: '重新报价中' })).toBeDisabled();
|
||||
await expect(page.getByRole('button', { name: '确认并开始生成' })).toBeEnabled({ timeout: 10_000 });
|
||||
await page.getByRole('button', { name: '确认并开始生成' }).click();
|
||||
await expect(page.getByRole('button', { name: '确认并开始生成' })).toHaveCount(0);
|
||||
|
||||
await page.getByTestId(firstConversationTestId!).click();
|
||||
await expect(page.getByTestId('image-workspace-conversation')).toContainText(firstPrompt);
|
||||
await expect(page.getByTestId('image-workspace-conversation')).not.toContainText(secondPrompt);
|
||||
|
||||
// The local adapter deterministically advances queued -> running -> succeeded as the
|
||||
// task fallback reconciles. The delete confirmation also explains what happens to
|
||||
// queued and running tasks on the server.
|
||||
await task.getByRole('button', { name: '查看生图任务详情' }).click();
|
||||
const taskDetails = page.getByRole('dialog', { name: '生成内容详情' });
|
||||
await expect(taskDetails).toContainText('已完成', { timeout: 40_000 });
|
||||
await taskDetails.getByRole('button', { name: '关闭生成内容详情' }).click();
|
||||
|
||||
await projectCard.hover();
|
||||
await page.getByRole('button', { name: '删除 多会话验收项目' }).click();
|
||||
const deleteDialog = page.getByRole('dialog', { name: '删除项目' });
|
||||
await expect(deleteDialog).toContainText('未提交的任务会被取消并释放预留积分');
|
||||
await expect(deleteDialog).toContainText('已提交或运行中的任务会继续后台结算');
|
||||
await expect(deleteDialog.getByTestId('confirm-delete-image-project')).toBeDisabled();
|
||||
await expect(projectCard).toBeVisible();
|
||||
|
||||
await deleteDialog.getByTestId('delete-image-project-name-input').fill('多会话验收');
|
||||
await expect(deleteDialog.getByText('项目名称必须完全匹配。')).toBeVisible();
|
||||
await expect(deleteDialog.getByTestId('confirm-delete-image-project')).toBeDisabled();
|
||||
await expect(projectCard).toBeVisible();
|
||||
|
||||
await deleteDialog.getByTestId('delete-image-project-name-input').fill('多会话验收项目');
|
||||
await expect(deleteDialog.getByTestId('confirm-delete-image-project')).toBeEnabled();
|
||||
await deleteDialog.getByTestId('confirm-delete-image-project').click();
|
||||
await expect(deleteDialog).toHaveCount(0);
|
||||
await expect(page.locator('[data-testid^="sidebar-image-project-"]')).toHaveCount(0);
|
||||
await expect(imageSidebar).toContainText('还没有设计项目');
|
||||
await expect(page.getByRole('heading', { name: '创建第一个设计项目' })).toBeVisible();
|
||||
|
||||
await imageSidebar.getByTestId('sidebar-open-image-prompt-museum').click();
|
||||
await expect(page.getByTestId('image-prompt-museum-page')).toBeVisible();
|
||||
await expect(page.getByRole('heading', { name: '获取灵感' })).toBeVisible();
|
||||
await expect(page.getByText('提示词博物馆', { exact: true })).toHaveCount(0);
|
||||
await expect(page.getByTestId('titlebar-page-title')).toHaveText('获取灵感');
|
||||
await expect(page.getByTestId('titlebar-logo')).toHaveCount(1);
|
||||
await expect(page.getByTestId('image-prompt-museum-filters')).toHaveClass(/sticky/);
|
||||
await expect(page.getByTestId('image-prompt-museum-filters')).toHaveClass(/top-0/);
|
||||
} finally {
|
||||
await closeElectronApp(app);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user