@zohodesk/testinglibrary 0.0.16-n20-experimental → 0.0.17-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/README.md +0 -8
- package/build/core/playwright/configuration/ConfigurationHelper.js +7 -5
- package/build/core/playwright/constants/configConstants.js +17 -0
- package/build/core/playwright/custom-commands.js +1 -1
- package/build/core/playwright/env-initializer.js +10 -9
- package/build/core/playwright/helpers/auth/getUsers.js +14 -14
- package/build/core/playwright/helpers/configFileNameProvider.js +15 -8
- package/build/core/playwright/helpers/configPathResolver.js +38 -0
- package/build/core/playwright/readConfigFile.js +3 -2
- package/build/core/playwright/test-runner.js +4 -2
- package/build/test/core/playwright/helpers/__tests__/configFileNameProvider.test.js +54 -13
- package/build/test/core/playwright/helpers/__tests__/configPathResolver.test.js +55 -0
- package/build/test/core/playwright/helpers/__tests__/getUsers_ListOfActors.test.js +29 -26
- package/npm-shrinkwrap.json +61 -54
- package/package.json +5 -5
- package/unit_reports/unit-report.html +260 -0
package/README.md
CHANGED
|
@@ -40,14 +40,6 @@
|
|
|
40
40
|
|
|
41
41
|
- New step a search entity using {string} provided for search indexing, This step will use run time data generation response as input for the indexing
|
|
42
42
|
|
|
43
|
-
### Issue fix
|
|
44
|
-
- Custom teardown comment provided
|
|
45
|
-
|
|
46
|
-
### v3.2.10 - 09-10-2025
|
|
47
|
-
|
|
48
|
-
#### Enhancement
|
|
49
|
-
- A teardown option has been introduced in the configuration to manage and clean up login sessions stored in the NFS environment.
|
|
50
|
-
|
|
51
43
|
|
|
52
44
|
### v3.2.9 - 26-09-2025
|
|
53
45
|
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.combineConfiguration = combineConfiguration;
|
|
8
7
|
exports.getApplicationConfig = getApplicationConfig;
|
|
9
|
-
|
|
8
|
+
exports.getRunStage = getRunStage;
|
|
10
9
|
var _logger = require("../../../utils/logger");
|
|
11
10
|
var _configFileNameProvider = require("../helpers/configFileNameProvider");
|
|
12
11
|
var _mergeObjects = require("../helpers/mergeObjects");
|
|
13
12
|
var _fs = require("fs");
|
|
14
|
-
const Configuration = require("./Configuration");
|
|
15
13
|
function combineConfiguration(defaultConfig, userConfiguration) {
|
|
16
14
|
let configurationObj = {};
|
|
17
15
|
Object.keys(userConfiguration).forEach(configKey => {
|
|
@@ -26,10 +24,10 @@ function combineConfiguration(defaultConfig, userConfiguration) {
|
|
|
26
24
|
});
|
|
27
25
|
return (0, _mergeObjects.mergeObjects)(defaultConfig, configurationObj);
|
|
28
26
|
}
|
|
29
|
-
function getApplicationConfig(mode) {
|
|
27
|
+
function getApplicationConfig(stage, mode) {
|
|
30
28
|
let filePath = "";
|
|
31
29
|
try {
|
|
32
|
-
filePath =
|
|
30
|
+
filePath = (0, _configFileNameProvider.getUATFileName)(stage, mode);
|
|
33
31
|
if (!(0, _fs.existsSync)(filePath)) {
|
|
34
32
|
throw new Error("Exception while getting the uat file from the application - " + filePath);
|
|
35
33
|
}
|
|
@@ -40,4 +38,8 @@ function getApplicationConfig(mode) {
|
|
|
40
38
|
_logger.Logger.error(err);
|
|
41
39
|
return {};
|
|
42
40
|
}
|
|
41
|
+
}
|
|
42
|
+
function getRunStage() {
|
|
43
|
+
const stage = process.env.stage;
|
|
44
|
+
return stage || 'uat';
|
|
43
45
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
class configConstants {
|
|
8
|
+
static DEFAULT_CONFIG_DIR = 'default';
|
|
9
|
+
static BETA_DIR = 'beta';
|
|
10
|
+
static ACTOR_DIR = 'actors';
|
|
11
|
+
static UAT_CONFIG_FILE = 'uat.config.js';
|
|
12
|
+
static INDEX_FILE = 'index.js';
|
|
13
|
+
static SETTINGS_FILE = 'settings.json';
|
|
14
|
+
static TEST_SUMMARY_FILE = 'test-summary.json';
|
|
15
|
+
static STAGE_CONFIG_MAP_FILE = 'uat/conf_path_map.properties';
|
|
16
|
+
}
|
|
17
|
+
exports.default = configConstants;
|
|
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.CUSTOM_COMMANDS = void 0;
|
|
7
|
-
const CUSTOM_COMMANDS = exports.CUSTOM_COMMANDS = ['mode', 'tags', 'edition', 'browsers', 'filePath', 'headless', 'modules', 'isTearDown'];
|
|
7
|
+
const CUSTOM_COMMANDS = exports.CUSTOM_COMMANDS = ['stage', 'mode', 'tags', 'edition', 'browsers', 'filePath', 'headless', 'modules', 'isTearDown'];
|
|
@@ -17,19 +17,20 @@ function setEnvironmentVariables(configJSON) {
|
|
|
17
17
|
}
|
|
18
18
|
function addHelperLogsForEnvInitialization() {
|
|
19
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/
|
|
20
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Please specify --mode='dev/ci/cd/devautomation' while running ZDTestingFramework test`);
|
|
21
21
|
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Going to use default mode as dev`);
|
|
22
22
|
}
|
|
23
|
-
function initializeEnvConfig(mode, isAuthMode) {
|
|
23
|
+
function initializeEnvConfig(stage, mode, isAuthMode) {
|
|
24
|
+
if (!mode) {
|
|
25
|
+
addHelperLogsForEnvInitialization();
|
|
26
|
+
mode = 'dev';
|
|
27
|
+
}
|
|
28
|
+
const configFilePath = (0, _fs.readFileSync)(_path.default.resolve(process.cwd(), `./${(0, _configFileNameProvider.getEnvConfigFilePath)(stage, mode)}`));
|
|
24
29
|
try {
|
|
25
|
-
|
|
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);
|
|
30
|
+
const configJSON = JSON.parse(configFilePath);
|
|
31
31
|
setEnvironmentVariables({
|
|
32
32
|
...configJSON,
|
|
33
|
+
stage,
|
|
33
34
|
mode
|
|
34
35
|
});
|
|
35
36
|
if (isAuthMode) {
|
|
@@ -38,6 +39,6 @@ function initializeEnvConfig(mode, isAuthMode) {
|
|
|
38
39
|
}
|
|
39
40
|
} catch (err) {
|
|
40
41
|
_logger.Logger.error(err);
|
|
41
|
-
throw new Error(`Config File Not Exists. Please provide a
|
|
42
|
+
throw new Error(`Config File Not Exists. Please provide a ${configFilePath} to initialize the environment variables`);
|
|
42
43
|
}
|
|
43
44
|
}
|
|
@@ -13,7 +13,9 @@ exports.isCI = isCI;
|
|
|
13
13
|
exports.isDevelopmentSetup = isDevelopmentSetup;
|
|
14
14
|
var _path = _interopRequireDefault(require("path"));
|
|
15
15
|
var _fs = require("fs");
|
|
16
|
-
var
|
|
16
|
+
var _configPathResolver = require("../configPathResolver");
|
|
17
|
+
var _ConfigurationHelper = require("./../../configuration/ConfigurationHelper");
|
|
18
|
+
var _configConstants = _interopRequireDefault(require("../../constants/configConstants"));
|
|
17
19
|
/* eslint-disable global-require */
|
|
18
20
|
function getRunMode() {
|
|
19
21
|
let {
|
|
@@ -30,19 +32,18 @@ function isDevelopmentSetup() {
|
|
|
30
32
|
return mode === 'DEV' || mode === 'dev';
|
|
31
33
|
}
|
|
32
34
|
function getDefaultActorConf() {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
const filePath = _path.default.join(uatDirectory, modeSettingsFile);
|
|
35
|
+
const stage = (0, _ConfigurationHelper.getRunStage)();
|
|
36
|
+
const stagePath = (0, _configPathResolver.getConfigPath)(stage);
|
|
37
|
+
const modeSettingsFile = `${stagePath}/${getRunMode()}/${_configConstants.default.SETTINGS_FILE}`;
|
|
38
|
+
const filePath = _path.default.join(_path.default.resolve(process.cwd(), modeSettingsFile));
|
|
38
39
|
try {
|
|
39
40
|
if (!(0, _fs.existsSync)(filePath)) {
|
|
40
|
-
const defaultSettingsFile = _path.default.join(
|
|
41
|
+
const defaultSettingsFile = _path.default.join(_path.default.resolve(process.cwd(), `${stagePath}/${_configConstants.default.DEFAULT_CONFIG_DIR}/${_configConstants.default.SETTINGS_FILE}`));
|
|
41
42
|
return require(defaultSettingsFile);
|
|
42
43
|
}
|
|
43
44
|
return require(filePath);
|
|
44
45
|
} catch (error) {
|
|
45
|
-
throw new Error(`${
|
|
46
|
+
throw new Error(`${filePath} file missing.`);
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
49
|
function getDefaultActor() {
|
|
@@ -53,18 +54,17 @@ function getDefaultActor() {
|
|
|
53
54
|
return getUserForSelectedEditionAndProfile(edition, profile);
|
|
54
55
|
}
|
|
55
56
|
function getListOfActors(betaFeature) {
|
|
56
|
-
const {
|
|
57
|
-
uatDirectory
|
|
58
|
-
} = (0, _readConfigFile.generateConfigFromFile)();
|
|
59
57
|
const mode = getRunMode();
|
|
60
|
-
|
|
58
|
+
const stage = (0, _ConfigurationHelper.getRunStage)();
|
|
59
|
+
const stagePath = (0, _configPathResolver.getConfigPath)(stage);
|
|
60
|
+
let configFile = _path.default.join(_path.default.resolve(process.cwd(), `${stagePath}/${mode}/${_configConstants.default.ACTOR_DIR}/${_configConstants.default.INDEX_FILE}`));
|
|
61
61
|
let betaReference = mode;
|
|
62
62
|
if (!(0, _fs.existsSync)(configFile)) {
|
|
63
|
-
configFile = _path.default.join(
|
|
63
|
+
configFile = _path.default.join(_path.default.resolve(process.cwd(), `${stagePath}/${_configConstants.default.DEFAULT_CONFIG_DIR}/${_configConstants.default.ACTOR_DIR}/${_configConstants.default.INDEX_FILE}`));
|
|
64
64
|
betaReference = "default";
|
|
65
65
|
}
|
|
66
66
|
if (betaFeature) {
|
|
67
|
-
configFile = _path.default.join(
|
|
67
|
+
configFile = _path.default.join(_path.default.resolve(process.cwd(), `${stagePath}/${betaReference}/${_configConstants.default.ACTOR_DIR}/${_configConstants.default.BETA_DIR}/${betaFeature}/${_configConstants.default.INDEX_FILE}`));
|
|
68
68
|
if (!(0, _fs.existsSync)(configFile)) {
|
|
69
69
|
throw new Error(`There is no beta feature configured with the name "${betaFeature}"`);
|
|
70
70
|
}
|
|
@@ -10,22 +10,29 @@ exports.getUATFileName = getUATFileName;
|
|
|
10
10
|
var _path = _interopRequireDefault(require("path"));
|
|
11
11
|
var _fs = _interopRequireDefault(require("fs"));
|
|
12
12
|
var _auth = require("./auth");
|
|
13
|
-
|
|
13
|
+
var _ConfigurationHelper = require("./../configuration/ConfigurationHelper");
|
|
14
|
+
var _configPathResolver = require("./configPathResolver");
|
|
15
|
+
var _configConstants = _interopRequireDefault(require("../constants/configConstants"));
|
|
16
|
+
function getUATFileName(stage, mode) {
|
|
17
|
+
stage = stage || (0, _ConfigurationHelper.getRunStage)();
|
|
14
18
|
mode = mode || (0, _auth.getRunMode)();
|
|
15
|
-
const
|
|
19
|
+
const stagePath = (0, _configPathResolver.getConfigPath)(stage);
|
|
20
|
+
const uatConfFilePath = _path.default.resolve(process.cwd(), `${stagePath}/${mode}/${_configConstants.default.UAT_CONFIG_FILE}`);
|
|
16
21
|
if (_fs.default.existsSync(uatConfFilePath)) {
|
|
17
22
|
return uatConfFilePath;
|
|
18
23
|
}
|
|
19
|
-
|
|
24
|
+
;
|
|
25
|
+
return _path.default.resolve(process.cwd(), `${stagePath}/${_configConstants.default.DEFAULT_CONFIG_DIR}/${_configConstants.default.UAT_CONFIG_FILE}`);
|
|
20
26
|
}
|
|
21
|
-
function getEnvConfigFilePath(mode) {
|
|
22
|
-
const
|
|
27
|
+
function getEnvConfigFilePath(stage, mode) {
|
|
28
|
+
const stagePath = (0, _configPathResolver.getConfigPath)(stage);
|
|
29
|
+
const confFilePath = `${stagePath}/${mode}/${_configConstants.default.SETTINGS_FILE}`;
|
|
23
30
|
// TODO: Actors Mode as config
|
|
24
31
|
if (_fs.default.existsSync(confFilePath)) {
|
|
25
|
-
return
|
|
32
|
+
return confFilePath;
|
|
26
33
|
}
|
|
27
|
-
return
|
|
34
|
+
return `${stagePath}/${_configConstants.default.DEFAULT_CONFIG_DIR}/${_configConstants.default.SETTINGS_FILE}`;
|
|
28
35
|
}
|
|
29
36
|
function getReportFileName() {
|
|
30
|
-
return
|
|
37
|
+
return `${_configConstants.default.TEST_SUMMARY_FILE}`;
|
|
31
38
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getConfigPath = getConfigPath;
|
|
8
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _propertiesReader = _interopRequireDefault(require("properties-reader"));
|
|
11
|
+
var _logger = require("../../../utils/logger");
|
|
12
|
+
var _configConstants = _interopRequireDefault(require("../constants/configConstants"));
|
|
13
|
+
//This function reads a properties file and returns the entire properties
|
|
14
|
+
|
|
15
|
+
function readPropertiesFile(relativeFilePath) {
|
|
16
|
+
const filePath = _path.default.resolve(process.cwd(), relativeFilePath);
|
|
17
|
+
let properties;
|
|
18
|
+
if (_fs.default.existsSync(filePath)) {
|
|
19
|
+
properties = (0, _propertiesReader.default)(filePath);
|
|
20
|
+
} else {
|
|
21
|
+
// we have to remove this logic after adding all the projects with proper config files
|
|
22
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Properties file ${filePath} not found. Using default configurations.`);
|
|
23
|
+
properties = (0, _propertiesReader.default)();
|
|
24
|
+
properties.set('uat', 'uat/conf');
|
|
25
|
+
}
|
|
26
|
+
return properties;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// This function return the value for the passed arguments key
|
|
30
|
+
|
|
31
|
+
function getConfigPath(stage) {
|
|
32
|
+
const props = readPropertiesFile(_configConstants.default.STAGE_CONFIG_MAP_FILE);
|
|
33
|
+
const configPath = props.get(stage);
|
|
34
|
+
if (!configPath) {
|
|
35
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, `No config mapping found for stage: "${stage}"`);
|
|
36
|
+
}
|
|
37
|
+
return configPath;
|
|
38
|
+
}
|
|
@@ -111,15 +111,16 @@ function combineDefaultConfigWithUserConfig(userConfiguration) {
|
|
|
111
111
|
*/
|
|
112
112
|
|
|
113
113
|
function getConfigFilePath() {
|
|
114
|
-
return
|
|
114
|
+
return (0, _configFileNameProvider.getUATFileName)();
|
|
115
115
|
}
|
|
116
116
|
function generateConfigFromFile() {
|
|
117
117
|
if (cachedConfig === null) {
|
|
118
118
|
// Getting the default config's from framework
|
|
119
119
|
const uatConfig = new _Configuration.default(getDefaultConfig());
|
|
120
120
|
// overriding the application config's from project
|
|
121
|
-
const appConfig = new _Configuration.default((0, _ConfigurationHelper.getApplicationConfig)());
|
|
122
121
|
const userArgConfig = new _Configuration.default(_UserArgs.default.parseToObject(process.argv.slice(2)));
|
|
122
|
+
const stage = userArgConfig.get("stage");
|
|
123
|
+
const appConfig = new _Configuration.default((0, _ConfigurationHelper.getApplicationConfig)(stage));
|
|
123
124
|
// overriding the user config's from CLI
|
|
124
125
|
uatConfig.addAll(appConfig);
|
|
125
126
|
uatConfig.addAll(userArgConfig);
|
|
@@ -86,7 +86,8 @@ function main() {
|
|
|
86
86
|
// overriding the application config's from project
|
|
87
87
|
const userArgConfig = new _Configuration.default(_UserArgs.default.parseToObject(process.argv.slice(2)));
|
|
88
88
|
const mode = userArgConfig.get("mode");
|
|
89
|
-
|
|
89
|
+
const stage = userArgConfig.get("stage");
|
|
90
|
+
uatConfig.addAll(new _Configuration.default((0, _ConfigurationHelper.getApplicationConfig)(stage, mode)));
|
|
90
91
|
// overriding the user config's from CLI
|
|
91
92
|
uatConfig.addAll(userArgConfig);
|
|
92
93
|
const modules = uatConfig.get('modules');
|
|
@@ -95,6 +96,7 @@ function main() {
|
|
|
95
96
|
//We need to change this process.env variable to pass the module name in future.
|
|
96
97
|
process.env.modules = modules;
|
|
97
98
|
process.env.tearDown = tearDown;
|
|
99
|
+
process.env.stage = stage;
|
|
98
100
|
const {
|
|
99
101
|
isAuthMode,
|
|
100
102
|
editionOrder,
|
|
@@ -102,7 +104,7 @@ function main() {
|
|
|
102
104
|
bddMode = false,
|
|
103
105
|
headless = false
|
|
104
106
|
} = uatConfig.getAll();
|
|
105
|
-
(0, _envInitializer.initializeEnvConfig)(mode, isAuthMode);
|
|
107
|
+
(0, _envInitializer.initializeEnvConfig)(stage, mode, isAuthMode);
|
|
106
108
|
|
|
107
109
|
//This is only used for pass the user arguments to need places in legacy code. We need to rewamp that also.
|
|
108
110
|
const userArgsObject = userArgConfig.getAll();
|
|
@@ -4,31 +4,72 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
var _fs = require("fs");
|
|
5
5
|
var _path = _interopRequireDefault(require("path"));
|
|
6
6
|
var _configFileNameProvider = require("../../../../../core/playwright/helpers/configFileNameProvider");
|
|
7
|
+
var _configPathResolver = require("../../../../../core/playwright/helpers/configPathResolver");
|
|
7
8
|
jest.mock('fs');
|
|
8
|
-
jest.mock('path')
|
|
9
|
+
jest.mock('path', () => ({
|
|
10
|
+
resolve: jest.fn()
|
|
11
|
+
}));
|
|
12
|
+
jest.mock("../../../../../core/playwright/helpers/configPathResolver", () => ({
|
|
13
|
+
getConfigPath: jest.fn()
|
|
14
|
+
}));
|
|
9
15
|
const mockCwd = '/mock/current/directory';
|
|
10
16
|
_path.default.resolve = jest.fn();
|
|
11
17
|
process.cwd = jest.fn(() => mockCwd);
|
|
12
18
|
describe('getUATFileName', () => {
|
|
13
19
|
beforeEach(() => {
|
|
14
20
|
jest.clearAllMocks();
|
|
21
|
+
_path.default.resolve.mockImplementation((...segments) => segments.join('/'));
|
|
15
22
|
});
|
|
16
|
-
test('return
|
|
23
|
+
test('should return pipeline-matched config path when file exists', () => {
|
|
24
|
+
const stage = 'uat';
|
|
17
25
|
const mode = 'cd';
|
|
18
|
-
|
|
26
|
+
_configPathResolver.getConfigPath.mockReturnValue(`${stage}/conf`);
|
|
19
27
|
_fs.existsSync.mockReturnValue(true);
|
|
20
|
-
|
|
21
|
-
const result = (0, _configFileNameProvider.getUATFileName)(mode);
|
|
22
|
-
expect(
|
|
23
|
-
expect(
|
|
28
|
+
const expected = `${process.cwd()}/${stage}/conf/${mode}/uat.config.js`;
|
|
29
|
+
const result = (0, _configFileNameProvider.getUATFileName)(stage, mode);
|
|
30
|
+
expect(_configPathResolver.getConfigPath).toHaveBeenCalledWith(stage);
|
|
31
|
+
expect(_fs.existsSync).toHaveBeenCalledWith(expected);
|
|
32
|
+
expect(result).toBe(expected);
|
|
24
33
|
});
|
|
25
|
-
test('
|
|
26
|
-
const mode = '
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
test('should use default stage and mode when not provided', () => {
|
|
35
|
+
const mode = 'dev';
|
|
36
|
+
const stageConfigPath = 'uat/conf';
|
|
37
|
+
const expectedPath = `${mockCwd}/${stageConfigPath}/${mode}/uat.config.js`;
|
|
38
|
+
_fs.existsSync.mockReturnValue(true);
|
|
30
39
|
const result = (0, _configFileNameProvider.getUATFileName)(mode);
|
|
31
40
|
expect(_fs.existsSync).toHaveBeenCalledWith(`${mockCwd}/uat/conf/${mode}/uat.config.js`);
|
|
32
|
-
expect(result).toBe(
|
|
41
|
+
expect(result).toBe(expectedPath);
|
|
42
|
+
});
|
|
43
|
+
test('should return the default config files for pipeline matched files not exists', () => {
|
|
44
|
+
const mockStage = 'uat';
|
|
45
|
+
const mockMode = 'ci';
|
|
46
|
+
const stageConfigPath = 'uat/conf';
|
|
47
|
+
const nonExistingPath = `${mockCwd}/${stageConfigPath}/${mockMode}/uat.config.js`;
|
|
48
|
+
const expectedDefaultPath = `${mockCwd}/${mockStage}/conf/default/uat.config.js`;
|
|
49
|
+
_configPathResolver.getConfigPath.mockReturnValue(stageConfigPath);
|
|
50
|
+
_fs.existsSync.mockReturnValue(false);
|
|
51
|
+
const result = (0, _configFileNameProvider.getUATFileName)(mockStage, mockMode);
|
|
52
|
+
expect(_fs.existsSync).toHaveBeenCalledWith(nonExistingPath);
|
|
53
|
+
expect(result).toBe(expectedDefaultPath);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe('getEnvConfigFilePath', () => {
|
|
57
|
+
beforeEach(() => {
|
|
58
|
+
jest.clearAllMocks();
|
|
59
|
+
_path.default.resolve.mockImplementation((...segments) => segments.join('/'));
|
|
60
|
+
});
|
|
61
|
+
test('should return conf file path when file exists', () => {
|
|
62
|
+
_configPathResolver.getConfigPath.mockReturnValue('uat/conf');
|
|
63
|
+
_fs.existsSync.mockReturnValue(true);
|
|
64
|
+
const result = (0, _configFileNameProvider.getEnvConfigFilePath)('uat', 'cd');
|
|
65
|
+
expect(_configPathResolver.getConfigPath).toHaveBeenCalledWith('uat');
|
|
66
|
+
expect(_fs.existsSync).toHaveBeenCalled();
|
|
67
|
+
expect(result).toBe('uat/conf/cd/settings.json');
|
|
68
|
+
});
|
|
69
|
+
test('should return default path when file does not exist', () => {
|
|
70
|
+
_configPathResolver.getConfigPath.mockReturnValue('uat/conf');
|
|
71
|
+
_fs.existsSync.mockReturnValue(false);
|
|
72
|
+
const result = (0, _configFileNameProvider.getEnvConfigFilePath)('uat', 'ci');
|
|
73
|
+
expect(result).toBe('uat/conf/default/settings.json');
|
|
33
74
|
});
|
|
34
75
|
});
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
5
|
+
var _path = _interopRequireDefault(require("path"));
|
|
6
|
+
var _propertiesReader = _interopRequireDefault(require("properties-reader"));
|
|
7
|
+
var _configPathResolver = require("../../../../../core/playwright/helpers/configPathResolver");
|
|
8
|
+
var _logger = require("../../../../../utils/logger");
|
|
9
|
+
var _configConstants = _interopRequireDefault(require("../../../../../core/playwright/constants/configConstants"));
|
|
10
|
+
jest.mock('fs');
|
|
11
|
+
jest.mock('path');
|
|
12
|
+
jest.mock('properties-reader');
|
|
13
|
+
jest.mock('../../../../../utils/logger', () => ({
|
|
14
|
+
Logger: {
|
|
15
|
+
log: jest.fn(),
|
|
16
|
+
INFO_TYPE: 'info',
|
|
17
|
+
FAILURE_TYPE: 'failure'
|
|
18
|
+
}
|
|
19
|
+
}));
|
|
20
|
+
describe('getConfigPath', () => {
|
|
21
|
+
const mockProps = {
|
|
22
|
+
get: jest.fn(),
|
|
23
|
+
set: jest.fn()
|
|
24
|
+
};
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
jest.clearAllMocks();
|
|
27
|
+
_propertiesReader.default.mockReturnValue(mockProps);
|
|
28
|
+
_path.default.resolve.mockImplementation((...args) => args.join('/'));
|
|
29
|
+
});
|
|
30
|
+
test('should return config path when properties file exists and has mapping', () => {
|
|
31
|
+
_fs.default.existsSync.mockReturnValue(true);
|
|
32
|
+
mockProps.get.mockReturnValue('uat/conf');
|
|
33
|
+
const result = (0, _configPathResolver.getConfigPath)('uat');
|
|
34
|
+
expect(_fs.default.existsSync).toHaveBeenCalledWith(expect.stringContaining(_configConstants.default.STAGE_CONFIG_MAP_FILE));
|
|
35
|
+
expect(_propertiesReader.default).toHaveBeenCalled();
|
|
36
|
+
expect(mockProps.get).toHaveBeenCalledWith('uat');
|
|
37
|
+
expect(result).toBe('uat/conf');
|
|
38
|
+
expect(_logger.Logger.log).not.toHaveBeenCalledWith(_logger.Logger.FAILURE_TYPE, expect.any(String));
|
|
39
|
+
});
|
|
40
|
+
test('should log info and use default mapping if file does not exist', () => {
|
|
41
|
+
_fs.default.existsSync.mockReturnValue(false);
|
|
42
|
+
mockProps.get.mockImplementation(key => key === 'uat' ? 'uat/conf' : undefined);
|
|
43
|
+
const result = (0, _configPathResolver.getConfigPath)('uat');
|
|
44
|
+
expect(_logger.Logger.log).toHaveBeenCalledWith(_logger.Logger.INFO_TYPE, expect.stringContaining('not found'));
|
|
45
|
+
expect(mockProps.set).toHaveBeenCalledWith('uat', 'uat/conf');
|
|
46
|
+
expect(result).toBe('uat/conf');
|
|
47
|
+
});
|
|
48
|
+
test('should log failure if config mapping not found for stage', () => {
|
|
49
|
+
_fs.default.existsSync.mockReturnValue(true);
|
|
50
|
+
mockProps.get.mockReturnValue(undefined);
|
|
51
|
+
const result = (0, _configPathResolver.getConfigPath)('stageX');
|
|
52
|
+
expect(_logger.Logger.log).toHaveBeenCalledWith(_logger.Logger.FAILURE_TYPE, expect.stringContaining('stageX'));
|
|
53
|
+
expect(result).toBeUndefined();
|
|
54
|
+
});
|
|
55
|
+
});
|
|
@@ -1,80 +1,83 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _fs = require("fs");
|
|
4
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
5
5
|
var _path = _interopRequireDefault(require("path"));
|
|
6
|
+
var _getUsers = require("../../../../../core/playwright/helpers/auth/getUsers");
|
|
7
|
+
var _configPathResolver = require("../../../../../core/playwright/helpers/configPathResolver");
|
|
6
8
|
jest.mock('fs');
|
|
7
9
|
jest.mock('path');
|
|
8
|
-
jest.mock('../../../../../core/playwright/
|
|
9
|
-
|
|
10
|
-
uatDirectory: '/test/directory'
|
|
11
|
-
})),
|
|
12
|
-
getRunMode: jest.fn(() => 'dev')
|
|
10
|
+
jest.mock('../../../../../core/playwright/helpers/configPathResolver', () => ({
|
|
11
|
+
getConfigPath: jest.fn()
|
|
13
12
|
}));
|
|
14
|
-
const {
|
|
15
|
-
getListOfActors
|
|
16
|
-
} = require('../../../../../core/playwright/helpers/auth/getUsers');
|
|
17
13
|
describe('getListOfActors', () => {
|
|
14
|
+
const stageConfig = 'uat/conf';
|
|
15
|
+
const mode = 'dev';
|
|
16
|
+
const stage = 'uat';
|
|
18
17
|
beforeEach(() => {
|
|
19
18
|
jest.clearAllMocks();
|
|
20
19
|
_path.default.join.mockImplementation((...args) => args.join('/'));
|
|
20
|
+
_path.default.resolve.mockImplementation((...args) => args.join('/'));
|
|
21
|
+
_configPathResolver.getConfigPath.mockReturnValue('uat/conf');
|
|
21
22
|
});
|
|
22
23
|
test('throws an error when config file cannot be loaded', () => {
|
|
23
|
-
_fs.existsSync.mockReturnValueOnce(true);
|
|
24
|
-
|
|
25
|
-
jest.mock('/test/directory/conf/dev/actors/index.js', () => {
|
|
24
|
+
_fs.default.existsSync.mockReturnValueOnce(true);
|
|
25
|
+
jest.mock('/uat/conf/dev/actors/index.js', () => {
|
|
26
26
|
throw new Error('Loading error');
|
|
27
27
|
}, {
|
|
28
28
|
virtual: true
|
|
29
29
|
});
|
|
30
|
-
expect(() => getListOfActors()).toThrow(
|
|
30
|
+
expect(() => (0, _getUsers.getListOfActors)()).toThrow(`Error loading actor configuration from ${_path.default.join(_path.default.resolve(process.cwd(), 'uat/conf/dev/actors/index.js'))}`);
|
|
31
31
|
});
|
|
32
32
|
test('throws an error when beta feature config does not exist', () => {
|
|
33
|
-
_fs.existsSync.mockReturnValueOnce(true) // Main config file exists
|
|
33
|
+
_fs.default.existsSync.mockReturnValueOnce(true) // Main config file exists
|
|
34
34
|
.mockReturnValueOnce(false); // Beta feature config does not exist in either path
|
|
35
35
|
|
|
36
36
|
const betaFeature = 'nonExistentFeature';
|
|
37
|
-
expect(() => getListOfActors(betaFeature)).toThrow(`There is no beta feature configured with the name "${betaFeature}"`);
|
|
37
|
+
expect(() => (0, _getUsers.getListOfActors)(betaFeature)).toThrow(`There is no beta feature configured with the name "${betaFeature}"`);
|
|
38
38
|
});
|
|
39
|
-
test('loads main configuration when betaFeature is not provided and main config
|
|
40
|
-
_fs.existsSync.mockReturnValueOnce(true);
|
|
41
|
-
|
|
39
|
+
test('loads main configuration when betaFeature is not provided and main config exists', () => {
|
|
40
|
+
_fs.default.existsSync.mockReturnValueOnce(true);
|
|
41
|
+
const file = _path.default.join(_path.default.resolve(process.cwd(), `${stageConfig}/${mode}/actors/index.js`));
|
|
42
|
+
jest.doMock(file, () => ({
|
|
42
43
|
actors: []
|
|
43
44
|
}), {
|
|
44
45
|
virtual: true
|
|
45
46
|
});
|
|
46
|
-
const result = getListOfActors();
|
|
47
|
+
const result = (0, _getUsers.getListOfActors)();
|
|
47
48
|
expect(result).toEqual({
|
|
48
49
|
actors: []
|
|
49
50
|
});
|
|
50
51
|
});
|
|
51
52
|
test('falls back to default configuration if main config file does not exist', () => {
|
|
52
|
-
_fs.existsSync.mockReturnValueOnce(false)
|
|
53
|
-
|
|
53
|
+
_fs.default.existsSync.mockReturnValueOnce(false) // Main config file missing
|
|
54
|
+
.mockReturnValueOnce(true); // Beta feature config exists
|
|
55
|
+
|
|
56
|
+
const defaultConfigFile = _path.default.join(_path.default.resolve(process.cwd(), `${stage}/conf/default/actors/index.js`));
|
|
57
|
+
jest.doMock(defaultConfigFile, () => ({
|
|
54
58
|
actors: []
|
|
55
59
|
}), {
|
|
56
60
|
virtual: true
|
|
57
61
|
});
|
|
58
|
-
const result = getListOfActors();
|
|
62
|
+
const result = (0, _getUsers.getListOfActors)();
|
|
59
63
|
expect(result).toEqual({
|
|
60
64
|
actors: []
|
|
61
65
|
});
|
|
62
66
|
});
|
|
63
67
|
test('loads beta feature configuration when betaFeature is provided', () => {
|
|
64
|
-
_fs.existsSync.mockReturnValueOnce(true) // Main config file exists
|
|
68
|
+
_fs.default.existsSync.mockReturnValueOnce(true) // Main config file exists
|
|
65
69
|
.mockReturnValueOnce(true); // Beta feature config exists
|
|
66
70
|
|
|
67
71
|
const betaFeature = 'parentchild';
|
|
68
|
-
const betaFeaturePath =
|
|
72
|
+
const betaFeaturePath = _path.default.join(_path.default.resolve(process.cwd(), `${stageConfig}/${mode}/actors/beta/${betaFeature}/index.js`));
|
|
69
73
|
jest.doMock(betaFeaturePath, () => ({
|
|
70
74
|
betaActors: []
|
|
71
75
|
}), {
|
|
72
76
|
virtual: true
|
|
73
77
|
});
|
|
74
|
-
const result = getListOfActors(betaFeature);
|
|
78
|
+
const result = (0, _getUsers.getListOfActors)(betaFeature);
|
|
75
79
|
expect(result).toEqual({
|
|
76
80
|
betaActors: []
|
|
77
81
|
});
|
|
78
|
-
expect(_path.default.join).toHaveBeenCalledWith('/test/directory', `conf/dev/actors/beta/${betaFeature}/index.js`);
|
|
79
82
|
});
|
|
80
83
|
});
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zohodesk/testinglibrary",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.17-n20-experimental",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@zohodesk/testinglibrary",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.17-n20-experimental",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "ISC",
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@babel/code-frame": "7.27.1",
|
|
14
14
|
"@babel/preset-react": "7.28.5",
|
|
15
15
|
"@cucumber/cucumber": "12.2.0",
|
|
16
|
-
"@playwright/test": "1.
|
|
16
|
+
"@playwright/test": "1.57.0",
|
|
17
17
|
"@reportportal/agent-js-playwright": "5.2.2",
|
|
18
18
|
"@testing-library/jest-dom": "6.9.1",
|
|
19
19
|
"@testing-library/react": "16.3.0",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"jest-environment-jsdom": "30.2.0",
|
|
25
25
|
"jsonpath": "1.1.1",
|
|
26
26
|
"msw": "2.11.6",
|
|
27
|
-
"playwright": "1.
|
|
28
|
-
"playwright-bdd": "8.4.
|
|
27
|
+
"playwright": "1.57.0",
|
|
28
|
+
"playwright-bdd": "8.4.2",
|
|
29
29
|
"supports-color": "10.2.2"
|
|
30
30
|
},
|
|
31
31
|
"bin": {
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"@babel/plugin-transform-runtime": "7.28.3",
|
|
39
39
|
"@babel/preset-env": "7.28.3",
|
|
40
40
|
"@babel/runtime": "7.28.4",
|
|
41
|
-
"commander": "14.0.
|
|
41
|
+
"commander": "14.0.2",
|
|
42
42
|
"jest-html-reporter": "4.3.0"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
@@ -2573,9 +2573,9 @@
|
|
|
2573
2573
|
}
|
|
2574
2574
|
},
|
|
2575
2575
|
"node_modules/@eslint/eslintrc": {
|
|
2576
|
-
"version": "3.3.
|
|
2577
|
-
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.
|
|
2578
|
-
"integrity": "sha512-
|
|
2576
|
+
"version": "3.3.3",
|
|
2577
|
+
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
|
|
2578
|
+
"integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==",
|
|
2579
2579
|
"license": "MIT",
|
|
2580
2580
|
"peer": true,
|
|
2581
2581
|
"dependencies": {
|
|
@@ -2585,7 +2585,7 @@
|
|
|
2585
2585
|
"globals": "^14.0.0",
|
|
2586
2586
|
"ignore": "^5.2.0",
|
|
2587
2587
|
"import-fresh": "^3.2.1",
|
|
2588
|
-
"js-yaml": "^4.1.
|
|
2588
|
+
"js-yaml": "^4.1.1",
|
|
2589
2589
|
"minimatch": "^3.1.2",
|
|
2590
2590
|
"strip-json-comments": "^3.1.1"
|
|
2591
2591
|
},
|
|
@@ -3601,12 +3601,12 @@
|
|
|
3601
3601
|
}
|
|
3602
3602
|
},
|
|
3603
3603
|
"node_modules/@playwright/test": {
|
|
3604
|
-
"version": "1.
|
|
3605
|
-
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.
|
|
3606
|
-
"integrity": "sha512-
|
|
3604
|
+
"version": "1.57.0",
|
|
3605
|
+
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.57.0.tgz",
|
|
3606
|
+
"integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==",
|
|
3607
3607
|
"license": "Apache-2.0",
|
|
3608
3608
|
"dependencies": {
|
|
3609
|
-
"playwright": "1.
|
|
3609
|
+
"playwright": "1.57.0"
|
|
3610
3610
|
},
|
|
3611
3611
|
"bin": {
|
|
3612
3612
|
"playwright": "cli.js"
|
|
@@ -4644,9 +4644,9 @@
|
|
|
4644
4644
|
"license": "MIT"
|
|
4645
4645
|
},
|
|
4646
4646
|
"node_modules/baseline-browser-mapping": {
|
|
4647
|
-
"version": "2.8.
|
|
4648
|
-
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.
|
|
4649
|
-
"integrity": "sha512-
|
|
4647
|
+
"version": "2.8.32",
|
|
4648
|
+
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.32.tgz",
|
|
4649
|
+
"integrity": "sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==",
|
|
4650
4650
|
"license": "Apache-2.0",
|
|
4651
4651
|
"bin": {
|
|
4652
4652
|
"baseline-browser-mapping": "dist/cli.js"
|
|
@@ -4804,9 +4804,9 @@
|
|
|
4804
4804
|
}
|
|
4805
4805
|
},
|
|
4806
4806
|
"node_modules/caniuse-lite": {
|
|
4807
|
-
"version": "1.0.
|
|
4808
|
-
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.
|
|
4809
|
-
"integrity": "sha512-
|
|
4807
|
+
"version": "1.0.30001757",
|
|
4808
|
+
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz",
|
|
4809
|
+
"integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==",
|
|
4810
4810
|
"funding": [
|
|
4811
4811
|
{
|
|
4812
4812
|
"type": "opencollective",
|
|
@@ -5071,9 +5071,9 @@
|
|
|
5071
5071
|
}
|
|
5072
5072
|
},
|
|
5073
5073
|
"node_modules/commander": {
|
|
5074
|
-
"version": "14.0.
|
|
5075
|
-
"resolved": "https://registry.npmjs.org/commander/-/commander-14.0.
|
|
5076
|
-
"integrity": "sha512-
|
|
5074
|
+
"version": "14.0.2",
|
|
5075
|
+
"resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz",
|
|
5076
|
+
"integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==",
|
|
5077
5077
|
"license": "MIT",
|
|
5078
5078
|
"engines": {
|
|
5079
5079
|
"node": ">=20"
|
|
@@ -5099,12 +5099,16 @@
|
|
|
5099
5099
|
"license": "MIT"
|
|
5100
5100
|
},
|
|
5101
5101
|
"node_modules/cookie": {
|
|
5102
|
-
"version": "1.
|
|
5103
|
-
"resolved": "https://registry.npmjs.org/cookie/-/cookie-1.
|
|
5104
|
-
"integrity": "sha512-
|
|
5102
|
+
"version": "1.1.1",
|
|
5103
|
+
"resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
|
|
5104
|
+
"integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
|
|
5105
5105
|
"license": "MIT",
|
|
5106
5106
|
"engines": {
|
|
5107
5107
|
"node": ">=18"
|
|
5108
|
+
},
|
|
5109
|
+
"funding": {
|
|
5110
|
+
"type": "opencollective",
|
|
5111
|
+
"url": "https://opencollective.com/express"
|
|
5108
5112
|
}
|
|
5109
5113
|
},
|
|
5110
5114
|
"node_modules/core-js": {
|
|
@@ -5395,9 +5399,9 @@
|
|
|
5395
5399
|
"license": "MIT"
|
|
5396
5400
|
},
|
|
5397
5401
|
"node_modules/electron-to-chromium": {
|
|
5398
|
-
"version": "1.5.
|
|
5399
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.
|
|
5400
|
-
"integrity": "sha512-
|
|
5402
|
+
"version": "1.5.263",
|
|
5403
|
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.263.tgz",
|
|
5404
|
+
"integrity": "sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg==",
|
|
5401
5405
|
"license": "ISC"
|
|
5402
5406
|
},
|
|
5403
5407
|
"node_modules/emittery": {
|
|
@@ -9001,21 +9005,21 @@
|
|
|
9001
9005
|
}
|
|
9002
9006
|
},
|
|
9003
9007
|
"node_modules/msw/node_modules/tldts": {
|
|
9004
|
-
"version": "7.0.
|
|
9005
|
-
"resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.
|
|
9006
|
-
"integrity": "sha512-
|
|
9008
|
+
"version": "7.0.19",
|
|
9009
|
+
"resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.19.tgz",
|
|
9010
|
+
"integrity": "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==",
|
|
9007
9011
|
"license": "MIT",
|
|
9008
9012
|
"dependencies": {
|
|
9009
|
-
"tldts-core": "^7.0.
|
|
9013
|
+
"tldts-core": "^7.0.19"
|
|
9010
9014
|
},
|
|
9011
9015
|
"bin": {
|
|
9012
9016
|
"tldts": "bin/cli.js"
|
|
9013
9017
|
}
|
|
9014
9018
|
},
|
|
9015
9019
|
"node_modules/msw/node_modules/tldts-core": {
|
|
9016
|
-
"version": "7.0.
|
|
9017
|
-
"resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.
|
|
9018
|
-
"integrity": "sha512-
|
|
9020
|
+
"version": "7.0.19",
|
|
9021
|
+
"resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.19.tgz",
|
|
9022
|
+
"integrity": "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==",
|
|
9019
9023
|
"license": "MIT"
|
|
9020
9024
|
},
|
|
9021
9025
|
"node_modules/msw/node_modules/tough-cookie": {
|
|
@@ -9481,10 +9485,10 @@
|
|
|
9481
9485
|
}
|
|
9482
9486
|
},
|
|
9483
9487
|
"node_modules/path-scurry/node_modules/lru-cache": {
|
|
9484
|
-
"version": "11.2.
|
|
9485
|
-
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.
|
|
9486
|
-
"integrity": "sha512-
|
|
9487
|
-
"license": "
|
|
9488
|
+
"version": "11.2.4",
|
|
9489
|
+
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz",
|
|
9490
|
+
"integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==",
|
|
9491
|
+
"license": "BlueOak-1.0.0",
|
|
9488
9492
|
"engines": {
|
|
9489
9493
|
"node": "20 || >=22"
|
|
9490
9494
|
}
|
|
@@ -9612,12 +9616,12 @@
|
|
|
9612
9616
|
}
|
|
9613
9617
|
},
|
|
9614
9618
|
"node_modules/playwright": {
|
|
9615
|
-
"version": "1.
|
|
9616
|
-
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.
|
|
9617
|
-
"integrity": "sha512-
|
|
9619
|
+
"version": "1.57.0",
|
|
9620
|
+
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz",
|
|
9621
|
+
"integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==",
|
|
9618
9622
|
"license": "Apache-2.0",
|
|
9619
9623
|
"dependencies": {
|
|
9620
|
-
"playwright-core": "1.
|
|
9624
|
+
"playwright-core": "1.57.0"
|
|
9621
9625
|
},
|
|
9622
9626
|
"bin": {
|
|
9623
9627
|
"playwright": "cli.js"
|
|
@@ -9630,9 +9634,9 @@
|
|
|
9630
9634
|
}
|
|
9631
9635
|
},
|
|
9632
9636
|
"node_modules/playwright-bdd": {
|
|
9633
|
-
"version": "8.4.
|
|
9634
|
-
"resolved": "https://registry.npmjs.org/playwright-bdd/-/playwright-bdd-8.4.
|
|
9635
|
-
"integrity": "sha512-
|
|
9637
|
+
"version": "8.4.2",
|
|
9638
|
+
"resolved": "https://registry.npmjs.org/playwright-bdd/-/playwright-bdd-8.4.2.tgz",
|
|
9639
|
+
"integrity": "sha512-ViugP5vj2UdDkXFao/BTVnau+tWFF9ADsuAL1+o+RUuq6sny+b+RM1CS9ekoFY+sQuHoaP1IiUwSoWyANmOE4Q==",
|
|
9636
9640
|
"license": "MIT",
|
|
9637
9641
|
"dependencies": {
|
|
9638
9642
|
"@cucumber/cucumber-expressions": "18.0.1",
|
|
@@ -9645,7 +9649,7 @@
|
|
|
9645
9649
|
"cli-table3": "0.6.5",
|
|
9646
9650
|
"commander": "^13.1.0",
|
|
9647
9651
|
"fast-glob": "^3.3.3",
|
|
9648
|
-
"mime-types": "^3.0.
|
|
9652
|
+
"mime-types": "^3.0.2",
|
|
9649
9653
|
"xmlbuilder": "15.1.1"
|
|
9650
9654
|
},
|
|
9651
9655
|
"bin": {
|
|
@@ -9745,9 +9749,9 @@
|
|
|
9745
9749
|
}
|
|
9746
9750
|
},
|
|
9747
9751
|
"node_modules/playwright-core": {
|
|
9748
|
-
"version": "1.
|
|
9749
|
-
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.
|
|
9750
|
-
"integrity": "sha512-
|
|
9752
|
+
"version": "1.57.0",
|
|
9753
|
+
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz",
|
|
9754
|
+
"integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==",
|
|
9751
9755
|
"license": "Apache-2.0",
|
|
9752
9756
|
"bin": {
|
|
9753
9757
|
"playwright-core": "cli.js"
|
|
@@ -11683,15 +11687,18 @@
|
|
|
11683
11687
|
"license": "ISC"
|
|
11684
11688
|
},
|
|
11685
11689
|
"node_modules/yaml": {
|
|
11686
|
-
"version": "2.8.
|
|
11687
|
-
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.
|
|
11688
|
-
"integrity": "sha512-
|
|
11690
|
+
"version": "2.8.2",
|
|
11691
|
+
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
|
|
11692
|
+
"integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
|
|
11689
11693
|
"license": "ISC",
|
|
11690
11694
|
"bin": {
|
|
11691
11695
|
"yaml": "bin.mjs"
|
|
11692
11696
|
},
|
|
11693
11697
|
"engines": {
|
|
11694
11698
|
"node": ">= 14.6"
|
|
11699
|
+
},
|
|
11700
|
+
"funding": {
|
|
11701
|
+
"url": "https://github.com/sponsors/eemeli"
|
|
11695
11702
|
}
|
|
11696
11703
|
},
|
|
11697
11704
|
"node_modules/yargs": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zohodesk/testinglibrary",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.17-n20-experimental",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"@babel/code-frame": "7.27.1",
|
|
25
25
|
"@babel/preset-react": "7.28.5",
|
|
26
26
|
"@cucumber/cucumber": "12.2.0",
|
|
27
|
-
"@playwright/test": "1.
|
|
27
|
+
"@playwright/test": "1.57.0",
|
|
28
28
|
"@reportportal/agent-js-playwright": "5.2.2",
|
|
29
29
|
"@testing-library/jest-dom": "6.9.1",
|
|
30
30
|
"@testing-library/react": "16.3.0",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"jest-environment-jsdom": "30.2.0",
|
|
36
36
|
"jsonpath": "1.1.1",
|
|
37
37
|
"msw": "2.11.6",
|
|
38
|
-
"playwright": "1.
|
|
39
|
-
"playwright-bdd": "8.4.
|
|
38
|
+
"playwright": "1.57.0",
|
|
39
|
+
"playwright-bdd": "8.4.2",
|
|
40
40
|
"supports-color": "10.2.2"
|
|
41
41
|
},
|
|
42
42
|
"bin": {
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"@babel/plugin-transform-runtime": "7.28.3",
|
|
55
55
|
"@babel/preset-env": "7.28.3",
|
|
56
56
|
"@babel/runtime": "7.28.4",
|
|
57
|
-
"commander": "14.0.
|
|
57
|
+
"commander": "14.0.2",
|
|
58
58
|
"jest-html-reporter": "4.3.0"
|
|
59
59
|
}
|
|
60
60
|
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
<html><head><meta charset="utf-8"/><title>Unit Report</title><style type="text/css">html,
|
|
2
|
+
body {
|
|
3
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
4
|
+
font-size: 1rem;
|
|
5
|
+
margin: 0;
|
|
6
|
+
padding: 0;
|
|
7
|
+
color: #333;
|
|
8
|
+
}
|
|
9
|
+
body {
|
|
10
|
+
padding: 2rem 1rem;
|
|
11
|
+
font-size: 0.85rem;
|
|
12
|
+
}
|
|
13
|
+
.jesthtml-content {
|
|
14
|
+
margin: 0 auto;
|
|
15
|
+
max-width: 70rem;
|
|
16
|
+
}
|
|
17
|
+
header {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
}
|
|
21
|
+
#title {
|
|
22
|
+
margin: 0;
|
|
23
|
+
flex-grow: 1;
|
|
24
|
+
}
|
|
25
|
+
#logo {
|
|
26
|
+
height: 4rem;
|
|
27
|
+
}
|
|
28
|
+
#timestamp {
|
|
29
|
+
color: #777;
|
|
30
|
+
margin-top: 0.5rem;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** SUMMARY */
|
|
34
|
+
#summary {
|
|
35
|
+
color: #333;
|
|
36
|
+
margin: 2rem 0;
|
|
37
|
+
display: flex;
|
|
38
|
+
font-family: monospace;
|
|
39
|
+
font-size: 1rem;
|
|
40
|
+
}
|
|
41
|
+
#summary > div {
|
|
42
|
+
margin-right: 2rem;
|
|
43
|
+
background: #eee;
|
|
44
|
+
padding: 1rem;
|
|
45
|
+
min-width: 15rem;
|
|
46
|
+
}
|
|
47
|
+
#summary > div:last-child {
|
|
48
|
+
margin-right: 0;
|
|
49
|
+
}
|
|
50
|
+
@media only screen and (max-width: 720px) {
|
|
51
|
+
#summary {
|
|
52
|
+
flex-direction: column;
|
|
53
|
+
}
|
|
54
|
+
#summary > div {
|
|
55
|
+
margin-right: 0;
|
|
56
|
+
margin-top: 2rem;
|
|
57
|
+
}
|
|
58
|
+
#summary > div:first-child {
|
|
59
|
+
margin-top: 0;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.summary-total {
|
|
64
|
+
font-weight: bold;
|
|
65
|
+
margin-bottom: 0.5rem;
|
|
66
|
+
}
|
|
67
|
+
.summary-passed {
|
|
68
|
+
color: #4f8a10;
|
|
69
|
+
border-left: 0.4rem solid #4f8a10;
|
|
70
|
+
padding-left: 0.5rem;
|
|
71
|
+
}
|
|
72
|
+
.summary-failed,
|
|
73
|
+
.summary-obsolete-snapshots {
|
|
74
|
+
color: #d8000c;
|
|
75
|
+
border-left: 0.4rem solid #d8000c;
|
|
76
|
+
padding-left: 0.5rem;
|
|
77
|
+
}
|
|
78
|
+
.summary-pending {
|
|
79
|
+
color: #9f6000;
|
|
80
|
+
border-left: 0.4rem solid #9f6000;
|
|
81
|
+
padding-left: 0.5rem;
|
|
82
|
+
}
|
|
83
|
+
.summary-empty {
|
|
84
|
+
color: #999;
|
|
85
|
+
border-left: 0.4rem solid #999;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.test-result {
|
|
89
|
+
padding: 1rem;
|
|
90
|
+
margin-bottom: 0.25rem;
|
|
91
|
+
}
|
|
92
|
+
.test-result:last-child {
|
|
93
|
+
border: 0;
|
|
94
|
+
}
|
|
95
|
+
.test-result.passed {
|
|
96
|
+
background-color: #dff2bf;
|
|
97
|
+
color: #4f8a10;
|
|
98
|
+
}
|
|
99
|
+
.test-result.failed {
|
|
100
|
+
background-color: #ffbaba;
|
|
101
|
+
color: #d8000c;
|
|
102
|
+
}
|
|
103
|
+
.test-result.pending {
|
|
104
|
+
background-color: #ffdf61;
|
|
105
|
+
color: #9f6000;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.test-info {
|
|
109
|
+
display: flex;
|
|
110
|
+
justify-content: space-between;
|
|
111
|
+
}
|
|
112
|
+
.test-suitename {
|
|
113
|
+
width: 20%;
|
|
114
|
+
text-align: left;
|
|
115
|
+
font-weight: bold;
|
|
116
|
+
word-break: break-word;
|
|
117
|
+
}
|
|
118
|
+
.test-title {
|
|
119
|
+
width: 40%;
|
|
120
|
+
text-align: left;
|
|
121
|
+
font-style: italic;
|
|
122
|
+
}
|
|
123
|
+
.test-status {
|
|
124
|
+
width: 20%;
|
|
125
|
+
text-align: right;
|
|
126
|
+
}
|
|
127
|
+
.test-duration {
|
|
128
|
+
width: 10%;
|
|
129
|
+
text-align: right;
|
|
130
|
+
font-size: 0.75rem;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.failureMessages {
|
|
134
|
+
padding: 0 1rem;
|
|
135
|
+
margin-top: 1rem;
|
|
136
|
+
border-top: 1px dashed #d8000c;
|
|
137
|
+
}
|
|
138
|
+
.failureMessages.suiteFailure {
|
|
139
|
+
border-top: none;
|
|
140
|
+
}
|
|
141
|
+
.failureMsg {
|
|
142
|
+
white-space: pre-wrap;
|
|
143
|
+
white-space: -moz-pre-wrap;
|
|
144
|
+
white-space: -pre-wrap;
|
|
145
|
+
white-space: -o-pre-wrap;
|
|
146
|
+
word-wrap: break-word;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.suite-container {
|
|
150
|
+
margin-bottom: 2rem;
|
|
151
|
+
}
|
|
152
|
+
.suite-container > input[type="checkbox"] {
|
|
153
|
+
position: absolute;
|
|
154
|
+
left: -100vw;
|
|
155
|
+
}
|
|
156
|
+
.suite-container label {
|
|
157
|
+
display: block;
|
|
158
|
+
}
|
|
159
|
+
.suite-container .suite-tests {
|
|
160
|
+
overflow-y: hidden;
|
|
161
|
+
height: 0;
|
|
162
|
+
}
|
|
163
|
+
.suite-container > input[type="checkbox"]:checked ~ .suite-tests {
|
|
164
|
+
height: auto;
|
|
165
|
+
overflow: visible;
|
|
166
|
+
}
|
|
167
|
+
.suite-info {
|
|
168
|
+
padding: 1rem;
|
|
169
|
+
background-color: #eee;
|
|
170
|
+
color: #777;
|
|
171
|
+
display: flex;
|
|
172
|
+
align-items: center;
|
|
173
|
+
margin-bottom: 0.25rem;
|
|
174
|
+
}
|
|
175
|
+
.suite-info:hover {
|
|
176
|
+
background-color: #ddd;
|
|
177
|
+
cursor: pointer;
|
|
178
|
+
}
|
|
179
|
+
.suite-info .suite-path {
|
|
180
|
+
word-break: break-all;
|
|
181
|
+
flex-grow: 1;
|
|
182
|
+
font-family: monospace;
|
|
183
|
+
font-size: 1rem;
|
|
184
|
+
}
|
|
185
|
+
.suite-info .suite-time {
|
|
186
|
+
margin-left: 0.5rem;
|
|
187
|
+
padding: 0.2rem 0.3rem;
|
|
188
|
+
font-size: 0.75rem;
|
|
189
|
+
}
|
|
190
|
+
.suite-info .suite-time.warn {
|
|
191
|
+
background-color: #d8000c;
|
|
192
|
+
color: #fff;
|
|
193
|
+
}
|
|
194
|
+
.suite-info:before {
|
|
195
|
+
content: "\2303";
|
|
196
|
+
display: inline-block;
|
|
197
|
+
margin-right: 0.5rem;
|
|
198
|
+
transform: rotate(0deg);
|
|
199
|
+
}
|
|
200
|
+
.suite-container > input[type="checkbox"]:checked ~ label .suite-info:before {
|
|
201
|
+
transform: rotate(180deg);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/* CONSOLE LOGS */
|
|
205
|
+
.suite-consolelog {
|
|
206
|
+
margin-bottom: 0.25rem;
|
|
207
|
+
padding: 1rem;
|
|
208
|
+
background-color: #efefef;
|
|
209
|
+
}
|
|
210
|
+
.suite-consolelog-header {
|
|
211
|
+
font-weight: bold;
|
|
212
|
+
}
|
|
213
|
+
.suite-consolelog-item {
|
|
214
|
+
padding: 0.5rem;
|
|
215
|
+
}
|
|
216
|
+
.suite-consolelog-item pre {
|
|
217
|
+
margin: 0.5rem 0;
|
|
218
|
+
white-space: pre-wrap;
|
|
219
|
+
white-space: -moz-pre-wrap;
|
|
220
|
+
white-space: -pre-wrap;
|
|
221
|
+
white-space: -o-pre-wrap;
|
|
222
|
+
word-wrap: break-word;
|
|
223
|
+
}
|
|
224
|
+
.suite-consolelog-item-origin {
|
|
225
|
+
color: #777;
|
|
226
|
+
font-weight: bold;
|
|
227
|
+
}
|
|
228
|
+
.suite-consolelog-item-message {
|
|
229
|
+
color: #000;
|
|
230
|
+
font-size: 1rem;
|
|
231
|
+
padding: 0 0.5rem;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/* OBSOLETE SNAPSHOTS */
|
|
235
|
+
.suite-obsolete-snapshots {
|
|
236
|
+
margin-bottom: 0.25rem;
|
|
237
|
+
padding: 1rem;
|
|
238
|
+
background-color: #ffbaba;
|
|
239
|
+
color: #d8000c;
|
|
240
|
+
}
|
|
241
|
+
.suite-obsolete-snapshots-header {
|
|
242
|
+
font-weight: bold;
|
|
243
|
+
}
|
|
244
|
+
.suite-obsolete-snapshots-item {
|
|
245
|
+
padding: 0.5rem;
|
|
246
|
+
}
|
|
247
|
+
.suite-obsolete-snapshots-item pre {
|
|
248
|
+
margin: 0.5rem 0;
|
|
249
|
+
white-space: pre-wrap;
|
|
250
|
+
white-space: -moz-pre-wrap;
|
|
251
|
+
white-space: -pre-wrap;
|
|
252
|
+
white-space: -o-pre-wrap;
|
|
253
|
+
word-wrap: break-word;
|
|
254
|
+
}
|
|
255
|
+
.suite-obsolete-snapshots-item-message {
|
|
256
|
+
color: #000;
|
|
257
|
+
font-size: 1rem;
|
|
258
|
+
padding: 0 0.5rem;
|
|
259
|
+
}
|
|
260
|
+
</style></head><body><div class="jesthtml-content"><header><h1 id="title">Unit Report</h1></header><div id="metadata-container"><div id="timestamp">Started: 2025-11-29 07:43:45</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (13)</div><div class="summary-passed ">13 passed</div><div class="summary-failed summary-empty">0 failed</div><div class="summary-pending summary-empty">0 pending</div></div><div id="test-summary"><div class="summary-total">Tests (47)</div><div class="summary-passed ">47 passed</div><div class="summary-failed summary-empty">0 failed</div><div class="summary-pending summary-empty">0 pending</div></div></div></div><div id="suite-1" class="suite-container"><input id="collapsible-0" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-0"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/__tests__/tagProcessor.test.js</div><div class="suite-time">1.162s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should return tagArgs if no edition is provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle a single edition with <= operator</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle a single edition with >= operator</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle a single edition with < operator</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle a single edition with > operator</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle a single edition with no operator</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should log a message if edition is not found</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle multiple editions</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should build tags correctly when tags are empty</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></div><div id="suite-2" class="suite-container"><input id="collapsible-1" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-1"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/helpers/__tests__/additionalProfiles.test.js</div><div class="suite-time">1.364s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">additionalProfiles</div><div class="test-title">should return empty object when no additional profile tags are present</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">additionalProfiles</div><div class="test-title">should return additional profile actors when additional profile tags and editionInfo are present</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">additionalProfiles</div><div class="test-title">should return additional profile actors when all actor details are present</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></div><div id="suite-3" class="suite-container"><input id="collapsible-2" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-2"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/helpers/__tests__/customFixturesHelper.test.js</div><div class="suite-time">1.343s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">getCustomAccountDetails</div><div class="test-title">returns selected user when any tag info is present</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getCustomAccountDetails</div><div class="test-title">logs and returns undefined if getCustomAccountDetails function throws</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getCustomAccountDetails</div><div class="test-title">returns default actor when no tag info is not provided</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div></div></div><div id="suite-4" class="suite-container"><input id="collapsible-3" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-3"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/helpers/__tests__/configFileNameProvider.test.js</div><div class="suite-time">1.402s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">getUATFileName</div><div class="test-title">should return pipeline-matched config path when file exists</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getUATFileName</div><div class="test-title">should use default stage and mode when not provided</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getUATFileName</div><div class="test-title">should return the default config files for pipeline matched files not exists</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getEnvConfigFilePath</div><div class="test-title">should return conf file path when file exists</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getEnvConfigFilePath</div><div class="test-title">should return default path when file does not exist</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></div><div id="suite-5" class="suite-container"><input id="collapsible-4" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-4"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/helpers/__tests__/getUsers_ListOfActors.test.js</div><div class="suite-time">1.463s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">getListOfActors</div><div class="test-title">throws an error when config file cannot be loaded</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getListOfActors</div><div class="test-title">throws an error when beta feature config does not exist</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getListOfActors</div><div class="test-title">loads main configuration when betaFeature is not provided and main config exists</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getListOfActors</div><div class="test-title">falls back to default configuration if main config file does not exist</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getListOfActors</div><div class="test-title">loads beta feature configuration when betaFeature is provided</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></div><div id="suite-6" class="suite-container"><input id="collapsible-5" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-5"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/helpers/__tests__/configPathResolver.test.js</div><div class="suite-time">0.18s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">getConfigPath</div><div class="test-title">should return config path when properties file exists and has mapping</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getConfigPath</div><div class="test-title">should log info and use default mapping if file does not exist</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getConfigPath</div><div class="test-title">should log failure if config mapping not found for stage</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div></div></div><div id="suite-7" class="suite-container"><input id="collapsible-6" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-6"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/configuration/__tests__/Configuration.test.js</div><div class="suite-time">0.219s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Configuration Class</div><div class="test-title">should add new key-value pair to the configuration</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Configuration Class</div><div class="test-title">should combine configurations correctly using addAll</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Configuration Class</div><div class="test-title">should return correct value for a given key</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div></div></div><div id="suite-8" class="suite-container"><input id="collapsible-7" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-7"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/buildInFixtures/__tests__/executionContext.test.js</div><div class="suite-time">0.197s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">executionContext</div><div class="test-title">should pass actorInfo with details from getCustomAccountDetails to use</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></div><div id="suite-9" class="suite-container"><input id="collapsible-8" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-8"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/examples/src/__tests__/App.test.js</div><div class="suite-time">0.149s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">example functions</div><div class="test-title">add function adds two numbers correctly</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">example functions</div><div class="test-title">greet function greets a person with their name</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div></div></div><div id="suite-10" class="suite-container"><input id="collapsible-9" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-9"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/runner/__tests__/SpawnRunner.test.js</div><div class="suite-time">0.893s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SpawnRunner > run</div><div class="test-title">should call runPreprocessing when bddMode is true</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></div><div id="suite-11" class="suite-container"><input id="collapsible-10" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-10"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/runner/__tests__/RunnerHelper.test.js</div><div class="suite-time">0.685s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">RunnerHelper > createRunner</div><div class="test-title">should throw error on invalid runner type</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RunnerHelper > createRunner</div><div class="test-title">should create a valid runner class</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div></div></div><div id="suite-12" class="suite-container"><input id="collapsible-11" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-11"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/__tests__/validateFeature.test.js</div><div class="suite-time">2.053s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateFeatureFiles</div><div class="test-title">runPreprocessing with correct arguments and log success</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateFeatureFiles</div><div class="test-title">runPreprocessing with playwright conf</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateFeatureFiles</div><div class="test-title">error when runPreprocessing fails</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div></div></div><div id="suite-13" class="suite-container"><input id="collapsible-12" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-12"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/helpers/__tests__/fileMutex.test.js</div><div class="suite-time">2.245s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > acquire</div><div class="test-title">should create the lock file if it does not exist</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > acquire</div><div class="test-title">should wait for lock file deletion if it exists</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > acquire</div><div class="test-title">should reject if watch timeout exceeds</div><div class="test-status">passed</div><div class="test-duration">1.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > release</div><div class="test-title">should delete the lock file if it exists</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > release</div><div class="test-title">should release lock by deleting lock file</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > release</div><div class="test-title">should not attempt to delete the lock file if it does not exist</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > release</div><div class="test-title">should log an error if deleting the lock file fails</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></div></div></body></html>
|