mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-11 09:51:30 +00:00
Refactor: Change how test runner handles pageWithUserData tests (#5922)
* refactor: change how test runner opens pageWithUserData instances * fix: test move tabs * fix: custom ca cert tests * fix: update file patterns and improve error messages * fix: improve electron app launch logic * fix: update temporary directory handling for Electron app * fix: ensure newline at end of file in index.ts This change adds a newline at the end of the file to comply with coding standards. * fix: improve error handling in recursiveCopy function - Simplified error message when source path does not exist. - Enhanced error handling to provide clearer guidance on usage of `page` fixture. * fix(e2e): close collections after each tests * fix: reuse the worker instance per file instead of per user data dir * fix: revert ssl tests as serial run is fixed * fix: change afterEach to afterAll for cleanup fix: change afterEach to afterAll for cleanup --------- Co-authored-by: Bijin Bruno <bijin@usebruno.com>
This commit is contained in:
@@ -5,6 +5,26 @@ import * as fs from 'fs';
|
||||
|
||||
const electronAppPath = path.join(__dirname, '../packages/bruno-electron');
|
||||
|
||||
const existsAsync = (filepath: string) => fs.promises.access(filepath).then(() => true).catch(() => false);
|
||||
|
||||
async function recursiveCopy(src: string, dest: string) {
|
||||
if (!await existsAsync(src)) {
|
||||
throw new Error(`${src} doesn't exist`);
|
||||
}
|
||||
|
||||
const files = await fs.promises.readdir(src, {
|
||||
recursive: true,
|
||||
withFileTypes: true
|
||||
});
|
||||
|
||||
for (const file of files) {
|
||||
if (!file.isFile()) continue;
|
||||
const fullPath = path.join(src, file.name);
|
||||
const fullDestPath = path.join(dest, file.name);
|
||||
await fs.promises.copyFile(fullPath, fullDestPath);
|
||||
}
|
||||
}
|
||||
|
||||
export const test = baseTest.extend<
|
||||
{
|
||||
context: BrowserContext;
|
||||
@@ -17,7 +37,7 @@ export const test = baseTest.extend<
|
||||
createTmpDir: (tag?: string) => Promise<string>;
|
||||
launchElectronApp: (options?: { initUserDataPath?: string; userDataPath?: string; dotEnv?: Record<string, string> }) => Promise<ElectronApplication>;
|
||||
electronApp: ElectronApplication;
|
||||
reuseOrLaunchElectronApp: (options?: { initUserDataPath?: string; userDataPath?: string; dotEnv?: Record<string, string> }) => Promise<ElectronApplication>;
|
||||
reuseOrLaunchElectronApp: (options?: { initUserDataPath?: string; testFile?: string; userDataPath?: string; dotEnv?: Record<string, string> }) => Promise<ElectronApplication>;
|
||||
}
|
||||
>({
|
||||
createTmpDir: [
|
||||
@@ -150,8 +170,8 @@ export const test = baseTest.extend<
|
||||
reuseOrLaunchElectronApp: [
|
||||
async ({ launchElectronApp }, use, testInfo) => {
|
||||
const apps: Record<string, ElectronApplication> = {};
|
||||
await use(async ({ initUserDataPath, userDataPath, dotEnv = {} } = {}) => {
|
||||
const key = userDataPath || initUserDataPath;
|
||||
await use(async ({ initUserDataPath, testFile, userDataPath, dotEnv = {} } = {}) => {
|
||||
const key = testFile || userDataPath || initUserDataPath;
|
||||
if (key && apps[key]) {
|
||||
return apps[key];
|
||||
}
|
||||
@@ -191,13 +211,21 @@ export const test = baseTest.extend<
|
||||
}
|
||||
},
|
||||
|
||||
pageWithUserData: async ({ reuseOrLaunchElectronApp }, use, testInfo) => {
|
||||
pageWithUserData: async ({ reuseOrLaunchElectronApp, createTmpDir }, use, testInfo) => {
|
||||
const testDir = path.dirname(testInfo.file);
|
||||
const initUserDataPath = path.join(testDir, 'init-user-data');
|
||||
|
||||
const app = await reuseOrLaunchElectronApp(
|
||||
(await fs.promises.stat(initUserDataPath).catch(() => false)) ? { initUserDataPath } : {}
|
||||
);
|
||||
const tmpAppDataDir = await createTmpDir();
|
||||
try {
|
||||
await recursiveCopy(initUserDataPath, tmpAppDataDir);
|
||||
} catch (err) {
|
||||
if (err instanceof Error && err.message.includes('doesn\'t exist')) {
|
||||
throw new Error(`${initUserDataPath} doesn't exist, either add one or if you don't need an initial state then use the \`page\` fixture instead of \`pageWithUserData\`.`);
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
|
||||
const app = await reuseOrLaunchElectronApp({ initUserDataPath: tmpAppDataDir, testFile: testInfo.file });
|
||||
|
||||
const context = await app.context();
|
||||
const page = await app.firstWindow();
|
||||
|
||||
Reference in New Issue
Block a user