@zohodesk/testinglibrary 0.0.3 → 0.0.4-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 (130) hide show
  1. package/.babelrc +24 -0
  2. package/.eslintrc.js +31 -0
  3. package/.gitlab-ci.yml +175 -0
  4. package/.prettierrc +6 -0
  5. package/README.md +151 -1
  6. package/bin/cli.js +1 -1
  7. package/bin/postinstall.js +1 -16
  8. package/build/common/data-generator/steps/DataGenerator.spec.js +19 -0
  9. package/build/common/data-generator/steps/DataGeneratorStepsHelper.js +19 -0
  10. package/build/common/multi-actor/steps/multiActorHandling.spec.js +26 -0
  11. package/build/common/searchFake/helpers/rpcRequestHelper.js +41 -0
  12. package/build/common/searchFake/steps/searchFake.spec.js +26 -0
  13. package/build/core/dataGenerator/DataGenerator.js +94 -0
  14. package/build/core/dataGenerator/DataGeneratorHelper.js +49 -0
  15. package/{src → build}/core/jest/preprocessor/jsPreprocessor.js +4 -6
  16. package/{src → build}/core/jest/runner/jest-runner.js +17 -15
  17. package/build/core/jest/setup/index.js +3 -0
  18. package/build/core/playwright/builtInFixtures/actorContext.js +75 -0
  19. package/build/core/playwright/builtInFixtures/addTags.js +19 -0
  20. package/build/core/playwright/builtInFixtures/cacheLayer.js +13 -0
  21. package/build/core/playwright/builtInFixtures/context.js +32 -0
  22. package/build/core/playwright/builtInFixtures/executionContext.js +17 -0
  23. package/build/core/playwright/builtInFixtures/i18N.js +41 -0
  24. package/build/core/playwright/builtInFixtures/index.js +46 -0
  25. package/build/core/playwright/builtInFixtures/page.js +38 -0
  26. package/build/core/playwright/builtInFixtures/unauthenticatedPage.js +18 -0
  27. package/build/core/playwright/clear-caches.js +49 -0
  28. package/build/core/playwright/codegen.js +55 -0
  29. package/build/core/playwright/configuration/Configuration.js +25 -0
  30. package/build/core/playwright/configuration/ConfigurationHelper.js +43 -0
  31. package/build/core/playwright/configuration/UserArgs.js +12 -0
  32. package/build/core/playwright/constants/browserTypes.js +12 -0
  33. package/build/core/playwright/constants/fileMutexConfig.js +9 -0
  34. package/build/core/playwright/custom-commands.js +7 -0
  35. package/build/core/playwright/env-initializer.js +43 -0
  36. package/build/core/playwright/fixtures.js +24 -0
  37. package/build/core/playwright/helpers/additionalProfiles.js +25 -0
  38. package/build/core/playwright/helpers/auth/accountLogin.js +21 -0
  39. package/build/core/playwright/helpers/auth/checkAuthCookies.js +41 -0
  40. package/build/core/playwright/helpers/auth/getUrlOrigin.js +13 -0
  41. package/build/core/playwright/helpers/auth/getUsers.js +118 -0
  42. package/build/core/playwright/helpers/auth/index.js +76 -0
  43. package/build/core/playwright/helpers/auth/loginDefaultStepsHelper.js +54 -0
  44. package/build/core/playwright/helpers/auth/loginSteps.js +50 -0
  45. package/build/core/playwright/helpers/checkAuthDirectory.js +27 -0
  46. package/build/core/playwright/helpers/configFileNameProvider.js +31 -0
  47. package/build/core/playwright/helpers/customFixturesHelper.js +58 -0
  48. package/build/core/playwright/helpers/fileMutex.js +71 -0
  49. package/build/core/playwright/helpers/getUserFixtures.js +23 -0
  50. package/build/core/playwright/helpers/mergeObjects.js +13 -0
  51. package/build/core/playwright/helpers/parseUserArgs.js +10 -0
  52. package/build/core/playwright/index.js +24 -0
  53. package/build/core/playwright/readConfigFile.js +147 -0
  54. package/build/core/playwright/report-generator.js +42 -0
  55. package/build/core/playwright/runner/Runner.js +22 -0
  56. package/build/core/playwright/runner/RunnerHelper.js +43 -0
  57. package/build/core/playwright/runner/RunnerTypes.js +17 -0
  58. package/build/core/playwright/runner/SpawnRunner.js +113 -0
  59. package/build/core/playwright/setup/config-creator.js +117 -0
  60. package/build/core/playwright/setup/config-utils.js +188 -0
  61. package/build/core/playwright/setup/custom-reporter.js +136 -0
  62. package/build/core/playwright/setup/qc-custom-reporter.js +291 -0
  63. package/build/core/playwright/tagProcessor.js +69 -0
  64. package/build/core/playwright/test-runner.js +116 -0
  65. package/build/core/playwright/types.js +44 -0
  66. package/build/core/playwright/validateFeature.js +28 -0
  67. package/build/decorators.d.ts +1 -0
  68. package/build/decorators.js +16 -0
  69. package/build/index.d.ts +78 -0
  70. package/build/index.js +105 -0
  71. package/build/lib/cli.js +78 -0
  72. package/build/lib/post-install.js +25 -0
  73. package/build/lint/index.js +4 -0
  74. package/build/parser/parser.js +205 -0
  75. package/build/parser/sample.feature +34 -0
  76. package/build/parser/sample.spec.js +37 -0
  77. package/build/parser/verifier.js +130 -0
  78. package/build/setup-folder-structure/helper.js +37 -0
  79. package/build/setup-folder-structure/reportEnhancement/addonScript.html +25 -0
  80. package/build/setup-folder-structure/reportEnhancement/reportAlteration.js +25 -0
  81. package/build/setup-folder-structure/samples/accountLogin-sample.js +19 -0
  82. package/build/setup-folder-structure/samples/actors-index.js +2 -0
  83. package/build/setup-folder-structure/samples/auth-setup-sample.js +15 -0
  84. package/build/setup-folder-structure/samples/editions-index.js +3 -0
  85. package/build/setup-folder-structure/samples/free-sample.json +25 -0
  86. package/build/setup-folder-structure/samples/git-ignore.sample.js +37 -0
  87. package/build/setup-folder-structure/samples/settings.json +7 -0
  88. package/build/setup-folder-structure/samples/testSetup-sample.js +14 -0
  89. package/build/setup-folder-structure/samples/uat-config-sample.js +46 -0
  90. package/build/setup-folder-structure/setupProject.js +122 -0
  91. package/build/test/core/playwright/__tests__/tagProcessor.test.js +94 -0
  92. package/build/test/core/playwright/__tests__/validateFeature.test.js +69 -0
  93. package/build/test/core/playwright/buildInFixtures/__tests__/executionContext.test.js +27 -0
  94. package/build/test/core/playwright/configuration/__tests__/Configuration.test.js +53 -0
  95. package/build/test/core/playwright/helpers/__tests__/additionalProfiles.test.js +45 -0
  96. package/build/test/core/playwright/helpers/__tests__/configFileNameProvider.test.js +34 -0
  97. package/build/test/core/playwright/helpers/__tests__/customFixturesHelper.test.js +51 -0
  98. package/build/test/core/playwright/helpers/__tests__/fileMutex.test.js +79 -0
  99. package/build/test/core/playwright/helpers/__tests__/getUsers_ListOfActors.test.js +80 -0
  100. package/build/test/core/playwright/runner/__tests__/RunnerHelper.test.js +16 -0
  101. package/build/test/core/playwright/runner/__tests__/SpawnRunner.test.js +27 -0
  102. package/build/utils/cliArgsToObject.js +72 -0
  103. package/build/utils/commonUtils.js +17 -0
  104. package/build/utils/fileUtils.js +109 -0
  105. package/build/utils/getFilePath.js +11 -0
  106. package/build/utils/logger.js +28 -0
  107. package/build/utils/rootPath.js +53 -0
  108. package/build/utils/stepDefinitionsFormatter.js +11 -0
  109. package/changelog.md +153 -1
  110. package/jest.config.js +29 -11
  111. package/npm-shrinkwrap.json +10902 -4825
  112. package/package.json +47 -17
  113. package/playwright.config.js +6 -56
  114. package/test-results/.last-run.json +4 -0
  115. package/unit_reports/unit-report.html +260 -0
  116. package/src/core/jest/setup/index.js +0 -165
  117. package/src/core/playwright/codegen.js +0 -60
  118. package/src/core/playwright/custom-commands.js +0 -3
  119. package/src/core/playwright/env-initializer.js +0 -24
  120. package/src/core/playwright/index.js +0 -82
  121. package/src/core/playwright/readConfigFile.js +0 -30
  122. package/src/core/playwright/report-generator.js +0 -43
  123. package/src/core/playwright/setup/config-creator.js +0 -79
  124. package/src/core/playwright/test-runner.js +0 -64
  125. package/src/index.js +0 -9
  126. package/src/lib/cli.js +0 -35
  127. package/src/utils/cliArgsToObject.js +0 -35
  128. package/src/utils/getFilePath.js +0 -9
  129. package/src/utils/logger.js +0 -28
  130. package/src/utils/rootPath.js +0 -51
