Spaces:
Running
Running
| import { expect, Page, test } from "@playwright/test"; | |
| test( | |
| "user must be able to interact with starter projects", | |
| { tag: ["@release", "@starter-projects"] }, | |
| async ({ page, context }) => { | |
| await page.goto("/"); | |
| let modalCount = 0; | |
| try { | |
| const modalTitleElement = await page?.getByTestId("modal-title"); | |
| if (modalTitleElement) { | |
| modalCount = await modalTitleElement.count(); | |
| } | |
| } catch (error) { | |
| modalCount = 0; | |
| } | |
| while (modalCount === 0) { | |
| await page.getByText("New Flow", { exact: true }).click(); | |
| await page.waitForSelector('[data-testid="modal-title"]', { | |
| timeout: 3000, | |
| }); | |
| modalCount = await page.getByTestId("modal-title")?.count(); | |
| } | |
| expect(page.getByText("Start from scratch", { exact: true })).toBeVisible(); | |
| expect(page.getByRole("button", { name: "Blank Flow" })).toBeVisible(); | |
| await page.getByTestId("side_nav_options_all-templates").click(); | |
| await page.waitForSelector('[data-testid="search-input-template"]', { | |
| timeout: 3000, | |
| }); | |
| await page.getByTestId("search-input-template").fill("Document"); | |
| expect( | |
| page.getByTestId("template_basic-prompting-(hello,-world)"), | |
| ).toBeVisible({ visible: false, timeout: 3000 }); | |
| expect(page.getByTestId("template_document-q&a").first()).toBeVisible(); | |
| expect( | |
| page.getByTestId(`template_sequential-tasks-agents`).first(), | |
| ).toBeVisible(); | |
| expect(page.getByTestId("template_vector-store")).not.toBeVisible(); | |
| expect(page.getByTestId(`template_simple-agent`)).not.toBeVisible(); | |
| expect(page.getByTestId(`template_dynamic-agent`)).not.toBeVisible(); | |
| expect( | |
| page.getByTestId(`template_hierarchical-tasks-agent`), | |
| ).not.toBeVisible(); | |
| await page.getByTestId(`side_nav_options_prompting`).click(); | |
| expect(page.getByTestId(`category_title_prompting`)).toBeVisible({ | |
| timeout: 3000, | |
| }); | |
| await page.getByTestId(`side_nav_options_rag`).click(); | |
| expect(page.getByTestId(`category_title_rag`)).toBeVisible({ | |
| timeout: 3000, | |
| }); | |
| expect(page.getByTestId(`template_vector-store-rag`)).toBeVisible(); | |
| expect( | |
| page.getByTestId(`template_basic-prompting-(hello,-world)`), | |
| ).not.toBeVisible(); | |
| expect(page.getByTestId(`template_document-qa`)).not.toBeVisible(); | |
| await page.getByTestId(`side_nav_options_agents`).click(); | |
| expect(page.getByTestId(`category_title_agents`)).toBeVisible({ | |
| timeout: 3000, | |
| }); | |
| expect( | |
| page.getByTestId(`template_basic-prompting-(hello,-world)`), | |
| ).toBeVisible({ visible: false, timeout: 3000 }); | |
| expect(page.getByTestId(`template_document-qa`)).not.toBeVisible(); | |
| expect(page.getByTestId(`template_vector-store-rag`)).not.toBeVisible(); | |
| await waitForTemplateVisibility(page, templateIds); | |
| }, | |
| ); | |
| async function waitForTemplateVisibility(page: Page, templateIds: string[]) { | |
| const timeout = 10000; // Increased timeout for better reliability | |
| for (const templateId of templateIds) { | |
| // Wait for the element to be attached to DOM first | |
| await page.waitForSelector(`[data-testid="${templateId}"]`, { | |
| state: "attached", | |
| timeout, | |
| }); | |
| // Wait for the element to be visible | |
| await expect( | |
| page.getByTestId(templateId).last(), | |
| `Template ${templateId} should be visible`, | |
| ).toBeVisible({ | |
| timeout, | |
| }); | |
| // Optional: Ensure element is in viewport | |
| const element = page.getByTestId(templateId).last(); | |
| await element.scrollIntoViewIfNeeded(); | |
| } | |
| } | |
| // Your test code | |
| const templateIds = [ | |
| "template_instagram-copywriter", | |
| "template_saas-pricing", | |
| "template_travel-planning-agents", | |
| "template_research-agent", | |
| "template_simple-agent", | |
| "template_sequential-tasks-agents", | |
| "template_market-research", | |
| ]; | |