|
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); |
|
|
|
|
|
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); |
|
|
|
|
|
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(); |
|
}); |
|
|
|
|
|
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); |
|
}); |
|
}); |
|
|