mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-19 09:50:15 +01:00
* ci(backend-review.yml): add linter step to the backend review workflow * chore(backend-review.yml): remove prettier from lint-action configuration * chore: apply new linting workflow * chore(lint-staged.config.js): reorder lint-staged tasks for JavaScript and TypeScript files * chore(eslint): update ignorePatterns in .eslintrc.js chore(lint-action): remove prettier option in backend-review.yml chore(package.json): add lint and lint:fix scripts * chore(lint-staged.config.js): remove prettier --write command for js, jsx, ts, tsx files * chore(titleConvo.js): remove unnecessary console.log statement chore(titleConvo.js): add missing comma in options object * chore: apply linting to all files * chore(lint-staged.config.js): update lint-staged configuration to include prettier formatting
65 lines
2.6 KiB
JavaScript
65 lines
2.6 KiB
JavaScript
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);
|
|
});
|
|
});
|