@zohodesk/testinglibrary 3.1.4 → 3.1.5
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/.gitlab-ci.yml +32 -0
- package/build/core/playwright/custom-commands.js +1 -1
- package/build/core/playwright/readConfigFile.js +2 -0
- package/build/core/playwright/setup/config-utils.js +19 -0
- package/build/core/playwright/test-runner.js +4 -3
- package/build/core/playwright/types.js +1 -0
- package/build/utils/fileUtils.js +17 -0
- package/package.json +1 -1
- package/unit_reports/unit-report.html +260 -0
- package/npm-shrinkwrap.json +0 -10807
package/.gitlab-ci.yml
CHANGED
|
@@ -115,3 +115,35 @@ uat-nobdd:
|
|
|
115
115
|
when: always
|
|
116
116
|
paths:
|
|
117
117
|
- nobdd/uat/playwright-report
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
uatmodule:
|
|
121
|
+
stage: uat
|
|
122
|
+
script:
|
|
123
|
+
- cd examples
|
|
124
|
+
- npm install $(npm pack ../../testing-framework | tail -1)
|
|
125
|
+
- output=$(npm run uatmodule)
|
|
126
|
+
- echo "$output"
|
|
127
|
+
- node ../ValidateUATReport.js examples
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
artifacts:
|
|
131
|
+
when: always
|
|
132
|
+
paths:
|
|
133
|
+
- examples/uat/playwright-report
|
|
134
|
+
|
|
135
|
+
uatconfigmodule:
|
|
136
|
+
stage: uat
|
|
137
|
+
script:
|
|
138
|
+
- cd examples
|
|
139
|
+
- npm install $(npm pack ../../testing-framework | tail -1)
|
|
140
|
+
- output=$(npm run uatconfigmodule)
|
|
141
|
+
- echo "$output"
|
|
142
|
+
- node ../ValidateUATReport.js examples
|
|
143
|
+
|
|
144
|
+
artifacts:
|
|
145
|
+
when: always
|
|
146
|
+
paths:
|
|
147
|
+
- examples/uat/playwright-report
|
|
148
|
+
|
|
149
|
+
|
|
@@ -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'];
|
|
7
|
+
const CUSTOM_COMMANDS = exports.CUSTOM_COMMANDS = ['mode', 'tags', 'edition', 'browsers', 'filePath', 'headless', 'modules'];
|
|
@@ -120,7 +120,9 @@ function generateConfigFromFile() {
|
|
|
120
120
|
const appConfig = new _Configuration.default((0, _ConfigurationHelper.getApplicationConfig)());
|
|
121
121
|
const userArgConfig = new _Configuration.default(_UserArgs.default.parseToObject(process.argv.slice(2)));
|
|
122
122
|
// overriding the user config's from CLI
|
|
123
|
+
//console.log('User Args Config:', userArgConfig.getAll());
|
|
123
124
|
uatConfig.addAll(appConfig);
|
|
125
|
+
//console.log('Application Config:', appConfig.getAll());
|
|
124
126
|
uatConfig.addAll(userArgConfig);
|
|
125
127
|
cachedConfig = uatConfig.getAll();
|
|
126
128
|
}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.getBrowsersList = getBrowsersList;
|
|
8
|
+
exports.getModulePathForFeatureFiles = getModulePathForFeatureFiles;
|
|
8
9
|
exports.getProjects = getProjects;
|
|
9
10
|
exports.getTestDir = getTestDir;
|
|
10
11
|
var _test = require("@playwright/test");
|
|
@@ -140,9 +141,27 @@ function getPathsForFeatureFiles(cwd) {
|
|
|
140
141
|
_logger.Logger.log(_logger.Logger.INFO_TYPE, `Unable to read test summary from the ${reportPath}. Verify If File Exists in the path`);
|
|
141
142
|
_logger.Logger.log(_logger.Logger.INFO_TYPE, 'Going to run all test cases');
|
|
142
143
|
}
|
|
144
|
+
} else if (process.env.modules !== 'undefined' && process.env.modules.length > 0) {
|
|
145
|
+
let modules = process.env.modules;
|
|
146
|
+
let moduleList = modules.split(',');
|
|
147
|
+
return getModulePathForFeatureFiles(moduleList);
|
|
143
148
|
}
|
|
144
149
|
return [_path.default.join(cwd, 'uat', '**', '*.feature')];
|
|
145
150
|
}
|
|
151
|
+
function getModulePathForFeatureFiles(moduleList) {
|
|
152
|
+
let validModuleList = [];
|
|
153
|
+
moduleList.forEach(moduleName => {
|
|
154
|
+
let modulePath = _path.default.join(process.cwd(), 'uat', 'modules', '**', `${moduleName}`);
|
|
155
|
+
if ((0, _fileUtils.checkIfFolderExistsWithPattern)(modulePath)) {
|
|
156
|
+
validModuleList.push(_path.default.join(modulePath, '**', '*.feature'));
|
|
157
|
+
} else {
|
|
158
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Module ${moduleName} does not exist, Please check the module name`);
|
|
159
|
+
validModuleList = [];
|
|
160
|
+
return validModuleList;
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
return validModuleList;
|
|
164
|
+
}
|
|
146
165
|
function getTestDir(bddMode, cwd, {
|
|
147
166
|
stepDefinitionsFolder
|
|
148
167
|
}) {
|
|
@@ -83,15 +83,16 @@ function runPlaywright(command, args) {
|
|
|
83
83
|
function main() {
|
|
84
84
|
// Getting the default config's from framework
|
|
85
85
|
const uatConfig = new _Configuration.default((0, _readConfigFile.getDefaultConfig)());
|
|
86
|
-
|
|
87
86
|
// overriding the application config's from project
|
|
88
|
-
|
|
89
87
|
const userArgConfig = new _Configuration.default(_UserArgs.default.parseToObject(process.argv.slice(2)));
|
|
90
88
|
const mode = userArgConfig.get("mode");
|
|
91
89
|
uatConfig.addAll(new _Configuration.default((0, _ConfigurationHelper.getApplicationConfig)(mode)));
|
|
92
|
-
|
|
93
90
|
// overriding the user config's from CLI
|
|
94
91
|
uatConfig.addAll(userArgConfig);
|
|
92
|
+
const modules = uatConfig.get('modules');
|
|
93
|
+
|
|
94
|
+
//We need to change this process.env variable to pass the module name in future.
|
|
95
|
+
process.env.modules = modules;
|
|
95
96
|
const {
|
|
96
97
|
isAuthMode,
|
|
97
98
|
editionOrder,
|
|
@@ -39,5 +39,6 @@
|
|
|
39
39
|
* @property {string} testIdAttribute: Change the default data-testid attribute. configure what attribute to search while calling getByTestId
|
|
40
40
|
* @property {Array} editionOrder: Order in the form of larger editions in the back. Edition with the most privelages should be last
|
|
41
41
|
* @property {testSetupConfig} testSetup: Specify page and context functions that will be called while intilaizing fixtures.
|
|
42
|
+
* @property {string} modules: Modules name to be used for running the specific module test cases.
|
|
42
43
|
*/
|
|
43
44
|
"use strict";
|
package/build/utils/fileUtils.js
CHANGED
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.checkIfFileExists = checkIfFileExists;
|
|
8
|
+
exports.checkIfFolderExistsWithPattern = checkIfFolderExistsWithPattern;
|
|
8
9
|
exports.deleteFile = deleteFile;
|
|
9
10
|
exports.deleteFolder = deleteFolder;
|
|
10
11
|
exports.readFileContents = readFileContents;
|
|
@@ -12,6 +13,8 @@ exports.writeFileContents = writeFileContents;
|
|
|
12
13
|
var _fs = _interopRequireDefault(require("fs"));
|
|
13
14
|
var _path = _interopRequireDefault(require("path"));
|
|
14
15
|
var _logger = require("./logger");
|
|
16
|
+
var glob = _interopRequireWildcard(require("glob"));
|
|
17
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
15
18
|
function checkIfFileExists(file) {
|
|
16
19
|
try {
|
|
17
20
|
_fs.default.accessSync(file, _fs.default.constants.F_OK);
|
|
@@ -69,4 +72,18 @@ function deleteFolder(folderPath) {
|
|
|
69
72
|
throw new Error(`Error while deleting the test data file: ${folderPath}`);
|
|
70
73
|
}
|
|
71
74
|
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// This function uses glob to check if a folder exists with a specific pattern
|
|
78
|
+
// Glob is define patterns for matching file and directory names based on wildcards
|
|
79
|
+
function checkIfFolderExistsWithPattern(folderPath) {
|
|
80
|
+
try {
|
|
81
|
+
if (glob.sync(folderPath).length > 0) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
return false;
|
|
85
|
+
} catch (err) {
|
|
86
|
+
_logger.Logger.error(err);
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
72
89
|
}
|
package/package.json
CHANGED
|
@@ -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-06-03 11:34:14</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (1)</div><div class="summary-passed summary-empty">0 passed</div><div class="summary-failed ">1 failed</div><div class="summary-pending summary-empty">0 pending</div></div><div id="test-summary"><div class="summary-total">Tests (1)</div><div class="summary-passed summary-empty">0 passed</div><div class="summary-failed ">1 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/renuka-19996/git/testing-framework/src/test/core/playwright/setup/__tests__/config-utils.test.js</div><div class="suite-time">1.104s</div></div></label><div class="suite-tests"><div class="test-result failed"><div class="test-info"><div class="test-suitename">config-util > getModulePathForFeatureFiles</div><div class="test-title">should return the module path when modules value is found</div><div class="test-status">failed</div><div class="test-duration">0.01s</div></div></div></div></div></div></body></html>
|