@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,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
5
|
+
var _path = _interopRequireDefault(require("path"));
|
|
6
|
+
var _getUsers = require("../../../../../core/playwright/helpers/auth/getUsers");
|
|
7
|
+
var _configPathResolver = require("../../../../../core/playwright/helpers/configPathResolver");
|
|
8
|
+
jest.mock('fs');
|
|
9
|
+
jest.mock('path');
|
|
10
|
+
jest.mock('../../../../../core/playwright/helpers/configPathResolver', () => ({
|
|
11
|
+
getConfigPath: jest.fn()
|
|
12
|
+
}));
|
|
13
|
+
describe('getListOfActors', () => {
|
|
14
|
+
const stageConfig = 'uat/conf';
|
|
15
|
+
const mode = 'dev';
|
|
16
|
+
const stage = 'uat';
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
jest.clearAllMocks();
|
|
19
|
+
_path.default.join.mockImplementation((...args) => args.join('/'));
|
|
20
|
+
_path.default.resolve.mockImplementation((...args) => args.join('/'));
|
|
21
|
+
_configPathResolver.getConfigPath.mockReturnValue('uat/conf');
|
|
22
|
+
});
|
|
23
|
+
test('throws an error when config file cannot be loaded', () => {
|
|
24
|
+
_fs.default.existsSync.mockReturnValueOnce(true);
|
|
25
|
+
jest.mock('/uat/conf/dev/actors/index.js', () => {
|
|
26
|
+
throw new Error('Loading error');
|
|
27
|
+
}, {
|
|
28
|
+
virtual: true
|
|
29
|
+
});
|
|
30
|
+
expect(() => (0, _getUsers.getListOfActors)()).toThrow(`Error loading actor configuration from ${_path.default.join(_path.default.resolve(process.cwd(), 'uat/conf/dev/actors/index.js'))}`);
|
|
31
|
+
});
|
|
32
|
+
test('throws an error when beta feature config does not exist', () => {
|
|
33
|
+
_fs.default.existsSync.mockReturnValueOnce(true) // Main config file exists
|
|
34
|
+
.mockReturnValueOnce(false); // Beta feature config does not exist in either path
|
|
35
|
+
|
|
36
|
+
const betaFeature = 'nonExistentFeature';
|
|
37
|
+
expect(() => (0, _getUsers.getListOfActors)(betaFeature)).toThrow(`There is no beta feature configured with the name "${betaFeature}"`);
|
|
38
|
+
});
|
|
39
|
+
test('loads main configuration when betaFeature is not provided and main config exists', () => {
|
|
40
|
+
_fs.default.existsSync.mockReturnValueOnce(true);
|
|
41
|
+
const file = _path.default.join(_path.default.resolve(process.cwd(), `${stageConfig}/${mode}/actors/index.js`));
|
|
42
|
+
jest.doMock(file, () => ({
|
|
43
|
+
actors: []
|
|
44
|
+
}), {
|
|
45
|
+
virtual: true
|
|
46
|
+
});
|
|
47
|
+
const result = (0, _getUsers.getListOfActors)();
|
|
48
|
+
expect(result).toEqual({
|
|
49
|
+
actors: []
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
test('falls back to default configuration if main config file does not exist', () => {
|
|
53
|
+
_fs.default.existsSync.mockReturnValueOnce(false) // Main config file missing
|
|
54
|
+
.mockReturnValueOnce(true); // Beta feature config exists
|
|
55
|
+
|
|
56
|
+
const defaultConfigFile = _path.default.join(_path.default.resolve(process.cwd(), `${stage}/conf/default/actors/index.js`));
|
|
57
|
+
jest.doMock(defaultConfigFile, () => ({
|
|
58
|
+
actors: []
|
|
59
|
+
}), {
|
|
60
|
+
virtual: true
|
|
61
|
+
});
|
|
62
|
+
const result = (0, _getUsers.getListOfActors)();
|
|
63
|
+
expect(result).toEqual({
|
|
64
|
+
actors: []
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
test('loads beta feature configuration when betaFeature is provided', () => {
|
|
68
|
+
_fs.default.existsSync.mockReturnValueOnce(true) // Main config file exists
|
|
69
|
+
.mockReturnValueOnce(true); // Beta feature config exists
|
|
70
|
+
|
|
71
|
+
const betaFeature = 'parentchild';
|
|
72
|
+
const betaFeaturePath = _path.default.join(_path.default.resolve(process.cwd(), `${stageConfig}/${mode}/actors/beta/${betaFeature}/index.js`));
|
|
73
|
+
jest.doMock(betaFeaturePath, () => ({
|
|
74
|
+
betaActors: []
|
|
75
|
+
}), {
|
|
76
|
+
virtual: true
|
|
77
|
+
});
|
|
78
|
+
const result = (0, _getUsers.getListOfActors)(betaFeature);
|
|
79
|
+
expect(result).toEqual({
|
|
80
|
+
betaActors: []
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
});
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
5
|
+
var _os = _interopRequireDefault(require("os"));
|
|
6
|
+
var _path = _interopRequireDefault(require("path"));
|
|
7
|
+
var _logCollector = require("../../../../../core/playwright/helpers/logCollector");
|
|
8
|
+
function makeEmitter() {
|
|
9
|
+
const handlers = {};
|
|
10
|
+
return {
|
|
11
|
+
handlers,
|
|
12
|
+
on(event, handler) {
|
|
13
|
+
(handlers[event] = handlers[event] || []).push(handler);
|
|
14
|
+
},
|
|
15
|
+
removeListener() {},
|
|
16
|
+
emit(event, arg) {
|
|
17
|
+
(handlers[event] || []).forEach(handler => handler(arg));
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function makeContext() {
|
|
22
|
+
const page = makeEmitter();
|
|
23
|
+
const emitter = makeEmitter();
|
|
24
|
+
return {
|
|
25
|
+
page,
|
|
26
|
+
context: {
|
|
27
|
+
...emitter,
|
|
28
|
+
pages: () => [page]
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const failedRequest = (url, errorText, resourceType = 'script', method = 'GET') => ({
|
|
33
|
+
url: () => url,
|
|
34
|
+
failure: () => ({
|
|
35
|
+
errorText
|
|
36
|
+
}),
|
|
37
|
+
method: () => method,
|
|
38
|
+
resourceType: () => resourceType
|
|
39
|
+
});
|
|
40
|
+
const response = (url, status, method = 'GET') => ({
|
|
41
|
+
url: () => url,
|
|
42
|
+
status: () => status,
|
|
43
|
+
request: () => ({
|
|
44
|
+
method: () => method
|
|
45
|
+
}),
|
|
46
|
+
fromServiceWorker: () => false
|
|
47
|
+
});
|
|
48
|
+
const consoleMessage = (text, url) => ({
|
|
49
|
+
type: () => 'error',
|
|
50
|
+
text: () => text,
|
|
51
|
+
location: () => ({
|
|
52
|
+
url
|
|
53
|
+
})
|
|
54
|
+
});
|
|
55
|
+
describe('LogCollector baseline-noise stripping', () => {
|
|
56
|
+
let collector;
|
|
57
|
+
let context;
|
|
58
|
+
let page;
|
|
59
|
+
beforeEach(() => {
|
|
60
|
+
collector = new _logCollector.LogCollector();
|
|
61
|
+
const ctx = makeContext();
|
|
62
|
+
context = ctx.context;
|
|
63
|
+
page = ctx.page;
|
|
64
|
+
collector.attachToContext(context);
|
|
65
|
+
});
|
|
66
|
+
test('drops ORB-blocked request failures (message pattern)', () => {
|
|
67
|
+
context.emit('requestfailed', failedRequest('https://app/some/script.js', 'net::ERR_BLOCKED_BY_ORB'));
|
|
68
|
+
expect(collector.events).toHaveLength(0);
|
|
69
|
+
});
|
|
70
|
+
test('drops known noisy third-party URLs (url pattern)', () => {
|
|
71
|
+
context.emit('requestfailed', failedRequest('https://cdn/murphysdk/3.5.0/murphy.min.js', 'net::ERR_ABORTED'));
|
|
72
|
+
expect(collector.events).toHaveLength(0);
|
|
73
|
+
});
|
|
74
|
+
test('drops noisy 4xx responses by URL (e.g. getHamburgerMenu)', () => {
|
|
75
|
+
context.emit('response', response('https://app/biz/getHamburgerMenu.do?version=stable', 404));
|
|
76
|
+
expect(collector.events).toHaveLength(0);
|
|
77
|
+
});
|
|
78
|
+
test('drops CORS console errors (message pattern)', () => {
|
|
79
|
+
page.emit('console', consoleMessage("Access to font at 'https://x/f.woff' has been blocked by CORS policy: ...", 'https://app/page'));
|
|
80
|
+
expect(collector.events).toHaveLength(0);
|
|
81
|
+
});
|
|
82
|
+
test('drops baseline pageerrors (Access is denied / enable* not a function)', () => {
|
|
83
|
+
page.emit('pageerror', {
|
|
84
|
+
name: 'SecurityError',
|
|
85
|
+
message: 'Failed to read the localStorage: Access is denied for this document.',
|
|
86
|
+
stack: ''
|
|
87
|
+
});
|
|
88
|
+
page.emit('pageerror', {
|
|
89
|
+
name: 'TypeError',
|
|
90
|
+
message: 'n.enableDarkTheme is not a function',
|
|
91
|
+
stack: ''
|
|
92
|
+
});
|
|
93
|
+
expect(collector.events).toHaveLength(0);
|
|
94
|
+
});
|
|
95
|
+
test('keeps a real application pageerror', () => {
|
|
96
|
+
page.emit('pageerror', {
|
|
97
|
+
name: 'TypeError',
|
|
98
|
+
message: "Cannot read properties of undefined (reading 'id')",
|
|
99
|
+
stack: 'TypeError: ...'
|
|
100
|
+
});
|
|
101
|
+
expect(collector.events).toHaveLength(1);
|
|
102
|
+
expect(collector.events[0]).toMatchObject({
|
|
103
|
+
kind: 'pageerror',
|
|
104
|
+
name: 'TypeError'
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
test('flushes captured events to a jsonl file', () => {
|
|
108
|
+
const flushDir = _fs.default.mkdtempSync(_path.default.join(_os.default.tmpdir(), 'log-collector-flush-'));
|
|
109
|
+
try {
|
|
110
|
+
page.emit('pageerror', {
|
|
111
|
+
name: 'TypeError',
|
|
112
|
+
message: "Cannot read properties of undefined (reading 'id')",
|
|
113
|
+
stack: 'TypeError: ...'
|
|
114
|
+
});
|
|
115
|
+
const filePath = collector.flushToFile(flushDir, 'w0-test-0');
|
|
116
|
+
const contents = _fs.default.readFileSync(filePath, 'utf8');
|
|
117
|
+
const line = JSON.parse(contents.trim());
|
|
118
|
+
expect(filePath).toContain('w0-test-0.jsonl');
|
|
119
|
+
expect(line).toMatchObject({
|
|
120
|
+
pattern: 'CODE',
|
|
121
|
+
kind: 'pageerror'
|
|
122
|
+
});
|
|
123
|
+
expect(contents).toContain("Cannot read properties of undefined (reading 'id')");
|
|
124
|
+
expect(contents.endsWith('\n')).toBe(true);
|
|
125
|
+
// In-memory events stay unannotated.
|
|
126
|
+
expect(collector.events[0].pattern).toBeUndefined();
|
|
127
|
+
} finally {
|
|
128
|
+
_fs.default.rmSync(flushDir, {
|
|
129
|
+
recursive: true,
|
|
130
|
+
force: true
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
test('flushes ENVIRONMENT pattern annotation for document aborts', () => {
|
|
135
|
+
const flushDir = _fs.default.mkdtempSync(_path.default.join(_os.default.tmpdir(), 'log-collector-flush-'));
|
|
136
|
+
try {
|
|
137
|
+
context.emit('requestfailed', failedRequest('https://app/agent/events/list/commentsubtabevent', 'net::ERR_ABORTED', 'document'));
|
|
138
|
+
const filePath = collector.flushToFile(flushDir, 'w0-env-0');
|
|
139
|
+
const line = JSON.parse(_fs.default.readFileSync(filePath, 'utf8').trim());
|
|
140
|
+
expect(line).toMatchObject({
|
|
141
|
+
pattern: 'ENVIRONMENT',
|
|
142
|
+
kind: 'requestfailed',
|
|
143
|
+
resourceType: 'document'
|
|
144
|
+
});
|
|
145
|
+
} finally {
|
|
146
|
+
_fs.default.rmSync(flushDir, {
|
|
147
|
+
recursive: true,
|
|
148
|
+
force: true
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
test('returns null from flushToFile when no events were captured', () => {
|
|
153
|
+
expect(collector.flushToFile('/tmp', 'empty')).toBeNull();
|
|
154
|
+
});
|
|
155
|
+
test('keeps a document-navigation abort (real environment signal)', () => {
|
|
156
|
+
context.emit('requestfailed', failedRequest('https://app/agent/events/list/commentsubtabevent', 'net::ERR_ABORTED', 'document'));
|
|
157
|
+
expect(collector.events).toHaveLength(1);
|
|
158
|
+
expect(collector.events[0]).toMatchObject({
|
|
159
|
+
kind: 'requestfailed',
|
|
160
|
+
resourceType: 'document'
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
});
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
5
|
+
var _os = _interopRequireDefault(require("os"));
|
|
6
|
+
var _path = _interopRequireDefault(require("path"));
|
|
7
|
+
var _runtimeLogPath = require("../../../../../core/playwright/helpers/runtimeLogPath");
|
|
8
|
+
var _runtimeLogReader = require("../../../../../core/playwright/helpers/runtimeLogReader");
|
|
9
|
+
const TEST_TITLE = 'runtime-log-reader-test';
|
|
10
|
+
let tempDir;
|
|
11
|
+
function writeRuntimeLog(events, {
|
|
12
|
+
workerIndex = 0,
|
|
13
|
+
retry = 0,
|
|
14
|
+
title = TEST_TITLE
|
|
15
|
+
} = {}) {
|
|
16
|
+
const file = (0, _runtimeLogPath.resolveRuntimeLogFilePath)(tempDir, {
|
|
17
|
+
workerIndex,
|
|
18
|
+
retry,
|
|
19
|
+
title
|
|
20
|
+
});
|
|
21
|
+
_fs.default.mkdirSync(_path.default.dirname(file), {
|
|
22
|
+
recursive: true
|
|
23
|
+
});
|
|
24
|
+
_fs.default.writeFileSync(file, `${events.map(e => JSON.stringify(e)).join('\n')}\n`);
|
|
25
|
+
return file;
|
|
26
|
+
}
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
tempDir = _fs.default.mkdtempSync(_path.default.join(_os.default.tmpdir(), 'runtime-log-reader-'));
|
|
29
|
+
});
|
|
30
|
+
afterEach(() => {
|
|
31
|
+
_fs.default.rmSync(tempDir, {
|
|
32
|
+
recursive: true,
|
|
33
|
+
force: true
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe('readRuntimeLogEventsForResult', () => {
|
|
37
|
+
test('reads project-side runtime log for a failing result', () => {
|
|
38
|
+
const events = [{
|
|
39
|
+
kind: 'pageerror',
|
|
40
|
+
message: 'inline boom'
|
|
41
|
+
}];
|
|
42
|
+
writeRuntimeLog(events);
|
|
43
|
+
const result = {
|
|
44
|
+
status: 'failed',
|
|
45
|
+
workerIndex: 0,
|
|
46
|
+
retry: 0
|
|
47
|
+
};
|
|
48
|
+
expect((0, _runtimeLogReader.readRuntimeLogEventsForResult)(result, TEST_TITLE, tempDir)).toEqual(events);
|
|
49
|
+
});
|
|
50
|
+
test('skips malformed jsonl lines', () => {
|
|
51
|
+
const file = writeRuntimeLog([]);
|
|
52
|
+
_fs.default.writeFileSync(file, [JSON.stringify({
|
|
53
|
+
kind: 'console',
|
|
54
|
+
text: 'ok'
|
|
55
|
+
}), 'not-json', JSON.stringify({
|
|
56
|
+
kind: 'pageerror',
|
|
57
|
+
message: 'err'
|
|
58
|
+
})].join('\n') + '\n');
|
|
59
|
+
const result = {
|
|
60
|
+
status: 'failed',
|
|
61
|
+
workerIndex: 0,
|
|
62
|
+
retry: 0
|
|
63
|
+
};
|
|
64
|
+
expect((0, _runtimeLogReader.readRuntimeLogEventsForResult)(result, TEST_TITLE, tempDir)).toEqual([{
|
|
65
|
+
kind: 'console',
|
|
66
|
+
text: 'ok'
|
|
67
|
+
}, {
|
|
68
|
+
kind: 'pageerror',
|
|
69
|
+
message: 'err'
|
|
70
|
+
}]);
|
|
71
|
+
});
|
|
72
|
+
test('returns an empty array when the runtime log file is missing', () => {
|
|
73
|
+
const result = {
|
|
74
|
+
status: 'failed',
|
|
75
|
+
workerIndex: 0,
|
|
76
|
+
retry: 0
|
|
77
|
+
};
|
|
78
|
+
expect((0, _runtimeLogReader.readRuntimeLogEventsForResult)(result, 'missing-test', tempDir)).toEqual([]);
|
|
79
|
+
expect((0, _runtimeLogReader.readRuntimeLogEventsForResult)(null, TEST_TITLE, tempDir)).toEqual([]);
|
|
80
|
+
});
|
|
81
|
+
test('returns an empty array when logsDir is missing', () => {
|
|
82
|
+
const result = {
|
|
83
|
+
status: 'failed',
|
|
84
|
+
workerIndex: 0,
|
|
85
|
+
retry: 0
|
|
86
|
+
};
|
|
87
|
+
expect((0, _runtimeLogReader.readRuntimeLogEventsForResult)(result, TEST_TITLE)).toEqual([]);
|
|
88
|
+
expect((0, _runtimeLogReader.readRuntimeLogEventsForResult)(result, TEST_TITLE, undefined)).toEqual([]);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe('readRuntimeLogEvents', () => {
|
|
92
|
+
test('reads events from a jsonl file path', () => {
|
|
93
|
+
const file = writeRuntimeLog([{
|
|
94
|
+
kind: 'console',
|
|
95
|
+
text: 'ok'
|
|
96
|
+
}, {
|
|
97
|
+
kind: 'pageerror',
|
|
98
|
+
message: 'err'
|
|
99
|
+
}]);
|
|
100
|
+
expect((0, _runtimeLogReader.readRuntimeLogEvents)(file)).toEqual([{
|
|
101
|
+
kind: 'console',
|
|
102
|
+
text: 'ok'
|
|
103
|
+
}, {
|
|
104
|
+
kind: 'pageerror',
|
|
105
|
+
message: 'err'
|
|
106
|
+
}]);
|
|
107
|
+
});
|
|
108
|
+
test('returns an empty array for a missing file', () => {
|
|
109
|
+
expect((0, _runtimeLogReader.readRuntimeLogEvents)(null)).toEqual([]);
|
|
110
|
+
expect((0, _runtimeLogReader.readRuntimeLogEvents)(_path.default.join(tempDir, 'missing.jsonl'))).toEqual([]);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _fileUtils = require("../../../../../../utils/fileUtils");
|
|
4
|
+
var _checkAuthCookies = require("../../../../../../core/playwright/helpers/auth/checkAuthCookies");
|
|
5
|
+
jest.mock('../../../../../../utils/fileUtils', () => ({
|
|
6
|
+
writeFileContents: jest.fn()
|
|
7
|
+
}));
|
|
8
|
+
function pageWithCookies(cookies) {
|
|
9
|
+
return {
|
|
10
|
+
context: () => ({
|
|
11
|
+
storageState: jest.fn().mockResolvedValue({
|
|
12
|
+
cookies
|
|
13
|
+
})
|
|
14
|
+
})
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function writtenCookies() {
|
|
18
|
+
return JSON.parse(_fileUtils.writeFileContents.mock.calls[0][1]).cookies;
|
|
19
|
+
}
|
|
20
|
+
describe('storeFilteredStorageState', () => {
|
|
21
|
+
const authFile = '/tmp/.auth/user.json';
|
|
22
|
+
it('keeps cookies whose name contains "iamadt"', async () => {
|
|
23
|
+
const cookies = [{
|
|
24
|
+
name: '_iamadt',
|
|
25
|
+
value: 'a'
|
|
26
|
+
}];
|
|
27
|
+
await (0, _checkAuthCookies.storeFilteredStorageState)(pageWithCookies(cookies), authFile);
|
|
28
|
+
expect(writtenCookies()).toEqual(cookies);
|
|
29
|
+
});
|
|
30
|
+
it('keeps cookies whose name contains "iambdt"', async () => {
|
|
31
|
+
const cookies = [{
|
|
32
|
+
name: '_iambdt',
|
|
33
|
+
value: 'b'
|
|
34
|
+
}];
|
|
35
|
+
await (0, _checkAuthCookies.storeFilteredStorageState)(pageWithCookies(cookies), authFile);
|
|
36
|
+
expect(writtenCookies()).toEqual(cookies);
|
|
37
|
+
});
|
|
38
|
+
it('keeps a cookie whose name has the key as a substring, not just an exact match', async () => {
|
|
39
|
+
const cookies = [{
|
|
40
|
+
name: '_cseziamadt',
|
|
41
|
+
value: 'c'
|
|
42
|
+
}];
|
|
43
|
+
await (0, _checkAuthCookies.storeFilteredStorageState)(pageWithCookies(cookies), authFile);
|
|
44
|
+
expect(writtenCookies()).toEqual(cookies);
|
|
45
|
+
});
|
|
46
|
+
it('drops cookies whose name does not contain either key', async () => {
|
|
47
|
+
const cookies = [{
|
|
48
|
+
name: 'crmcsr',
|
|
49
|
+
value: 'x'
|
|
50
|
+
}, {
|
|
51
|
+
name: 'JSESSIONID',
|
|
52
|
+
value: 'y'
|
|
53
|
+
}];
|
|
54
|
+
await (0, _checkAuthCookies.storeFilteredStorageState)(pageWithCookies(cookies), authFile);
|
|
55
|
+
expect(writtenCookies()).toEqual([]);
|
|
56
|
+
});
|
|
57
|
+
it('matching is case-sensitive', async () => {
|
|
58
|
+
const cookies = [{
|
|
59
|
+
name: '_IAMADT',
|
|
60
|
+
value: 'z'
|
|
61
|
+
}];
|
|
62
|
+
await (0, _checkAuthCookies.storeFilteredStorageState)(pageWithCookies(cookies), authFile);
|
|
63
|
+
expect(writtenCookies()).toEqual([]);
|
|
64
|
+
});
|
|
65
|
+
it('filters a mixed list down to only the matching cookies', async () => {
|
|
66
|
+
const cookies = [{
|
|
67
|
+
name: '_iamadt',
|
|
68
|
+
value: 'a'
|
|
69
|
+
}, {
|
|
70
|
+
name: 'crmcsr',
|
|
71
|
+
value: 'x'
|
|
72
|
+
}, {
|
|
73
|
+
name: '_iambdt',
|
|
74
|
+
value: 'b'
|
|
75
|
+
}, {
|
|
76
|
+
name: 'JSESSIONID',
|
|
77
|
+
value: 'y'
|
|
78
|
+
}];
|
|
79
|
+
await (0, _checkAuthCookies.storeFilteredStorageState)(pageWithCookies(cookies), authFile);
|
|
80
|
+
expect(writtenCookies()).toEqual([{
|
|
81
|
+
name: '_iamadt',
|
|
82
|
+
value: 'a'
|
|
83
|
+
}, {
|
|
84
|
+
name: '_iambdt',
|
|
85
|
+
value: 'b'
|
|
86
|
+
}]);
|
|
87
|
+
});
|
|
88
|
+
it('writes to the given authFile path', async () => {
|
|
89
|
+
await (0, _checkAuthCookies.storeFilteredStorageState)(pageWithCookies([]), authFile);
|
|
90
|
+
expect(_fileUtils.writeFileContents).toHaveBeenCalledWith(authFile, expect.any(String));
|
|
91
|
+
});
|
|
92
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _RunnerHelper = _interopRequireDefault(require("../../../../../core/playwright/runner/RunnerHelper"));
|
|
5
|
+
var _SpawnRunner = _interopRequireDefault(require("../../../../../core/playwright/runner/SpawnRunner"));
|
|
6
|
+
jest.mock('../../../../../core/playwright/setup/config-utils', () => ({
|
|
7
|
+
getBrowsersList: jest.fn().mockReturnValue([])
|
|
8
|
+
}));
|
|
9
|
+
describe('RunnerHelper', () => {
|
|
10
|
+
describe('createRunner', () => {
|
|
11
|
+
it('should throw error on invalid runner type', () => {
|
|
12
|
+
expect(() => _RunnerHelper.default.createRunner('invalid-type', {})).toThrow("Invalid runner type");
|
|
13
|
+
});
|
|
14
|
+
it('should create a valid runner class', () => {
|
|
15
|
+
const runnerInstance = _RunnerHelper.default.createRunner('spawn', {});
|
|
16
|
+
expect(runnerInstance).toBeInstanceOf(_SpawnRunner.default); // Directly pass the result
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _RunnerHelper = _interopRequireDefault(require("../../../../../core/playwright/runner/RunnerHelper"));
|
|
5
|
+
var _Runner = _interopRequireDefault(require("../../../../../core/playwright/runner/Runner"));
|
|
6
|
+
var _Configuration = _interopRequireDefault(require("../../../../../core/playwright/configuration/Configuration"));
|
|
7
|
+
jest.mock('child_process');
|
|
8
|
+
jest.mock('../../../../../utils/logger');
|
|
9
|
+
jest.mock('../../../../../core/playwright/setup/config-utils', () => ({
|
|
10
|
+
getBrowsersList: jest.fn().mockReturnValue([])
|
|
11
|
+
}));
|
|
12
|
+
describe('SpawnRunner', () => {
|
|
13
|
+
let spawnRunner;
|
|
14
|
+
const runnerObj = new _Runner.default();
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
const config = new _Configuration.default({});
|
|
17
|
+
config.add("bddMode", true);
|
|
18
|
+
runnerObj.setConfig(config);
|
|
19
|
+
runnerObj.setTagArgs(["--headed"]);
|
|
20
|
+
spawnRunner = _RunnerHelper.default.createRunner('spawn', runnerObj);
|
|
21
|
+
});
|
|
22
|
+
describe('run', () => {
|
|
23
|
+
it('should call runPreprocessing when bddMode is true', () => {
|
|
24
|
+
const runPreprocessingSpy = jest.spyOn(spawnRunner, 'runPreprocessing').mockResolvedValue();
|
|
25
|
+
const runPlaywrightSpy = jest.spyOn(spawnRunner, 'runPlaywright').mockResolvedValue();
|
|
26
|
+
spawnRunner.run();
|
|
27
|
+
expect(runPreprocessingSpy).toHaveBeenCalled();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.copyCommonSpecs = copyCommonSpecs;
|
|
8
|
+
var _fileUtils = require("./fileUtils");
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _configConstants = _interopRequireDefault(require("../core/playwright/constants/configConstants"));
|
|
11
|
+
var _ConfigurationHelper = require("../core/playwright/configuration/ConfigurationHelper");
|
|
12
|
+
const stage = (0, _ConfigurationHelper.getRunStage)();
|
|
13
|
+
function copyCommonSpecs() {
|
|
14
|
+
const libraryPath = require.resolve("@zohodesk/testinglibrary");
|
|
15
|
+
// libraryPath will be build/index.js to go to the common specs we need to go one level up
|
|
16
|
+
const commonSpecPath = _path.default.resolve(libraryPath, '../', 'common');
|
|
17
|
+
const destDirectory = _path.default.resolve(process.cwd(), _configConstants.default.TEST_SLICE_FOLDER, stage, 'modules', '.testingLib-common');
|
|
18
|
+
(0, _fileUtils.deleteFolder)(destDirectory);
|
|
19
|
+
(0, _fileUtils.copyDirectory)(commonSpecPath, destDirectory);
|
|
20
|
+
}
|
package/build/utils/fileUtils.js
CHANGED
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.checkIfFileExists = checkIfFileExists;
|
|
8
|
+
exports.checkIfFolderExistsWithPattern = checkIfFolderExistsWithPattern;
|
|
9
|
+
exports.copyDirectory = copyDirectory;
|
|
8
10
|
exports.deleteFile = deleteFile;
|
|
9
11
|
exports.deleteFolder = deleteFolder;
|
|
10
12
|
exports.readFileContents = readFileContents;
|
|
@@ -12,11 +14,14 @@ exports.writeFileContents = writeFileContents;
|
|
|
12
14
|
var _fs = _interopRequireDefault(require("fs"));
|
|
13
15
|
var _path = _interopRequireDefault(require("path"));
|
|
14
16
|
var _logger = require("./logger");
|
|
17
|
+
var glob = _interopRequireWildcard(require("glob"));
|
|
18
|
+
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
19
|
function checkIfFileExists(file) {
|
|
16
20
|
try {
|
|
17
21
|
_fs.default.accessSync(file, _fs.default.constants.F_OK);
|
|
18
22
|
return true;
|
|
19
23
|
} catch (err) {
|
|
24
|
+
_logger.Logger.error(err);
|
|
20
25
|
return false;
|
|
21
26
|
}
|
|
22
27
|
}
|
|
@@ -25,6 +30,7 @@ function readFileContents(filePath) {
|
|
|
25
30
|
let fileContents = _fs.default.readFileSync(filePath, 'utf-8');
|
|
26
31
|
return fileContents;
|
|
27
32
|
} catch (err) {
|
|
33
|
+
_logger.Logger.error(err);
|
|
28
34
|
return null;
|
|
29
35
|
}
|
|
30
36
|
}
|
|
@@ -40,6 +46,7 @@ function writeFileContents(filePath, content, writeOptions = {}) {
|
|
|
40
46
|
try {
|
|
41
47
|
_fs.default.writeFileSync(`${filePath}`, content, writeOptions);
|
|
42
48
|
} catch (err) {
|
|
49
|
+
_logger.Logger.error(err);
|
|
43
50
|
throw new Error(err);
|
|
44
51
|
}
|
|
45
52
|
}
|
|
@@ -48,6 +55,7 @@ function deleteFile(filePath) {
|
|
|
48
55
|
try {
|
|
49
56
|
_fs.default.unlinkSync(filePath);
|
|
50
57
|
} catch (err) {
|
|
58
|
+
_logger.Logger.error(err);
|
|
51
59
|
throw new Error(`Error while deleting the test data file: ${filePath}`);
|
|
52
60
|
}
|
|
53
61
|
} else {
|
|
@@ -57,11 +65,45 @@ function deleteFile(filePath) {
|
|
|
57
65
|
function deleteFolder(folderPath) {
|
|
58
66
|
if (_fs.default.existsSync(folderPath)) {
|
|
59
67
|
try {
|
|
60
|
-
_fs.default.
|
|
68
|
+
_fs.default.rmSync(folderPath, {
|
|
61
69
|
recursive: true
|
|
62
70
|
});
|
|
63
71
|
} catch (err) {
|
|
72
|
+
_logger.Logger.error(err);
|
|
64
73
|
throw new Error(`Error while deleting the test data file: ${folderPath}`);
|
|
65
74
|
}
|
|
66
75
|
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// This function uses glob to check if a folder exists with a specific pattern
|
|
79
|
+
// Glob is define patterns for matching file and directory names based on wildcards
|
|
80
|
+
function checkIfFolderExistsWithPattern(folderPath) {
|
|
81
|
+
try {
|
|
82
|
+
if (glob.sync(folderPath).length > 0) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
return false;
|
|
86
|
+
} catch (err) {
|
|
87
|
+
_logger.Logger.error(err);
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function copyDirectory(src, dest) {
|
|
92
|
+
if (!_fs.default.existsSync(dest)) {
|
|
93
|
+
_fs.default.mkdirSync(dest, {
|
|
94
|
+
recursive: true
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
const entries = _fs.default.readdirSync(src, {
|
|
98
|
+
withFileTypes: true
|
|
99
|
+
});
|
|
100
|
+
for (const entry of entries) {
|
|
101
|
+
const srcPath = _path.default.join(src, entry.name);
|
|
102
|
+
const destPath = _path.default.join(dest, entry.name);
|
|
103
|
+
if (entry.isDirectory()) {
|
|
104
|
+
copyDirectory(srcPath, destPath);
|
|
105
|
+
} else {
|
|
106
|
+
_fs.default.copyFileSync(srcPath, destPath);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
67
109
|
}
|
package/build/utils/logger.js
CHANGED
|
@@ -4,35 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Logger = void 0;
|
|
7
|
-
// const SUCCESS_TYPE = 'success';
|
|
8
|
-
// const FAILURE_TYPE = 'failure';
|
|
9
|
-
// const INFO_TYPE = 'info';
|
|
10
|
-
|
|
11
|
-
// function logger() {
|
|
12
|
-
// this.colors = {
|
|
13
|
-
// 'success': ['\x1b[36m', '\x1b[0m'],
|
|
14
|
-
// 'failure': ['\x1b[31m', '\x1b[0m'],
|
|
15
|
-
// 'info': ['\x1b[33m', '\x1b[0m']
|
|
16
|
-
// }
|
|
17
|
-
// this.consoleLogger = console;
|
|
18
|
-
// return {
|
|
19
|
-
// SUCCESS_TYPE,
|
|
20
|
-
// FAILURE_TYPE,
|
|
21
|
-
// INFO_TYPE,
|
|
22
|
-
// error: () => { },
|
|
23
|
-
// info: () => { },
|
|
24
|
-
// log: (type, message) => {
|
|
25
|
-
// const color = this.colors[type];
|
|
26
|
-
// console.log(type, color)
|
|
27
|
-
// this.consoleLogger.log(`${color[0]}${message}${color[1]}`)
|
|
28
|
-
// }
|
|
29
|
-
// }
|
|
30
|
-
// }
|
|
31
|
-
|
|
32
|
-
// module.exports = {
|
|
33
|
-
// Logger: logger()
|
|
34
|
-
// }
|
|
35
|
-
|
|
36
7
|
class LoggerImpl {
|
|
37
8
|
constructor() {
|
|
38
9
|
this.SUCCESS_TYPE = 'success';
|
|
@@ -51,7 +22,7 @@ class LoggerImpl {
|
|
|
51
22
|
info() {}
|
|
52
23
|
log(type, message) {
|
|
53
24
|
const color = this.colors[type];
|
|
54
|
-
this.consoleLogger.log(`${color[0]}${message}${color[1]}`);
|
|
25
|
+
this.consoleLogger.log(`${color[0]}${message}${color[1]}\n`);
|
|
55
26
|
}
|
|
56
27
|
}
|
|
57
28
|
const Logger = exports.Logger = new LoggerImpl();
|