test(web): align full-access scenario anchors with locale rollout
This commit is contained in:
@@ -11,7 +11,24 @@ import {
|
|||||||
assertFixtureInventory, captureStableAria, compareOrRefreshGolden,
|
assertFixtureInventory, captureStableAria, compareOrRefreshGolden,
|
||||||
launchWebScaffold, watchConsole, webSnapshotMode, type WebScaffold,
|
launchWebScaffold, watchConsole, webSnapshotMode, type WebScaffold,
|
||||||
} from './scaffold.ts'
|
} from './scaffold.ts'
|
||||||
import { connectFreshWorkspace, saveFailureShot } from './support.ts'
|
import { saveFailureShot } from './support.ts'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connectFreshWorkspace twin over the product default Chinese locale (the
|
||||||
|
* shared helper's anchors assume the English page every other scenario
|
||||||
|
* boots; this scenario deliberately keeps zh, so the localized picker
|
||||||
|
* copy is the anchor set).
|
||||||
|
*/
|
||||||
|
async function connectFreshWorkspaceZh(page: Page, name = 'workspace'): Promise<void> {
|
||||||
|
await page.getByRole('button', { name: '选择工作区' }).click()
|
||||||
|
await page.getByRole('menuitem', { name: '新建工作区' }).click()
|
||||||
|
const dialog = page.getByRole('dialog', { name: '新建工作区' })
|
||||||
|
await dialog.waitFor({ timeout: 10_000 })
|
||||||
|
await dialog.getByLabel('新工作区名称').fill(name)
|
||||||
|
await dialog.getByRole('button', { name: '创建工作区' }).click()
|
||||||
|
await page.locator('textarea:enabled[placeholder="描述你想要构建的内容"]')
|
||||||
|
.waitFor({ timeout: 15_000 })
|
||||||
|
}
|
||||||
|
|
||||||
const SNAPSHOT_DIR = fileURLToPath(new URL('./snapshots/access-confirmation', import.meta.url))
|
const SNAPSHOT_DIR = fileURLToPath(new URL('./snapshots/access-confirmation', import.meta.url))
|
||||||
const UI_EXPECTED = join(SNAPSHOT_DIR, 'ui.expected.md')
|
const UI_EXPECTED = join(SNAPSHOT_DIR, 'ui.expected.md')
|
||||||
@@ -36,7 +53,7 @@ describe('web e2e: Full access confirmation', () => {
|
|||||||
tripwire = watchConsole(page)
|
tripwire = watchConsole(page)
|
||||||
await page.goto(scaffold.baseUrl, { waitUntil: 'load' })
|
await page.goto(scaffold.baseUrl, { waitUntil: 'load' })
|
||||||
await page.waitForSelector('[class*="frame"]', { timeout: 30_000 })
|
await page.waitForSelector('[class*="frame"]', { timeout: 30_000 })
|
||||||
await connectFreshWorkspace(page)
|
await connectFreshWorkspaceZh(page)
|
||||||
}, 120_000)
|
}, 120_000)
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
@@ -46,7 +63,7 @@ describe('web e2e: Full access confirmation', () => {
|
|||||||
|
|
||||||
it('requires acknowledgement before the composer picker can enable Full access', async () => {
|
it('requires acknowledgement before the composer picker can enable Full access', async () => {
|
||||||
onTestFailed(() => saveFailureShot(page, 'web-e2e-full-access-confirmation'))
|
onTestFailed(() => saveFailureShot(page, 'web-e2e-full-access-confirmation'))
|
||||||
const access = page.locator('button[aria-label^="Access mode"]').first()
|
const access = page.locator('button[aria-label^="访问模式"]').first()
|
||||||
await access.waitFor({ timeout: 10_000 })
|
await access.waitFor({ timeout: 10_000 })
|
||||||
|
|
||||||
// Normalize the starting preset through the real command path. The
|
// Normalize the starting preset through the real command path. The
|
||||||
@@ -55,7 +72,7 @@ describe('web e2e: Full access confirmation', () => {
|
|||||||
await access.click()
|
await access.click()
|
||||||
await page.getByRole('menuitem', { name: 'Workspace Write' }).click()
|
await page.getByRole('menuitem', { name: 'Workspace Write' }).click()
|
||||||
await expect.poll(() => access.getAttribute('aria-label'), { timeout: 10_000 })
|
await expect.poll(() => access.getAttribute('aria-label'), { timeout: 10_000 })
|
||||||
.toBe('Access mode, current: Workspace Write')
|
.toBe('访问模式,当前:Workspace Write')
|
||||||
}
|
}
|
||||||
|
|
||||||
await access.click()
|
await access.click()
|
||||||
@@ -75,7 +92,7 @@ describe('web e2e: Full access confirmation', () => {
|
|||||||
expect(await enable.isEnabled()).toBe(true)
|
expect(await enable.isEnabled()).toBe(true)
|
||||||
await enable.click()
|
await enable.click()
|
||||||
await expect.poll(() => access.getAttribute('aria-label'), { timeout: 10_000 })
|
await expect.poll(() => access.getAttribute('aria-label'), { timeout: 10_000 })
|
||||||
.toBe('Access mode, current: Full access')
|
.toBe('访问模式,当前:Full access')
|
||||||
expect(await dialog.count()).toBe(0)
|
expect(await dialog.count()).toBe(0)
|
||||||
expect(tripwire.pageErrors).toEqual([])
|
expect(tripwire.pageErrors).toEqual([])
|
||||||
}, 60_000)
|
}, 60_000)
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ describe('web e2e: seeded history renders through cold resume', () => {
|
|||||||
// where neither half repeats the other (the dispatched `/` and its
|
// where neither half repeats the other (the dispatched `/` and its
|
||||||
// argument stay out of the title, and the settlement text never restates
|
// argument stay out of the title, and the settlement text never restates
|
||||||
// the command's own name).
|
// the command's own name).
|
||||||
await page.getByRole('button', { name: 'Access mode, current: Danger Full Access' }).click()
|
await page.getByRole('button', { name: 'Access mode, current: Full access' }).click()
|
||||||
await page.getByRole('menuitem', { name: 'Workspace Write' }).click()
|
await page.getByRole('menuitem', { name: 'Workspace Write' }).click()
|
||||||
await page.getByRole('button', { name: 'Access mode, current: Workspace Write' }).waitFor({ timeout: 10_000 })
|
await page.getByRole('button', { name: 'Access mode, current: Workspace Write' }).waitFor({ timeout: 10_000 })
|
||||||
// Scoped to the row itself, so unrelated page text that happens to read
|
// Scoped to the row itself, so unrelated page text that happens to read
|
||||||
|
|||||||
Reference in New Issue
Block a user