File size: 2,175 Bytes
867b17d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
import fs from 'node:fs';
import path from 'node:path';
import {
type APIRequestContext,
type Browser,
type BrowserContext,
expect,
type Page,
} from '@playwright/test';
import { generateId } from 'ai';
import { ChatPage } from './pages/chat';
import { getUnixTime } from 'date-fns';
export type UserContext = {
context: BrowserContext;
page: Page;
request: APIRequestContext;
};
export async function createAuthenticatedContext({
browser,
name,
chatModel = 'chat-model',
}: {
browser: Browser;
name: string;
chatModel?: 'chat-model' | 'chat-model-reasoning';
}): Promise<UserContext> {
const directory = path.join(__dirname, '../playwright/.sessions');
if (!fs.existsSync(directory)) {
fs.mkdirSync(directory, { recursive: true });
}
const storageFile = path.join(directory, `${name}.json`);
const context = await browser.newContext();
const page = await context.newPage();
const email = `test-${name}@playwright.com`;
const password = generateId();
await page.goto('http://localhost:3000/register');
await page.getByPlaceholder('user@acme.com').click();
await page.getByPlaceholder('user@acme.com').fill(email);
await page.getByLabel('Password').click();
await page.getByLabel('Password').fill(password);
await page.getByRole('button', { name: 'Sign Up' }).click();
await expect(page.getByTestId('toast')).toContainText(
'Account created successfully!',
);
const chatPage = new ChatPage(page);
await chatPage.createNewChat();
await chatPage.chooseModelFromSelector('chat-model-reasoning');
await expect(chatPage.getSelectedModel()).resolves.toEqual('Reasoning model');
await page.waitForTimeout(1000);
await context.storageState({ path: storageFile });
await page.close();
const newContext = await browser.newContext({ storageState: storageFile });
const newPage = await newContext.newPage();
return {
context: newContext,
page: newPage,
request: newContext.request,
};
}
export function generateRandomTestUser() {
const email = `test-${getUnixTime(new Date())}@playwright.com`;
const password = generateId();
return {
email,
password,
};
}
|