@zohodesk/testinglibrary 0.0.58-n20-experimental → 0.0.60-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/common/data-generator/steps/DataGenerator.spec.js +1 -1
- package/build/common/data-generator/steps/DataGeneratorStepsHelper.js +4 -19
- package/build/core/dataGenerator/DataGenerator.js +25 -104
- package/build/core/dataGenerator/DataGeneratorHelper.js +4 -52
- package/build/core/playwright/builtInFixtures/cacheLayer.js +2 -197
- package/build/core/playwright/constants/reporterConstants.js +1 -0
- package/build/core/playwright/helpers/auth/getUsers.js +2 -2
- package/build/core/playwright/readConfigFile.js +1 -3
- 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/build/utils/logger.js +1 -3
- package/changelog.md +0 -27
- package/npm-shrinkwrap.json +7843 -3408
- package/package.json +15 -11
- package/.claude/worktrees/thirsty-yalow/.babelrc +0 -24
- package/.claude/worktrees/thirsty-yalow/.eslintrc.js +0 -31
- package/.claude/worktrees/thirsty-yalow/.gitlab-ci.yml +0 -208
- package/.claude/worktrees/thirsty-yalow/.prettierrc +0 -6
- package/.claude/worktrees/thirsty-yalow/README.md +0 -234
- package/.claude/worktrees/thirsty-yalow/bin/cli.js +0 -3
- package/.claude/worktrees/thirsty-yalow/bin/postinstall.js +0 -1
- package/.claude/worktrees/thirsty-yalow/changelog.md +0 -167
- package/.claude/worktrees/thirsty-yalow/jest.config.js +0 -82
- package/.claude/worktrees/thirsty-yalow/package.json +0 -62
- package/.claude/worktrees/thirsty-yalow/playwright.config.js +0 -62
- package/AUTO_CLEANUP_PLAN.md +0 -171
- package/build/core/dataGenerator/validateGenerators.js +0 -82
- package/build/core/playwright/report-generator.js +0 -42
- package/build/utils/datePlaceholders.js +0 -170
- package/build/utils/timeFormat.js +0 -41
- package/unit_reports/unit-report.html +0 -277
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.resolveDatePlaceholders = resolveDatePlaceholders;
|
|
7
|
-
exports.resolveDatePlaceholdersInGenerators = resolveDatePlaceholdersInGenerators;
|
|
8
|
-
exports.resolveDatePlaceholdersInValue = resolveDatePlaceholdersInValue;
|
|
9
|
-
// Matches a full-cell date placeholder: ${TOKEN} or ${TOKEN:N}
|
|
10
|
-
// Uppercase-only token names never clash with TitleCase cache refs.
|
|
11
|
-
const DATE_PLACEHOLDER = /^\$\{([A-Z][A-Z_]*)(?::(\d+))?\}$/;
|
|
12
|
-
function _pad(n, width = 2) {
|
|
13
|
-
return String(n).padStart(width, '0');
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// UTC day arithmetic — avoids DST boundary issues.
|
|
17
|
-
function _shiftDays(baseDate, days) {
|
|
18
|
-
const d = new Date(baseDate.getTime());
|
|
19
|
-
d.setUTCDate(d.getUTCDate() + days);
|
|
20
|
-
return d;
|
|
21
|
-
}
|
|
22
|
-
function _toISODate(d) {
|
|
23
|
-
return `${d.getUTCFullYear()}-${_pad(d.getUTCMonth() + 1)}-${_pad(d.getUTCDate())}`;
|
|
24
|
-
}
|
|
25
|
-
function _toISODateTime(d) {
|
|
26
|
-
return d.toISOString();
|
|
27
|
-
}
|
|
28
|
-
function _toEpochMs(d) {
|
|
29
|
-
return String(d.getTime());
|
|
30
|
-
}
|
|
31
|
-
function _toUIDate(d) {
|
|
32
|
-
return `${_pad(d.getUTCDate())}/${_pad(d.getUTCMonth() + 1)}/${d.getUTCFullYear()}`;
|
|
33
|
-
}
|
|
34
|
-
const TOKEN_HANDLERS = {
|
|
35
|
-
CURRENT_DATE: {
|
|
36
|
-
requiresN: false,
|
|
37
|
-
resolve: d => _toISODate(d)
|
|
38
|
-
},
|
|
39
|
-
PAST_DATE: {
|
|
40
|
-
requiresN: true,
|
|
41
|
-
resolve: (d, n) => _toISODate(_shiftDays(d, -n))
|
|
42
|
-
},
|
|
43
|
-
FUTURE_DATE: {
|
|
44
|
-
requiresN: true,
|
|
45
|
-
resolve: (d, n) => _toISODate(_shiftDays(d, n))
|
|
46
|
-
},
|
|
47
|
-
CURRENT_DATETIME: {
|
|
48
|
-
requiresN: false,
|
|
49
|
-
resolve: d => _toISODateTime(d)
|
|
50
|
-
},
|
|
51
|
-
PAST_DATETIME: {
|
|
52
|
-
requiresN: true,
|
|
53
|
-
resolve: (d, n) => _toISODateTime(_shiftDays(d, -n))
|
|
54
|
-
},
|
|
55
|
-
FUTURE_DATETIME: {
|
|
56
|
-
requiresN: true,
|
|
57
|
-
resolve: (d, n) => _toISODateTime(_shiftDays(d, n))
|
|
58
|
-
},
|
|
59
|
-
CURRENT_TIMESTAMP: {
|
|
60
|
-
requiresN: false,
|
|
61
|
-
resolve: d => _toEpochMs(d)
|
|
62
|
-
},
|
|
63
|
-
PAST_TIMESTAMP: {
|
|
64
|
-
requiresN: true,
|
|
65
|
-
resolve: (d, n) => _toEpochMs(_shiftDays(d, -n))
|
|
66
|
-
},
|
|
67
|
-
FUTURE_TIMESTAMP: {
|
|
68
|
-
requiresN: true,
|
|
69
|
-
resolve: (d, n) => _toEpochMs(_shiftDays(d, n))
|
|
70
|
-
},
|
|
71
|
-
CURRENT_DATE_UI: {
|
|
72
|
-
requiresN: false,
|
|
73
|
-
resolve: d => _toUIDate(d)
|
|
74
|
-
},
|
|
75
|
-
PAST_DATE_UI: {
|
|
76
|
-
requiresN: true,
|
|
77
|
-
resolve: (d, n) => _toUIDate(_shiftDays(d, -n))
|
|
78
|
-
},
|
|
79
|
-
FUTURE_DATE_UI: {
|
|
80
|
-
requiresN: true,
|
|
81
|
-
resolve: (d, n) => _toUIDate(_shiftDays(d, n))
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
const VALID_TOKENS = Object.keys(TOKEN_HANDLERS).join(', ');
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Resolve a single dataTable cell value.
|
|
88
|
-
* Non-strings and strings without "${" are returned as-is.
|
|
89
|
-
* @param {*} value
|
|
90
|
-
* @param {Date} [now]
|
|
91
|
-
* @returns {*}
|
|
92
|
-
*/
|
|
93
|
-
function resolveDatePlaceholdersInValue(value, now = new Date()) {
|
|
94
|
-
if (typeof value !== 'string' || !value.includes('${')) {
|
|
95
|
-
return value;
|
|
96
|
-
}
|
|
97
|
-
const match = value.match(DATE_PLACEHOLDER);
|
|
98
|
-
if (!match) {
|
|
99
|
-
return value;
|
|
100
|
-
}
|
|
101
|
-
const [, token, rawN] = match;
|
|
102
|
-
const handler = TOKEN_HANDLERS[token];
|
|
103
|
-
if (!handler) {
|
|
104
|
-
throw new Error(`DataGenerator: Unknown date placeholder token "\${${token}}". Valid tokens are: ${VALID_TOKENS}.`);
|
|
105
|
-
}
|
|
106
|
-
if (handler.requiresN) {
|
|
107
|
-
if (rawN === undefined) {
|
|
108
|
-
throw new Error(`DataGenerator: Placeholder "\${${token}}" requires a day offset N, e.g. "\${${token}:7}".`);
|
|
109
|
-
}
|
|
110
|
-
const n = parseInt(rawN, 10);
|
|
111
|
-
if (!Number.isFinite(n) || n < 1) {
|
|
112
|
-
throw new Error(`DataGenerator: Placeholder "\${${token}:${rawN}}" — N must be a positive integer ≥ 1.`);
|
|
113
|
-
}
|
|
114
|
-
return handler.resolve(now, n);
|
|
115
|
-
} else {
|
|
116
|
-
if (rawN !== undefined) {
|
|
117
|
-
const suggestionToken = token.replace('CURRENT_', 'FUTURE_');
|
|
118
|
-
throw new Error(`DataGenerator: Placeholder "\${${token}}" does not accept an offset. Did you mean "\${${suggestionToken}:${rawN}}"?`);
|
|
119
|
-
}
|
|
120
|
-
return handler.resolve(now);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Resolve date placeholders in all cells of a dataTable rows array.
|
|
126
|
-
* @param {Object[]} rows
|
|
127
|
-
* @param {Date} [now]
|
|
128
|
-
* @returns {Object[]}
|
|
129
|
-
*/
|
|
130
|
-
function resolveDatePlaceholders(rows, now = new Date()) {
|
|
131
|
-
if (!rows || !rows.length) {
|
|
132
|
-
return rows || [];
|
|
133
|
-
}
|
|
134
|
-
return rows.map(row => {
|
|
135
|
-
const resolved = {};
|
|
136
|
-
for (const [key, value] of Object.entries(row)) {
|
|
137
|
-
resolved[key] = resolveDatePlaceholdersInValue(value, now);
|
|
138
|
-
}
|
|
139
|
-
return resolved;
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
function _resolveObjectValues(obj, now) {
|
|
143
|
-
for (const key of Object.keys(obj)) {
|
|
144
|
-
const val = obj[key];
|
|
145
|
-
if (typeof val === 'string') {
|
|
146
|
-
obj[key] = resolveDatePlaceholdersInValue(val, now);
|
|
147
|
-
} else if (val !== null && typeof val === 'object') {
|
|
148
|
-
_resolveObjectValues(val, now);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Resolve date placeholders in static params of a loaded generators array.
|
|
155
|
-
* Mutates in place — call only on a cloned copy of the generator index entry.
|
|
156
|
-
* @param {Object[]} generators
|
|
157
|
-
* @param {Date} [now]
|
|
158
|
-
* @returns {Object[]}
|
|
159
|
-
*/
|
|
160
|
-
function resolveDatePlaceholdersInGenerators(generators, now = new Date()) {
|
|
161
|
-
if (!generators || !generators.length) {
|
|
162
|
-
return generators || [];
|
|
163
|
-
}
|
|
164
|
-
for (const gen of generators) {
|
|
165
|
-
if (gen.params && typeof gen.params === 'object') {
|
|
166
|
-
_resolveObjectValues(gen.params, now);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
return generators;
|
|
170
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.formatDuration = formatDuration;
|
|
7
|
-
exports.formatTimestamp = formatTimestamp;
|
|
8
|
-
/**
|
|
9
|
-
* Format a Date (or epoch ms) as a human-readable local timestamp in 12-hour format.
|
|
10
|
-
* Example: "2026-04-10 11:35:23.123 AM"
|
|
11
|
-
*/
|
|
12
|
-
function formatTimestamp(input) {
|
|
13
|
-
const d = input instanceof Date ? input : new Date(input);
|
|
14
|
-
const pad = (n, w = 2) => String(n).padStart(w, '0');
|
|
15
|
-
const hours24 = d.getHours();
|
|
16
|
-
const period = hours24 >= 12 ? 'PM' : 'AM';
|
|
17
|
-
const hours12 = hours24 % 12 || 12;
|
|
18
|
-
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ` + `${pad(hours12)}:${pad(d.getMinutes())}:${pad(d.getSeconds())}.${pad(d.getMilliseconds(), 3)} ${period}`;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Format a duration in milliseconds as a human-readable string.
|
|
23
|
-
* Examples: "850ms", "4.32s", "1m 23.45s", "1h 02m 03.45s"
|
|
24
|
-
*/
|
|
25
|
-
function formatDuration(ms) {
|
|
26
|
-
if (ms < 1000) {
|
|
27
|
-
return `${ms}ms`;
|
|
28
|
-
}
|
|
29
|
-
const totalSeconds = ms / 1000;
|
|
30
|
-
if (totalSeconds < 60) {
|
|
31
|
-
return `${totalSeconds.toFixed(2)}s`;
|
|
32
|
-
}
|
|
33
|
-
const hours = Math.floor(totalSeconds / 3600);
|
|
34
|
-
const minutes = Math.floor(totalSeconds % 3600 / 60);
|
|
35
|
-
const seconds = totalSeconds % 60;
|
|
36
|
-
const pad = n => String(n).padStart(2, '0');
|
|
37
|
-
if (hours > 0) {
|
|
38
|
-
return `${hours}h ${pad(minutes)}m ${seconds.toFixed(2)}s`;
|
|
39
|
-
}
|
|
40
|
-
return `${minutes}m ${seconds.toFixed(2)}s`;
|
|
41
|
-
}
|
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
<html><head><meta charset="utf-8"/><title>Unit Report</title><style type="text/css">:root {
|
|
2
|
-
--text-primary: #111;
|
|
3
|
-
--text-secondary: #4f4f4f;
|
|
4
|
-
--success: #006633;
|
|
5
|
-
--success-bright: #80ffbf;
|
|
6
|
-
--danger: #cc071e;
|
|
7
|
-
--danger-bright: #fbdfe0;
|
|
8
|
-
--warning: #995c00;
|
|
9
|
-
--warning-bright: #ffeea8;
|
|
10
|
-
--panel: #eee;
|
|
11
|
-
--border: #949494;
|
|
12
|
-
--disabled: #6b6b6b;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
html,
|
|
16
|
-
body {
|
|
17
|
-
font-family: Arial, Helvetica, sans-serif;
|
|
18
|
-
font-size: 16px;
|
|
19
|
-
margin: 0;
|
|
20
|
-
padding: 0;
|
|
21
|
-
color: var(--text-primary);
|
|
22
|
-
}
|
|
23
|
-
body {
|
|
24
|
-
padding: 2rem 1rem;
|
|
25
|
-
}
|
|
26
|
-
.jesthtml-content {
|
|
27
|
-
margin: 0 auto;
|
|
28
|
-
max-width: 70rem;
|
|
29
|
-
}
|
|
30
|
-
header {
|
|
31
|
-
display: flex;
|
|
32
|
-
align-items: center;
|
|
33
|
-
}
|
|
34
|
-
#title {
|
|
35
|
-
margin: 0;
|
|
36
|
-
flex-grow: 1;
|
|
37
|
-
}
|
|
38
|
-
#logo {
|
|
39
|
-
height: 4rem;
|
|
40
|
-
}
|
|
41
|
-
#timestamp {
|
|
42
|
-
color: var(--text-secondary);
|
|
43
|
-
margin-top: 0.5rem;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
#metadata-container {
|
|
47
|
-
display: flex;
|
|
48
|
-
flex-direction: column;
|
|
49
|
-
gap: 2rem;
|
|
50
|
-
margin-bottom: 2rem;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.additional-information-container {
|
|
54
|
-
display: flex;
|
|
55
|
-
flex-direction: column;
|
|
56
|
-
gap: 0.5rem;
|
|
57
|
-
color: var(--text-secondary);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/** SUMMARY */
|
|
61
|
-
#summary {
|
|
62
|
-
color: var(--text-primary);
|
|
63
|
-
display: flex;
|
|
64
|
-
font-family: monospace;
|
|
65
|
-
font-size: 1rem;
|
|
66
|
-
}
|
|
67
|
-
#summary > div {
|
|
68
|
-
margin-right: 0.5rem;
|
|
69
|
-
background: var(--panel);
|
|
70
|
-
padding: 1rem;
|
|
71
|
-
min-width: 15rem;
|
|
72
|
-
}
|
|
73
|
-
#summary > div:last-child {
|
|
74
|
-
margin-right: 0;
|
|
75
|
-
}
|
|
76
|
-
@media only screen and (max-width: 720px) {
|
|
77
|
-
#summary {
|
|
78
|
-
flex-direction: column;
|
|
79
|
-
}
|
|
80
|
-
#summary > div {
|
|
81
|
-
margin-right: 0;
|
|
82
|
-
margin-top: 1rem;
|
|
83
|
-
}
|
|
84
|
-
#summary > div:first-child {
|
|
85
|
-
margin-top: 0;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.summary-total {
|
|
90
|
-
font-weight: bold;
|
|
91
|
-
margin-bottom: 0.5rem;
|
|
92
|
-
}
|
|
93
|
-
.summary-passed {
|
|
94
|
-
color: var(--success);
|
|
95
|
-
border-left: 0.4rem solid var(--success);
|
|
96
|
-
padding-left: 0.5rem;
|
|
97
|
-
margin-bottom: 0.15rem;
|
|
98
|
-
}
|
|
99
|
-
.summary-failed,
|
|
100
|
-
.summary-obsolete-snapshots {
|
|
101
|
-
color: var(--danger);
|
|
102
|
-
border-left: 0.4rem solid var(--danger);
|
|
103
|
-
padding-left: 0.5rem;
|
|
104
|
-
margin-bottom: 0.15rem;
|
|
105
|
-
}
|
|
106
|
-
.summary-pending {
|
|
107
|
-
color: var(--warning);
|
|
108
|
-
border-left: 0.4rem solid var(--warning);
|
|
109
|
-
padding-left: 0.5rem;
|
|
110
|
-
margin-bottom: 0.15rem;
|
|
111
|
-
}
|
|
112
|
-
.summary-empty {
|
|
113
|
-
color: var(--disabled);
|
|
114
|
-
border-left: 0.4rem solid var(--disabled);
|
|
115
|
-
margin-bottom: 0.15rem;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.test-result {
|
|
119
|
-
padding: 1rem;
|
|
120
|
-
margin-bottom: 0.25rem;
|
|
121
|
-
}
|
|
122
|
-
.test-result:last-child {
|
|
123
|
-
border: 0;
|
|
124
|
-
}
|
|
125
|
-
.test-result.passed {
|
|
126
|
-
background-color: var(--success-bright);
|
|
127
|
-
color: var(--success);
|
|
128
|
-
}
|
|
129
|
-
.test-result.failed {
|
|
130
|
-
background-color: var(--danger-bright);
|
|
131
|
-
color: var(--danger);
|
|
132
|
-
}
|
|
133
|
-
.test-result.pending {
|
|
134
|
-
background-color: var(--warning-bright);
|
|
135
|
-
color: var(--warning);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
.test-info {
|
|
139
|
-
display: flex;
|
|
140
|
-
justify-content: space-between;
|
|
141
|
-
}
|
|
142
|
-
.test-suitename {
|
|
143
|
-
width: 20%;
|
|
144
|
-
text-align: left;
|
|
145
|
-
font-weight: bold;
|
|
146
|
-
word-break: break-word;
|
|
147
|
-
}
|
|
148
|
-
.test-title {
|
|
149
|
-
width: 40%;
|
|
150
|
-
text-align: left;
|
|
151
|
-
font-style: italic;
|
|
152
|
-
}
|
|
153
|
-
.test-status {
|
|
154
|
-
width: 20%;
|
|
155
|
-
text-align: right;
|
|
156
|
-
}
|
|
157
|
-
.test-duration {
|
|
158
|
-
width: 10%;
|
|
159
|
-
text-align: right;
|
|
160
|
-
font-size: 0.85rem;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
.failureMessages {
|
|
164
|
-
padding: 0 1rem;
|
|
165
|
-
margin-top: 1rem;
|
|
166
|
-
border-top: 1px dashed var(--danger);
|
|
167
|
-
}
|
|
168
|
-
.failureMessages.suiteFailure {
|
|
169
|
-
border-top: none;
|
|
170
|
-
}
|
|
171
|
-
.failureMsg {
|
|
172
|
-
white-space: pre-wrap;
|
|
173
|
-
white-space: -moz-pre-wrap;
|
|
174
|
-
white-space: -pre-wrap;
|
|
175
|
-
white-space: -o-pre-wrap;
|
|
176
|
-
word-wrap: break-word;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
.suite-container {
|
|
180
|
-
margin-bottom: 1rem;
|
|
181
|
-
}
|
|
182
|
-
.suite-info {
|
|
183
|
-
padding: 1rem;
|
|
184
|
-
background-color: var(--panel);
|
|
185
|
-
color: var(--text-secondary);
|
|
186
|
-
border: 0.15rem solid;
|
|
187
|
-
border-color: var(--panel);
|
|
188
|
-
display: flex;
|
|
189
|
-
align-items: center;
|
|
190
|
-
margin-bottom: 0.25rem;
|
|
191
|
-
}
|
|
192
|
-
.suite-info:hover {
|
|
193
|
-
border-color: var(--border);
|
|
194
|
-
cursor: pointer;
|
|
195
|
-
}
|
|
196
|
-
.suite-info .suite-path {
|
|
197
|
-
word-break: break-all;
|
|
198
|
-
flex-grow: 1;
|
|
199
|
-
font-family: monospace;
|
|
200
|
-
font-size: 1rem;
|
|
201
|
-
}
|
|
202
|
-
.suite-info .suite-time {
|
|
203
|
-
margin-left: 1rem;
|
|
204
|
-
padding: 0.2rem 0.3rem;
|
|
205
|
-
font-size: 0.85rem;
|
|
206
|
-
}
|
|
207
|
-
.suite-info .suite-time.warn {
|
|
208
|
-
background-color: var(--danger);
|
|
209
|
-
color: #fff;
|
|
210
|
-
}
|
|
211
|
-
.suite-info:before {
|
|
212
|
-
content: "\2303";
|
|
213
|
-
display: inline-block;
|
|
214
|
-
margin-right: 1rem;
|
|
215
|
-
transform: rotate(180deg) translateY(0.15rem);
|
|
216
|
-
}
|
|
217
|
-
.suite-container[open] .suite-info:before {
|
|
218
|
-
transform: rotate(0deg) translateY(0.15rem);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/* CONSOLE LOGS */
|
|
222
|
-
.suite-consolelog {
|
|
223
|
-
margin-bottom: 0.25rem;
|
|
224
|
-
padding: 1rem;
|
|
225
|
-
background-color: var(--panel);
|
|
226
|
-
}
|
|
227
|
-
.suite-consolelog-header {
|
|
228
|
-
font-weight: bold;
|
|
229
|
-
}
|
|
230
|
-
.suite-consolelog-item {
|
|
231
|
-
padding: 0.5rem;
|
|
232
|
-
}
|
|
233
|
-
.suite-consolelog-item pre {
|
|
234
|
-
margin: 0.5rem 0;
|
|
235
|
-
white-space: pre-wrap;
|
|
236
|
-
white-space: -moz-pre-wrap;
|
|
237
|
-
white-space: -pre-wrap;
|
|
238
|
-
white-space: -o-pre-wrap;
|
|
239
|
-
word-wrap: break-word;
|
|
240
|
-
}
|
|
241
|
-
.suite-consolelog-item-origin {
|
|
242
|
-
color: var(--text-secondary);
|
|
243
|
-
font-weight: bold;
|
|
244
|
-
}
|
|
245
|
-
.suite-consolelog-item-message {
|
|
246
|
-
color: var(--text-primary);
|
|
247
|
-
font-size: 1rem;
|
|
248
|
-
padding: 0 0.5rem;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/* OBSOLETE SNAPSHOTS */
|
|
252
|
-
.suite-obsolete-snapshots {
|
|
253
|
-
margin-bottom: 0.25rem;
|
|
254
|
-
padding: 1rem;
|
|
255
|
-
background-color: var(--danger-bright);
|
|
256
|
-
color: var(--danger);
|
|
257
|
-
}
|
|
258
|
-
.suite-obsolete-snapshots-header {
|
|
259
|
-
font-weight: bold;
|
|
260
|
-
}
|
|
261
|
-
.suite-obsolete-snapshots-item {
|
|
262
|
-
padding: 0.5rem;
|
|
263
|
-
}
|
|
264
|
-
.suite-obsolete-snapshots-item pre {
|
|
265
|
-
margin: 0.5rem 0;
|
|
266
|
-
white-space: pre-wrap;
|
|
267
|
-
white-space: -moz-pre-wrap;
|
|
268
|
-
white-space: -pre-wrap;
|
|
269
|
-
white-space: -o-pre-wrap;
|
|
270
|
-
word-wrap: break-word;
|
|
271
|
-
}
|
|
272
|
-
.suite-obsolete-snapshots-item-message {
|
|
273
|
-
color: var(--text-primary);
|
|
274
|
-
font-size: 1rem;
|
|
275
|
-
padding: 0 0.5rem;
|
|
276
|
-
}
|
|
277
|
-
</style></head><body><main class="jesthtml-content"><header><h1 id="title">Unit Report</h1></header><section id="metadata-container"><div id="timestamp">Started: 2026-02-26 16:05:28</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (1)</div><div class="summary-passed ">1 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 (3)</div><div class="summary-passed ">3 passed</div><div class="summary-failed summary-empty">0 failed</div><div class="summary-pending summary-empty">0 pending</div></div></div></section><details id="suite-1" class="suite-container" open=""><summary 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">0.176s</div></summary><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.002s</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"> </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"> </div></div></div></div></details></main></body></html>
|