@zohodesk/testinglibrary 0.0.5 → 0.0.6-n20-experimental
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +24 -0
- package/.eslintrc.js +31 -0
- package/.gitlab-ci.yml +206 -0
- package/.prettierrc +6 -0
- package/README.md +189 -18
- package/bin/cli.js +2 -2
- package/bin/postinstall.js +1 -16
- package/build/common/data-generator/steps/DataGenerator.spec.js +19 -0
- package/build/common/data-generator/steps/DataGeneratorStepsHelper.js +19 -0
- package/build/common/multi-actor/steps/multiActorHandling.spec.js +26 -0
- package/build/common/searchFake/helpers/rpcRequestHelper.js +52 -0
- package/build/common/searchFake/steps/searchFake.spec.js +77 -0
- package/build/core/dataGenerator/DataGenerator.js +108 -0
- package/build/core/dataGenerator/DataGeneratorError.js +50 -0
- package/build/core/dataGenerator/DataGeneratorHelper.js +49 -0
- package/{src → build}/core/jest/preprocessor/jsPreprocessor.js +7 -9
- package/{src → build}/core/jest/runner/jest-runner.js +46 -44
- package/build/core/jest/setup/index.js +3 -0
- package/build/core/playwright/builtInFixtures/actorContext.js +75 -0
- package/build/core/playwright/builtInFixtures/addTags.js +19 -0
- package/build/core/playwright/builtInFixtures/cacheLayer.js +13 -0
- package/build/core/playwright/builtInFixtures/context.js +32 -0
- package/build/core/playwright/builtInFixtures/executionContext.js +17 -0
- package/build/core/playwright/builtInFixtures/i18N.js +41 -0
- package/build/core/playwright/builtInFixtures/index.js +46 -0
- package/build/core/playwright/builtInFixtures/page.js +38 -0
- package/build/core/playwright/builtInFixtures/unauthenticatedPage.js +18 -0
- package/build/core/playwright/clear-caches.js +49 -0
- package/build/core/playwright/codegen.js +55 -0
- package/build/core/playwright/configuration/Configuration.js +25 -0
- package/build/core/playwright/configuration/ConfigurationHelper.js +43 -0
- package/build/core/playwright/configuration/UserArgs.js +12 -0
- package/build/core/playwright/constants/browserTypes.js +12 -0
- package/build/core/playwright/constants/fileMutexConfig.js +9 -0
- package/build/core/playwright/custom-commands.js +7 -0
- package/build/core/playwright/env-initializer.js +43 -0
- package/build/core/playwright/fixtures.js +24 -0
- package/build/core/playwright/helpers/additionalProfiles.js +25 -0
- package/build/core/playwright/helpers/auth/accountLogin.js +21 -0
- package/build/core/playwright/helpers/auth/checkAuthCookies.js +41 -0
- package/build/core/playwright/helpers/auth/getUrlOrigin.js +13 -0
- package/build/core/playwright/helpers/auth/getUsers.js +118 -0
- package/build/core/playwright/helpers/auth/index.js +76 -0
- package/build/core/playwright/helpers/auth/loginDefaultStepsHelper.js +54 -0
- package/build/core/playwright/helpers/auth/loginSteps.js +51 -0
- package/build/core/playwright/helpers/checkAuthDirectory.js +27 -0
- package/build/core/playwright/helpers/configFileNameProvider.js +31 -0
- package/build/core/playwright/helpers/customFixturesHelper.js +58 -0
- package/build/core/playwright/helpers/fileMutex.js +72 -0
- package/build/core/playwright/helpers/getUserFixtures.js +23 -0
- package/build/core/playwright/helpers/mergeObjects.js +13 -0
- package/build/core/playwright/helpers/parseUserArgs.js +10 -0
- package/build/core/playwright/index.js +24 -0
- package/build/core/playwright/readConfigFile.js +148 -0
- package/build/core/playwright/report-generator.js +42 -0
- package/build/core/playwright/runner/Runner.js +22 -0
- package/build/core/playwright/runner/RunnerHelper.js +43 -0
- package/build/core/playwright/runner/RunnerTypes.js +17 -0
- package/build/core/playwright/runner/SpawnRunner.js +113 -0
- package/build/core/playwright/setup/Project.js +35 -0
- package/build/core/playwright/setup/ProjectConfiguration.js +80 -0
- package/build/core/playwright/setup/config-creator.js +89 -0
- package/build/core/playwright/setup/config-utils.js +188 -0
- package/build/core/playwright/setup/custom-reporter.js +136 -0
- package/build/core/playwright/setup/qc-custom-reporter.js +291 -0
- package/build/core/playwright/tagProcessor.js +69 -0
- package/build/core/playwright/test-runner.js +118 -0
- package/build/core/playwright/types.js +44 -0
- package/build/core/playwright/validateFeature.js +28 -0
- package/build/decorators.d.ts +1 -0
- package/build/decorators.js +16 -0
- package/build/index.d.ts +78 -0
- package/build/index.js +105 -0
- package/build/lib/cli.js +78 -0
- package/build/lib/post-install.js +25 -0
- package/build/lint/index.js +4 -0
- package/build/parser/parser.js +205 -0
- package/build/parser/sample.feature +34 -0
- package/build/parser/sample.spec.js +37 -0
- package/build/parser/verifier.js +130 -0
- package/build/setup-folder-structure/helper.js +37 -0
- package/build/setup-folder-structure/reportEnhancement/addonScript.html +25 -0
- package/build/setup-folder-structure/reportEnhancement/reportAlteration.js +25 -0
- package/build/setup-folder-structure/samples/accountLogin-sample.js +19 -0
- package/build/setup-folder-structure/samples/actors-index.js +2 -0
- package/build/setup-folder-structure/samples/auth-setup-sample.js +15 -0
- package/build/setup-folder-structure/samples/editions-index.js +3 -0
- package/build/setup-folder-structure/samples/free-sample.json +25 -0
- package/build/setup-folder-structure/samples/git-ignore.sample.js +37 -0
- package/build/setup-folder-structure/samples/settings.json +7 -0
- package/build/setup-folder-structure/samples/testSetup-sample.js +14 -0
- package/build/setup-folder-structure/samples/uat-config-sample.js +46 -0
- package/build/setup-folder-structure/setupProject.js +122 -0
- package/build/test/core/playwright/__tests__/tagProcessor.test.js +94 -0
- package/build/test/core/playwright/__tests__/validateFeature.test.js +69 -0
- package/build/test/core/playwright/buildInFixtures/__tests__/executionContext.test.js +27 -0
- package/build/test/core/playwright/configuration/__tests__/Configuration.test.js +53 -0
- package/build/test/core/playwright/helpers/__tests__/additionalProfiles.test.js +45 -0
- package/build/test/core/playwright/helpers/__tests__/configFileNameProvider.test.js +34 -0
- package/build/test/core/playwright/helpers/__tests__/customFixturesHelper.test.js +51 -0
- package/build/test/core/playwright/helpers/__tests__/fileMutex.test.js +79 -0
- package/build/test/core/playwright/helpers/__tests__/getUsers_ListOfActors.test.js +80 -0
- package/build/test/core/playwright/runner/__tests__/RunnerHelper.test.js +16 -0
- package/build/test/core/playwright/runner/__tests__/SpawnRunner.test.js +27 -0
- package/{src → build}/utils/cliArgsToObject.js +72 -63
- package/build/utils/commonUtils.js +17 -0
- package/build/utils/fileUtils.js +109 -0
- package/build/utils/getFilePath.js +11 -0
- package/build/utils/logger.js +28 -0
- package/build/utils/rootPath.js +53 -0
- package/build/utils/stepDefinitionsFormatter.js +11 -0
- package/changelog.md +167 -25
- package/jest.config.js +81 -63
- package/npm-shrinkwrap.json +11894 -5772
- package/package.json +61 -31
- package/playwright.config.js +62 -112
- package/test-results/.last-run.json +4 -0
- package/unit_reports/unit-report.html +260 -0
- package/src/core/jest/setup/index.js +0 -165
- package/src/core/playwright/codegen.js +0 -60
- package/src/core/playwright/custom-commands.js +0 -3
- package/src/core/playwright/env-initializer.js +0 -24
- package/src/core/playwright/index.js +0 -82
- package/src/core/playwright/readConfigFile.js +0 -63
- package/src/core/playwright/report-generator.js +0 -45
- package/src/core/playwright/setup/config-creator.js +0 -77
- package/src/core/playwright/test-runner.js +0 -67
- package/src/index.js +0 -9
- package/src/lib/cli.js +0 -42
- package/src/setup-folder-structure/env-config-sample.json +0 -17
- package/src/setup-folder-structure/setupProject.js +0 -99
- package/src/setup-folder-structure/uat-config-sample.js +0 -22
- package/src/setup-folder-structure/user-example.json +0 -3
- package/src/utils/getFilePath.js +0 -9
- package/src/utils/logger.js +0 -28
- package/src/utils/rootPath.js +0 -51
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _readConfigFile = require("../readConfigFile");
|
|
5
|
+
var _rootPath = require("../../../utils/rootPath");
|
|
6
|
+
var _path = _interopRequireDefault(require("path"));
|
|
7
|
+
var _logger = require("../../../utils/logger");
|
|
8
|
+
var _child_process = require("child_process");
|
|
9
|
+
var _RunnerHelper = _interopRequireDefault(require("./RunnerHelper"));
|
|
10
|
+
var _Runner = _interopRequireDefault(require("./Runner"));
|
|
11
|
+
var _commonUtils = require("../../../utils/commonUtils");
|
|
12
|
+
class SpawnRunner extends _Runner.default {
|
|
13
|
+
constructor(runnerObj) {
|
|
14
|
+
super(runnerObj);
|
|
15
|
+
this.runnerObj = runnerObj;
|
|
16
|
+
}
|
|
17
|
+
run() {
|
|
18
|
+
const {
|
|
19
|
+
config
|
|
20
|
+
} = this.runnerObj;
|
|
21
|
+
let promises = [];
|
|
22
|
+
const {
|
|
23
|
+
bddMode
|
|
24
|
+
} = config.getAll();
|
|
25
|
+
if (bddMode) {
|
|
26
|
+
promises.push(this.runPreprocessing());
|
|
27
|
+
}
|
|
28
|
+
Promise.all(promises).then(() => this.runPlaywright()).catch(err => {
|
|
29
|
+
_logger.Logger.error(err);
|
|
30
|
+
process.exit();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
runPreprocessing() {
|
|
34
|
+
//This below functoin is called to copy the data generator spec files to the current project
|
|
35
|
+
(0, _commonUtils.copyCommonSpecs)();
|
|
36
|
+
const {
|
|
37
|
+
tagArgs
|
|
38
|
+
} = this.runnerObj;
|
|
39
|
+
const configPath = (0, _readConfigFile.isUserConfigFileAvailable)() ? _path.default.resolve(__dirname, '../', 'setup', 'config-creator.js') : _path.default.resolve(__dirname, '../', '../', '../', '../', 'playwrightConfig.js');
|
|
40
|
+
const beforeCommand = 'node';
|
|
41
|
+
const bddGenPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('bddgen'));
|
|
42
|
+
const beforeArgs = [bddGenPath, '-c', require.resolve(configPath)];
|
|
43
|
+
if (tagArgs) {
|
|
44
|
+
beforeArgs.push('--tags');
|
|
45
|
+
beforeArgs.push(tagArgs);
|
|
46
|
+
}
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
const childProcessForPreprocessing = (0, _child_process.spawn)(beforeCommand, beforeArgs, {
|
|
49
|
+
stdio: 'inherit',
|
|
50
|
+
env: {
|
|
51
|
+
...process.env
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
childProcessForPreprocessing.on('error', data => {
|
|
55
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, data);
|
|
56
|
+
reject(data);
|
|
57
|
+
});
|
|
58
|
+
childProcessForPreprocessing.on('exit', code => {
|
|
59
|
+
if (code === 0) {
|
|
60
|
+
_logger.Logger.log(_logger.Logger.SUCCESS_TYPE, 'Feature Files Processed Successfully');
|
|
61
|
+
resolve();
|
|
62
|
+
} else {
|
|
63
|
+
reject(`BddGen exited with code ${code}`);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
runPlaywright() {
|
|
69
|
+
const {
|
|
70
|
+
tagArgs,
|
|
71
|
+
config,
|
|
72
|
+
userArgs
|
|
73
|
+
} = this.runnerObj;
|
|
74
|
+
const {
|
|
75
|
+
debug,
|
|
76
|
+
bddMode = false,
|
|
77
|
+
headless = false
|
|
78
|
+
} = config.getAll();
|
|
79
|
+
const playwrightArgs = _RunnerHelper.default.getPlaywrightArgs(userArgs, debug, bddMode, tagArgs, headless);
|
|
80
|
+
const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
|
|
81
|
+
const command = playwrightPath;
|
|
82
|
+
const configPath = (0, _readConfigFile.isUserConfigFileAvailable)() ? _path.default.resolve(__dirname, '../', 'setup', 'config-creator.js') : _path.default.resolve('../', '../', '../', '../', 'playwrightConfig.js');
|
|
83
|
+
const args = ['test', '--config', require.resolve(configPath)].concat(playwrightArgs);
|
|
84
|
+
return new Promise((resolve, reject) => {
|
|
85
|
+
const childProcessForRunningPlaywright = (0, _child_process.spawn)(command, args, {
|
|
86
|
+
stdio: 'inherit',
|
|
87
|
+
env: {
|
|
88
|
+
...process.env
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
childProcessForRunningPlaywright.on('error', error => {
|
|
92
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, error);
|
|
93
|
+
});
|
|
94
|
+
childProcessForRunningPlaywright.on('exit', (code, signal) => {
|
|
95
|
+
if (code !== 0) {
|
|
96
|
+
reject(`Child Process Exited with Code ${code} and Signal ${signal}`);
|
|
97
|
+
} else {
|
|
98
|
+
_logger.Logger.log(_logger.Logger.SUCCESS_TYPE, 'Test Ran Successfully');
|
|
99
|
+
resolve();
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
process.on('exit', () => {
|
|
103
|
+
childProcessForRunningPlaywright.kill();
|
|
104
|
+
reject('Terminating Playwright Process...');
|
|
105
|
+
});
|
|
106
|
+
process.on('SIGINT', () => {
|
|
107
|
+
childProcessForRunningPlaywright.kill();
|
|
108
|
+
reject('Cleaning up...');
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
module.exports = SpawnRunner;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
class Project {
|
|
4
|
+
constructor(name) {
|
|
5
|
+
this.properties = {};
|
|
6
|
+
this.properties.name = name;
|
|
7
|
+
}
|
|
8
|
+
setTestDir(value) {
|
|
9
|
+
this.properties.testDir = value;
|
|
10
|
+
}
|
|
11
|
+
setTestMatch(value) {
|
|
12
|
+
this.properties.testMatch = value;
|
|
13
|
+
}
|
|
14
|
+
setRetries(value) {
|
|
15
|
+
this.properties.retries = value;
|
|
16
|
+
}
|
|
17
|
+
setUse(value) {
|
|
18
|
+
this.properties.use = value;
|
|
19
|
+
}
|
|
20
|
+
setTearDown(value) {
|
|
21
|
+
this.properties.teardown = value;
|
|
22
|
+
}
|
|
23
|
+
setDependencies(value) {
|
|
24
|
+
this.properties.dependencies = value;
|
|
25
|
+
}
|
|
26
|
+
setProperty(key, value) {
|
|
27
|
+
this.properties[key] = value;
|
|
28
|
+
}
|
|
29
|
+
getProperties() {
|
|
30
|
+
return this.properties;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
module.exports = {
|
|
34
|
+
Project
|
|
35
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.cleanupConfig = cleanupConfig;
|
|
8
|
+
exports.setupConfig = setupConfig;
|
|
9
|
+
exports.smokeTestConfig = smokeTestConfig;
|
|
10
|
+
var _path = _interopRequireDefault(require("path"));
|
|
11
|
+
var _Project = require("./Project");
|
|
12
|
+
var _configUtils = require("./config-utils");
|
|
13
|
+
var _readConfigFile = require("../readConfigFile");
|
|
14
|
+
const uatConfig = (0, _readConfigFile.generateConfigFromFile)();
|
|
15
|
+
const {
|
|
16
|
+
isAuthMode,
|
|
17
|
+
isSmokeTest,
|
|
18
|
+
bddMode,
|
|
19
|
+
authFilePath,
|
|
20
|
+
trace,
|
|
21
|
+
video,
|
|
22
|
+
testIdAttribute,
|
|
23
|
+
viewport
|
|
24
|
+
} = uatConfig;
|
|
25
|
+
function setupConfig() {
|
|
26
|
+
const setupProject = new _Project.Project('setup');
|
|
27
|
+
setupProject.setTestMatch(/.*\.setup\.js/);
|
|
28
|
+
setupProject.setTestDir(_path.default.join(process.cwd(), 'uat'));
|
|
29
|
+
const isTearDown = JSON.parse(process.env.tearDown);
|
|
30
|
+
setupProject.setTearDown(isTearDown ? 'cleanup' : '');
|
|
31
|
+
const setupProjectConfig = [setupProject.getProperties()];
|
|
32
|
+
return setupProjectConfig;
|
|
33
|
+
}
|
|
34
|
+
function smokeTestConfig() {
|
|
35
|
+
const smokeTestProject = new _Project.Project('smokeTest');
|
|
36
|
+
const smokeTestDir = (0, _configUtils.getTestDir)(bddMode, {
|
|
37
|
+
featureFilesFolder: _path.default.join(process.cwd(), 'uat', 'smokeTest', '**', '*.feature'),
|
|
38
|
+
stepDefinitionsFolder: _path.default.join(process.cwd(), 'uat', '**', 'steps', '*.spec.js'),
|
|
39
|
+
outputDir: _path.default.join(process.cwd(), 'uat', '.features-smoke-gen'),
|
|
40
|
+
uatPath: _path.default.join(process.cwd(), 'uat', 'smokeTest')
|
|
41
|
+
});
|
|
42
|
+
const commonConfig = {
|
|
43
|
+
storageState: isAuthMode ? (0, _readConfigFile.getAuthFilePath)(_path.default.resolve(process.cwd(), authFilePath)) : {}
|
|
44
|
+
};
|
|
45
|
+
smokeTestProject.setTestDir(smokeTestDir);
|
|
46
|
+
smokeTestProject.setRetries(0);
|
|
47
|
+
smokeTestProject.setUse({
|
|
48
|
+
...commonConfig
|
|
49
|
+
});
|
|
50
|
+
smokeTestProject.setDependencies(isAuthMode ? ['setup'] : []);
|
|
51
|
+
const smokeTestProjectConfig = [smokeTestProject.getProperties()];
|
|
52
|
+
return smokeTestProjectConfig;
|
|
53
|
+
}
|
|
54
|
+
function defaultConfig() {
|
|
55
|
+
const defaultProject = new _Project.Project('default');
|
|
56
|
+
const testDir = (0, _configUtils.getTestDir)(bddMode, {
|
|
57
|
+
featureFilesFolder: (0, _configUtils.getPathsForFeatureFiles)(process.cwd()),
|
|
58
|
+
stepDefinitionsFolder: _path.default.join(process.cwd(), 'uat', '**', 'steps', '*.spec.js'),
|
|
59
|
+
outputDir: _path.default.join(process.cwd(), 'uat', '.features-gen'),
|
|
60
|
+
uatPath: _path.default.join(process.cwd(), 'uat')
|
|
61
|
+
});
|
|
62
|
+
const use = {
|
|
63
|
+
trace,
|
|
64
|
+
video,
|
|
65
|
+
viewport,
|
|
66
|
+
testIdAttribute
|
|
67
|
+
};
|
|
68
|
+
defaultProject.setUse(use);
|
|
69
|
+
defaultProject.setTestDir(testDir);
|
|
70
|
+
defaultProject.setDependencies(isSmokeTest ? ['smokeTest'] : []);
|
|
71
|
+
const defaultProjectConfig = [defaultProject.getProperties()];
|
|
72
|
+
return defaultProjectConfig;
|
|
73
|
+
}
|
|
74
|
+
function cleanupConfig() {
|
|
75
|
+
const cleanupProject = new _Project.Project('cleanup');
|
|
76
|
+
cleanupProject.setTestMatch(/.*\.teardown\.js/);
|
|
77
|
+
cleanupProject.setTestDir(_path.default.join(process.cwd(), 'uat'));
|
|
78
|
+
const cleanupProjectConfig = [cleanupProject.getProperties()];
|
|
79
|
+
return cleanupProjectConfig;
|
|
80
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _test = require("@playwright/test");
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _readConfigFile = require("../readConfigFile");
|
|
11
|
+
var _configUtils = require("./config-utils");
|
|
12
|
+
var _ProjectConfiguration = require("./ProjectConfiguration");
|
|
13
|
+
const uatConfig = (0, _readConfigFile.generateConfigFromFile)();
|
|
14
|
+
const {
|
|
15
|
+
bddMode,
|
|
16
|
+
browsers,
|
|
17
|
+
isSmokeTest,
|
|
18
|
+
isAuthMode,
|
|
19
|
+
openReportOn,
|
|
20
|
+
reportPath,
|
|
21
|
+
expectTimeout,
|
|
22
|
+
testTimeout,
|
|
23
|
+
authFilePath,
|
|
24
|
+
viewport,
|
|
25
|
+
globalTimeout,
|
|
26
|
+
customReporter,
|
|
27
|
+
trace,
|
|
28
|
+
video,
|
|
29
|
+
testIdAttribute
|
|
30
|
+
} = uatConfig;
|
|
31
|
+
const projects = (0, _configUtils.getProjects)({
|
|
32
|
+
browsers,
|
|
33
|
+
isAuthMode,
|
|
34
|
+
isSmokeTest,
|
|
35
|
+
authFilePath,
|
|
36
|
+
expectTimeout,
|
|
37
|
+
testTimeout,
|
|
38
|
+
viewport
|
|
39
|
+
});
|
|
40
|
+
let reporter = [['html', {
|
|
41
|
+
outputFolder: reportPath,
|
|
42
|
+
open: openReportOn
|
|
43
|
+
}], ['list'], ['json', {
|
|
44
|
+
outputFile: _path.default.join(process.cwd(), 'uat', 'test-results', 'playwright-test-results.json')
|
|
45
|
+
}], ['./custom-reporter.js'], ['./qc-custom-reporter.js']];
|
|
46
|
+
if (customReporter) {
|
|
47
|
+
reporter = [customReporter, ...reporter];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Playwright configuration object
|
|
52
|
+
*
|
|
53
|
+
* @returns {import('@playwright/test').PlaywrightTestConfig}
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
const use = {
|
|
57
|
+
trace,
|
|
58
|
+
video,
|
|
59
|
+
viewport,
|
|
60
|
+
testIdAttribute
|
|
61
|
+
};
|
|
62
|
+
const testDir = (0, _configUtils.getTestDir)(bddMode, {
|
|
63
|
+
featureFilesFolder: (0, _configUtils.getPathsForFeatureFiles)(process.cwd()),
|
|
64
|
+
stepDefinitionsFolder: _path.default.join(process.cwd(), 'uat', '**', 'steps', '*.spec.js'),
|
|
65
|
+
outputDir: _path.default.join(process.cwd(), 'uat', '.features-gen'),
|
|
66
|
+
uatPath: _path.default.join(process.cwd(), 'uat')
|
|
67
|
+
});
|
|
68
|
+
function getPlaywrightConfig() {
|
|
69
|
+
const smokeTestProject = isSmokeTest ? (0, _ProjectConfiguration.smokeTestConfig)() : [];
|
|
70
|
+
const setupProject = isAuthMode ? (0, _ProjectConfiguration.setupConfig)() : [];
|
|
71
|
+
const isTearDown = JSON.parse(process.env.tearDown);
|
|
72
|
+
const cleanupProject = isTearDown ? (0, _ProjectConfiguration.cleanupConfig)() : [];
|
|
73
|
+
const playwrightConfig = {
|
|
74
|
+
testDir,
|
|
75
|
+
globalTimeout: globalTimeout || 3600000,
|
|
76
|
+
outputDir: _path.default.join(process.cwd(), 'uat', 'test-results'),
|
|
77
|
+
fullyParallel: true,
|
|
78
|
+
reporter,
|
|
79
|
+
timeout: testTimeout,
|
|
80
|
+
expect: {
|
|
81
|
+
timeout: expectTimeout
|
|
82
|
+
},
|
|
83
|
+
use,
|
|
84
|
+
projects: [...setupProject, ...smokeTestProject, ...projects, ...cleanupProject],
|
|
85
|
+
...uatConfig
|
|
86
|
+
};
|
|
87
|
+
return playwrightConfig;
|
|
88
|
+
}
|
|
89
|
+
var _default = exports.default = (0, _test.defineConfig)(getPlaywrightConfig());
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getBrowsersList = getBrowsersList;
|
|
8
|
+
exports.getModulePathForFeatureFiles = getModulePathForFeatureFiles;
|
|
9
|
+
exports.getPathsForFeatureFiles = getPathsForFeatureFiles;
|
|
10
|
+
exports.getProjects = getProjects;
|
|
11
|
+
exports.getTestDir = getTestDir;
|
|
12
|
+
var _test = require("@playwright/test");
|
|
13
|
+
var _path = _interopRequireDefault(require("path"));
|
|
14
|
+
var _readConfigFile = require("../readConfigFile");
|
|
15
|
+
var _playwrightBdd = require("playwright-bdd");
|
|
16
|
+
var _logger = require("../../../utils/logger");
|
|
17
|
+
var _browserTypes = require("../constants/browserTypes");
|
|
18
|
+
var _fileUtils = require("../../../utils/fileUtils");
|
|
19
|
+
/**
|
|
20
|
+
** Playwright project configuration
|
|
21
|
+
* @returns {import('@playwright/test').Project}
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
function getBrowserConfig({
|
|
25
|
+
browserName,
|
|
26
|
+
isAuthMode,
|
|
27
|
+
isSmokeTest,
|
|
28
|
+
authFilePath,
|
|
29
|
+
expectTimeout,
|
|
30
|
+
testTimeout,
|
|
31
|
+
viewport
|
|
32
|
+
}) {
|
|
33
|
+
const browser = browserName.toLowerCase();
|
|
34
|
+
const commonConfig = {
|
|
35
|
+
viewport,
|
|
36
|
+
storageState: isAuthMode ? (0, _readConfigFile.getAuthFilePath)(_path.default.resolve(process.cwd(), authFilePath)) : {}
|
|
37
|
+
};
|
|
38
|
+
// Determine dependencies based on the mode and smoke test status
|
|
39
|
+
let dependencies = isAuthMode ? ['setup'] : [];
|
|
40
|
+
dependencies = isSmokeTest ? [...dependencies, 'smokeTest'] : dependencies;
|
|
41
|
+
if (browser === 'chrome') {
|
|
42
|
+
return {
|
|
43
|
+
name: _browserTypes.BROWSER_PROJECT_MAPPING.CHROME,
|
|
44
|
+
use: {
|
|
45
|
+
..._test.devices['Desktop Chrome'],
|
|
46
|
+
...commonConfig
|
|
47
|
+
},
|
|
48
|
+
dependencies,
|
|
49
|
+
timeout: testTimeout,
|
|
50
|
+
expect: {
|
|
51
|
+
timeout: expectTimeout
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
} else if (browser === 'edge') {
|
|
55
|
+
return {
|
|
56
|
+
name: _browserTypes.BROWSER_PROJECT_MAPPING.EDGE,
|
|
57
|
+
timeout: testTimeout,
|
|
58
|
+
expect: {
|
|
59
|
+
timeout: expectTimeout
|
|
60
|
+
},
|
|
61
|
+
use: {
|
|
62
|
+
..._test.devices['Desktop Chrome'],
|
|
63
|
+
channel: 'msedge',
|
|
64
|
+
...commonConfig
|
|
65
|
+
},
|
|
66
|
+
dependencies
|
|
67
|
+
};
|
|
68
|
+
} else if (browser === 'firefox') {
|
|
69
|
+
return {
|
|
70
|
+
name: _browserTypes.BROWSER_PROJECT_MAPPING.FIREFOX,
|
|
71
|
+
timeout: 2 * testTimeout,
|
|
72
|
+
expect: {
|
|
73
|
+
timeout: 2 * expectTimeout
|
|
74
|
+
},
|
|
75
|
+
use: {
|
|
76
|
+
..._test.devices['Desktop Firefox'],
|
|
77
|
+
...commonConfig
|
|
78
|
+
},
|
|
79
|
+
dependencies
|
|
80
|
+
};
|
|
81
|
+
} else if (browser === 'safari') {
|
|
82
|
+
return {
|
|
83
|
+
name: _browserTypes.BROWSER_PROJECT_MAPPING.SAFARI,
|
|
84
|
+
timeout: 4 * testTimeout,
|
|
85
|
+
expect: {
|
|
86
|
+
timeout: 4 * expectTimeout
|
|
87
|
+
},
|
|
88
|
+
use: {
|
|
89
|
+
..._test.devices['Desktop Safari'],
|
|
90
|
+
...commonConfig
|
|
91
|
+
},
|
|
92
|
+
dependencies
|
|
93
|
+
};
|
|
94
|
+
} else {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
*
|
|
101
|
+
* @param {*} param0
|
|
102
|
+
* @returns {import('@playwright/test').Project[]}
|
|
103
|
+
*/
|
|
104
|
+
function getProjects({
|
|
105
|
+
browsers,
|
|
106
|
+
isAuthMode,
|
|
107
|
+
isSmokeTest,
|
|
108
|
+
authFilePath,
|
|
109
|
+
expectTimeout,
|
|
110
|
+
testTimeout,
|
|
111
|
+
viewport
|
|
112
|
+
}) {
|
|
113
|
+
return browsers.map(browserName => getBrowserConfig({
|
|
114
|
+
browserName,
|
|
115
|
+
isAuthMode,
|
|
116
|
+
isSmokeTest,
|
|
117
|
+
authFilePath,
|
|
118
|
+
expectTimeout,
|
|
119
|
+
testTimeout,
|
|
120
|
+
viewport
|
|
121
|
+
})).filter(Boolean);
|
|
122
|
+
}
|
|
123
|
+
function getBrowsersList(browserFromArgs) {
|
|
124
|
+
if (browserFromArgs) {
|
|
125
|
+
if (typeof browserFromArgs === 'string') {
|
|
126
|
+
let listOfbrowsers = browserFromArgs.split(',').map(browser => browser.trim().toLowerCase());
|
|
127
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, 'Using browsers from command line args');
|
|
128
|
+
return listOfbrowsers;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
function getPathsForFeatureFiles(cwd) {
|
|
134
|
+
if (process.env.isRerunFailedCases) {
|
|
135
|
+
let {
|
|
136
|
+
reportPath
|
|
137
|
+
} = (0, _readConfigFile.generateConfigFromFile)();
|
|
138
|
+
let filePathFromArgs = process.env.filePath;
|
|
139
|
+
let filePath = filePathFromArgs ? filePathFromArgs : reportPath;
|
|
140
|
+
const testSummary = (0, _fileUtils.readFileContents)(filePath);
|
|
141
|
+
if (testSummary !== null) {
|
|
142
|
+
const {
|
|
143
|
+
failed = []
|
|
144
|
+
} = JSON.parse(testSummary);
|
|
145
|
+
const casesToRun = failed.map(filePath => _path.default.join(cwd, 'uat', filePath.replace(/\.spec\.js$|\.js$/, '')));
|
|
146
|
+
return casesToRun;
|
|
147
|
+
} else {
|
|
148
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Unable to read test summary from the ${reportPath}. Verify If File Exists in the path`);
|
|
149
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, 'Going to run all test cases');
|
|
150
|
+
}
|
|
151
|
+
} else if (process.env.modules !== 'undefined' && process.env.modules.length > 0) {
|
|
152
|
+
let modules = process.env.modules;
|
|
153
|
+
let moduleList = modules.split(',');
|
|
154
|
+
return getModulePathForFeatureFiles(moduleList);
|
|
155
|
+
}
|
|
156
|
+
return [_path.default.join(cwd, 'uat', 'modules', '**', '*.feature')];
|
|
157
|
+
}
|
|
158
|
+
function getModulePathForFeatureFiles(moduleList) {
|
|
159
|
+
let validModuleList = [];
|
|
160
|
+
moduleList.forEach(moduleName => {
|
|
161
|
+
let modulePath = _path.default.join(process.cwd(), 'uat', 'modules', '**', `${moduleName}`);
|
|
162
|
+
if ((0, _fileUtils.checkIfFolderExistsWithPattern)(modulePath)) {
|
|
163
|
+
validModuleList.push(_path.default.join(modulePath, '**', '*.feature'));
|
|
164
|
+
} else {
|
|
165
|
+
validModuleList = [];
|
|
166
|
+
throw new Error(`Module ${moduleName} does not exist. We have not triggered the execution for this module`);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
return validModuleList;
|
|
170
|
+
}
|
|
171
|
+
function getTestDir(bddMode, {
|
|
172
|
+
featureFilesFolder,
|
|
173
|
+
stepDefinitionsFolder,
|
|
174
|
+
outputDir,
|
|
175
|
+
uatPath
|
|
176
|
+
}) {
|
|
177
|
+
return bddMode ? (0, _playwrightBdd.defineBddConfig)({
|
|
178
|
+
features: featureFilesFolder,
|
|
179
|
+
steps: [stepDefinitionsFolder, require.resolve('../fixtures.js')],
|
|
180
|
+
importTestFrom: require.resolve('../fixtures.js'),
|
|
181
|
+
featuresRoot: uatPath,
|
|
182
|
+
outputDir: outputDir,
|
|
183
|
+
disableWarnings: {
|
|
184
|
+
importTestFrom: true
|
|
185
|
+
},
|
|
186
|
+
publish: true
|
|
187
|
+
}) : uatPath;
|
|
188
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
var _readline = _interopRequireDefault(require("readline"));
|
|
10
|
+
var _fileUtils = require("../../../utils/fileUtils");
|
|
11
|
+
var _readConfigFile = require("../readConfigFile");
|
|
12
|
+
var _logger = require("../../../utils/logger");
|
|
13
|
+
var _configFileNameProvider = require("../helpers/configFileNameProvider");
|
|
14
|
+
class JSONSummaryReporter {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.durationInMS = -1;
|
|
17
|
+
this.passed = [];
|
|
18
|
+
this.skipped = [];
|
|
19
|
+
this.failed = [];
|
|
20
|
+
this.warned = [];
|
|
21
|
+
this.errored = [];
|
|
22
|
+
this.interrupted = [];
|
|
23
|
+
this.timedOut = [];
|
|
24
|
+
this.flakey = [];
|
|
25
|
+
this.failedSteps = [];
|
|
26
|
+
this.status = 'unknown';
|
|
27
|
+
this.startedAt = 0;
|
|
28
|
+
this._open = (0, _readConfigFile.generateConfigFromFile)().openReportOn;
|
|
29
|
+
}
|
|
30
|
+
onBegin() {
|
|
31
|
+
this.startedAt = Date.now();
|
|
32
|
+
}
|
|
33
|
+
getTitle(test) {
|
|
34
|
+
const title = [];
|
|
35
|
+
const fileName = [];
|
|
36
|
+
let clean = true;
|
|
37
|
+
for (const s of test.titlePath()) {
|
|
38
|
+
if (s === '' && clean) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
clean = false;
|
|
42
|
+
title.push(s);
|
|
43
|
+
if (s.endsWith('.ts') || s.endsWith('.js')) {
|
|
44
|
+
fileName.push(s);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
//Using the fullTitle variable in the push will push a full test name + test description
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
fullTitle: title.join(' > '),
|
|
52
|
+
fileName: fileName[0] || ''
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
onTestEnd(test, result) {
|
|
56
|
+
const {
|
|
57
|
+
fullTitle,
|
|
58
|
+
fileName
|
|
59
|
+
} = this.getTitle(test);
|
|
60
|
+
|
|
61
|
+
// Set the status
|
|
62
|
+
const stepTitleList = result.steps.filter(step => step.error).map(step => ({
|
|
63
|
+
title: step.title,
|
|
64
|
+
error: step.error,
|
|
65
|
+
testTitle: fullTitle
|
|
66
|
+
}));
|
|
67
|
+
if (stepTitleList.length > 0) {
|
|
68
|
+
this.failedSteps = [...this.failedSteps, ...stepTitleList];
|
|
69
|
+
}
|
|
70
|
+
const status = !['passed', 'skipped'].includes(result.status) && fullTitle.includes('@warn') ? 'warned' : result.status;
|
|
71
|
+
// Logic to push the results into the correct array
|
|
72
|
+
if (result.status === 'passed' && result.retry >= 1) {
|
|
73
|
+
this.flakey.push(fileName);
|
|
74
|
+
} else {
|
|
75
|
+
this[status].push(fileName);
|
|
76
|
+
}
|
|
77
|
+
this[status].push(fileName);
|
|
78
|
+
}
|
|
79
|
+
onError(error) {
|
|
80
|
+
this.errored.push({
|
|
81
|
+
error: error.message,
|
|
82
|
+
stack: error.stack
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
onEnd(result) {
|
|
86
|
+
this.durationInMS = Date.now() - this.startedAt;
|
|
87
|
+
this.status = result.status;
|
|
88
|
+
|
|
89
|
+
// removing duplicate tests from passed array
|
|
90
|
+
this.passed = this.passed.filter((element, index) => {
|
|
91
|
+
return this.passed.indexOf(element) === index;
|
|
92
|
+
});
|
|
93
|
+
// removing duplicate tests from the failed array
|
|
94
|
+
this.failed = this.failed.filter((element, index) => {
|
|
95
|
+
if (!this.passed.includes(element)) {
|
|
96
|
+
return this.failed.indexOf(element) === index;
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
// removing duplicate tests from the skipped array
|
|
100
|
+
this.skipped = this.skipped.filter((element, index) => {
|
|
101
|
+
return this.skipped.indexOf(element) === index;
|
|
102
|
+
});
|
|
103
|
+
// removing duplicate tests from the timedOut array
|
|
104
|
+
this.timedOut = this.timedOut.filter((element, index) => {
|
|
105
|
+
return this.timedOut.indexOf(element) === index;
|
|
106
|
+
});
|
|
107
|
+
// removing duplicate tests from the interrupted array
|
|
108
|
+
this.interrupted = this.interrupted.filter((element, index) => {
|
|
109
|
+
return this.interrupted.indexOf(element) === index;
|
|
110
|
+
});
|
|
111
|
+
this.errored = this.errored.filter((element, index) => {
|
|
112
|
+
return this.errored.indexOf(element) === index;
|
|
113
|
+
});
|
|
114
|
+
if (this.errored.length > 0) {
|
|
115
|
+
// Reflect setup failures in the final report status
|
|
116
|
+
this.status = "failed";
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// fs.writeFileSync('./summary.json', JSON.stringify(this, null, ' '));
|
|
120
|
+
let {
|
|
121
|
+
reportPath
|
|
122
|
+
} = (0, _readConfigFile.generateConfigFromFile)();
|
|
123
|
+
(0, _fileUtils.writeFileContents)(_path.default.join(reportPath, './', (0, _configFileNameProvider.getReportFileName)()), JSON.stringify(this, null, ' '));
|
|
124
|
+
}
|
|
125
|
+
onExit() {
|
|
126
|
+
const shouldClearLastLine = this._open !== 'always' || this._open !== 'on-failure';
|
|
127
|
+
if (shouldClearLastLine) {
|
|
128
|
+
/**Below code is to replace the playwright default report commond with abstraction tool command */
|
|
129
|
+
_readline.default.moveCursor(process.stdout, 0, -2); // up two line
|
|
130
|
+
_readline.default.clearLine(process.stdout, 1); // from cursor to end
|
|
131
|
+
_logger.Logger.log(_logger.Logger.SUCCESS_TYPE, 'npx ZDTestingFramework report or npm run uat-report');
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
var _default = exports.default = JSONSummaryReporter;
|