Skip to content

Commit 192de5e

Browse files
authored
fix(e2e): update breadcrumb navigation assertions in E2E tests (#1295)
* test(e2e): update breadcrumb navigation assertions in E2E tests - accounts: update 'Back to Accounts' link assertion to 'Accounts' - admin-config: update 'Back to Tenants' link assertion to 'Tenants' - positions: scope 'Positions' link lookup to breadcrumb nav to avoid strict mode violation with sidebar navigation link * test(e2e): scope accounts breadcrumb link to avoid strict mode violation The 'Accounts' link appears in both sidebar navigation and breadcrumb, causing a strict mode violation. Scope the locator to the breadcrumb nav element using getByLabel('Breadcrumb'). * test(e2e): scope parties breadcrumb link assertions to avoid strict mode The 'Parties' link appears in both sidebar navigation and breadcrumb on party detail pages, causing strict mode violations. Scope all breadcrumb link assertions to the breadcrumb nav element using getByLabel('Breadcrumb'). * test(e2e): scope payments breadcrumb link to avoid strict mode violation The 'Payments' link appears in both sidebar navigation and breadcrumb on payment detail error pages. Scope the locator to the breadcrumb nav element using getByLabel('Breadcrumb'). --------- Co-authored-by: Ben Coombs <bjcoombs@users.noreply.github.com>
1 parent 97e7faa commit 192de5e

5 files changed

Lines changed: 17 additions & 20 deletions

File tree

frontend/e2e/accounts.spec.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,9 @@ test.describe('Account detail page', () => {
110110
authenticatedPage,
111111
}) => {
112112
await navigateTo(authenticatedPage, '/accounts/non-existent-account-id')
113-
await expect(authenticatedPage.getByRole('link', { name: 'Back to Accounts' })).toBeVisible({
114-
timeout: 10_000,
115-
})
116-
await authenticatedPage.getByRole('link', { name: 'Back to Accounts' }).click()
113+
const breadcrumbLink = authenticatedPage.getByLabel('Breadcrumb').getByRole('link', { name: 'Accounts' })
114+
await expect(breadcrumbLink).toBeVisible({ timeout: 10_000 })
115+
await breadcrumbLink.click()
117116
await expect(authenticatedPage.getByRole('heading', { name: 'Accounts' })).toBeVisible()
118117
})
119118
})

