@zohodesk/testinglibrary 0.0.45-n20-experimental → 0.0.46-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/AUTO_CLEANUP_PLAN.md +332 -0
- package/README.md +8 -0
- package/build/common/data-generator/steps/DataGenerator.spec.js +8 -8
- package/build/common/data-generator/steps/DataGeneratorStepsHelper.js +12 -3
- package/build/core/dataGenerator/CleanupTracker.js +29 -0
- package/build/core/dataGenerator/DataCleanup.js +98 -0
- package/build/core/dataGenerator/DataGenerator.js +64 -12
- package/build/core/dataGenerator/validateGenerators.js +82 -0
- package/build/core/playwright/builtInFixtures/cacheLayer.js +14 -0
- package/build/core/playwright/constants/reporterConstants.js +0 -1
- package/build/core/playwright/readConfigFile.js +2 -1
- package/build/core/playwright/report-generator.js +42 -0
- package/build/core/playwright/validateFeature.js +11 -0
- package/build/lib/cli.js +7 -30
- package/build/utils/commonUtils.js +0 -9
- package/npm-shrinkwrap.json +166 -104
- package/package.json +7 -8
- package/.vscode/mcp.json +0 -9
- package/build/core/playwright/reporter/PlaywrightReporter.js +0 -44
- package/build/core/playwright/reporter/UnitReporter.js +0 -27
|
@@ -0,0 +1,82 @@
|
|
|
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
|
+
var _readConfigFile = require("../playwright/readConfigFile");
|
|
12
|
+
function matchesPattern(filename, pattern) {
|
|
13
|
+
const regex = new RegExp('^' + pattern.replace(/\./g, '\\.').replace(/\*/g, '.*') + '$');
|
|
14
|
+
return regex.test(filename);
|
|
15
|
+
}
|
|
16
|
+
function findGeneratorFiles(dir, pattern, results = []) {
|
|
17
|
+
const entries = _fs.default.readdirSync(dir, {
|
|
18
|
+
withFileTypes: true
|
|
19
|
+
});
|
|
20
|
+
for (const entry of entries) {
|
|
21
|
+
const fullPath = _path.default.join(dir, entry.name);
|
|
22
|
+
if (entry.isDirectory()) {
|
|
23
|
+
findGeneratorFiles(fullPath, pattern, results);
|
|
24
|
+
} else if (matchesPattern(entry.name, pattern)) {
|
|
25
|
+
results.push(fullPath);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return results;
|
|
29
|
+
}
|
|
30
|
+
function validateGenerators(modulesRoot) {
|
|
31
|
+
if (!_fs.default.existsSync(modulesRoot)) {
|
|
32
|
+
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Modules directory not found: ${modulesRoot}. Skipping generator validation.`);
|
|
33
|
+
return {
|
|
34
|
+
valid: true,
|
|
35
|
+
duplicates: []
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const {
|
|
39
|
+
generatorFilePattern: pattern = '*.generators.json'
|
|
40
|
+
} = (0, _readConfigFile.generateConfigFromFile)();
|
|
41
|
+
const generatorMap = {};
|
|
42
|
+
const generatorFiles = findGeneratorFiles(modulesRoot, pattern);
|
|
43
|
+
for (const filePath of generatorFiles) {
|
|
44
|
+
try {
|
|
45
|
+
const data = _fs.default.readFileSync(filePath, 'utf8');
|
|
46
|
+
const generatorObj = JSON.parse(data);
|
|
47
|
+
if (generatorObj.generators) {
|
|
48
|
+
for (const name of Object.keys(generatorObj.generators)) {
|
|
49
|
+
if (!generatorMap[name]) {
|
|
50
|
+
generatorMap[name] = [];
|
|
51
|
+
}
|
|
52
|
+
generatorMap[name].push(filePath);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
} catch (err) {
|
|
56
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Failed to parse generator file: ${filePath} - ${err.message}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const duplicates = Object.entries(generatorMap).filter(([, files]) => files.length > 1).map(([name, files]) => ({
|
|
60
|
+
name,
|
|
61
|
+
files
|
|
62
|
+
}));
|
|
63
|
+
if (duplicates.length > 0) {
|
|
64
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, 'Duplicate generator names found:');
|
|
65
|
+
for (const dup of duplicates) {
|
|
66
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, ` Generator "${dup.name}" defined in:`);
|
|
67
|
+
for (const file of dup.files) {
|
|
68
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, ` - ${file}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
valid: false,
|
|
73
|
+
duplicates
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const generatorCount = Object.keys(generatorMap).length;
|
|
77
|
+
_logger.Logger.log(_logger.Logger.SUCCESS_TYPE, `Generator validation passed. ${generatorCount} unique generators found across ${generatorFiles.length} generator files.`);
|
|
78
|
+
return {
|
|
79
|
+
valid: true,
|
|
80
|
+
duplicates: []
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.default = void 0;
|
|
8
|
+
var _CleanupTracker = _interopRequireDefault(require("../../dataGenerator/CleanupTracker"));
|
|
9
|
+
var _DataCleanup = _interopRequireDefault(require("../../dataGenerator/DataCleanup"));
|
|
7
10
|
const cacheMap = new Map();
|
|
8
11
|
var _default = exports.default = {
|
|
9
12
|
// eslint-disable-next-line no-empty-pattern
|
|
10
13
|
cacheLayer: async ({}, use) => {
|
|
11
14
|
await use(cacheMap);
|
|
15
|
+
},
|
|
16
|
+
// eslint-disable-next-line no-empty-pattern
|
|
17
|
+
cleanupTracker: async ({}, use) => {
|
|
18
|
+
const tracker = new _CleanupTracker.default();
|
|
19
|
+
await use(tracker);
|
|
20
|
+
const entries = tracker.getEntries();
|
|
21
|
+
if (entries.length > 0) {
|
|
22
|
+
const cleanup = new _DataCleanup.default();
|
|
23
|
+
await cleanup.cleanup(entries);
|
|
24
|
+
}
|
|
25
|
+
tracker.clear();
|
|
12
26
|
}
|
|
13
27
|
};
|
|
@@ -11,6 +11,5 @@ const stage = (0, _ConfigurationHelper.getRunStage)();
|
|
|
11
11
|
class ReporterConstants {
|
|
12
12
|
static DEFAULT_REPORTER_PATH = `${_configConstants.default.TEST_SLICE_FOLDER}/${stage}/test-results/playwright-test-results.json`;
|
|
13
13
|
static LAST_RUN_REPORTER_PATH = `${_configConstants.default.TEST_SLICE_FOLDER}/${stage}/test-results/.last-run.json`;
|
|
14
|
-
static DEFAULT_UNIT_TEST_REPORTER_PATH = `${_configConstants.default.TEST_SLICE_FOLDER}/unit-test/unit_reports/report.html`;
|
|
15
14
|
}
|
|
16
15
|
exports.default = ReporterConstants;
|
|
@@ -55,7 +55,8 @@ function getDefaultConfig() {
|
|
|
55
55
|
featureFilesFolder: 'feature-files',
|
|
56
56
|
stepDefinitionsFolder: 'steps',
|
|
57
57
|
testSetup: {},
|
|
58
|
-
editionOrder: ['Free', 'Express', 'Standard', 'Professional', 'Enterprise']
|
|
58
|
+
editionOrder: ['Free', 'Express', 'Standard', 'Professional', 'Enterprise'],
|
|
59
|
+
generatorFilePattern: '*.generators.json'
|
|
59
60
|
};
|
|
60
61
|
}
|
|
61
62
|
function combineDefaultConfigWithUserConfig(userConfiguration) {
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
}
|
|
@@ -5,11 +5,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
8
9
|
var _parseUserArgs = _interopRequireDefault(require("./helpers/parseUserArgs"));
|
|
9
10
|
var _readConfigFile = require("./readConfigFile");
|
|
10
11
|
var _tagProcessor = _interopRequireDefault(require("./tagProcessor"));
|
|
11
12
|
var _testRunner = require("./test-runner");
|
|
12
13
|
var _logger = require("../../utils/logger");
|
|
14
|
+
var _validateGenerators = require("../dataGenerator/validateGenerators");
|
|
15
|
+
var _configConstants = _interopRequireDefault(require("./constants/configConstants"));
|
|
16
|
+
var _ConfigurationHelper = require("./configuration/ConfigurationHelper");
|
|
13
17
|
const validateFeatureFiles = () => {
|
|
14
18
|
const userArgsObject = (0, _parseUserArgs.default)();
|
|
15
19
|
const uatConfig = (0, _readConfigFile.generateConfigFromFile)();
|
|
@@ -17,6 +21,13 @@ const validateFeatureFiles = () => {
|
|
|
17
21
|
editionOrder
|
|
18
22
|
} = uatConfig;
|
|
19
23
|
const configPath = (0, _readConfigFile.isUserConfigFileAvailable)() ? require.resolve('./setup/config-creator.js') : require.resolve('../../../playwright.config.js');
|
|
24
|
+
const stage = (0, _ConfigurationHelper.getRunStage)();
|
|
25
|
+
const modulesRoot = _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, 'modules');
|
|
26
|
+
const generatorResult = (0, _validateGenerators.validateGenerators)(modulesRoot);
|
|
27
|
+
if (!generatorResult.valid) {
|
|
28
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, 'Generator validation failed. Fix duplicate generator names before running tests.');
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
20
31
|
const tagProcessor = new _tagProcessor.default(editionOrder);
|
|
21
32
|
const tagArgs = tagProcessor.processTags(userArgsObject);
|
|
22
33
|
(0, _testRunner.runPreprocessing)(tagArgs, configPath).then(() => {
|
package/build/lib/cli.js
CHANGED
|
@@ -2,9 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
var _testRunner = _interopRequireDefault(require("../core/playwright/test-runner"));
|
|
5
|
-
var
|
|
6
|
-
var _PlaywrightReporter = _interopRequireDefault(require("../core/playwright/reporter/PlaywrightReporter"));
|
|
7
|
-
var _UnitReporter = _interopRequireDefault(require("../core/playwright/reporter/UnitReporter"));
|
|
5
|
+
var _reportGenerator = _interopRequireDefault(require("../core/playwright/report-generator"));
|
|
8
6
|
var _codegen = _interopRequireDefault(require("../core/playwright/codegen"));
|
|
9
7
|
var _logger = require("../utils/logger");
|
|
10
8
|
var _setupProject = _interopRequireDefault(require("../setup-folder-structure/setupProject"));
|
|
@@ -13,25 +11,15 @@ var _clearCaches = _interopRequireDefault(require("../core/playwright/clear-cach
|
|
|
13
11
|
var _helper = _interopRequireDefault(require("../setup-folder-structure/helper"));
|
|
14
12
|
var _parseUserArgs = _interopRequireDefault(require("../core/playwright/helpers/parseUserArgs"));
|
|
15
13
|
var _validateFeature = _interopRequireDefault(require("../core/playwright/validateFeature"));
|
|
16
|
-
|
|
14
|
+
// import createJestRunner from '../core/jest/runner/jest-runner';
|
|
15
|
+
|
|
17
16
|
const [,, option, ...otherOptions] = process.argv;
|
|
18
17
|
switch (option) {
|
|
19
18
|
case 'test':
|
|
20
19
|
{
|
|
21
20
|
_logger.Logger.log(_logger.Logger.SUCCESS_TYPE, 'Running Tests..');
|
|
22
21
|
(0, _testRunner.default)();
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
case 'unit-test':
|
|
26
|
-
{
|
|
27
|
-
const testFile = process.argv[3];
|
|
28
|
-
_logger.Logger.log(_logger.Logger.SUCCESS_TYPE, 'Running Unit Tests..');
|
|
29
|
-
const options = {};
|
|
30
|
-
if (testFile) {
|
|
31
|
-
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Filtering tests with pattern: ${testFile}`);
|
|
32
|
-
options.testPathPattern = testFile;
|
|
33
|
-
}
|
|
34
|
-
(0, _unitTestingFramework.createJestRunner)(options);
|
|
22
|
+
//createJestRunner();
|
|
35
23
|
break;
|
|
36
24
|
}
|
|
37
25
|
case 'validate':
|
|
@@ -52,14 +40,9 @@ switch (option) {
|
|
|
52
40
|
}
|
|
53
41
|
case 'report':
|
|
54
42
|
{
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
case 'ut-report':
|
|
60
|
-
{
|
|
61
|
-
_logger.Logger.log(_logger.Logger.SUCCESS_TYPE, 'Generating Unit Test Reports...');
|
|
62
|
-
_UnitReporter.default.generate();
|
|
43
|
+
// console.log('\x1b[36mGenerating Reports...\x1b[0m');
|
|
44
|
+
_logger.Logger.log(_logger.Logger.SUCCESS_TYPE, 'Generating Reports...');
|
|
45
|
+
(0, _reportGenerator.default)();
|
|
63
46
|
break;
|
|
64
47
|
}
|
|
65
48
|
case 'codegen':
|
|
@@ -86,12 +69,6 @@ switch (option) {
|
|
|
86
69
|
(0, _clearCaches.default)();
|
|
87
70
|
break;
|
|
88
71
|
}
|
|
89
|
-
case 'stepsGenerator':
|
|
90
|
-
{
|
|
91
|
-
_logger.Logger.log(_logger.Logger.SUCCESS_TYPE, 'Created agents and prompts md files under .github folder...');
|
|
92
|
-
(0, _commonUtils.copyGithubFolder)();
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
72
|
case 'help':
|
|
96
73
|
default:
|
|
97
74
|
{
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.copyCommonSpecs = copyCommonSpecs;
|
|
8
|
-
exports.copyGithubFolder = copyGithubFolder;
|
|
9
8
|
var _fileUtils = require("./fileUtils");
|
|
10
9
|
var _path = _interopRequireDefault(require("path"));
|
|
11
10
|
var _configConstants = _interopRequireDefault(require("../core/playwright/constants/configConstants"));
|
|
@@ -18,12 +17,4 @@ function copyCommonSpecs() {
|
|
|
18
17
|
const destDirectory = _path.default.resolve(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, 'modules', '.testingLib-common');
|
|
19
18
|
(0, _fileUtils.deleteFolder)(destDirectory);
|
|
20
19
|
(0, _fileUtils.copyDirectory)(commonSpecPath, destDirectory);
|
|
21
|
-
}
|
|
22
|
-
function copyGithubFolder() {
|
|
23
|
-
const libraryPath = require.resolve("@zohodesk/testinglibrary");
|
|
24
|
-
// libraryPath will be build/index.js, go two levels up to reach the package root where .github lives
|
|
25
|
-
const githubSrcPath = _path.default.resolve(libraryPath, '../../', '.github');
|
|
26
|
-
const destDirectory = _path.default.resolve(process.cwd(), '../../', '.github');
|
|
27
|
-
(0, _fileUtils.deleteFolder)(destDirectory);
|
|
28
|
-
(0, _fileUtils.copyDirectory)(githubSrcPath, destDirectory);
|
|
29
20
|
}
|