@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.
Files changed (114) hide show
  1. package/.babelrc +23 -0
  2. package/.eslintrc.js +31 -0
  3. package/.gitlab-ci.yml +163 -0
  4. package/.prettierrc +6 -0
  5. package/README.md +81 -1
  6. package/bin/cli.js +1 -1
  7. package/bin/postinstall.js +1 -16
  8. package/{src → build}/core/jest/preprocessor/jsPreprocessor.js +4 -6
  9. package/{src → build}/core/jest/runner/jest-runner.js +17 -15
  10. package/build/core/jest/setup/index.js +3 -0
  11. package/build/core/playwright/builtInFixtures/addTags.js +19 -0
  12. package/build/core/playwright/builtInFixtures/cacheLayer.js +13 -0
  13. package/build/core/playwright/builtInFixtures/context.js +32 -0
  14. package/build/core/playwright/builtInFixtures/executionContext.js +17 -0
  15. package/build/core/playwright/builtInFixtures/i18N.js +41 -0
  16. package/build/core/playwright/builtInFixtures/index.js +44 -0
  17. package/build/core/playwright/builtInFixtures/page.js +101 -0
  18. package/build/core/playwright/builtInFixtures/unauthenticatedPage.js +18 -0
  19. package/build/core/playwright/clear-caches.js +49 -0
  20. package/build/core/playwright/codegen.js +55 -0
  21. package/build/core/playwright/configuration/Configuration.js +25 -0
  22. package/build/core/playwright/configuration/ConfigurationHelper.js +43 -0
  23. package/build/core/playwright/configuration/UserArgs.js +12 -0
  24. package/build/core/playwright/constants/browserTypes.js +12 -0
  25. package/build/core/playwright/constants/fileMutexConfig.js +9 -0
  26. package/build/core/playwright/custom-commands.js +7 -0
  27. package/build/core/playwright/env-initializer.js +43 -0
  28. package/build/core/playwright/fixtures.js +24 -0
  29. package/build/core/playwright/helpers/additionalProfiles.js +18 -0
  30. package/build/core/playwright/helpers/auth/accountLogin.js +21 -0
  31. package/build/core/playwright/helpers/auth/checkAuthCookies.js +41 -0
  32. package/build/core/playwright/helpers/auth/getUrlOrigin.js +13 -0
  33. package/build/core/playwright/helpers/auth/getUsers.js +118 -0
  34. package/build/core/playwright/helpers/auth/index.js +76 -0
  35. package/build/core/playwright/helpers/auth/loginSteps.js +50 -0
  36. package/build/core/playwright/helpers/checkAuthDirectory.js +27 -0
  37. package/build/core/playwright/helpers/configFileNameProvider.js +31 -0
  38. package/build/core/playwright/helpers/fileMutex.js +71 -0
  39. package/build/core/playwright/helpers/getUserFixtures.js +23 -0
  40. package/build/core/playwright/helpers/mergeObjects.js +13 -0
  41. package/build/core/playwright/helpers/parseUserArgs.js +10 -0
  42. package/build/core/playwright/index.js +24 -0
  43. package/build/core/playwright/readConfigFile.js +147 -0
  44. package/build/core/playwright/report-generator.js +42 -0
  45. package/build/core/playwright/runner/Runner.js +22 -0
  46. package/build/core/playwright/runner/RunnerHelper.js +43 -0
  47. package/build/core/playwright/runner/RunnerTypes.js +17 -0
  48. package/build/core/playwright/runner/SpawnRunner.js +110 -0
  49. package/build/core/playwright/setup/config-creator.js +113 -0
  50. package/build/core/playwright/setup/config-utils.js +189 -0
  51. package/build/core/playwright/setup/custom-reporter.js +136 -0
  52. package/build/core/playwright/setup/qc-custom-reporter.js +291 -0
  53. package/build/core/playwright/tagProcessor.js +69 -0
  54. package/build/core/playwright/test-runner.js +116 -0
  55. package/build/core/playwright/types.js +44 -0
  56. package/build/core/playwright/validateFeature.js +28 -0
  57. package/build/decorators.d.ts +1 -0
  58. package/build/decorators.js +16 -0
  59. package/build/index.d.ts +78 -0
  60. package/build/index.js +105 -0
  61. package/build/lib/cli.js +78 -0
  62. package/build/lib/post-install.js +25 -0
  63. package/build/lint/index.js +4 -0
  64. package/build/parser/parser.js +205 -0
  65. package/build/parser/sample.feature +34 -0
  66. package/build/parser/sample.spec.js +37 -0
  67. package/build/parser/verifier.js +130 -0
  68. package/build/setup-folder-structure/helper.js +37 -0
  69. package/build/setup-folder-structure/reportEnhancement/addonScript.html +25 -0
  70. package/build/setup-folder-structure/reportEnhancement/reportAlteration.js +25 -0
  71. package/build/setup-folder-structure/samples/accountLogin-sample.js +19 -0
  72. package/build/setup-folder-structure/samples/actors-index.js +2 -0
  73. package/build/setup-folder-structure/samples/auth-setup-sample.js +15 -0
  74. package/build/setup-folder-structure/samples/editions-index.js +3 -0
  75. package/build/setup-folder-structure/samples/free-sample.json +25 -0
  76. package/build/setup-folder-structure/samples/git-ignore.sample.js +37 -0
  77. package/build/setup-folder-structure/samples/settings.json +7 -0
  78. package/build/setup-folder-structure/samples/testSetup-sample.js +14 -0
  79. package/build/setup-folder-structure/samples/uat-config-sample.js +46 -0
  80. package/build/setup-folder-structure/setupProject.js +122 -0
  81. package/build/test/core/playwright/__tests__/tagProcessor.test.js +94 -0
  82. package/build/test/core/playwright/__tests__/validateFeature.test.js +69 -0
  83. package/build/test/core/playwright/buildInFixtures/__tests__/executionContext.test.js +27 -0
  84. package/build/test/core/playwright/configuration/__tests__/Configuration.test.js +53 -0
  85. package/build/test/core/playwright/helpers/__tests__/configFileNameProvider.test.js +34 -0
  86. package/build/test/core/playwright/helpers/__tests__/fileMutex.test.js +79 -0
  87. package/build/test/core/playwright/helpers/__tests__/getUsers_ListOfActors.test.js +80 -0
  88. package/build/test/core/playwright/runner/__tests__/RunnerHelper.test.js +16 -0
  89. package/build/test/core/playwright/runner/__tests__/SpawnRunner.test.js +27 -0
  90. package/build/utils/cliArgsToObject.js +72 -0
  91. package/build/utils/fileUtils.js +89 -0
  92. package/build/utils/getFilePath.js +11 -0
  93. package/build/utils/logger.js +57 -0
  94. package/build/utils/rootPath.js +53 -0
  95. package/build/utils/stepDefinitionsFormatter.js +11 -0
  96. package/changelog.md +156 -0
  97. package/jest.config.js +29 -11
  98. package/npm-shrinkwrap.json +11537 -4681
  99. package/package.json +45 -16
  100. package/playwright.config.js +6 -56
  101. package/src/core/jest/setup/index.js +0 -165
  102. package/src/core/playwright/codegen.js +0 -60
  103. package/src/core/playwright/custom-commands.js +0 -3
  104. package/src/core/playwright/env-initializer.js +0 -24
  105. package/src/core/playwright/index.js +0 -82
  106. package/src/core/playwright/readConfigFile.js +0 -18
  107. package/src/core/playwright/report-generator.js +0 -43
  108. package/src/core/playwright/test-runner.js +0 -64
  109. package/src/index.js +0 -9
  110. package/src/lib/cli.js +0 -35
  111. package/src/utils/cliArgsToObject.js +0 -35
  112. package/src/utils/getFilePath.js +0 -9
  113. package/src/utils/logger.js +0 -28
  114. 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,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fileDeletionTimeoutConfig = void 0;
7
+ const fileDeletionTimeoutConfig = exports.fileDeletionTimeoutConfig = {
8
+ timeout: 45000
9
+ };
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CUSTOM_COMMANDS = void 0;
7
+ const CUSTOM_COMMANDS = exports.CUSTOM_COMMANDS = ['mode', 'tags', 'edition', 'browsers', 'filePath', 'headless', 'modules'];
@@ -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;