fix(e2e): harden card selectors for session resume
Co-Authored-By: Codex <noreply@openai.com>
This commit is contained in:
@@ -34,7 +34,11 @@ test.describe('session history smoke tests', () => {
|
||||
await page.getByPlaceholder('Search by ticket number...').fill(ticketNumber)
|
||||
await page.getByPlaceholder('Search by client name...').fill(clientName)
|
||||
|
||||
const sessionCard = page.locator('.bg-card').filter({ hasText: ticketNumber }).filter({ hasText: clientName }).first()
|
||||
const sessionCard = page
|
||||
.getByTestId('flow-session-card')
|
||||
.filter({ hasText: ticketNumber })
|
||||
.filter({ hasText: clientName })
|
||||
.first()
|
||||
await expect(sessionCard).toBeVisible()
|
||||
await expect(sessionCard.getByText(tree.name)).toBeVisible()
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ test.describe('flow library start-session smoke tests', () => {
|
||||
await page.getByPlaceholder('Search flows...').fill(tree.name)
|
||||
await page.getByRole('button', { name: 'Search', exact: true }).click()
|
||||
|
||||
const treeCard = page.locator('.bg-card').filter({ hasText: tree.name }).first()
|
||||
const treeCard = page.getByTestId('tree-card').filter({ hasText: tree.name }).first()
|
||||
await expect(treeCard).toBeVisible()
|
||||
await treeCard.getByRole('button', { name: /^Start(?: Session)?$/ }).click()
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ test.describe('flow library smoke tests', () => {
|
||||
await page.getByPlaceholder('Search flows...').fill(tree.name)
|
||||
await page.getByRole('button', { name: 'Search', exact: true }).click()
|
||||
|
||||
await expect(page.getByText(tree.name)).toBeVisible()
|
||||
await expect(page.getByTestId('tree-card').filter({ hasText: tree.name }).first()).toBeVisible()
|
||||
} finally {
|
||||
await disposeApiContext(api)
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ test.describe('session resume smoke tests', () => {
|
||||
await page.getByRole('button', { name: 'Flow Sessions' }).click()
|
||||
// Active sub-tab is the default and surfaces in-progress sessions.
|
||||
|
||||
const resumeCard = page.locator('.bg-card').filter({ hasText: tree.name }).first()
|
||||
const resumeCard = page.getByTestId('flow-session-card').filter({ hasText: tree.name }).first()
|
||||
await expect(resumeCard).toBeVisible()
|
||||
await resumeCard.getByRole('button', { name: 'Resume' }).first().click()
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ test.describe('shared session management smoke tests', () => {
|
||||
).toBeVisible()
|
||||
await expect(page.getByText(share.share_name || '')).toBeVisible()
|
||||
|
||||
const shareCard = page.locator('.bg-card').filter({ hasText: share.share_name || '' }).first()
|
||||
const shareCard = page.getByTestId('share-card').filter({ hasText: share.share_name || '' }).first()
|
||||
await shareCard.getByRole('button', { name: 'Revoke' }).click()
|
||||
|
||||
const confirmDialog = page.getByRole('dialog', { name: 'Revoke Share Link' })
|
||||
|
||||
@@ -34,6 +34,8 @@ export function TreeGridView({
|
||||
{trees.map((tree) => (
|
||||
<div
|
||||
key={tree.id}
|
||||
data-testid="tree-card"
|
||||
data-tree-id={tree.id}
|
||||
className="relative bg-card border border-border rounded-2xl p-4 transition-all hover:-translate-y-0.5 hover:border-primary/30 hover:shadow-md sm:p-6"
|
||||
>
|
||||
<div className="mb-2 flex items-start justify-between gap-2">
|
||||
|
||||
@@ -33,6 +33,8 @@ export function TreeListView({
|
||||
{trees.map((tree) => (
|
||||
<div
|
||||
key={tree.id}
|
||||
data-testid="tree-card"
|
||||
data-tree-id={tree.id}
|
||||
className="flex items-center gap-4 bg-card border border-border rounded-2xl p-4 transition-all hover:border-primary/30 hover:shadow-xs"
|
||||
>
|
||||
{/* Left: Name and Description */}
|
||||
|
||||
@@ -161,7 +161,12 @@ export default function MySharesPage() {
|
||||
const isCopied = copiedId === share.id
|
||||
|
||||
return (
|
||||
<div key={share.id} className="bg-card border border-border rounded-xl p-5">
|
||||
<div
|
||||
key={share.id}
|
||||
data-testid="share-card"
|
||||
data-share-id={share.id}
|
||||
className="bg-card border border-border rounded-xl p-5"
|
||||
>
|
||||
{/* Top row: badge + name */}
|
||||
<div className="flex items-center gap-3 mb-3">
|
||||
<span className="inline-flex items-center gap-1.5 text-xs rounded-full px-2 py-0.5 bg-accent text-muted-foreground">
|
||||
|
||||
@@ -533,7 +533,11 @@ export default function SessionHistoryPage() {
|
||||
)}
|
||||
style={{ '--stagger-index': i } as React.CSSProperties}
|
||||
>
|
||||
<div className="bg-card border border-border rounded-xl p-4 transition-all hover:border-[var(--color-border-hover)]">
|
||||
<div
|
||||
data-testid="flow-session-card"
|
||||
data-session-id={session.id}
|
||||
className="bg-card border border-border rounded-xl p-4 transition-all hover:border-[var(--color-border-hover)]"
|
||||
>
|
||||
<div className="flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between">
|
||||
<div className="flex-1">
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
|
||||
Reference in New Issue
Block a user