test: complete P4.1 LM Studio coverage and fix auto/wizard handoff
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -20,6 +20,53 @@ async function skipOnboarding(page: Page): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
async function ensureChapterEditor(page: Page): Promise<void> {
|
||||
await page.getByRole('button', { name: '+ 新章' }).click()
|
||||
await expect(page.locator('.ProseMirror')).toBeVisible({ timeout: 10_000 })
|
||||
}
|
||||
|
||||
async function openBookWithContent(page: Page): Promise<void> {
|
||||
await page.getByRole('button', { name: /新建书籍/ }).first().click()
|
||||
await page.locator('.dialog-content input').first().fill('自动测试书')
|
||||
await page.getByRole('button', { name: '创建' }).click()
|
||||
await expect(page.locator('#editor-layout')).toBeVisible({ timeout: 15_000 })
|
||||
await ensureChapterEditor(page)
|
||||
const editor = page.locator('.ProseMirror')
|
||||
await editor.click()
|
||||
await editor.pressSequentially('林远站在演武场中央,众人目光汇聚。')
|
||||
await page.keyboard.press('Control+s')
|
||||
await expect(page.getByText('已保存')).toBeVisible({ timeout: 15_000 })
|
||||
}
|
||||
|
||||
async function openAutoPanel(page: Page): Promise<void> {
|
||||
await page.getByTestId('panel-tab-ai').click()
|
||||
await page.getByTestId('ai-session-new').click()
|
||||
await expect(page.getByTestId('ai-mode-tab-auto')).toBeEnabled({ timeout: 10_000 })
|
||||
await page.getByTestId('ai-mode-tab-auto').click()
|
||||
await expect(page.getByTestId('auto-panel')).toBeVisible({ timeout: 10_000 })
|
||||
}
|
||||
|
||||
async function planAutoScenes(page: Page): Promise<void> {
|
||||
await page.getByTestId('auto-goal-input').fill('林远通过入门考核,展现天赋震惊众人')
|
||||
await page.getByTestId('auto-plan-scenes').click()
|
||||
await expect(page.getByTestId('auto-start-generate')).toBeVisible({ timeout: 240_000 })
|
||||
}
|
||||
|
||||
async function generateOneAutoScene(page: Page): Promise<void> {
|
||||
await page.getByTestId('auto-start-generate').click()
|
||||
const naming0 = page.getByTestId('naming-option-0')
|
||||
const finishBtn = page.getByTestId('auto-finish-chapter')
|
||||
await expect(naming0.or(finishBtn).or(page.getByTestId('auto-start-generate'))).toBeVisible({
|
||||
timeout: 240_000
|
||||
})
|
||||
if (await naming0.isVisible()) {
|
||||
await naming0.click()
|
||||
await expect(finishBtn.or(page.getByTestId('auto-start-generate'))).toBeVisible({
|
||||
timeout: 240_000
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
test.describe('Auto writing', () => {
|
||||
let userDataDir: string
|
||||
|
||||
@@ -49,4 +96,41 @@ test.describe('Auto writing', () => {
|
||||
await expect(page.getByTestId('ai-mode-tab-auto')).toBeDisabled({ timeout: 10_000 })
|
||||
await app.close()
|
||||
})
|
||||
|
||||
test('E2E-AUTO-01: auto flow creates chapter', async () => {
|
||||
test.setTimeout(300_000)
|
||||
const app = await launchApp(userDataDir)
|
||||
const page = await app.firstWindow()
|
||||
await skipOnboarding(page)
|
||||
await openBookWithContent(page)
|
||||
await openAutoPanel(page)
|
||||
await planAutoScenes(page)
|
||||
await generateOneAutoScene(page)
|
||||
await expect(page.getByTestId('auto-finish-chapter')).toBeVisible({ timeout: 30_000 })
|
||||
await page.getByTestId('auto-finish-chapter').click()
|
||||
await expect(page.locator('.ProseMirror')).not.toBeEmpty({ timeout: 30_000 })
|
||||
await app.close()
|
||||
})
|
||||
|
||||
test('E2E-AUTO-02: pause and handoff to interactive', async () => {
|
||||
test.setTimeout(300_000)
|
||||
const app = await launchApp(userDataDir)
|
||||
const page = await app.firstWindow()
|
||||
await skipOnboarding(page)
|
||||
await openBookWithContent(page)
|
||||
await openAutoPanel(page)
|
||||
await planAutoScenes(page)
|
||||
await page.getByTestId('auto-start-generate').click()
|
||||
await expect(page.getByTestId('auto-pause')).toBeEnabled({ timeout: 15_000 })
|
||||
await page.waitForTimeout(2_000)
|
||||
await page.getByTestId('auto-pause').click()
|
||||
await expect(page.getByTestId('auto-handoff-interactive')).toBeVisible({ timeout: 10_000 })
|
||||
await page.getByTestId('auto-handoff-interactive').click()
|
||||
await expect(page.getByTestId('interactive-panel')).toBeVisible({ timeout: 15_000 })
|
||||
const acceptBtn = page.getByTestId('interactive-accept-scene')
|
||||
const plotA = page.getByTestId('plot-option-A')
|
||||
const startBtn = page.getByTestId('interactive-start')
|
||||
await expect(acceptBtn.or(plotA).or(startBtn)).toBeVisible({ timeout: 120_000 })
|
||||
await app.close()
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user