@zohodesk/testinglibrary 0.0.44-n20-experimental → 0.0.45-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/.vscode/mcp.json +9 -0
- package/README.md +0 -8
- package/build/core/dataGenerator/DataGenerator.js +12 -17
- package/build/core/playwright/constants/reporterConstants.js +1 -0
- package/build/core/playwright/reporter/PlaywrightReporter.js +44 -0
- package/build/core/playwright/reporter/UnitReporter.js +27 -0
- package/build/core/playwright/validateFeature.js +0 -11
- package/build/lib/cli.js +30 -7
- package/build/utils/commonUtils.js +9 -0
- package/npm-shrinkwrap.json +104 -166
- package/package.json +8 -7
- package/build/core/dataGenerator/validateGenerators.js +0 -80
- package/build/core/playwright/report-generator.js +0 -42
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zohodesk/testinglibrary",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.45-n20-experimental",
|
|
4
4
|
"main": "./build/index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"postinstall": "node bin/postinstall.js",
|
|
@@ -26,8 +26,10 @@
|
|
|
26
26
|
"@playwright/test": "1.56.1",
|
|
27
27
|
"@reportportal/agent-js-playwright": "5.2.2",
|
|
28
28
|
"@testing-library/jest-dom": "6.9.1",
|
|
29
|
+
"@zohodesk/unit-testing-framework": "0.0.30-experimental",
|
|
29
30
|
"babel-jest": "30.2.0",
|
|
30
31
|
"babel-plugin-transform-dynamic-import": "2.1.0",
|
|
32
|
+
"commander": "14.0.2",
|
|
31
33
|
"fast-glob": "3.3.3",
|
|
32
34
|
"jest": "30.2.0",
|
|
33
35
|
"jest-environment-jsdom": "30.2.0",
|
|
@@ -47,13 +49,12 @@
|
|
|
47
49
|
"react-dom": "*"
|
|
48
50
|
},
|
|
49
51
|
"devDependencies": {
|
|
50
|
-
"@babel/cli": "7.28.
|
|
51
|
-
"@babel/core": "7.
|
|
52
|
-
"@babel/node": "7.
|
|
52
|
+
"@babel/cli": "7.28.6",
|
|
53
|
+
"@babel/core": "7.29.0",
|
|
54
|
+
"@babel/node": "7.29.0",
|
|
53
55
|
"@babel/plugin-transform-runtime": "7.28.3",
|
|
54
|
-
"@babel/preset-env": "7.
|
|
55
|
-
"@babel/runtime": "7.28.
|
|
56
|
-
"commander": "14.0.2",
|
|
56
|
+
"@babel/preset-env": "7.29.0",
|
|
57
|
+
"@babel/runtime": "7.28.6",
|
|
57
58
|
"jest-html-reporter": "4.3.0"
|
|
58
59
|
}
|
|
59
60
|
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.validateGenerators = validateGenerators;
|
|
8
|
-
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
10
|
-
var _logger = require("../../utils/logger");
|
|
11
|
-
function findDataGeneratorDirs(dir, results = []) {
|
|
12
|
-
const entries = _fs.default.readdirSync(dir, {
|
|
13
|
-
withFileTypes: true
|
|
14
|
-
});
|
|
15
|
-
for (const entry of entries) {
|
|
16
|
-
if (entry.isDirectory()) {
|
|
17
|
-
const fullPath = _path.default.join(dir, entry.name);
|
|
18
|
-
if (entry.name === 'data-generators') {
|
|
19
|
-
results.push(fullPath);
|
|
20
|
-
} else {
|
|
21
|
-
findDataGeneratorDirs(fullPath, results);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return results;
|
|
26
|
-
}
|
|
27
|
-
function validateGenerators(modulesRoot) {
|
|
28
|
-
if (!_fs.default.existsSync(modulesRoot)) {
|
|
29
|
-
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Modules directory not found: ${modulesRoot}. Skipping generator validation.`);
|
|
30
|
-
return {
|
|
31
|
-
valid: true,
|
|
32
|
-
duplicates: []
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
const generatorMap = {};
|
|
36
|
-
const dataGenDirs = findDataGeneratorDirs(modulesRoot);
|
|
37
|
-
for (const dataGenDir of dataGenDirs) {
|
|
38
|
-
const jsonFiles = _fs.default.readdirSync(dataGenDir).filter(file => file.endsWith('.json'));
|
|
39
|
-
for (const file of jsonFiles) {
|
|
40
|
-
const filePath = _path.default.join(dataGenDir, file);
|
|
41
|
-
try {
|
|
42
|
-
const data = _fs.default.readFileSync(filePath, 'utf8');
|
|
43
|
-
const generatorObj = JSON.parse(data);
|
|
44
|
-
if (generatorObj.generators) {
|
|
45
|
-
for (const name of Object.keys(generatorObj.generators)) {
|
|
46
|
-
if (!generatorMap[name]) {
|
|
47
|
-
generatorMap[name] = [];
|
|
48
|
-
}
|
|
49
|
-
generatorMap[name].push(filePath);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
} catch (err) {
|
|
53
|
-
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Failed to parse generator file: ${filePath} - ${err.message}`);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
const duplicates = Object.entries(generatorMap).filter(([, files]) => files.length > 1).map(([name, files]) => ({
|
|
58
|
-
name,
|
|
59
|
-
files
|
|
60
|
-
}));
|
|
61
|
-
if (duplicates.length > 0) {
|
|
62
|
-
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, 'Duplicate generator names found:');
|
|
63
|
-
for (const dup of duplicates) {
|
|
64
|
-
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, ` Generator "${dup.name}" defined in:`);
|
|
65
|
-
for (const file of dup.files) {
|
|
66
|
-
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, ` - ${file}`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return {
|
|
70
|
-
valid: false,
|
|
71
|
-
duplicates
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
const generatorCount = Object.keys(generatorMap).length;
|
|
75
|
-
_logger.Logger.log(_logger.Logger.SUCCESS_TYPE, `Generator validation passed. ${generatorCount} unique generators found across ${dataGenDirs.length} data-generators directories.`);
|
|
76
|
-
return {
|
|
77
|
-
valid: true,
|
|
78
|
-
duplicates: []
|
|
79
|
-
};
|
|
80
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.default = generateReport;
|
|
8
|
-
var _child_process = require("child_process");
|
|
9
|
-
var _path = _interopRequireDefault(require("path"));
|
|
10
|
-
var _logger = require("../../utils/logger");
|
|
11
|
-
var _rootPath = require("../../utils/rootPath");
|
|
12
|
-
var _readConfigFile = require("./readConfigFile");
|
|
13
|
-
async function generateReport() {
|
|
14
|
-
// await preProcessReport()
|
|
15
|
-
const userArgs = process.argv.slice(3);
|
|
16
|
-
const playwrightPath = _path.default.resolve((0, _rootPath.getExecutableBinaryPath)('playwright'));
|
|
17
|
-
const command = playwrightPath;
|
|
18
|
-
const {
|
|
19
|
-
reportPath: htmlPath
|
|
20
|
-
} = (0, _readConfigFile.generateConfigFromFile)();
|
|
21
|
-
const args = ['show-report', htmlPath].concat(userArgs);
|
|
22
|
-
const childProcess = (0, _child_process.spawn)(command, args, {
|
|
23
|
-
stdio: 'inherit'
|
|
24
|
-
});
|
|
25
|
-
childProcess.on('error', error => {
|
|
26
|
-
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, error);
|
|
27
|
-
});
|
|
28
|
-
childProcess.on('exit', (code, signal) => {
|
|
29
|
-
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Child Process Exited with Code ${code} and Signal ${signal}`);
|
|
30
|
-
process.exit();
|
|
31
|
-
});
|
|
32
|
-
process.on('exit', () => {
|
|
33
|
-
_logger.Logger.log(_logger.Logger.INFO_TYPE, 'Terminating Playwright Process...');
|
|
34
|
-
childProcess.kill();
|
|
35
|
-
return;
|
|
36
|
-
});
|
|
37
|
-
process.on('SIGINT', () => {
|
|
38
|
-
_logger.Logger.log(_logger.Logger.INFO_TYPE, 'Cleaning up...');
|
|
39
|
-
childProcess.kill();
|
|
40
|
-
process.exit();
|
|
41
|
-
});
|
|
42
|
-
}
|