Spaces:
Running
Running
import { expect, Page, test } from "@playwright/test"; | |
import * as dotenv from "dotenv"; | |
import path from "path"; | |
import { addNewApiKeys } from "../../utils/add-new-api-keys"; | |
import { adjustScreenView } from "../../utils/adjust-screen-view"; | |
import { awaitBootstrapTest } from "../../utils/await-bootstrap-test"; | |
import { initialGPTsetup } from "../../utils/initialGPTsetup"; | |
import { removeOldApiKeys } from "../../utils/remove-old-api-keys"; | |
import { selectGptModel } from "../../utils/select-gpt-model"; | |
import { updateOldComponents } from "../../utils/update-old-components"; | |
test( | |
"Travel Planning Agent", | |
{ tag: ["@release", "@starter-project"] }, | |
async ({ page }) => { | |
test.skip( | |
!process?.env?.OPENAI_API_KEY, | |
"OPENAI_API_KEY required to run this test", | |
); | |
test.skip( | |
!process?.env?.SEARCH_API_KEY, | |
"SEARCH_API_KEY required to run this test", | |
); | |
if (!process.env.CI) { | |
dotenv.config({ path: path.resolve(__dirname, "../../.env") }); | |
} | |
await page.goto("/"); | |
await awaitBootstrapTest(page); | |
await page.getByTestId("side_nav_options_all-templates").click(); | |
await page | |
.getByRole("heading", { name: "Travel Planning Agents" }) | |
.last() | |
.click(); | |
await page.waitForSelector('[data-testid="fit_view"]', { | |
timeout: 100000, | |
}); | |
await initialGPTsetup(page); | |
const randomCity = cities[Math.floor(Math.random() * cities.length)]; | |
const randomCity2 = cities[Math.floor(Math.random() * cities.length)]; | |
const randomFood = foods[Math.floor(Math.random() * foods.length)]; | |
await page | |
.getByTestId("textarea_str_input_value") | |
.first() | |
.fill( | |
`Create a travel plan from ${randomCity} to ${randomCity2} with ${randomFood}`, | |
); | |
await page | |
.getByTestId("popover-anchor-input-api_key") | |
.first() | |
.fill(process.env.SEARCH_API_KEY ?? ""); | |
await page.getByTestId("button_run_chat output").click(); | |
await page.getByTestId("button_run_chat output").last().click(); | |
if (await checkRateLimit(page)) { | |
console.log("Rate limit detected, skipping test"); | |
test.skip(); | |
} | |
await page.waitForSelector("text=built successfully", { | |
timeout: 60000 * 3, | |
}); | |
await page.getByText("built successfully").last().click({ | |
timeout: 15000, | |
}); | |
await page.getByText("Playground", { exact: true }).last().click(); | |
await page.waitForSelector("text=default session", { | |
timeout: 30000, | |
}); | |
const output = await page.getByTestId("div-chat-message").allTextContents(); | |
const outputText = output.join("\n"); | |
expect(outputText.toLowerCase()).toContain("weather"); | |
expect(outputText.toLowerCase()).toContain("budget"); | |
expect(outputText.toLowerCase()).toContain(randomCity.toLowerCase()); | |
expect(outputText.toLowerCase()).toContain(randomCity2.toLowerCase()); | |
expect(outputText.toLowerCase()).toContain(randomFood.toLowerCase()); | |
}, | |
); | |
async function checkRateLimit(page: Page): Promise<boolean> { | |
try { | |
await Promise.race([ | |
page.waitForSelector("text=429", { timeout: 10000 }), | |
page.waitForSelector("text=Too Many Requests", { timeout: 10000 }), | |
page.waitForResponse((response) => response.status() === 429, { | |
timeout: 10000, | |
}), | |
new Promise((_, reject) => | |
setTimeout(() => reject(new Error("No rate limit detected")), 10000), | |
), | |
]); | |
return true; | |
} catch { | |
return false; | |
} | |
} | |
const cities = [ | |
"Tokyo", | |
"New York", | |
"London", | |
"Paris", | |
"Singapore", | |
"Dubai", | |
"Shanghai", | |
"Sydney", | |
"Mumbai", | |
"Madrid", | |
"Rome", | |
"Berlin", | |
"Moscow", | |
"Toronto", | |
"Chicago", | |
"Amsterdam", | |
"Bangkok", | |
"Seoul", | |
"Istanbul", | |
"Vienna", | |
"Prague", | |
"Lisbon", | |
"Dublin", | |
"Copenhagen", | |
"Stockholm", | |
"Oslo", | |
"Helsinki", | |
"Athens", | |
"Budapest", | |
"Warsaw", | |
"Brussels", | |
"Barcelona", | |
"Milan", | |
"Munich", | |
"Vancouver", | |
"Montreal", | |
"Boston", | |
"Miami", | |
"San Francisco", | |
"Seattle", | |
"Portland", | |
"Austin", | |
"Denver", | |
"Nashville", | |
"New Orleans", | |
"Las Vegas", | |
"Cairo", | |
"Cape Town", | |
"Marrakech", | |
"Nairobi", | |
"Lagos", | |
"Johannesburg", | |
"Casablanca", | |
"Rio de Janeiro", | |
"Buenos Aires", | |
"São Paulo", | |
"Lima", | |
"Bogotá", | |
"Santiago", | |
"Mexico City", | |
"Havana", | |
"San Juan", | |
"Panama City", | |
"Quito", | |
"Kuala Lumpur", | |
"Jakarta", | |
"Manila", | |
"Hong Kong", | |
"Taipei", | |
"Osaka", | |
"Kyoto", | |
"Beijing", | |
"Delhi", | |
"Bangalore", | |
"Chennai", | |
"Kolkata", | |
"Dubai", | |
"Abu Dhabi", | |
"Doha", | |
"Kuwait City", | |
"Tel Aviv", | |
"Jerusalem", | |
"Damascus", | |
"Beirut", | |
"Tehran", | |
"Baghdad", | |
"Riyadh", | |
"Muscat", | |
"Manama", | |
"Amman", | |
"Edinburgh", | |
"Manchester", | |
"Liverpool", | |
"Birmingham", | |
"Bristol", | |
"Cambridge", | |
"Oxford", | |
"Cardiff", | |
"Belfast", | |
"Glasgow", | |
]; | |
const foods = [ | |
"Sushi", | |
"Pizza", | |
"Paella", | |
"Curry", | |
"Tacos", | |
"Pad Thai", | |
"Hamburger", | |
"Croissant", | |
"Ramen", | |
"Dim Sum", | |
"Pasta Carbonara", | |
"Biryani", | |
"Fish and Chips", | |
"Pho", | |
"Peking Duck", | |
"Lasagna", | |
"Moussaka", | |
"Butter Chicken", | |
"Falafel", | |
"Schnitzel", | |
"Goulash", | |
"Sushi Roll", | |
"Enchiladas", | |
"Pierogi", | |
"Coq au Vin", | |
"Tandoori Chicken", | |
"Risotto", | |
"Gyros", | |
"Tempura", | |
"Tom Yum", | |
"Beef Stroganoff", | |
"Kimchi", | |
"Ceviche", | |
"Gnocchi", | |
"Poutine", | |
"Chow Mein", | |
"Shepherd's Pie", | |
"Mole Poblano", | |
"Borscht", | |
"Gazpacho", | |
"Bibimbap", | |
"Chicken Tikka Masala", | |
"Pastrami", | |
"Jambalaya", | |
"Sashimi", | |
"Bratwurst", | |
"Osso Buco", | |
"Bouillabaisse", | |
"Nasi Goreng", | |
"Tiramisu", | |
"Kung Pao Chicken", | |
"Eggs Benedict", | |
"Beef Wellington", | |
"Lobster Thermidor", | |
"Duck Confit", | |
"Escargot", | |
"Chicken Satay", | |
"Tom Kha Gai", | |
"Beef Rendang", | |
"Shakshuka", | |
"Cachapa", | |
"Empanada", | |
"Poke Bowl", | |
"Baklava", | |
"Spanakopita", | |
"Etouffee", | |
"Cassoulet", | |
"Ratatouille", | |
"Quiche Lorraine", | |
"Couscous", | |
"Miso Soup", | |
"Gumbo", | |
"Chicken Parmesan", | |
"Ravioli", | |
"Beef Bourguignon", | |
"Thai Green Curry", | |
"Soba Noodles", | |
"Kebab", | |
"Baba Ganoush", | |
"Hummus", | |
"Churros", | |
"Crepes", | |
"Wonton Soup", | |
"Dumplings", | |
"Spring Rolls", | |
"Samosas", | |
"Tortilla Española", | |
"Croquetas", | |
"Greek Salad", | |
"Boeuf Bourguignon", | |
"Pavlova", | |
"Beef Tartare", | |
"Stuffed Grape Leaves", | |
"Parmigiana", | |
"Cacio e Pepe", | |
"Bulgogi", | |
"Hot Pot", | |
"Sukiyaki", | |
"Chicken Adobo", | |
"Laksa", | |
]; | |