@zohodesk/testinglibrary 0.0.2 → 0.0.3-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 +23 -0
- package/.eslintrc.js +31 -0
- package/.gitlab-ci.yml +163 -0
- package/.prettierrc +6 -0
- package/README.md +81 -1
- package/bin/cli.js +1 -1
- package/bin/postinstall.js +1 -16
- package/{src → build}/core/jest/preprocessor/jsPreprocessor.js +4 -6
- package/{src → build}/core/jest/runner/jest-runner.js +17 -15
- package/build/core/jest/setup/index.js +3 -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 +44 -0
- package/build/core/playwright/builtInFixtures/page.js +101 -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 +18 -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/loginSteps.js +50 -0
- package/build/core/playwright/helpers/checkAuthDirectory.js +27 -0
- package/build/core/playwright/helpers/configFileNameProvider.js +31 -0
- package/build/core/playwright/helpers/fileMutex.js +71 -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 +147 -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 +110 -0
- package/build/core/playwright/setup/config-creator.js +113 -0
- package/build/core/playwright/setup/config-utils.js +189 -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 +116 -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__/configFileNameProvider.test.js +34 -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/build/utils/cliArgsToObject.js +72 -0
- package/build/utils/fileUtils.js +89 -0
- package/build/utils/getFilePath.js +11 -0
- package/build/utils/logger.js +57 -0
- package/build/utils/rootPath.js +53 -0
- package/build/utils/stepDefinitionsFormatter.js +11 -0
- package/changelog.md +156 -0
- package/jest.config.js +29 -11
- package/npm-shrinkwrap.json +11537 -4681
- package/package.json +45 -16
- package/playwright.config.js +6 -56
- 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 -18
- package/src/core/playwright/report-generator.js +0 -43
- package/src/core/playwright/test-runner.js +0 -64
- package/src/index.js +0 -9
- package/src/lib/cli.js +0 -35
- package/src/utils/cliArgsToObject.js +0 -35
- package/src/utils/getFilePath.js +0 -9
- package/src/utils/logger.js +0 -28
- package/src/utils/rootPath.js +0 -51
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = exports.default = {
|
|
8
|
+
unauthenticatedPage: async ({
|
|
9
|
+
browser
|
|
10
|
+
}, use) => {
|
|
11
|
+
const context = await browser.newContext({
|
|
12
|
+
storageState: null
|
|
13
|
+
});
|
|
14
|
+
const unauthenticatedPage = await context.newPage();
|
|
15
|
+
await use(unauthenticatedPage);
|
|
16
|
+
await context.close();
|
|
17
|
+
}
|
|
18
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
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 _fileUtils = require("../../utils/fileUtils");
|
|
10
|
+
var _logger = require("../../utils/logger");
|
|
11
|
+
var _readConfigFile = require("./readConfigFile");
|
|
12
|
+
var _checkAuthDirectory = require("./helpers/checkAuthDirectory");
|
|
13
|
+
function deleteAuthFiles(authFilePath) {
|
|
14
|
+
authFilePath = _path.default.resolve(process.cwd(), authFilePath);
|
|
15
|
+
const authFileFolder = _path.default.dirname(authFilePath);
|
|
16
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Deleting auth files present in ${authFileFolder}`);
|
|
17
|
+
(0, _fileUtils.deleteFolder)(authFileFolder);
|
|
18
|
+
}
|
|
19
|
+
function deletePlaywrightReport(reportPath) {
|
|
20
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Deleting Playwright report ${reportPath}`);
|
|
21
|
+
(0, _fileUtils.deleteFolder)(reportPath);
|
|
22
|
+
}
|
|
23
|
+
function deleteGeneratedFeatures() {
|
|
24
|
+
const featuresGenPath = _path.default.resolve(process.cwd(), 'uat', '.features-gen');
|
|
25
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Deleting generated features at ${featuresGenPath}`);
|
|
26
|
+
(0, _fileUtils.deleteFolder)(featuresGenPath);
|
|
27
|
+
}
|
|
28
|
+
function deleteLockFiles() {
|
|
29
|
+
const lockFilePath = (0, _checkAuthDirectory.getLockDirectoryPath)();
|
|
30
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Deleting lock files at ${lockFilePath}`);
|
|
31
|
+
(0, _fileUtils.deleteFolder)(lockFilePath);
|
|
32
|
+
}
|
|
33
|
+
function clearCaches() {
|
|
34
|
+
try {
|
|
35
|
+
const {
|
|
36
|
+
authFilePath,
|
|
37
|
+
reportPath
|
|
38
|
+
} = (0, _readConfigFile.generateConfigFromFile)();
|
|
39
|
+
deleteAuthFiles(authFilePath);
|
|
40
|
+
deletePlaywrightReport(reportPath);
|
|
41
|
+
deleteGeneratedFeatures();
|
|
42
|
+
deleteLockFiles();
|
|
43
|
+
_logger.Logger.log(_logger.Logger.SUCCESS_TYPE, 'Caches Cleared. Now you can try running npm run uat');
|
|
44
|
+
} catch (err) {
|
|
45
|
+
_logger.Logger.error(err);
|
|
46
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, 'Error While clearing cookies. Try manually delete folder uat/playwright and uat/playwright-report');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
var _default = exports.default = clearCaches;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = generateCodegen;
|
|
8
|
+
var _child_process = require("child_process");
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _logger = require("../../utils/logger");
|
|
11
|
+
var _rootPath = require("../../utils/rootPath");
|
|
12
|
+
function generateCodegen() {
|
|
13
|
+
const domainUrl = process.argv.slice(3);
|
|
14
|
+
const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
|
|
15
|
+
const command = playwrightPath;
|
|
16
|
+
const args = ['codegen'].concat(domainUrl);
|
|
17
|
+
const childProcess = (0, _child_process.spawn)(command, args, {
|
|
18
|
+
stdio: 'inherit'
|
|
19
|
+
});
|
|
20
|
+
childProcess.on('error', error => {
|
|
21
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, error);
|
|
22
|
+
});
|
|
23
|
+
childProcess.on('exit', (code, signal) => {
|
|
24
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Child Process Exited with Code ${code} and Signal ${signal}`);
|
|
25
|
+
process.exit();
|
|
26
|
+
});
|
|
27
|
+
process.on('exit', () => {
|
|
28
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, 'Terminating Playwright Process...');
|
|
29
|
+
//childProcess.kill();
|
|
30
|
+
return;
|
|
31
|
+
});
|
|
32
|
+
process.on('SIGINT', () => {
|
|
33
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, 'Cleaning up...');
|
|
34
|
+
//childProcess.kill();
|
|
35
|
+
process.exit();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Another way to record. Below way will load the url in autheticated state if present
|
|
40
|
+
// function generateCodegen() {
|
|
41
|
+
// (async () => {
|
|
42
|
+
// // Make sure to run headed.
|
|
43
|
+
// const browser = await chromium.launch({ headless: false });
|
|
44
|
+
|
|
45
|
+
// // Setup context however you like.
|
|
46
|
+
// const context = await browser.newContext({ storageState: path.resolve(process.cwd(), 'uat', 'playwright/.auth/user.json') });
|
|
47
|
+
// await context.route('**/*', route => route.continue());
|
|
48
|
+
|
|
49
|
+
// // Pause the page, and start recording manually.
|
|
50
|
+
// const page = await context.newPage();
|
|
51
|
+
// console.log(userArgs.join(''));
|
|
52
|
+
// await page.goto(`https://${userArgs.join('')}`);
|
|
53
|
+
// await page.pause();
|
|
54
|
+
// })();
|
|
55
|
+
// }
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _ConfigurationHelper = require("./ConfigurationHelper");
|
|
4
|
+
class Configuration {
|
|
5
|
+
properties = {};
|
|
6
|
+
constructor(props) {
|
|
7
|
+
this.properties = props;
|
|
8
|
+
}
|
|
9
|
+
add(key, value) {
|
|
10
|
+
this.properties[key] = value;
|
|
11
|
+
}
|
|
12
|
+
addAll(newConfig) {
|
|
13
|
+
this.properties = (0, _ConfigurationHelper.combineConfiguration)(this.properties, newConfig.getAll());
|
|
14
|
+
}
|
|
15
|
+
get(key) {
|
|
16
|
+
return this.properties[key];
|
|
17
|
+
}
|
|
18
|
+
getAll() {
|
|
19
|
+
return this.properties;
|
|
20
|
+
}
|
|
21
|
+
delete(key) {
|
|
22
|
+
delete this.properties[key];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
module.exports = Configuration;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.combineConfiguration = combineConfiguration;
|
|
8
|
+
exports.getApplicationConfig = getApplicationConfig;
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _logger = require("../../../utils/logger");
|
|
11
|
+
var _configFileNameProvider = require("../helpers/configFileNameProvider");
|
|
12
|
+
var _mergeObjects = require("../helpers/mergeObjects");
|
|
13
|
+
var _fs = require("fs");
|
|
14
|
+
const Configuration = require("./Configuration");
|
|
15
|
+
function combineConfiguration(defaultConfig, userConfiguration) {
|
|
16
|
+
let configurationObj = {};
|
|
17
|
+
Object.keys(userConfiguration).forEach(configKey => {
|
|
18
|
+
let configValue = userConfiguration[configKey];
|
|
19
|
+
if (configValue !== null && configValue !== undefined) {
|
|
20
|
+
configurationObj[configKey] = configValue;
|
|
21
|
+
} else if (defaultConfig[configKey]) {
|
|
22
|
+
configurationObj[configKey] = defaultConfig[configKey];
|
|
23
|
+
} else {
|
|
24
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `key - ${configKey} is not yet supported in uat configuration. This will not be used while creating playwright configuration`);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return (0, _mergeObjects.mergeObjects)(defaultConfig, configurationObj);
|
|
28
|
+
}
|
|
29
|
+
function getApplicationConfig(mode) {
|
|
30
|
+
let filePath = "";
|
|
31
|
+
try {
|
|
32
|
+
filePath = _path.default.resolve(process.cwd(), (0, _configFileNameProvider.getUATFileName)(mode));
|
|
33
|
+
if (!(0, _fs.existsSync)(filePath)) {
|
|
34
|
+
throw new Error("Exception while getting the uat file from the application - " + filePath);
|
|
35
|
+
}
|
|
36
|
+
const config = require(filePath);
|
|
37
|
+
return config;
|
|
38
|
+
} catch (err) {
|
|
39
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Founded Path - ${filePath} Application config file not Exist ...`);
|
|
40
|
+
_logger.Logger.error(err);
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _cliArgsToObject = require("../../../utils/cliArgsToObject");
|
|
4
|
+
class UserArgs {
|
|
5
|
+
static parseToObject(config) {
|
|
6
|
+
return (0, _cliArgsToObject.cliArgsToObject)(config);
|
|
7
|
+
}
|
|
8
|
+
static parseToArgs(object) {
|
|
9
|
+
return (0, _cliArgsToObject.objectToCliArgs)(object);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
module.exports = UserArgs;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.BROWSER_PROJECT_MAPPING = void 0;
|
|
7
|
+
const BROWSER_PROJECT_MAPPING = exports.BROWSER_PROJECT_MAPPING = {
|
|
8
|
+
CHROME: 'chromium',
|
|
9
|
+
EDGE: 'Microsoft Edge',
|
|
10
|
+
FIREFOX: 'firefox',
|
|
11
|
+
SAFARI: 'webkit'
|
|
12
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.initializeEnvConfig = initializeEnvConfig;
|
|
8
|
+
var _fs = require("fs");
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _configFileNameProvider = require("./helpers/configFileNameProvider");
|
|
11
|
+
var _logger = require("../../utils/logger");
|
|
12
|
+
var _getUsers = require("./helpers/auth/getUsers");
|
|
13
|
+
function setEnvironmentVariables(configJSON) {
|
|
14
|
+
for (const key in configJSON) {
|
|
15
|
+
process.env[key] = configJSON[key];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function addHelperLogsForEnvInitialization() {
|
|
19
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Mode under which test cases should run has not been specified in args.`);
|
|
20
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Please specify --mode='dev/prod' while running ZDTestingFramework test`);
|
|
21
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Going to use default mode as dev`);
|
|
22
|
+
}
|
|
23
|
+
function initializeEnvConfig(mode, isAuthMode) {
|
|
24
|
+
try {
|
|
25
|
+
if (!mode) {
|
|
26
|
+
addHelperLogsForEnvInitialization();
|
|
27
|
+
mode = 'dev';
|
|
28
|
+
}
|
|
29
|
+
const configFile = (0, _fs.readFileSync)(_path.default.resolve(process.cwd(), `./${(0, _configFileNameProvider.getEnvConfigFilePath)(mode)}`));
|
|
30
|
+
const configJSON = JSON.parse(configFile);
|
|
31
|
+
setEnvironmentVariables({
|
|
32
|
+
...configJSON,
|
|
33
|
+
mode
|
|
34
|
+
});
|
|
35
|
+
if (isAuthMode) {
|
|
36
|
+
const defaultActorConfiguration = (0, _getUsers.getDefaultActorConf)();
|
|
37
|
+
setEnvironmentVariables(defaultActorConfiguration);
|
|
38
|
+
}
|
|
39
|
+
} catch (err) {
|
|
40
|
+
_logger.Logger.error(err);
|
|
41
|
+
throw new Error(`Config File Not Exists. Please provide a config file ${(0, _configFileNameProvider.getEnvConfigFilePath)(mode)} to intiailize the environment variables `);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _test = require("@playwright/test");
|
|
5
|
+
var _playwrightBdd = require("playwright-bdd");
|
|
6
|
+
var _readConfigFile = require("./readConfigFile");
|
|
7
|
+
var _builtInFixtures = _interopRequireDefault(require("./builtInFixtures"));
|
|
8
|
+
var _getUserFixtures = _interopRequireDefault(require("./helpers/getUserFixtures"));
|
|
9
|
+
const {
|
|
10
|
+
bddMode
|
|
11
|
+
} = (0, _readConfigFile.generateConfigFromFile)();
|
|
12
|
+
let base = bddMode ? _playwrightBdd.test : _test.test;
|
|
13
|
+
const buildInFixtures = (0, _builtInFixtures.default)(bddMode);
|
|
14
|
+
const buildInFixturesTest = base.extend({
|
|
15
|
+
...buildInFixtures
|
|
16
|
+
});
|
|
17
|
+
const userFixtures = (0, _getUserFixtures.default)();
|
|
18
|
+
const userFixturesTest = base.extend({
|
|
19
|
+
...userFixtures
|
|
20
|
+
});
|
|
21
|
+
const test = (0, _test.mergeTests)(buildInFixturesTest, userFixturesTest);
|
|
22
|
+
module.exports = {
|
|
23
|
+
test
|
|
24
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.additionProfiles = additionProfiles;
|
|
7
|
+
var _getUsers = require("./auth/getUsers");
|
|
8
|
+
function additionProfiles(tags, editionInfo, betaFeature, portalInfo) {
|
|
9
|
+
const additionalProfileTags = tags.filter(tag => tag.startsWith('@additional_profile_'));
|
|
10
|
+
let additionalProfileActors = [];
|
|
11
|
+
if (additionalProfileTags.length > 0 && editionInfo) {
|
|
12
|
+
additionalProfileActors = additionalProfileTags.map(tag => {
|
|
13
|
+
const additionalProfile = tag.replace('@additional_profile_', '');
|
|
14
|
+
return (0, _getUsers.getUserForSelectedEditionAndProfile)(editionInfo, additionalProfile, betaFeature, portalInfo);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return additionalProfileActors;
|
|
18
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
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 _getUrlOrigin = _interopRequireDefault(require("./getUrlOrigin"));
|
|
9
|
+
async function accountLogin(page, useremail, password) {
|
|
10
|
+
await page.locator('#login_id').fill(useremail);
|
|
11
|
+
await page.locator('#nextbtn').click();
|
|
12
|
+
await page.locator('#password').fill(password);
|
|
13
|
+
await page.locator('#nextbtn').click();
|
|
14
|
+
const domainUrlOrigin = (0, _getUrlOrigin.default)(process.env.domain);
|
|
15
|
+
await page.waitForNavigation();
|
|
16
|
+
if (!page.url().includes(domainUrlOrigin)) {
|
|
17
|
+
await page.goto(domainUrlOrigin);
|
|
18
|
+
}
|
|
19
|
+
await page.waitForURL(`${domainUrlOrigin}/**`);
|
|
20
|
+
}
|
|
21
|
+
var _default = exports.default = accountLogin;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getAuthFileDirectory = getAuthFileDirectory;
|
|
8
|
+
exports.loadCookiesIfPresent = loadCookiesIfPresent;
|
|
9
|
+
exports.verifyIfCookieFileExists = verifyIfCookieFileExists;
|
|
10
|
+
var _path = _interopRequireDefault(require("path"));
|
|
11
|
+
var _fs = require("fs");
|
|
12
|
+
var _readConfigFile = require("../../readConfigFile");
|
|
13
|
+
var _logger = require("../../../../utils/logger");
|
|
14
|
+
/* eslint-disable no-console */
|
|
15
|
+
|
|
16
|
+
function getAuthFileDirectory() {
|
|
17
|
+
const {
|
|
18
|
+
uatDirectory
|
|
19
|
+
} = (0, _readConfigFile.generateConfigFromFile)();
|
|
20
|
+
return _path.default.resolve(_path.default.join(uatDirectory, 'playwright', '.auth'));
|
|
21
|
+
}
|
|
22
|
+
function verifyIfCookieFileExists(authFile) {
|
|
23
|
+
return (0, _fs.existsSync)(authFile);
|
|
24
|
+
}
|
|
25
|
+
function convertCookiesToParse(cookies, authFilePath) {
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse(cookies);
|
|
28
|
+
} catch (err) {
|
|
29
|
+
_logger.Logger.error(err);
|
|
30
|
+
throw new Error(` Error while parsing cookies ${err} \n${_path.default.resolve(process.cwd(), authFilePath)} File is Empty`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function loadCookiesIfPresent(page, authFile) {
|
|
34
|
+
if (verifyIfCookieFileExists(authFile)) {
|
|
35
|
+
const fileContent = (0, _fs.readFileSync)(authFile);
|
|
36
|
+
const stroageState = convertCookiesToParse(fileContent, authFile);
|
|
37
|
+
if (stroageState.cookies) {
|
|
38
|
+
await page.context().addCookies(stroageState.cookies);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
function getUrlOrigin(url) {
|
|
8
|
+
const {
|
|
9
|
+
origin
|
|
10
|
+
} = new URL(url);
|
|
11
|
+
return origin;
|
|
12
|
+
}
|
|
13
|
+
var _default = exports.default = getUrlOrigin;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getDefaultActor = getDefaultActor;
|
|
8
|
+
exports.getDefaultActorConf = getDefaultActorConf;
|
|
9
|
+
exports.getListOfActors = getListOfActors;
|
|
10
|
+
exports.getRunMode = getRunMode;
|
|
11
|
+
exports.getUserForSelectedEditionAndProfile = getUserForSelectedEditionAndProfile;
|
|
12
|
+
exports.isCI = isCI;
|
|
13
|
+
exports.isDevelopmentSetup = isDevelopmentSetup;
|
|
14
|
+
var _path = _interopRequireDefault(require("path"));
|
|
15
|
+
var _fs = require("fs");
|
|
16
|
+
var _readConfigFile = require("../../readConfigFile");
|
|
17
|
+
/* eslint-disable global-require */
|
|
18
|
+
function getRunMode() {
|
|
19
|
+
let {
|
|
20
|
+
mode
|
|
21
|
+
} = process.env;
|
|
22
|
+
return mode || 'dev';
|
|
23
|
+
}
|
|
24
|
+
function isCI() {
|
|
25
|
+
const mode = getRunMode();
|
|
26
|
+
return mode === 'CI' || mode === 'ci';
|
|
27
|
+
}
|
|
28
|
+
function isDevelopmentSetup() {
|
|
29
|
+
const mode = getRunMode();
|
|
30
|
+
return mode === 'DEV' || mode === 'dev';
|
|
31
|
+
}
|
|
32
|
+
function getDefaultActorConf() {
|
|
33
|
+
const {
|
|
34
|
+
uatDirectory
|
|
35
|
+
} = (0, _readConfigFile.generateConfigFromFile)();
|
|
36
|
+
const modeSettingsFile = `conf/${getRunMode()}/settings.json`;
|
|
37
|
+
const filePath = _path.default.join(uatDirectory, modeSettingsFile);
|
|
38
|
+
try {
|
|
39
|
+
if (!(0, _fs.existsSync)(filePath)) {
|
|
40
|
+
const defaultSettingsFile = _path.default.join(uatDirectory, `conf/default/settings.json`);
|
|
41
|
+
return require(defaultSettingsFile);
|
|
42
|
+
}
|
|
43
|
+
return require(filePath);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
throw new Error(`${defaultSettingFile} ${filePath} both files are missing.`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function getDefaultActor() {
|
|
49
|
+
const {
|
|
50
|
+
edition,
|
|
51
|
+
profile
|
|
52
|
+
} = getDefaultActorConf();
|
|
53
|
+
return getUserForSelectedEditionAndProfile(edition, profile);
|
|
54
|
+
}
|
|
55
|
+
function getListOfActors(betaFeature) {
|
|
56
|
+
const {
|
|
57
|
+
uatDirectory
|
|
58
|
+
} = (0, _readConfigFile.generateConfigFromFile)();
|
|
59
|
+
const mode = getRunMode();
|
|
60
|
+
let configFile = _path.default.join(uatDirectory, `conf/${mode}/actors/index.js`);
|
|
61
|
+
let betaReference = mode;
|
|
62
|
+
if (!(0, _fs.existsSync)(configFile)) {
|
|
63
|
+
configFile = _path.default.join(uatDirectory, `conf/default/actors/index.js`);
|
|
64
|
+
betaReference = "default";
|
|
65
|
+
}
|
|
66
|
+
if (betaFeature) {
|
|
67
|
+
configFile = _path.default.join(uatDirectory, `conf/${betaReference}/actors/beta/${betaFeature}/index.js`);
|
|
68
|
+
if (!(0, _fs.existsSync)(configFile)) {
|
|
69
|
+
throw new Error(`There is no beta feature configured with the name "${betaFeature}"`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
return require(configFile);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
throw new Error(`Error loading actor configuration from ${configFile}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function getUserForSelectedEditionAndProfile(preferedEdition, preferredProfile, betaFeature, testDataPortal = null) {
|
|
79
|
+
const actorsData = getListOfActors(betaFeature);
|
|
80
|
+
if (!actorsData || !actorsData.editions) {
|
|
81
|
+
throw new Error("The actors data is missing.");
|
|
82
|
+
}
|
|
83
|
+
const {
|
|
84
|
+
editions: userdata
|
|
85
|
+
} = actorsData;
|
|
86
|
+
const defaultConf = getDefaultActorConf();
|
|
87
|
+
const edition = preferedEdition || defaultConf.edition;
|
|
88
|
+
const profile = preferredProfile || defaultConf.profile;
|
|
89
|
+
let selectedProfile = {};
|
|
90
|
+
|
|
91
|
+
// TODO: We are returning the first data from array. We need to check the possiblity of having multiple users for same profile and possibly round robin
|
|
92
|
+
// For this we need to get the data from ci environment.
|
|
93
|
+
|
|
94
|
+
let testingPortal = null;
|
|
95
|
+
if (!userdata.hasOwnProperty(edition)) {
|
|
96
|
+
throw new Error(`There is no "${edition}" edition configured.`);
|
|
97
|
+
}
|
|
98
|
+
if (testDataPortal !== null) {
|
|
99
|
+
testingPortal = userdata[edition].find(editionData => editionData.orgName === testDataPortal);
|
|
100
|
+
if (!testingPortal) {
|
|
101
|
+
throw new Error(`There is no "${testDataPortal}" portal configured in "${edition}" edition.`);
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
testingPortal = userdata[edition] ? userdata[edition][0] : {};
|
|
105
|
+
}
|
|
106
|
+
const {
|
|
107
|
+
profiles,
|
|
108
|
+
...editionData
|
|
109
|
+
} = testingPortal;
|
|
110
|
+
selectedProfile = profiles.find(user => user.profile === profile);
|
|
111
|
+
if (!selectedProfile) {
|
|
112
|
+
throw new Error(`There is no "${profile}" profile configured in "${edition}" edition.`);
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
...editionData,
|
|
116
|
+
...selectedProfile
|
|
117
|
+
};
|
|
118
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
Object.defineProperty(exports, "accountLogin", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () {
|
|
10
|
+
return _accountLogin.default;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(exports, "getDefaultActor", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return _getUsers.getDefaultActor;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports, "getDefaultActorConf", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () {
|
|
22
|
+
return _getUsers.getDefaultActorConf;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
Object.defineProperty(exports, "getListOfActors", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function () {
|
|
28
|
+
return _getUsers.getListOfActors;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(exports, "getRunMode", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
get: function () {
|
|
34
|
+
return _getUsers.getRunMode;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
Object.defineProperty(exports, "getUserForSelectedEditionAndProfile", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
get: function () {
|
|
40
|
+
return _getUsers.getUserForSelectedEditionAndProfile;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
Object.defineProperty(exports, "isCI", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () {
|
|
46
|
+
return _getUsers.isCI;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
Object.defineProperty(exports, "isDevelopmentSetup", {
|
|
50
|
+
enumerable: true,
|
|
51
|
+
get: function () {
|
|
52
|
+
return _getUsers.isDevelopmentSetup;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
Object.defineProperty(exports, "loadCookiesIfPresent", {
|
|
56
|
+
enumerable: true,
|
|
57
|
+
get: function () {
|
|
58
|
+
return _checkAuthCookies.loadCookiesIfPresent;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
Object.defineProperty(exports, "performLoginSteps", {
|
|
62
|
+
enumerable: true,
|
|
63
|
+
get: function () {
|
|
64
|
+
return _loginSteps.default;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
Object.defineProperty(exports, "verifyIfCookieFileExists", {
|
|
68
|
+
enumerable: true,
|
|
69
|
+
get: function () {
|
|
70
|
+
return _checkAuthCookies.verifyIfCookieFileExists;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
var _accountLogin = _interopRequireDefault(require("./accountLogin"));
|
|
74
|
+
var _checkAuthCookies = require("./checkAuthCookies");
|
|
75
|
+
var _getUsers = require("./getUsers");
|
|
76
|
+
var _loginSteps = _interopRequireDefault(require("./loginSteps"));
|
|
@@ -0,0 +1,50 @@
|
|
|
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 _fileMutex = _interopRequireDefault(require("../fileMutex"));
|
|
10
|
+
var _fileMutexConfig = require("../../constants/fileMutexConfig");
|
|
11
|
+
var _checkAuthCookies = require("./checkAuthCookies");
|
|
12
|
+
var _checkAuthDirectory = require("../checkAuthDirectory");
|
|
13
|
+
/* eslint-disable no-console */
|
|
14
|
+
|
|
15
|
+
async function performLoginSteps(testInfo, isLoggedIn, loginSteps) {
|
|
16
|
+
let {
|
|
17
|
+
page,
|
|
18
|
+
authFilePrefix,
|
|
19
|
+
email
|
|
20
|
+
} = testInfo;
|
|
21
|
+
authFilePrefix = authFilePrefix || email;
|
|
22
|
+
const authFile = _path.default.resolve(_path.default.join((0, _checkAuthCookies.getAuthFileDirectory)(), `${authFilePrefix}-cookies.json`));
|
|
23
|
+
const lockFileName = email.replace(/[@.]/g, '_');
|
|
24
|
+
const fileMutex = new _fileMutex.default((0, _checkAuthDirectory.getLockDirectoryPath)(), lockFileName, _fileMutexConfig.fileDeletionTimeoutConfig);
|
|
25
|
+
let loginUsingCookie = false;
|
|
26
|
+
try {
|
|
27
|
+
if ((0, _checkAuthCookies.verifyIfCookieFileExists)(authFile)) {
|
|
28
|
+
console.log(`${email} Cookie file exists. Loading cookies, worker index - ${process.env.TEST_WORKER_INDEX}`);
|
|
29
|
+
loginUsingCookie = true;
|
|
30
|
+
} else {
|
|
31
|
+
await fileMutex.acquire();
|
|
32
|
+
}
|
|
33
|
+
await (0, _checkAuthCookies.loadCookiesIfPresent)(page, authFile);
|
|
34
|
+
const isAlreadyLoggedIn = await isLoggedIn(testInfo);
|
|
35
|
+
if (!isAlreadyLoggedIn) {
|
|
36
|
+
await loginSteps(testInfo);
|
|
37
|
+
await isLoggedIn(testInfo);
|
|
38
|
+
await page.context().storageState({
|
|
39
|
+
path: authFile
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
} catch (error) {
|
|
43
|
+
console.error(`Error during login for ${email}:`, error);
|
|
44
|
+
} finally {
|
|
45
|
+
if (!loginUsingCookie) {
|
|
46
|
+
await fileMutex.release();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
var _default = exports.default = performLoginSteps;
|