Spaces:
Runtime error
Runtime error
import { expect, test } from '@playwright/test'; | |
const basePath = 'http://localhost:3080/chat/'; | |
const initialUrl = `${basePath}new`; | |
const endpoints = ['google', 'openAI', 'azureOpenAI', 'bingAI', 'chatGPTBrowser', 'gptPlugins']; | |
function isUUID(uuid) { | |
let regex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/; | |
return regex.test(uuid); | |
} | |
test.describe('Messaging suite', () => { | |
test('textbox should be focused after receiving message & test expected navigation', async ({ | |
page, | |
}) => { | |
test.setTimeout(120000); | |
const message = 'hi'; | |
const endpoint = endpoints[1]; | |
const initialUrl = 'http://localhost:3080/chat/new'; | |
await page.goto(initialUrl); | |
await page.locator('#new-conversation-menu').click(); | |
await page.locator(`#${endpoint}`).click(); | |
await page.locator('form').getByRole('textbox').click(); | |
await page.locator('form').getByRole('textbox').fill(message); | |
const responsePromise = [ | |
page.waitForResponse(async (response) => { | |
return response.url().includes(`/api/ask/${endpoint}`) && response.status() === 200; | |
}), | |
page.locator('form').getByRole('textbox').press('Enter'), | |
]; | |
const [response] = await Promise.all(responsePromise); | |
const responseBody = await response.body(); | |
const messageSuccess = responseBody.includes('"final":true'); | |
expect(messageSuccess).toBe(true); | |
// Check if textbox is focused | |
await page.waitForTimeout(250); | |
const isTextboxFocused = await page.evaluate(() => { | |
return document.activeElement === document.querySelector('[data-testid="text-input"]'); | |
}); | |
expect(isTextboxFocused).toBeTruthy(); | |
const currentUrl = page.url(); | |
expect(currentUrl).toBe(initialUrl); | |
//cleanup the conversation | |
await page.getByRole('navigation').getByRole('button').nth(1).click(); | |
expect(page.url()).toBe(initialUrl); | |
await page.getByTestId('convo-item').nth(1).click(); | |
const finalUrl = page.url(); | |
const conversationId = finalUrl.split(basePath).pop(); | |
expect(isUUID(conversationId)).toBeTruthy(); | |
}); | |
// in this spec as we are testing post-message navigation, we are not testing the message response | |
test('Page navigations', async ({ page }) => { | |
await page.goto(initialUrl); | |
await page.getByTestId('convo-item').nth(1).click(); | |
const currentUrl = page.url(); | |
const conversationId = currentUrl.split(basePath).pop(); | |
expect(isUUID(conversationId)).toBeTruthy(); | |
await page.getByText('New chat', { exact: true }).click(); | |
expect(page.url()).toBe(initialUrl); | |
}); | |
}); | |