@@ -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,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.additionProfiles = additionProfiles;
7
+ var _getUsers = require("./auth/getUsers");
8
+ var _customFixturesHelper = require("./customFixturesHelper");
9
+ function additionProfiles(tags) {
10
+ const {
11
+ editionInfo,
12
+ betaFeature,
13
+ portalInfo
14
+ } = (0, _customFixturesHelper.extractTagInfo)(tags);
15
+ const additionalProfileTags = tags.filter(tag => tag.startsWith('@additional_profile_'));
16
+ let additionalProfileActors = {};
17
+ if (additionalProfileTags.length > 0) {
18
+ additionalProfileTags.forEach(tag => {
19
+ const additionalProfile = tag.replace('@additional_profile_', '');
20
+ const actorDetails = (0, _getUsers.getUserForSelectedEditionAndProfile)(editionInfo, additionalProfile, betaFeature, portalInfo);
21
+ additionalProfileActors[additionalProfile] = actorDetails;
22
+ });
23
+ }
24
+ return additionalProfileActors;
25
+ }
@@ -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,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.executeDefaultLoginSteps = executeDefaultLoginSteps;
7
+ exports.loginSteps = loginSteps;
8
+ exports.performDefaultPageSteps = performDefaultPageSteps;
9
+ exports.verifyPageIsLoaded = verifyPageIsLoaded;
10
+ var _auth = require("../auth");
11
+ var _readConfigFile = require("../../readConfigFile");
12
+ var _logger = require("../../../../utils/logger");
13
+ let {
14
+ testSetup,
15
+ isAuthMode
16
+ } = (0, _readConfigFile.generateConfigFromFile)();
17
+ async function loginSteps(pageDetail) {
18
+ const {
19
+ page
20
+ } = pageDetail;
21
+ if (testSetup.loginSteps && typeof testSetup.loginSteps === 'function') {
22
+ return await testSetup.loginSteps(pageDetail);
23
+ } else {
24
+ await page.goto(process.env.domain);
25
+ }
26
+ }
27
+ async function performDefaultPageSteps(testInfo) {
28
+ if (testSetup.page && typeof testSetup.page === 'function') {
29
+ await testSetup.page(testInfo);
30
+ }
31
+ }
32
+ async function verifyPageIsLoaded(testInfo) {
33
+ if (testSetup.validateLogin && typeof testSetup.validateLogin === 'function') {
34
+ return await testSetup.validateLogin(testInfo);
35
+ }
36
+ return true;
37
+ }
38
+ async function executeDefaultLoginSteps(context, testInfo, testDetails, testPortalDetails) {
39
+ if (!isAuthMode) {
40
+ return;
41
+ }
42
+ try {
43
+ const projectName = testInfo.project.name;
44
+ if (testPortalDetails && projectName !== 'setup' && projectName !== 'cleanup') {
45
+ await context.clearCookies();
46
+ await (0, _auth.performLoginSteps)(testDetails, async testInfo => {
47
+ return await verifyPageIsLoaded(testInfo);
48
+ }, loginSteps);
49
+ process.env.actorInfo = JSON.stringify(testPortalDetails);
50
+ }
51
+ } catch (error) {
52
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, 'Error while executing the default login steps:', error);
53
+ }
54
+ }
@@ -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;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createAuthDirectoryIfNotExist = createAuthDirectoryIfNotExist;
8
+ exports.getLockDirectoryPath = getLockDirectoryPath;
9
+ var _fs = require("fs");
10
+ var _path = _interopRequireDefault(require("path"));
11
+ var _checkAuthCookies = require("./auth/checkAuthCookies");
12
+ var _readConfigFile = require("../readConfigFile");
13
+ function createAuthDirectoryIfNotExist() {
14
+ const authDirectory = (0, _checkAuthCookies.getAuthFileDirectory)();
15
+ if (!(0, _fs.existsSync)(authDirectory)) {
16
+ console.log('Creating auth directory for the first time setup...');
17
+ (0, _fs.mkdirSync)(authDirectory, {
18
+ recursive: true
19
+ });
20
+ }
21
+ }
22
+ function getLockDirectoryPath() {
23
+ const {
24
+ uatDirectory
25
+ } = (0, _readConfigFile.generateConfigFromFile)();
26
+ return _path.default.resolve(_path.default.join(uatDirectory, 'playwright', '.lock'));
27
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getEnvConfigFilePath = getEnvConfigFilePath;
8
+ exports.getReportFileName = getReportFileName;
9
+ exports.getUATFileName = getUATFileName;
10
+ var _path = _interopRequireDefault(require("path"));
11
+ var _fs = _interopRequireDefault(require("fs"));
12
+ var _auth = require("./auth");
13
+ function getUATFileName(mode) {
14
+ mode = mode || (0, _auth.getRunMode)();
15
+ const uatConfFilePath = _path.default.resolve(process.cwd(), `uat/conf/${mode}/uat.config.js`);
16
+ if (_fs.default.existsSync(uatConfFilePath)) {
17
+ return uatConfFilePath;
18
+ }
19
+ return _path.default.resolve(process.cwd(), `uat/conf/default/uat.config.js`);
20
+ }
21
+ function getEnvConfigFilePath(mode) {
22
+ const confFilePath = _path.default.resolve(process.cwd(), `uat/conf/${mode}/settings.json`);
23
+ // TODO: Actors Mode as config
24
+ if (_fs.default.existsSync(confFilePath)) {
25
+ return `uat/conf/${mode}/settings.json`;
26
+ }
27
+ return `uat/conf/default/settings.json`;
28
+ }
29
+ function getReportFileName() {
30
+ return `test-summary.json`;
31
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.extractTagInfo = extractTagInfo;
7
+ exports.getCustomAccountDetails = getCustomAccountDetails;
8
+ var _auth = require("../helpers/auth");
9
+ var _logger = require("../../../utils/logger");
10
+ /* eslint-disable global-require */
11
+
12
+ function getTagInputFromSelectedTags(tags, inputString) {
13
+ const selectedTag = [...tags].reverse().find(tag => tag.startsWith(inputString));
14
+ let tagInput = null;
15
+ if (selectedTag) {
16
+ tagInput = selectedTag.split(`${inputString}_`).pop().toLowerCase();
17
+ }
18
+ return tagInput;
19
+ }
20
+ function extractTagInfo(tags) {
21
+ const tagsTobeFiltered = ['@profile', '@edition', '@beta', '@portal'];
22
+ const filteredTags = tags.filter(tag => tagsTobeFiltered.some(prefix => tag.startsWith(prefix)));
23
+ if (!filteredTags.length) {
24
+ return {
25
+ portalInfo: null,
26
+ betaFeature: null,
27
+ profileInfo: null,
28
+ editionInfo: null
29
+ };
30
+ }
31
+ const portalInfo = getTagInputFromSelectedTags(filteredTags, '@portal');
32
+ const betaFeature = getTagInputFromSelectedTags(filteredTags, '@beta');
33
+ const profileInfo = getTagInputFromSelectedTags(filteredTags, '@profile');
34
+ const editionInfo = getTagInputFromSelectedTags(filteredTags, '@edition');
35
+ return {
36
+ portalInfo,
37
+ betaFeature,
38
+ profileInfo,
39
+ editionInfo
40
+ };
41
+ }
42
+ function getCustomAccountDetails(tags) {
43
+ try {
44
+ const {
45
+ portalInfo,
46
+ betaFeature,
47
+ profileInfo,
48
+ editionInfo
49
+ } = extractTagInfo(tags);
50
+ if (portalInfo || betaFeature || profileInfo || editionInfo) {
51
+ const user = (0, _auth.getUserForSelectedEditionAndProfile)(editionInfo, profileInfo, betaFeature, portalInfo);
52
+ return user;
53
+ }
54
+ return (0, _auth.getDefaultActor)();
55
+ } catch (err) {
56
+ _logger.Logger.log(_logger.Logger.FAILURE_TYPE, 'Error while getting accounts details:', err);
57
+ }
58
+ }
@@ -0,0 +1,71 @@
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 _fs = require("fs");
10
+ function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
11
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
12
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
13
+ var _FileMutex_brand = /*#__PURE__*/new WeakSet();
14
+ class FileMutex {
15
+ constructor(directory, lockFileName, fileDeletionTimeoutConfig) {
16
+ _classPrivateMethodInitSpec(this, _FileMutex_brand);
17
+ this.directory = directory;
18
+ this.lockFileName = lockFileName + ".lock";
19
+ this.fileDeletionTimeout = fileDeletionTimeoutConfig.timeout;
20
+ this.lockFilePath = _assertClassBrand(_FileMutex_brand, this, _getLockFilePath).call(this);
21
+ _assertClassBrand(_FileMutex_brand, this, _createDirectoryIfNotExist).call(this);
22
+ }
23
+ async acquire() {
24
+ return new Promise((resolve, reject) => {
25
+ if (!(0, _fs.existsSync)(this.lockFilePath)) {
26
+ (0, _fs.writeFileSync)(this.lockFilePath, 'locked');
27
+ console.log(`Lock file created: ${this.lockFilePath}, worker index - ${process.env.TEST_WORKER_INDEX}`);
28
+ return resolve();
29
+ }
30
+ const timeout = setTimeout(() => {
31
+ watcher.close();
32
+ reject(new Error('Watch timeout exceeded'));
33
+ }, this.fileDeletionTimeout);
34
+ const watcher = (0, _fs.watch)(this.directory, (eventType, filename) => {
35
+ try {
36
+ if (eventType === 'rename' && filename === this.lockFileName) {
37
+ clearTimeout(timeout);
38
+ console.log(`Lock file deleted! Proceeding, worker index - ${process.env.TEST_WORKER_INDEX}`);
39
+ watcher.close();
40
+ resolve();
41
+ }
42
+ } catch (err) {
43
+ console.error(`Error watching for lock file deletion: ${err.message}`);
44
+ watcher.close();
45
+ }
46
+ });
47
+ });
48
+ }
49
+ async release() {
50
+ try {
51
+ if ((0, _fs.existsSync)(this.lockFilePath)) {
52
+ (0, _fs.unlinkSync)(this.lockFilePath);
53
+ console.log(`Lock file deleted: ${this.lockFilePath}, worker index - ${process.env.TEST_WORKER_INDEX}`);
54
+ }
55
+ } catch (err) {
56
+ console.error(`Error deleting lock file: ${err.message}, worker index - ${process.env.TEST_WORKER_INDEX}`);
57
+ throw err;
58
+ }
59
+ }
60
+ }
61
+ function _getLockFilePath() {
62
+ return _path.default.resolve(_path.default.join(this.directory, this.lockFileName));
63
+ }
64
+ async function _createDirectoryIfNotExist() {
65
+ if (!(0, _fs.existsSync)(this.directory)) {
66
+ (0, _fs.mkdirSync)(this.directory, {
67
+ recursive: true
68
+ });
69
+ }
70
+ }
71
+ var _default = exports.default = FileMutex;