133 lines
4.0 KiB
TypeScript
133 lines
4.0 KiB
TypeScript
import dotenv from 'dotenv';
|
|
import os from 'os';
|
|
import path from 'path';
|
|
|
|
import {PlaywrightTestConfig, ReporterDescription, expect} from '@playwright/test';
|
|
|
|
import {DatalensTestFixtures} from './utils/playwright/globalTestDefinition';
|
|
import {isTrueArg} from '../src/shared';
|
|
|
|
const ROOT_ENV_PATH = path.resolve(__dirname, '..', '.env');
|
|
|
|
dotenv.config({path: ROOT_ENV_PATH});
|
|
|
|
let maxWorkers = process.env.E2E_MAX_WORKERS
|
|
? parseInt(process.env.E2E_MAX_WORKERS, 10)
|
|
: os.cpus().length;
|
|
|
|
if (process.env.CI === 'true' && !process.env.E2E_MAX_WORKERS) {
|
|
maxWorkers = 6;
|
|
}
|
|
|
|
const testMatch = process.env.E2E_TEST_MATCH
|
|
? `**/${process.env.E2E_TEST_MATCH}.test.ts`
|
|
: undefined;
|
|
|
|
const grep = process.env.E2E_TEST_NAME_PATTERN
|
|
? new RegExp(process.env.E2E_TEST_NAME_PATTERN)
|
|
: undefined;
|
|
|
|
const grepInvert = process.env.E2E_TEST_NAME_PATTERN_INVERT
|
|
? process.env.E2E_TEST_NAME_PATTERN_INVERT.trim()
|
|
.split('/[\n,]+/')
|
|
.map((pattern) => new RegExp(pattern.trim()))
|
|
: undefined;
|
|
|
|
const workers = process.env.E2E_DEBUG ? 1 : maxWorkers;
|
|
|
|
const retries = process.env.E2E_RETRY_TIMES ? Number(process.env.E2E_RETRY_TIMES) : 0;
|
|
|
|
const maxFailures = process.env.E2E_MAX_FAILURES ? parseInt(process.env.E2E_MAX_FAILURES, 10) : 0;
|
|
|
|
const headful = isTrueArg(process.env.E2E_HEADFUL);
|
|
|
|
const slowMo = Number.isInteger(Number(process.env.E2E_SLOW_MO))
|
|
? Number(process.env.E2E_SLOW_MO)
|
|
: 100;
|
|
|
|
const reporter: ReporterDescription[] = [
|
|
['html', {outputFolder: 'artifacts/report', open: 'never'}],
|
|
['json', {outputFile: 'artifacts/results.json'}],
|
|
['list'],
|
|
];
|
|
|
|
const updateSnapshots = process.env.E2E_UPDATE_SNAPSHOTS === '1' ? 'all' : 'none';
|
|
const forbidOnly = process.env.E2E_FORBID_ONLY !== '0';
|
|
|
|
// While we are too lazy to add expect to each file.
|
|
Object.defineProperty(global, 'expect', {
|
|
writable: false,
|
|
value: expect,
|
|
});
|
|
|
|
const baseURL = process.env.E2E_DOMAIN;
|
|
|
|
const globalSetupPath = './utils/playwright/datalens/setup-e2e';
|
|
|
|
// eslint-disable-next-line no-console
|
|
console.log(`Base URL for tests is: ${baseURL}`);
|
|
|
|
const testTimeout = process.env.E2E_TEST_TIMEOUT
|
|
? parseInt(process.env.E2E_TEST_TIMEOUT, 10)
|
|
: 60000 * 1.5;
|
|
const expectTimeout = process.env.E2E_EXPECT_TIMEOUT
|
|
? parseInt(process.env.E2E_EXPECT_TIMEOUT, 10)
|
|
: testTimeout;
|
|
const actionTimeout = process.env.E2E_ACTION_TIMEOUT
|
|
? parseInt(process.env.E2E_ACTION_TIMEOUT, 10)
|
|
: testTimeout;
|
|
const isAuthDisabled =
|
|
isTrueArg(process.env.NO_AUTH) ||
|
|
isTrueArg(process.env.E2E_NO_AUTH) ||
|
|
!isTrueArg(process.env.AUTH_ENABLED || 'true');
|
|
const isTraceScreenshots = isTrueArg(process.env.E2E_TRACE_SCREENSHOTS);
|
|
const playwrightConfig: PlaywrightTestConfig<DatalensTestFixtures> = {
|
|
workers,
|
|
testMatch,
|
|
retries,
|
|
reporter,
|
|
grep,
|
|
grepInvert,
|
|
fullyParallel: true,
|
|
globalSetup: require.resolve(globalSetupPath),
|
|
timeout: testTimeout,
|
|
maxFailures,
|
|
forbidOnly,
|
|
snapshotPathTemplate: '{testDir}/__screenshots__/{testFilePath}/{arg}{ext}',
|
|
updateSnapshots,
|
|
outputDir: './test-results',
|
|
expect: {
|
|
timeout: expectTimeout,
|
|
},
|
|
use: {
|
|
browserName: 'chromium',
|
|
launchOptions: {
|
|
slowMo,
|
|
},
|
|
headless: !headful,
|
|
baseURL,
|
|
ignoreHTTPSErrors: true,
|
|
viewport: {width: 1920, height: 1080},
|
|
trace: {mode: 'on-first-retry', screenshots: isTraceScreenshots, sources: false},
|
|
actionTimeout: actionTimeout,
|
|
testIdAttribute: 'data-qa',
|
|
storageState: isAuthDisabled
|
|
? undefined
|
|
: path.join(__dirname, 'artifacts/storageState.json'),
|
|
},
|
|
projects: [
|
|
{
|
|
name: 'basic',
|
|
testDir: process.env.E2E_SUITE ? `./suites/${process.env.E2E_SUITE}` : './suites',
|
|
},
|
|
{
|
|
name: 'opensource',
|
|
testDir: process.env.E2E_SUITE
|
|
? `./opensource-suites/${process.env.E2E_SUITE}`
|
|
: './opensource-suites',
|
|
},
|
|
],
|
|
};
|
|
|
|
module.exports = playwrightConfig;
|