frontend/e2e/admin-config.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ test.describe('Tenant detail page', () => {
370370
test('shows Back to Tenants link', async ({ platformAdminPage: page }) => {
371371
await navigateTo(page, '/tenants/acme_corp')
372372

373-
await expect(page.getByRole('link', { name: 'Back to Tenants' })).toBeVisible({ timeout: 15_000 })
373+
await expect(page.getByRole('link', { name: 'Tenants' })).toBeVisible({ timeout: 15_000 })
374374
})
375375

376376
test('shows Provisioning Status card', async ({ platformAdminPage: page }) => {

frontend/e2e/payments.spec.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,9 @@ test.describe('Payment detail page', () => {
8080

8181
test('back link on error page navigates to Payments list', async ({ authenticatedPage }) => {
8282
await navigateTo(authenticatedPage, '/payments/non-existent-payment-id')
83-
await expect(
84-
authenticatedPage.getByRole('link', { name: 'Payments' }),
85-
).toBeVisible({ timeout: 10_000 })
86-
await authenticatedPage.getByRole('link', { name: 'Payments' }).click()
83+
const breadcrumbLink = authenticatedPage.getByLabel('Breadcrumb').getByRole('link', { name: 'Payments' })
84+
await expect(breadcrumbLink).toBeVisible({ timeout: 10_000 })
85+
await breadcrumbLink.click()
8786
await expect(authenticatedPage.getByRole('heading', { name: 'Payments' })).toBeVisible()
8887
})
8988
})

frontend/e2e/positions.spec.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,15 @@ test.describe('Position detail page', () => {
6363
test('renders breadcrumb back link on position detail page', async ({ authenticatedPage }) => {
6464
await navigateTo(authenticatedPage, '/positions/non-existent-log-id')
6565
await expect(
66-
authenticatedPage.getByRole('link', { name: 'Positions' }),
66+
authenticatedPage.getByLabel('Breadcrumb').getByRole('link', { name: 'Positions' }),
6767
).toBeVisible({ timeout: 10_000 })
6868
})
6969

7070
test('breadcrumb back link navigates to positions list', async ({ authenticatedPage }) => {
7171
await navigateTo(authenticatedPage, '/positions/non-existent-log-id')
72-
await expect(
73-
authenticatedPage.getByRole('link', { name: 'Positions' }),
74-
).toBeVisible({ timeout: 10_000 })
75-
await authenticatedPage.getByRole('link', { name: 'Positions' }).click()
72+
const breadcrumbLink = authenticatedPage.getByLabel('Breadcrumb').getByRole('link', { name: 'Positions' })
73+
await expect(breadcrumbLink).toBeVisible({ timeout: 10_000 })
74+
await breadcrumbLink.click()
7675
await expect(authenticatedPage.getByRole('heading', { name: 'Positions' })).toBeVisible()
7776
})
7877
})

frontend/e2e/specs/parties.spec.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ test.describe('Party detail navigation', () => {
7474
await expect(firstRow).toBeVisible()
7575
await firstRow.click()
7676
await expect(page).toHaveURL(/\/parties\/[a-zA-Z0-9-]+/)
77-
await expect(page.getByRole('link', { name: 'Parties' })).toBeVisible()
77+
await expect(page.getByLabel('Breadcrumb').getByRole('link', { name: 'Parties' })).toBeVisible()
7878
})
7979

8080
test('shows Party ID not found for missing partyId param', async ({ authenticatedPage: page }) => {
@@ -83,7 +83,7 @@ test.describe('Party detail navigation', () => {
8383
// Page should render — it will show either the party data or an error state
8484
// (the component renders even without backend data)
8585
await expect(
86-
page.getByRole('link', { name: 'Parties' }).or(
86+
page.getByLabel('Breadcrumb').getByRole('link', { name: 'Parties' }).or(
8787
page.getByText('Party not found')
8888
)
8989
).toBeVisible()
@@ -100,7 +100,7 @@ test.describe('Party detail — 8-tab layout', () => {
100100
} else {
101101
await page.locator('table tbody tr').first().click()
102102
}
103-
await expect(page.getByRole('link', { name: 'Parties' })).toBeVisible()
103+
await expect(page.getByLabel('Breadcrumb').getByRole('link', { name: 'Parties' })).toBeVisible()
104104
})
105105

106106
test('renders all 8 tab triggers', async ({ authenticatedPage: page }) => {
@@ -141,7 +141,7 @@ test.describe('Party header component', () => {
141141
return
142142
}
143143
await page.locator('table tbody tr').first().click()
144-
await expect(page.getByRole('link', { name: 'Parties' })).toBeVisible()
144+
await expect(page.getByLabel('Breadcrumb').getByRole('link', { name: 'Parties' })).toBeVisible()
145145
})
146146

147147
test('renders party header section', async ({ authenticatedPage: page }) => {
@@ -169,7 +169,7 @@ test.describe('Tab switching', () => {
169169
} else {
170170
await page.locator('table tbody tr').first().click()
171171
}
172-
await expect(page.getByRole('link', { name: 'Parties' })).toBeVisible()
172+
await expect(page.getByLabel('Breadcrumb').getByRole('link', { name: 'Parties' })).toBeVisible()
173173
})
174174

175175
test('Overview tab renders without error', async ({ authenticatedPage: page }) => {
@@ -244,7 +244,7 @@ test.describe('Tab keyboard navigation', () => {
244244
} else {
245245
await page.locator('table tbody tr').first().click()
246246
}
247-
await expect(page.getByRole('link', { name: 'Parties' })).toBeVisible()
247+
await expect(page.getByLabel('Breadcrumb').getByRole('link', { name: 'Parties' })).toBeVisible()
248248
})
249249

250250
test('ArrowRight moves focus to next tab', async ({ authenticatedPage: page }) => {

0 commit comments

Comments
 (0)