Skip to content

Commit f4f3b35

Browse files
test: reduce flake.
1 parent c6d8f88 commit f4f3b35

2 files changed

Lines changed: 62 additions & 23 deletions

File tree

playwright/github-pr-drawer/active-context-sync.spec.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
getWorkspaceTabsRecord,
1111
mockRepositoryBranches,
1212
openMostRecentStoredWorkspaceContext,
13+
openStoredWorkspaceContextByHead,
1314
renameWorkspaceTab,
1415
seedActivePrWorkspaceContext,
1516
seedLocalWorkspaceContexts,
@@ -1304,7 +1305,6 @@ test('Active PR context push commit uses Git Database API atomic path by default
13041305
await connectByotWithSingleRepo(page)
13051306
await openMostRecentStoredWorkspaceContext(page)
13061307
await ensureOpenPrDrawerOpen(page)
1307-
13081308
await setComponentEditorSource(page, 'const commitMarker = 2')
13091309
await setStylesEditorSource(page, '.commit-marker { color: blue; }')
13101310
const pushCommitMessage = 'chore: push active context sync (atomic)'
@@ -1563,8 +1563,11 @@ test('Open PR uses module tab paths when stale target file paths collide', async
15631563
},
15641564
])
15651565

1566-
await connectByotWithSingleRepo(page)
1567-
await openMostRecentStoredWorkspaceContext(page)
1566+
await connectByotWithSingleRepo(page, {
1567+
autoOpenWorkspace: false,
1568+
assertPrRepositorySelected: false,
1569+
})
1570+
await openStoredWorkspaceContextByHead(page, 'develop/open-pr-stale-target-paths')
15681571
await ensureOpenPrDrawerOpen(page)
15691572

15701573
const commitMessage = 'chore: open pr with stale module target path metadata'

playwright/helpers/app-test-helpers.ts

Lines changed: 56 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { expect } from '@playwright/test'
22
import type { Page } from '@playwright/test'
33

44
const webServerMode = process.env.PLAYWRIGHT_WEB_SERVER_MODE ?? 'dev'
5+
const pagesWithStubbedExternalFonts = new WeakSet<Page>()
56

67
export const appEntryPath =
78
webServerMode === 'preview' ? '/index.html' : '/src/index.html'
@@ -71,7 +72,34 @@ const navigateToApp = async (page: Page, path: string) => {
7172
}
7273
}
7374

75+
const stubExternalFontRequests = async (page: Page) => {
76+
if (pagesWithStubbedExternalFonts.has(page)) {
77+
return
78+
}
79+
80+
pagesWithStubbedExternalFonts.add(page)
81+
82+
await page.route('https://fonts.googleapis.com/**', async route => {
83+
await route.fulfill({
84+
status: 200,
85+
contentType: 'text/css; charset=utf-8',
86+
body: '',
87+
headers: {
88+
'cache-control': 'public, max-age=31536000, immutable',
89+
},
90+
})
91+
})
92+
93+
await page.route('https://fonts.gstatic.com/**', async route => {
94+
await route.fulfill({
95+
status: 204,
96+
body: '',
97+
})
98+
})
99+
}
100+
74101
export const waitForAppReady = async (page: Page, path = appEntryPath) => {
102+
await stubExternalFontRequests(page)
75103
await navigateToApp(page, path)
76104
await expect(page.getByRole('heading', { name: '@knighted/develop' })).toBeVisible()
77105
await expect
@@ -483,8 +511,12 @@ export const connectByotWithSingleRepo = async (
483511
page: Page,
484512
{
485513
branchesByRepo,
514+
autoOpenWorkspace = true,
515+
assertPrRepositorySelected = true,
486516
}: {
487517
branchesByRepo?: BranchesByRepo
518+
autoOpenWorkspace?: boolean
519+
assertPrRepositorySelected?: boolean
488520
} = {},
489521
) => {
490522
await page.route('https://api.github.com/user/repos**', async route => {
@@ -525,33 +557,37 @@ export const connectByotWithSingleRepo = async (
525557
await workspacesRepositoryFilter.selectOption('knightedcodemonkey/develop')
526558
await expect(workspacesRepositoryFilter).toHaveValue('knightedcodemonkey/develop')
527559

528-
const initializeButton = page.getByRole('button', {
529-
name: 'Initialize',
530-
exact: true,
531-
})
560+
if (autoOpenWorkspace) {
561+
const initializeButton = page.getByRole('button', {
562+
name: 'Initialize',
563+
exact: true,
564+
})
532565

533-
if (await initializeButton.isVisible()) {
534-
await initializeButton.click()
535-
} else {
536-
const storedWorkspace = page.getByLabel('Stored workspace')
537-
if (await storedWorkspace.isVisible()) {
538-
const workspaceValue = await storedWorkspace
539-
.locator('option:not([value=""])')
540-
.first()
541-
.getAttribute('value')
542-
543-
if (workspaceValue) {
544-
await storedWorkspace.selectOption(workspaceValue)
545-
await page.getByRole('button', { name: 'Open', exact: true }).click()
566+
if (await initializeButton.isVisible()) {
567+
await initializeButton.click()
568+
} else {
569+
const storedWorkspace = page.getByLabel('Stored workspace')
570+
if (await storedWorkspace.isVisible()) {
571+
const workspaceValue = await storedWorkspace
572+
.locator('option:not([value=""])')
573+
.first()
574+
.getAttribute('value')
575+
576+
if (workspaceValue) {
577+
await storedWorkspace.selectOption(workspaceValue)
578+
await page.getByRole('button', { name: 'Open', exact: true }).click()
579+
}
546580
}
547581
}
548582
}
549583

550584
await ensureWorkspacesDrawerClosed(page)
551585

552-
const repoSelect = page.getByLabel('Pull request repository')
553-
await expect(repoSelect).toHaveValue('knightedcodemonkey/develop')
554-
await expect(repoSelect).toBeDisabled()
586+
if (assertPrRepositorySelected) {
587+
const repoSelect = page.getByLabel('Pull request repository')
588+
await expect(repoSelect).toHaveValue('knightedcodemonkey/develop')
589+
await expect(repoSelect).toBeDisabled()
590+
}
555591

556592
await expect(
557593
page.getByRole('button', {

0 commit comments

Comments
 (0)