@zohodesk/testinglibrary 0.1.9 → 0.1.12-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/.babelrc +4 -2
- package/.claude/settings.local.json +14 -0
- package/.gitlab-ci.yml +206 -0
- package/README.md +264 -1
- package/build/common/data-generator/steps/DataGenerator.spec.js +19 -0
- package/build/common/data-generator/steps/DataGeneratorStepsHelper.js +21 -0
- package/build/common/multi-actor/steps/multiActorHandling.spec.js +26 -0
- package/build/common/searchFake/helpers/rpcRequestHelper.js +52 -0
- package/build/common/searchFake/steps/searchFake.spec.js +85 -0
- package/build/core/dataGenerator/DataGenerator.js +161 -0
- package/build/core/dataGenerator/DataGeneratorError.js +60 -0
- package/build/core/dataGenerator/DataGeneratorHelper.js +121 -0
- package/build/core/dataGenerator/authenticator/Authenticator.js +37 -0
- package/build/core/dataGenerator/authenticator/CookieAuthenticator.js +48 -0
- package/build/core/dataGenerator/authenticator/JWTauthenticator.js +59 -0
- package/build/core/dataGenerator/authenticator/OAuthAuthenticator.js +26 -0
- package/build/core/dataGenerator/authenticator/OrgOAuthAuthenticator.js +26 -0
- package/build/core/dataGenerator/authenticator/cookieAuthConfig.js +11 -0
- package/build/core/jest/preprocessor/jsPreprocessor.js +2 -7
- package/build/core/jest/setup/index.js +1 -7
- package/build/core/playwright/builtInFixtures/actorContext.js +78 -0
- package/build/core/playwright/builtInFixtures/caseTimeout.js +20 -0
- package/build/core/playwright/builtInFixtures/context.js +34 -16
- package/build/core/playwright/builtInFixtures/executionContext.js +17 -0
- package/build/core/playwright/builtInFixtures/i18N.js +8 -0
- package/build/core/playwright/builtInFixtures/index.js +7 -1
- package/build/core/playwright/builtInFixtures/page.js +22 -66
- package/build/core/playwright/clear-caches.js +17 -5
- package/build/core/playwright/codegen.js +4 -21
- package/build/core/playwright/configuration/Configuration.js +25 -0
- package/build/core/playwright/configuration/ConfigurationHelper.js +45 -0
- package/build/core/playwright/configuration/UserArgs.js +12 -0
- package/build/core/playwright/constants/configConstants.js +17 -0
- package/build/core/playwright/constants/failureTagConstants.js +17 -0
- package/build/core/playwright/constants/fileMutexConfig.js +9 -0
- package/build/core/playwright/constants/reporterConstants.js +20 -0
- package/build/core/playwright/constants/retryConstants.js +8 -0
- package/build/core/playwright/custom-commands.js +1 -1
- package/build/core/playwright/env-initializer.js +28 -9
- package/build/core/playwright/fixtures.js +24 -0
- package/build/core/playwright/helpers/additionalProfiles.js +25 -0
- package/build/core/playwright/helpers/auth/accountLogin.js +4 -1
- package/build/core/playwright/helpers/auth/checkAuthCookies.js +27 -23
- package/build/core/playwright/helpers/auth/getUsers.js +92 -45
- package/build/core/playwright/helpers/auth/index.js +30 -5
- package/build/core/playwright/helpers/auth/loginDefaultStepsHelper.js +62 -0
- package/build/core/playwright/helpers/auth/loginSteps.js +40 -22
- package/build/core/playwright/helpers/browserTimeoutFactor.js +16 -0
- package/build/core/playwright/helpers/caseTimeoutResolver.js +37 -0
- package/build/core/playwright/helpers/checkAuthDirectory.js +27 -0
- package/build/core/playwright/helpers/configFileNameProvider.js +26 -5
- package/build/core/playwright/helpers/configPathResolver.js +38 -0
- package/build/core/playwright/helpers/contextFailureHandler.js +81 -0
- package/build/core/playwright/helpers/customFixturesHelper.js +58 -0
- package/build/core/playwright/helpers/failureTagClassifier.js +197 -0
- package/build/core/playwright/helpers/fileMutex.js +71 -0
- package/build/core/playwright/helpers/logCollector.js +147 -0
- package/build/core/playwright/helpers/parseUserArgs.js +2 -3
- package/build/core/playwright/helpers/runtimeLogAnnotator.js +140 -0
- package/build/core/playwright/helpers/runtimeLogPath.js +61 -0
- package/build/core/playwright/helpers/runtimeLogReader.js +54 -0
- package/build/core/playwright/helpers/thirdPartyLib.js +13 -0
- package/build/core/playwright/index.js +8 -76
- package/build/core/playwright/patterns/casePatterns.js +9 -0
- package/build/core/playwright/patterns/codePatterns.js +9 -0
- package/build/core/playwright/patterns/environmentPatterns.js +15 -0
- package/build/core/playwright/patterns/index.js +33 -0
- package/build/core/playwright/patterns/logCollectorIgnorePatterns.js +15 -0
- package/build/core/playwright/patterns/toolPatterns.js +26 -0
- package/build/core/playwright/readConfigFile.js +49 -16
- package/build/core/playwright/reporter/PlaywrightReporter.js +58 -0
- package/build/core/playwright/reporter/Reporter.js +65 -0
- package/build/core/playwright/reporter/ShardReporter.js +58 -0
- package/build/core/playwright/reporter/UnitReporter.js +27 -0
- package/build/core/playwright/reporter/helpers/mergeAbortedTests.js +78 -0
- package/build/core/playwright/runner/Runner.js +22 -0
- package/build/core/playwright/runner/RunnerHelper.js +43 -0
- package/build/core/playwright/runner/RunnerTypes.js +17 -0
- package/build/core/playwright/runner/SpawnRunner.js +93 -0
- package/build/core/playwright/setup/Project.js +35 -0
- package/build/core/playwright/setup/ProjectConfiguration.js +66 -0
- package/build/core/playwright/setup/config-creator.js +58 -40
- package/build/core/playwright/setup/config-utils.js +68 -37
- package/build/core/playwright/setup/custom-reporter.js +137 -14
- package/build/core/playwright/setup/merge-config.js +32 -0
- package/build/core/playwright/setup/qc-custom-reporter.js +342 -0
- package/build/core/playwright/spawnInheritChild.js +71 -0
- package/build/core/playwright/tagProcessor.js +69 -0
- package/build/core/playwright/test-runner.js +44 -98
- package/build/core/playwright/types.js +4 -1
- package/build/core/playwright/validateFeature.js +28 -0
- package/build/decorators.d.ts +1 -1
- package/build/decorators.js +1 -1
- package/build/index.d.ts +17 -19
- package/build/index.js +28 -6
- package/build/lib/cli.js +42 -7
- package/build/setup-folder-structure/helper.js +2 -0
- package/build/setup-folder-structure/samples/accountLogin-sample.js +19 -0
- package/build/setup-folder-structure/samples/actors-index.js +2 -0
- package/build/setup-folder-structure/samples/auth-setup-sample.js +10 -67
- package/build/setup-folder-structure/samples/editions-index.js +3 -0
- package/build/setup-folder-structure/samples/free-sample.json +25 -0
- package/build/setup-folder-structure/samples/settings.json +7 -0
- package/build/setup-folder-structure/samples/testSetup-sample.js +14 -0
- package/build/setup-folder-structure/samples/uat-config-sample.js +7 -2
- package/build/setup-folder-structure/setupProject.js +23 -5
- package/build/test/core/dataGenerator/__tests__/DataGenerator.test.js +311 -0
- package/build/test/core/dataGenerator/__tests__/DataGeneratorHelper.test.js +204 -0
- package/build/test/core/dataGenerator/__tests__/DataGeneratorResolution.test.js +126 -0
- package/build/test/core/dataGenerator/authenticator/__tests__/Authenticator.test.js +88 -0
- package/build/test/core/dataGenerator/authenticator/__tests__/JWTauthenticator.test.js +136 -0
- package/build/test/core/dataGenerator/authenticator/__tests__/OAuthAuthenticator.test.js +39 -0
- package/build/test/core/dataGenerator/authenticator/__tests__/OrgOAuthAuthenticator.test.js +39 -0
- package/build/test/core/playwright/__tests__/spawnInheritChild.test.js +148 -0
- package/build/test/core/playwright/__tests__/tagProcessor.test.js +94 -0
- package/build/test/core/playwright/__tests__/validateFeature.test.js +72 -0
- package/build/test/core/playwright/buildInFixtures/__tests__/caseTimeout.test.js +96 -0
- package/build/test/core/playwright/buildInFixtures/__tests__/executionContext.test.js +27 -0
- package/build/test/core/playwright/configuration/__tests__/Configuration.test.js +53 -0
- package/build/test/core/playwright/helpers/__tests__/additionalProfiles.test.js +45 -0
- package/build/test/core/playwright/helpers/__tests__/configFileNameProvider.test.js +75 -0
- package/build/test/core/playwright/helpers/__tests__/configPathResolver.test.js +55 -0
- package/build/test/core/playwright/helpers/__tests__/customFixturesHelper.test.js +51 -0
- package/build/test/core/playwright/helpers/__tests__/failureTagClassifier.test.js +604 -0
- package/build/test/core/playwright/helpers/__tests__/fileMutex.test.js +79 -0
- package/build/test/core/playwright/helpers/__tests__/getUsers_ListOfActors.test.js +83 -0
- package/build/test/core/playwright/helpers/__tests__/logCollector.test.js +163 -0
- package/build/test/core/playwright/helpers/__tests__/runtimeLogReader.test.js +112 -0
- package/build/test/core/playwright/helpers/auth/__tests__/checkAuthCookies.test.js +92 -0
- package/build/test/core/playwright/runner/__tests__/RunnerHelper.test.js +19 -0
- package/build/test/core/playwright/runner/__tests__/SpawnRunner.test.js +30 -0
- package/build/utils/cliArgsToObject.js +3 -0
- package/build/utils/commonUtils.js +20 -0
- package/build/utils/fileUtils.js +43 -1
- package/build/utils/logger.js +1 -30
- package/changelog.md +23 -0
- package/docs/CODE-REVIEW-AGENT.md +399 -0
- package/docs/code-review-instructions.md +157 -0
- package/jest.config.js +29 -11
- package/npm-shrinkwrap.json +14994 -4793
- package/package.json +39 -28
- package/playwright.config.js +13 -57
- package/unit_reports/unit-report.html +277 -0
- package/build/bdd-framework/cli/commands/env.js +0 -42
- package/build/bdd-framework/cli/commands/export.js +0 -47
- package/build/bdd-framework/cli/commands/test.js +0 -64
- package/build/bdd-framework/cli/index.js +0 -11
- package/build/bdd-framework/cli/options.js +0 -19
- package/build/bdd-framework/cli/worker.js +0 -13
- package/build/bdd-framework/config/configDir.js +0 -35
- package/build/bdd-framework/config/enrichReporterData.js +0 -23
- package/build/bdd-framework/config/env.js +0 -50
- package/build/bdd-framework/config/index.js +0 -94
- package/build/bdd-framework/config/lang.js +0 -14
- package/build/bdd-framework/cucumber/buildStepDefinition.js +0 -43
- package/build/bdd-framework/cucumber/createTestStep.js +0 -43
- package/build/bdd-framework/cucumber/formatter/EventDataCollector.js +0 -126
- package/build/bdd-framework/cucumber/formatter/GherkinDocumentParser.js +0 -72
- package/build/bdd-framework/cucumber/formatter/PickleParser.js +0 -25
- package/build/bdd-framework/cucumber/formatter/durationHelpers.js +0 -13
- package/build/bdd-framework/cucumber/formatter/getColorFns.js +0 -57
- package/build/bdd-framework/cucumber/formatter/index.js +0 -16
- package/build/bdd-framework/cucumber/formatter/locationHelpers.js +0 -16
- package/build/bdd-framework/cucumber/loadConfig.js +0 -17
- package/build/bdd-framework/cucumber/loadFeatures.js +0 -70
- package/build/bdd-framework/cucumber/loadSnippetBuilder.js +0 -20
- package/build/bdd-framework/cucumber/loadSteps.js +0 -47
- package/build/bdd-framework/cucumber/resolveFeaturePaths.js +0 -62
- package/build/bdd-framework/cucumber/stepArguments.js +0 -21
- package/build/bdd-framework/cucumber/types.js +0 -5
- package/build/bdd-framework/cucumber/valueChecker.js +0 -23
- package/build/bdd-framework/decorators.js +0 -18
- package/build/bdd-framework/gen/fixtures.js +0 -48
- package/build/bdd-framework/gen/formatter.js +0 -123
- package/build/bdd-framework/gen/i18n.js +0 -39
- package/build/bdd-framework/gen/index.js +0 -185
- package/build/bdd-framework/gen/testFile.js +0 -465
- package/build/bdd-framework/gen/testMeta.js +0 -60
- package/build/bdd-framework/gen/testNode.js +0 -60
- package/build/bdd-framework/gen/testPoms.js +0 -133
- package/build/bdd-framework/hooks/scenario.js +0 -130
- package/build/bdd-framework/hooks/worker.js +0 -89
- package/build/bdd-framework/index.js +0 -52
- package/build/bdd-framework/playwright/fixtureParameterNames.js +0 -93
- package/build/bdd-framework/playwright/getLocationInFile.js +0 -79
- package/build/bdd-framework/playwright/loadConfig.js +0 -42
- package/build/bdd-framework/playwright/loadUtils.js +0 -33
- package/build/bdd-framework/playwright/testTypeImpl.js +0 -61
- package/build/bdd-framework/playwright/transform.js +0 -88
- package/build/bdd-framework/playwright/types.js +0 -5
- package/build/bdd-framework/playwright/utils.js +0 -34
- package/build/bdd-framework/reporter/cucumber/base.js +0 -57
- package/build/bdd-framework/reporter/cucumber/custom.js +0 -73
- package/build/bdd-framework/reporter/cucumber/helper.js +0 -12
- package/build/bdd-framework/reporter/cucumber/html.js +0 -35
- package/build/bdd-framework/reporter/cucumber/index.js +0 -74
- package/build/bdd-framework/reporter/cucumber/json.js +0 -312
- package/build/bdd-framework/reporter/cucumber/junit.js +0 -205
- package/build/bdd-framework/reporter/cucumber/message.js +0 -20
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/AttachmentMapper.js +0 -64
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/Builder.js +0 -196
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocument.js +0 -43
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocumentClone.js +0 -52
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocuments.js +0 -105
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/Hook.js +0 -70
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/Meta.js +0 -45
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/Pickles.js +0 -27
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/Projects.js +0 -38
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCase.js +0 -128
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCaseRun.js +0 -126
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCaseRunHooks.js +0 -102
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestStepAttachments.js +0 -50
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestStepRun.js +0 -88
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/index.js +0 -30
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/pwUtils.js +0 -51
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/timing.js +0 -35
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/types.js +0 -5
- package/build/bdd-framework/run/StepInvoker.js +0 -68
- package/build/bdd-framework/run/bddDataAttachment.js +0 -46
- package/build/bdd-framework/run/bddFixtures.js +0 -191
- package/build/bdd-framework/run/bddWorld.js +0 -79
- package/build/bdd-framework/run/bddWorldInternal.js +0 -15
- package/build/bdd-framework/snippets/index.js +0 -132
- package/build/bdd-framework/snippets/snippetSyntax.js +0 -43
- package/build/bdd-framework/snippets/snippetSyntaxDecorators.js +0 -26
- package/build/bdd-framework/snippets/snippetSyntaxTs.js +0 -18
- package/build/bdd-framework/stepDefinitions/createBdd.js +0 -66
- package/build/bdd-framework/stepDefinitions/decorators/class.js +0 -68
- package/build/bdd-framework/stepDefinitions/decorators/steps.js +0 -99
- package/build/bdd-framework/stepDefinitions/defineStep.js +0 -62
- package/build/bdd-framework/stepDefinitions/stepConfig.js +0 -24
- package/build/bdd-framework/utils/AutofillMap.js +0 -20
- package/build/bdd-framework/utils/exit.js +0 -62
- package/build/bdd-framework/utils/index.js +0 -93
- package/build/bdd-framework/utils/jsStringWrap.js +0 -44
- package/build/bdd-framework/utils/logger.js +0 -30
- package/build/bdd-framework/utils/stripAnsiEscapes.js +0 -20
- package/build/core/playwright/report-generator.js +0 -42
- package/build/core/playwright/tag-processor.js +0 -68
- package/build/setup-folder-structure/samples/authUsers-sample.json +0 -9
- package/build/setup-folder-structure/samples/env-config-sample.json +0 -21
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.annotateRuntimeLogEvents = annotateRuntimeLogEvents;
|
|
7
|
+
exports.collectRuntimeLogMatches = collectRuntimeLogMatches;
|
|
8
|
+
exports.eventToText = eventToText;
|
|
9
|
+
exports.normalizeRuntimeLogEvents = normalizeRuntimeLogEvents;
|
|
10
|
+
exports.patternLabel = patternLabel;
|
|
11
|
+
exports.testPattern = testPattern;
|
|
12
|
+
exports.truncateText = truncateText;
|
|
13
|
+
var _failureTagConstants = require("../constants/failureTagConstants");
|
|
14
|
+
var _patterns = require("../patterns");
|
|
15
|
+
// Shared runtime-log event text + CODE/ENVIRONMENT tagging.
|
|
16
|
+
// Used by LogCollector (JSONL flush) and failureTagClassifier (metadata).
|
|
17
|
+
|
|
18
|
+
const RUNTIME_LOG_SOURCE = 'runtime-log';
|
|
19
|
+
const MAX_MATCH_TEXT_LENGTH = 500;
|
|
20
|
+
const RUNTIME_LOG_RULES = [{
|
|
21
|
+
tag: _failureTagConstants.FAILURE_TAGS.ENVIRONMENT,
|
|
22
|
+
patterns: _patterns.ENVIRONMENT_PATTERNS
|
|
23
|
+
}, {
|
|
24
|
+
tag: _failureTagConstants.FAILURE_TAGS.CODE,
|
|
25
|
+
patterns: _patterns.CODE_PATTERNS
|
|
26
|
+
}];
|
|
27
|
+
function testPattern(pattern, text) {
|
|
28
|
+
if (pattern.global || pattern.sticky) {
|
|
29
|
+
pattern.lastIndex = 0;
|
|
30
|
+
}
|
|
31
|
+
return pattern.test(text);
|
|
32
|
+
}
|
|
33
|
+
function truncateText(text) {
|
|
34
|
+
if (!text || text.length <= MAX_MATCH_TEXT_LENGTH) {
|
|
35
|
+
return text || '';
|
|
36
|
+
}
|
|
37
|
+
return `${text.slice(0, MAX_MATCH_TEXT_LENGTH)}...`;
|
|
38
|
+
}
|
|
39
|
+
function patternLabel(pattern) {
|
|
40
|
+
return pattern.source;
|
|
41
|
+
}
|
|
42
|
+
function eventToText(event) {
|
|
43
|
+
var _event$location;
|
|
44
|
+
switch (event.kind) {
|
|
45
|
+
case 'pageerror':
|
|
46
|
+
return `pageerror ${event.name || ''} ${event.message || ''}`;
|
|
47
|
+
case 'console':
|
|
48
|
+
return `console ${event.text || ''} ${((_event$location = event.location) === null || _event$location === void 0 ? void 0 : _event$location.url) || ''}`;
|
|
49
|
+
case 'requestfailed':
|
|
50
|
+
return `requestfailed ${event.resourceType || ''} ${event.method || ''} ${event.url || ''} ${event.failure || ''}`;
|
|
51
|
+
case 'response':
|
|
52
|
+
return `response ${event.status || ''} ${event.method || ''} ${event.url || ''}`;
|
|
53
|
+
default:
|
|
54
|
+
return JSON.stringify(event);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function matchingRuntimeLogTags(event) {
|
|
58
|
+
const text = eventToText(event);
|
|
59
|
+
const tags = [];
|
|
60
|
+
for (const rule of RUNTIME_LOG_RULES) {
|
|
61
|
+
if (rule.patterns.some(pattern => testPattern(pattern, text))) {
|
|
62
|
+
tags.push(rule.tag);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return tags;
|
|
66
|
+
}
|
|
67
|
+
function findAllEventMatches(events, patterns, tag, source) {
|
|
68
|
+
const matches = [];
|
|
69
|
+
for (const event of events) {
|
|
70
|
+
const text = eventToText(event);
|
|
71
|
+
for (const pattern of patterns) {
|
|
72
|
+
if (testPattern(pattern, text)) {
|
|
73
|
+
matches.push({
|
|
74
|
+
tag,
|
|
75
|
+
pattern: patternLabel(pattern),
|
|
76
|
+
source,
|
|
77
|
+
text: truncateText(text)
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return matches;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Matching events get a category `pattern` field (CODE / ENVIRONMENT).
|
|
86
|
+
// Dual matches emit two lines with the same payload.
|
|
87
|
+
function annotateRuntimeLogEvents(events = []) {
|
|
88
|
+
const lines = [];
|
|
89
|
+
for (const event of events) {
|
|
90
|
+
if (!event) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const {
|
|
94
|
+
pattern: _ignored,
|
|
95
|
+
...raw
|
|
96
|
+
} = event;
|
|
97
|
+
const matchedTags = matchingRuntimeLogTags(raw);
|
|
98
|
+
if (matchedTags.length === 0) {
|
|
99
|
+
lines.push(raw);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
for (const tag of matchedTags) {
|
|
103
|
+
lines.push({
|
|
104
|
+
pattern: tag,
|
|
105
|
+
...raw
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return lines;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Strip flush-time `pattern` annotations and drop duplicate event payloads so
|
|
113
|
+
// CODE+ENVIRONMENT dual lines on disk do not inflate classification counts.
|
|
114
|
+
function normalizeRuntimeLogEvents(events = []) {
|
|
115
|
+
const seen = new Set();
|
|
116
|
+
const normalized = [];
|
|
117
|
+
for (const event of events) {
|
|
118
|
+
if (!event) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const {
|
|
122
|
+
pattern: _ignored,
|
|
123
|
+
...raw
|
|
124
|
+
} = event;
|
|
125
|
+
const key = JSON.stringify(raw);
|
|
126
|
+
if (seen.has(key)) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
seen.add(key);
|
|
130
|
+
normalized.push(raw);
|
|
131
|
+
}
|
|
132
|
+
return normalized;
|
|
133
|
+
}
|
|
134
|
+
function collectRuntimeLogMatches(events = []) {
|
|
135
|
+
const matches = [];
|
|
136
|
+
for (const rule of RUNTIME_LOG_RULES) {
|
|
137
|
+
matches.push(...findAllEventMatches(events, rule.patterns, rule.tag, RUNTIME_LOG_SOURCE));
|
|
138
|
+
}
|
|
139
|
+
return matches;
|
|
140
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.resolveRuntimeLogBaseName = resolveRuntimeLogBaseName;
|
|
8
|
+
exports.resolveRuntimeLogFilePath = resolveRuntimeLogFilePath;
|
|
9
|
+
exports.sanitizeForFilename = sanitizeForFilename;
|
|
10
|
+
var _path = _interopRequireDefault(require("path"));
|
|
11
|
+
const MAX_FILENAME_LENGTH = 200;
|
|
12
|
+
const EXAMPLE_TITLE = /^Example\s*#\d+$/i;
|
|
13
|
+
const SPEC_FILE = /\.(js|ts)$/;
|
|
14
|
+
function sanitizeForFilename(name) {
|
|
15
|
+
if (!name) return 'test';
|
|
16
|
+
const cleaned = name.replace(/[^A-Za-z0-9._-]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');
|
|
17
|
+
return cleaned || 'test';
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// playwright-bdd nests Example rows under test.describe(scenario.name).
|
|
21
|
+
function extractOutlineScenarioName(titlePath = []) {
|
|
22
|
+
const segments = titlePath.filter(Boolean);
|
|
23
|
+
if (segments.length < 2 || !EXAMPLE_TITLE.test(segments[segments.length - 1])) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
for (let i = segments.length - 2; i >= 0; i--) {
|
|
27
|
+
const segment = segments[i];
|
|
28
|
+
if (segment && !SPEC_FILE.test(segment)) {
|
|
29
|
+
return segment;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
function resolveRuntimeLogBaseName({
|
|
35
|
+
workerIndex = 0,
|
|
36
|
+
retry = 0,
|
|
37
|
+
title = 'test',
|
|
38
|
+
titlePath = []
|
|
39
|
+
}) {
|
|
40
|
+
const scenarioName = extractOutlineScenarioName(titlePath);
|
|
41
|
+
const label = scenarioName ? `${scenarioName} ${title}` : title;
|
|
42
|
+
const base = `w${workerIndex}-${sanitizeForFilename(label)}-${retry}`;
|
|
43
|
+
if (base.length <= MAX_FILENAME_LENGTH) {
|
|
44
|
+
return base;
|
|
45
|
+
}
|
|
46
|
+
return base.slice(0, MAX_FILENAME_LENGTH).replace(/-$/, '');
|
|
47
|
+
}
|
|
48
|
+
function resolveRuntimeLogFilePath(logsDir, {
|
|
49
|
+
workerIndex,
|
|
50
|
+
retry,
|
|
51
|
+
title,
|
|
52
|
+
titlePath = []
|
|
53
|
+
}) {
|
|
54
|
+
const base = resolveRuntimeLogBaseName({
|
|
55
|
+
workerIndex,
|
|
56
|
+
retry,
|
|
57
|
+
title,
|
|
58
|
+
titlePath
|
|
59
|
+
});
|
|
60
|
+
return _path.default.join(logsDir, `${base}.jsonl`);
|
|
61
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.readRuntimeLogEvents = readRuntimeLogEvents;
|
|
8
|
+
exports.readRuntimeLogEventsForResult = readRuntimeLogEventsForResult;
|
|
9
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
10
|
+
var _fileUtils = require("../../../utils/fileUtils");
|
|
11
|
+
var _runtimeLogPath = require("./runtimeLogPath");
|
|
12
|
+
// Reads per-test runtime browser logs from the project runtime-logs folder.
|
|
13
|
+
// Used by the failure-tag classifier to correlate browser events with a test failure.
|
|
14
|
+
|
|
15
|
+
function parseJsonlContent(raw) {
|
|
16
|
+
const trimmed = raw.trim();
|
|
17
|
+
if (!trimmed) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
const events = [];
|
|
21
|
+
for (const line of trimmed.split('\n')) {
|
|
22
|
+
const lineTrimmed = line.trim();
|
|
23
|
+
if (!lineTrimmed) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
events.push(JSON.parse(lineTrimmed));
|
|
28
|
+
} catch {
|
|
29
|
+
// skip malformed line
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return events;
|
|
33
|
+
}
|
|
34
|
+
function readRuntimeLogEvents(filePath) {
|
|
35
|
+
if (!filePath || !_fs.default.existsSync(filePath)) {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
const rawContent = (0, _fileUtils.readFileContents)(filePath);
|
|
39
|
+
if (typeof rawContent !== 'string') {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
return parseJsonlContent(rawContent);
|
|
43
|
+
}
|
|
44
|
+
function readRuntimeLogEventsForResult(result, testTitle, logsDir) {
|
|
45
|
+
if (!logsDir) {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
const filePath = (0, _runtimeLogPath.resolveRuntimeLogFilePath)(logsDir, {
|
|
49
|
+
workerIndex: (result === null || result === void 0 ? void 0 : result.workerIndex) ?? 0,
|
|
50
|
+
retry: (result === null || result === void 0 ? void 0 : result.retry) ?? 0,
|
|
51
|
+
title: testTitle
|
|
52
|
+
});
|
|
53
|
+
return readRuntimeLogEvents(filePath);
|
|
54
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
Object.defineProperty(exports, "jsonpath", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () {
|
|
10
|
+
return _jsonpath.default;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
var _jsonpath = _interopRequireDefault(require("jsonpath"));
|
|
@@ -1,92 +1,24 @@
|
|
|
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
|
-
exports.
|
|
8
|
-
Object.defineProperty(exports, "accountLogin", {
|
|
9
|
-
enumerable: true,
|
|
10
|
-
get: function () {
|
|
11
|
-
return _index.accountLogin;
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
Object.defineProperty(exports, "createBdd", {
|
|
15
|
-
enumerable: true,
|
|
16
|
-
get: function () {
|
|
17
|
-
return _bddFramework.createBdd;
|
|
18
|
-
}
|
|
19
|
-
});
|
|
6
|
+
exports.createBdd = void 0;
|
|
20
7
|
Object.defineProperty(exports, "expect", {
|
|
21
8
|
enumerable: true,
|
|
22
9
|
get: function () {
|
|
23
10
|
return _test.expect;
|
|
24
11
|
}
|
|
25
12
|
});
|
|
26
|
-
Object.defineProperty(exports, "
|
|
13
|
+
Object.defineProperty(exports, "test", {
|
|
27
14
|
enumerable: true,
|
|
28
15
|
get: function () {
|
|
29
|
-
return
|
|
16
|
+
return _playwrightBdd.test;
|
|
30
17
|
}
|
|
31
18
|
});
|
|
32
|
-
|
|
33
|
-
enumerable: true,
|
|
34
|
-
get: function () {
|
|
35
|
-
return _index.getPrimaryUser;
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
Object.defineProperty(exports, "getUserForSelectedEditionAndProfile", {
|
|
39
|
-
enumerable: true,
|
|
40
|
-
get: function () {
|
|
41
|
-
return _index.getUserForSelectedEditionAndProfile;
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
Object.defineProperty(exports, "isCI", {
|
|
45
|
-
enumerable: true,
|
|
46
|
-
get: function () {
|
|
47
|
-
return _index.isCI;
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
Object.defineProperty(exports, "loadCookiesIfPresent", {
|
|
51
|
-
enumerable: true,
|
|
52
|
-
get: function () {
|
|
53
|
-
return _index.loadCookiesIfPresent;
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
Object.defineProperty(exports, "performLoginSteps", {
|
|
57
|
-
enumerable: true,
|
|
58
|
-
get: function () {
|
|
59
|
-
return _index.performLoginSteps;
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
exports.test = void 0;
|
|
63
|
-
Object.defineProperty(exports, "verifyIfCookieFileExists", {
|
|
64
|
-
enumerable: true,
|
|
65
|
-
get: function () {
|
|
66
|
-
return _index.verifyIfCookieFileExists;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
var _bddFramework = require("../../bdd-framework");
|
|
19
|
+
var _playwrightBdd = require("playwright-bdd");
|
|
70
20
|
var _test = require("@playwright/test");
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const {
|
|
76
|
-
bddMode
|
|
77
|
-
} = (0, _readConfigFile.generateConfigFromFile)();
|
|
78
|
-
let base = bddMode ? _bddFramework.test : _test.test;
|
|
79
|
-
const buildInFixtures = (0, _builtInFixtures.default)(bddMode);
|
|
80
|
-
const userFixtures = (0, _getUserFixtures.default)();
|
|
81
|
-
const test = exports.test = base.extend({
|
|
82
|
-
...buildInFixtures,
|
|
83
|
-
...userFixtures
|
|
84
|
-
});
|
|
85
|
-
const {
|
|
86
|
-
Given,
|
|
87
|
-
When,
|
|
88
|
-
Then
|
|
89
|
-
} = (0, _bddFramework.createBdd)();
|
|
90
|
-
exports.Then = Then;
|
|
91
|
-
exports.When = When;
|
|
92
|
-
exports.Given = Given;
|
|
21
|
+
let createBdd = function () {
|
|
22
|
+
return (0, _playwrightBdd.createBdd)(_playwrightBdd.test);
|
|
23
|
+
};
|
|
24
|
+
exports.createBdd = createBdd;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CASE_PATTERNS = void 0;
|
|
7
|
+
// Case patterns: test-case / assertion failures from Playwright output.
|
|
8
|
+
// Matched against the failing result's stdout + stderr.
|
|
9
|
+
const CASE_PATTERNS = exports.CASE_PATTERNS = [/GeneratorError: Generator/i, /DataGeneratorConfigurationError: Data Generator configuration is missing for the profile/i, /Data Generator Service Error/i, /status\s*:\s*DATA_GENERATION_ERROR/i, /There is no beta feature configured with the name/i, /The actors data is missing\./i, /There is no edition configured with the name/i, /There is no portal configured with the name/i, /There is no profile configured with the name/i];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CODE_PATTERNS = void 0;
|
|
7
|
+
// Code patterns: real application defects surfacing as JS exceptions in the
|
|
8
|
+
// browser. Matched against a flattened text form of each runtime-log event.
|
|
9
|
+
const CODE_PATTERNS = exports.CODE_PATTERNS = [/Cannot read properties of (undefined|null)/i, /\bis not a function\b/i, /\bis not defined\b/i, /\bis not iterable\b/i, /\bis not valid JSON\b/i, /\bis not a valid URL\b/i, /\bFailed to load resource: the server responded with a status of 4\b/i, /errorCode: INTERNAL_SERVER_ERROR/i];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ENVIRONMENT_PATTERNS = void 0;
|
|
7
|
+
// Environment patterns: infra / network / server breakage. Matched against a
|
|
8
|
+
// flattened text form of each runtime-log event (see runtimeLogAnnotator.eventToText).
|
|
9
|
+
const ENVIRONMENT_PATTERNS = exports.ENVIRONMENT_PATTERNS = [
|
|
10
|
+
// Main document navigation was aborted (page never loaded).
|
|
11
|
+
/^requestfailed document\b[\s\S]*ERR_ABORTED/i,
|
|
12
|
+
// Network / DNS / certificate / connection failures.
|
|
13
|
+
/ERR_TUNNEL_CONNECTION_FAILED|ERR_CERT_|ERR_CONNECTION_|ERR_NAME_NOT_RESOLVED|ERR_INTERNET_DISCONNECTED|ERR_TIMED_OUT|ERR_ADDRESS_UNREACHABLE/i,
|
|
14
|
+
// Server-side 5xx responses.
|
|
15
|
+
/^response 5\d\d\b/i, /status of 5\d\d/i];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "CASE_PATTERNS", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _casePatterns.CASE_PATTERNS;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "CODE_PATTERNS", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _codePatterns.CODE_PATTERNS;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "ENVIRONMENT_PATTERNS", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _environmentPatterns.ENVIRONMENT_PATTERNS;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "TOOL_PATTERNS", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _toolPatterns.TOOL_PATTERNS;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
var _environmentPatterns = require("./environmentPatterns");
|
|
31
|
+
var _codePatterns = require("./codePatterns");
|
|
32
|
+
var _casePatterns = require("./casePatterns");
|
|
33
|
+
var _toolPatterns = require("./toolPatterns");
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.IGNORE_URL_PATTERNS = exports.IGNORE_MESSAGE_PATTERNS = void 0;
|
|
7
|
+
// Ignore patterns for the runtime-log LogCollector. Matching events are dropped here so it is never recorded.
|
|
8
|
+
|
|
9
|
+
// Matched against console-error text, pageerror messages and requestfailed
|
|
10
|
+
|
|
11
|
+
const IGNORE_MESSAGE_PATTERNS = exports.IGNORE_MESSAGE_PATTERNS = [/Access is denied for this document/i, /enableDarkTheme is not a function/i, /disableDarkTheme is not a function/i, /enableZohoSearchAskZia is not a function/i, /enableSMSBridge is not a function/i, /Unexpected token '<'[\s\S]*not valid JSON/i, /blocked by CORS policy/i, /ERR_BLOCKED_BY_ORB/i];
|
|
12
|
+
|
|
13
|
+
// Matched against request/response/requestfailed URLs and console-error source URLs.
|
|
14
|
+
|
|
15
|
+
const IGNORE_URL_PATTERNS = exports.IGNORE_URL_PATTERNS = [/\.(png|jpe?g|gif|svg|webp|woff2?|ttf|css|map)(\?|$)/i, /google-analytics\.com|googletagmanager\.com|sentry\.io/i, /getHamburgerMenu\.do/i, /_chat\/unreadzmsg\.do/i, /_chat\/chatbarsync\.do/i, /agentAvailabilityConfig/i, /notifyAvailabilityStatus/i, /murphysdk/i, /phonebridge/i, /inproductsdk/i, /zquartz-tracker/i, /zohosearch\/.*gshandler/i, /stratuscdn\.com/i, /zohochat/i];
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TOOL_PATTERNS = void 0;
|
|
7
|
+
// Tool patterns: failures originating from the test tooling / data-generation
|
|
8
|
+
// layer (not the app under test). Matched against the failing result's
|
|
9
|
+
// stdout + stderr text. Add new patterns here to recognise more tool errors.
|
|
10
|
+
const TOOL_PATTERNS = exports.TOOL_PATTERNS = [/Error during login/i, /fetch failed/i,
|
|
11
|
+
// Data Generation
|
|
12
|
+
/Data Generator Service Error: status: 404/i,
|
|
13
|
+
// Configuration
|
|
14
|
+
/Config File Not Exists\. Please provide a/i, /Exception while getting the uat file from the application/i, /No config mapping found for stage:/i,
|
|
15
|
+
// Actor
|
|
16
|
+
/file missing\./i, /Error loading actor configuration from/i, /not found in user pages\./i,
|
|
17
|
+
// Module
|
|
18
|
+
/does not exist\. We have not triggered the execution for this module/i,
|
|
19
|
+
// Auth
|
|
20
|
+
/Error while parsing cookies/i,
|
|
21
|
+
// FileMutex
|
|
22
|
+
/Watch timeout exceeded/i,
|
|
23
|
+
// RPC
|
|
24
|
+
/Invalid payload\. It must be a non-null object\./i, /Invalid payload\.arguments\.entityId\./i,
|
|
25
|
+
// Search
|
|
26
|
+
/Invalid or missing data in dataTable/i, /JSONPath query/i];
|
|
@@ -6,38 +6,59 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.generateConfigFromFile = generateConfigFromFile;
|
|
8
8
|
exports.getAuthFilePath = getAuthFilePath;
|
|
9
|
+
exports.getDefaultConfig = getDefaultConfig;
|
|
9
10
|
exports.isUserConfigFileAvailable = isUserConfigFileAvailable;
|
|
10
11
|
var _fs = require("fs");
|
|
11
12
|
var _path = _interopRequireDefault(require("path"));
|
|
12
13
|
var _logger = require("../../utils/logger");
|
|
13
14
|
var _configFileNameProvider = require("./helpers/configFileNameProvider");
|
|
14
15
|
var _mergeObjects = require("./helpers/mergeObjects");
|
|
16
|
+
var _Configuration = _interopRequireDefault(require("./configuration/Configuration"));
|
|
17
|
+
var _UserArgs = _interopRequireDefault(require("./configuration/UserArgs"));
|
|
18
|
+
var _ConfigurationHelper = require("./configuration/ConfigurationHelper");
|
|
19
|
+
var _auth = require("./helpers/auth");
|
|
20
|
+
var _configConstants = _interopRequireDefault(require("./constants/configConstants"));
|
|
21
|
+
const stage = (0, _ConfigurationHelper.getRunStage)();
|
|
22
|
+
let cachedConfig = null;
|
|
23
|
+
function getPrimaryCookiePath() {
|
|
24
|
+
const {
|
|
25
|
+
email
|
|
26
|
+
} = (0, _auth.getDefaultActor)();
|
|
27
|
+
const authFilePrefix = process.env.authFilePrefix;
|
|
28
|
+
let authFileName = authFilePrefix ? `${authFilePrefix}-${email}` : `${email}`;
|
|
29
|
+
return `${_configConstants.default.TEST_SLICE_FOLDER}/${stage}/playwright/.auth/${authFileName}-cookies.json`;
|
|
30
|
+
}
|
|
15
31
|
function getDefaultConfig() {
|
|
16
32
|
return {
|
|
17
|
-
|
|
33
|
+
isTearDown: true,
|
|
34
|
+
uatDirectory: _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage),
|
|
18
35
|
headless: false,
|
|
19
36
|
browsers: ['Chrome'],
|
|
37
|
+
forbidOnly: false,
|
|
38
|
+
retries: 0,
|
|
20
39
|
trace: false,
|
|
40
|
+
smokeTestTrace: 'on',
|
|
21
41
|
video: false,
|
|
22
42
|
isAuthMode: false,
|
|
23
43
|
openReportOn: 'never',
|
|
24
|
-
reportPath: _path.default.join(process.cwd(),
|
|
44
|
+
reportPath: _path.default.join(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, 'playwright-report'),
|
|
25
45
|
bddMode: false,
|
|
26
46
|
expectTimeout: 5 * 1000,
|
|
27
47
|
testTimeout: 60 * 1000,
|
|
28
|
-
authFilePath:
|
|
48
|
+
authFilePath: getPrimaryCookiePath(),
|
|
29
49
|
viewport: {
|
|
30
50
|
width: 1280,
|
|
31
51
|
height: 720
|
|
32
52
|
},
|
|
33
53
|
debug: false,
|
|
34
|
-
|
|
54
|
+
testIdAttribute: 'data-testid',
|
|
35
55
|
additionalPages: {},
|
|
36
56
|
featureFilesFolder: 'feature-files',
|
|
37
57
|
stepDefinitionsFolder: 'steps',
|
|
38
|
-
testIdAttribute: 'data-testid',
|
|
39
58
|
testSetup: {},
|
|
40
|
-
editionOrder: ['Free', 'Express', 'Standard', 'Professional', 'Enterprise']
|
|
59
|
+
editionOrder: ['Free', 'Express', 'Standard', 'Professional', 'Enterprise'],
|
|
60
|
+
failureSegregation: true,
|
|
61
|
+
showCaseTimings: false
|
|
41
62
|
};
|
|
42
63
|
}
|
|
43
64
|
function combineDefaultConfigWithUserConfig(userConfiguration) {
|
|
@@ -78,9 +99,9 @@ function combineDefaultConfigWithUserConfig(userConfiguration) {
|
|
|
78
99
|
* @property {string} uatDirectory - Directory in which uat configuration is places.
|
|
79
100
|
* @property {string} headless - Headless Browsers mode.
|
|
80
101
|
* @property {number} trace - trace for test cases.
|
|
102
|
+
* @property {string} smokeTestTrace - trace mode for the smokeTest project (e.g. 'on', 'off', 'retain-on-failure'). Default is 'on'.
|
|
81
103
|
* @property {boolean} video - video for test cases,
|
|
82
104
|
* @property {boolean} debug - debug mode
|
|
83
|
-
* @property {string} mode: mode in which the test cases needs to run
|
|
84
105
|
* @property {boolean} isAuthMode - Auth Mode. config whether authentication step needed before running test cases
|
|
85
106
|
* @property {string} authFilePath - File Path where the cookies stored
|
|
86
107
|
* @property {any} browsers: List of browsers
|
|
@@ -88,7 +109,7 @@ function combineDefaultConfigWithUserConfig(userConfiguration) {
|
|
|
88
109
|
* @property {any} reportPath : directory where report is generate
|
|
89
110
|
* @property {boolean} bddMode: Feature files needs to be processed
|
|
90
111
|
* @property {number} expectTimeout: time in milliseconds which the expect condition should fail
|
|
91
|
-
* @property {number} testTimeout: time in milliseconds which the test should fail
|
|
112
|
+
* @property {number} testTimeout: time in milliseconds which the test should fail. Can be overridden per-scenario by tagging the scenario with `@timeout_<seconds>` (e.g. `@timeout_180`). `@timeout_0` disables the timeout. Browser scaling (Firefox 2x, Safari 4x) is preserved.
|
|
92
113
|
* @property {Object} additionalPages: custom pages configuration
|
|
93
114
|
* @property {string} featureFilesFolder: folder name under which feature-files will be placed. Default is feature-files
|
|
94
115
|
* @property {string} stepDefinitionsFolder: folder name under which step implementations will be placed. Default is steps
|
|
@@ -96,6 +117,8 @@ function combineDefaultConfigWithUserConfig(userConfiguration) {
|
|
|
96
117
|
* @property {string} testIdAttribute: Change the default data-testid attribute. configure what attribute to search while calling getByTestId
|
|
97
118
|
* @property {Array} editionOrder: Order in the form of larger editions in the back. Edition with the most privelages should be last
|
|
98
119
|
* @property {testSetupConfig} testSetup: Specify page and context functions that will be called while intilaizing fixtures.
|
|
120
|
+
* @property {boolean} showCaseTimings: When true, the console reporter prints per-case start/end wall-clock times (h:mm:ss AM/PM) and a case-timings.json sidecar is written to reportPath for the HTML report addon. Default: true.
|
|
121
|
+
* @property {boolean} failureSegregation: When true, collect runtime browser logs on failure, classify failing tests into CODE/CASE/TOOL/ENVIRONMENT, attach additional_logs, and merge tags like CODE_failure into the report. Default: true.
|
|
99
122
|
*/
|
|
100
123
|
|
|
101
124
|
/**
|
|
@@ -103,18 +126,27 @@ function combineDefaultConfigWithUserConfig(userConfiguration) {
|
|
|
103
126
|
*
|
|
104
127
|
* @returns {UserConfig}
|
|
105
128
|
*/
|
|
129
|
+
|
|
130
|
+
function getConfigFilePath() {
|
|
131
|
+
return (0, _configFileNameProvider.getUATFileName)();
|
|
132
|
+
}
|
|
106
133
|
function generateConfigFromFile() {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
|
|
134
|
+
if (cachedConfig === null) {
|
|
135
|
+
// Getting the default config's from framework
|
|
136
|
+
const uatConfig = new _Configuration.default(getDefaultConfig());
|
|
137
|
+
// overriding the application config's from project
|
|
138
|
+
const userArgConfig = new _Configuration.default(_UserArgs.default.parseToObject(process.argv.slice(2)));
|
|
139
|
+
const stage = userArgConfig.get("stage");
|
|
140
|
+
const appConfig = new _Configuration.default((0, _ConfigurationHelper.getApplicationConfig)(stage));
|
|
141
|
+
// overriding the user config's from CLI
|
|
142
|
+
uatConfig.addAll(appConfig);
|
|
143
|
+
uatConfig.addAll(userArgConfig);
|
|
144
|
+
cachedConfig = uatConfig.getAll();
|
|
113
145
|
}
|
|
114
|
-
return
|
|
146
|
+
return cachedConfig;
|
|
115
147
|
}
|
|
116
148
|
function isUserConfigFileAvailable() {
|
|
117
|
-
const filePath =
|
|
149
|
+
const filePath = getConfigFilePath();
|
|
118
150
|
if ((0, _fs.existsSync)(filePath)) {
|
|
119
151
|
return true;
|
|
120
152
|
}
|
|
@@ -129,5 +161,6 @@ function getAuthFilePath(filePath) {
|
|
|
129
161
|
}
|
|
130
162
|
} catch (err) {
|
|
131
163
|
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, `Founded Path - ${filePath} Authetication file not Exist ...`);
|
|
164
|
+
_logger.Logger.error(err);
|
|
132
165
|
}
|
|
133
166
|
}
|