Files
resolutionflow/frontend/e2e/fallback-branches.spec.ts
chihlasm 8eea2348b0 fix: resolve all Playwright test failures — 16/16 passing
- Fix procedural session tests: sessions auto-start, no Start button
- Fix strict mode violations: use getByRole('heading') for step titles
- Fix FlowPilot chat: use button role selector for New Chat
- Fix command palette page nav: scope Analytics click to palette modal
- Fix fallback runner: remove non-existent Start button click
- Update playwright.config to port 5433 for local Docker

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 13:34:44 -04:00

90 lines
3.2 KiB
TypeScript

import { expect, test } from '@playwright/test'
import {
createAuthenticatedApiContext,
createProceduralTree,
createProceduralTreeWithFallbacks,
disposeApiContext,
uniqueName,
} from './helpers/api'
test.describe('fallback branches smoke tests', () => {
test('can add and remove fallback steps in the procedural editor', async ({ page }) => {
const api = await createAuthenticatedApiContext()
const tree = await createProceduralTree(api, {
name: uniqueName('PW Editor Fallback Flow'),
})
try {
// Navigate to the procedural editor
await page.goto(`/flows/${tree.id}/edit`)
// Wait for editor to load
await expect(page.getByText('Verify the server is reachable')).toBeVisible({ timeout: 10000 })
// Click on the first step to expand it
await page.getByText('Verify the server is reachable').click()
// Look for fallback branches section
const fallbackToggle = page.getByText(/Fallback branches/)
await expect(fallbackToggle).toBeVisible()
// Expand fallback section
await fallbackToggle.click()
// Add a fallback step
await page.getByText('Add fallback step').click()
// Should show a new fallback step input
const fallbackInput = page.getByPlaceholder('Fallback step title')
await expect(fallbackInput).toBeVisible()
await fallbackInput.fill('Try alternative ping method')
// Fill description
const descInput = page.getByPlaceholder('Describe this alternative approach...')
await expect(descInput).toBeVisible()
await descInput.fill('Use traceroute if ping fails')
// Fallback count should update
await expect(page.getByText(/Fallback branches \(1\)/)).toBeVisible()
} finally {
await disposeApiContext(api)
}
})
test('shows fallback steps during procedural session execution', async ({ page }) => {
const api = await createAuthenticatedApiContext()
const tree = await createProceduralTreeWithFallbacks(api, {
name: uniqueName('PW Runner Fallback Flow'),
})
try {
// Navigate to the procedural flow — session auto-starts, no Start button
await page.goto(`/flows/${tree.id}/navigate`)
// Should see the first step immediately (auto-started)
await expect(page.getByRole('heading', { name: 'Clear the DNS cache' })).toBeVisible({ timeout: 15000 })
// Should see "Didn't work?" toggle since step has fallback_steps
const didntWorkToggle = page.getByText("Didn't work?")
await expect(didntWorkToggle).toBeVisible()
// Expand fallback section
await didntWorkToggle.click()
// Should see fallback step options
await expect(page.getByText('Restart DNS Client service')).toBeVisible()
await expect(page.getByText('Check DNS server configuration')).toBeVisible()
// Mark a fallback as resolved
const thisWorked = page.getByRole('button', { name: 'This worked' }).first()
await expect(thisWorked).toBeVisible()
await thisWorked.click()
// Fallback step should show completed styling
await expect(page.locator('[class*="border-emerald"]').first()).toBeVisible()
} finally {
await disposeApiContext(api)
}
})
})