@zohodesk/testinglibrary 0.4.88-n18-experimental → 0.4.90-n18-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/.gitlab-ci.yml +0 -1
- package/README.md +11 -3
- package/build/common/multi-actor/steps/{additionalContext.spec.js → multiActorHandling.spec.js} +8 -3
- package/build/core/playwright/builtInFixtures/{actorCtx.js → actorContext.js} +23 -9
- package/build/core/playwright/builtInFixtures/executionContext.js +4 -3
- package/build/core/playwright/builtInFixtures/index.js +2 -2
- package/build/core/playwright/builtInFixtures/page.js +1 -1
- package/build/core/playwright/helpers/additionalProfiles.js +7 -1
- package/build/core/playwright/helpers/auth/loginDefaultStepsHelper.js +2 -1
- package/build/core/playwright/helpers/customFixturesHelper.js +34 -19
- package/build/core/playwright/setup/qc-custom-reporter.js +1 -1
- package/build/test/core/playwright/buildInFixtures/__tests__/executionContext.test.js +4 -6
- package/build/test/core/playwright/helpers/__tests__/additionalProfiles.test.js +38 -0
- package/build/test/core/playwright/helpers/__tests__/customFixturesHelper.test.js +51 -0
- package/build/utils/logger.js +0 -29
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -2
- package/unit_reports/unit-report.html +1 -1
package/.gitlab-ci.yml
CHANGED
package/README.md
CHANGED
|
@@ -19,17 +19,25 @@
|
|
|
19
19
|
|
|
20
20
|
## Version History
|
|
21
21
|
|
|
22
|
-
### v3.2.
|
|
22
|
+
### v3.2.7 - 10-09-2025
|
|
23
|
+
|
|
24
|
+
### Bug fix
|
|
25
|
+
- Fixed a bug where the default profile page was not being handled properly in `this`.
|
|
26
|
+
|
|
27
|
+
### v3.2.6 - 05-09-2025
|
|
23
28
|
|
|
24
29
|
#### Feature
|
|
25
30
|
|
|
26
|
-
- Multi-actor execution support – now possible to switch between multiple profile agents within scenarios using the
|
|
31
|
+
- Multi-actor execution support – now possible to switch between multiple profile agents within scenarios using the predefined step: - `access the {string} profile page`
|
|
32
|
+
|
|
33
|
+
### Bug fix
|
|
34
|
+
- Fixed the issue where localapp and hcapp UAT were not running properly.
|
|
27
35
|
|
|
28
36
|
### v3.2.5 - 28-08-2025
|
|
29
37
|
|
|
30
38
|
#### Enhancement
|
|
31
39
|
|
|
32
|
-
- Removed the searchFake dependency from the project level and adopted it inside the framework, reducing project-side maintenance.
|
|
40
|
+
- Removed the searchFake dependency from the project level and adopted it inside the framework, reducing project-side maintenance. use this predefined step: - `Given (a search entity)`
|
|
33
41
|
|
|
34
42
|
### v3.2.4 - 29-07-2025
|
|
35
43
|
|
package/build/common/multi-actor/steps/{additionalContext.spec.js → multiActorHandling.spec.js}
RENAMED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import { createBdd } from '@zohodesk/testinglibrary';
|
|
2
2
|
const { BeforeScenario, Given } = createBdd();
|
|
3
3
|
|
|
4
|
-
BeforeScenario(async function({
|
|
4
|
+
BeforeScenario(async function({ page, context, browser, cacheLayer, executionContext, actorContext }) {
|
|
5
5
|
// This will run before each scenario and set all the fixtures into this context
|
|
6
|
+
this.page = page;
|
|
7
|
+
this.context = context;
|
|
8
|
+
this.browser = browser;
|
|
9
|
+
this.cacheLayer = cacheLayer;
|
|
10
|
+
this.executionContext = executionContext;
|
|
6
11
|
this.setActor = async (role) => {
|
|
7
|
-
const userPage =
|
|
12
|
+
const userPage = actorContext.actorsObj[role];
|
|
8
13
|
if (userPage) {
|
|
9
14
|
this.page = userPage.page;
|
|
10
15
|
this.context = userPage.context;
|
|
11
16
|
this.browser = userPage.browser;
|
|
12
|
-
this.executionContext = userPage.
|
|
17
|
+
this.executionContext = userPage.executionContext;
|
|
13
18
|
} else {
|
|
14
19
|
throw new Error(`Actor "${role}" not found in user pages.`);
|
|
15
20
|
}
|
|
@@ -5,16 +5,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _logger = require("../../../utils/logger");
|
|
8
|
-
var
|
|
8
|
+
var _additionalProfiles = require("../helpers/additionalProfiles");
|
|
9
9
|
var _loginDefaultStepsHelper = require("../helpers/auth/loginDefaultStepsHelper");
|
|
10
|
-
class
|
|
10
|
+
class ActorContext {
|
|
11
11
|
constructor() {
|
|
12
12
|
this.actorsObj = {};
|
|
13
13
|
}
|
|
14
|
-
async
|
|
14
|
+
async setup(browser, $tags, testInfo, context, page, executionContext) {
|
|
15
15
|
try {
|
|
16
|
-
const
|
|
17
|
-
|
|
16
|
+
const {
|
|
17
|
+
profile
|
|
18
|
+
} = executionContext.actorInfo;
|
|
19
|
+
this.actorsObj[profile] = {
|
|
20
|
+
role: profile,
|
|
21
|
+
browser,
|
|
22
|
+
context,
|
|
23
|
+
page,
|
|
24
|
+
executionContext
|
|
25
|
+
};
|
|
26
|
+
const additionalActors = (0, _additionalProfiles.additionProfiles)($tags);
|
|
18
27
|
await Promise.all(Object.entries(additionalActors).map(async ([role, actorInfo]) => {
|
|
19
28
|
let context = await browser.newContext();
|
|
20
29
|
let page = await context.newPage();
|
|
@@ -30,7 +39,9 @@ class additionalActorContext {
|
|
|
30
39
|
browser,
|
|
31
40
|
context,
|
|
32
41
|
page,
|
|
33
|
-
|
|
42
|
+
executionContext: {
|
|
43
|
+
actorInfo
|
|
44
|
+
}
|
|
34
45
|
};
|
|
35
46
|
}));
|
|
36
47
|
} catch (error) {
|
|
@@ -49,12 +60,15 @@ class additionalActorContext {
|
|
|
49
60
|
}
|
|
50
61
|
}
|
|
51
62
|
var _default = exports.default = {
|
|
52
|
-
|
|
63
|
+
actorContext: async ({
|
|
64
|
+
page,
|
|
65
|
+
context,
|
|
66
|
+
executionContext,
|
|
53
67
|
$tags,
|
|
54
68
|
browser
|
|
55
69
|
}, use, testInfo) => {
|
|
56
|
-
const ctxObject = new
|
|
57
|
-
await ctxObject.
|
|
70
|
+
const ctxObject = new ActorContext();
|
|
71
|
+
await ctxObject.setup(browser, $tags, testInfo, context, page, executionContext);
|
|
58
72
|
await use(ctxObject);
|
|
59
73
|
await ctxObject.cleanup();
|
|
60
74
|
}
|
|
@@ -9,8 +9,9 @@ var _default = exports.default = {
|
|
|
9
9
|
executionContext: async ({
|
|
10
10
|
$tags
|
|
11
11
|
}, use) => {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const actorInfo = (0, _customFixturesHelper.getCustomAccountDetails)($tags);
|
|
13
|
+
await use({
|
|
14
|
+
actorInfo
|
|
15
|
+
});
|
|
15
16
|
}
|
|
16
17
|
};
|
|
@@ -12,14 +12,14 @@ var _addTags = _interopRequireDefault(require("./addTags"));
|
|
|
12
12
|
var _i18N = _interopRequireDefault(require("./i18N"));
|
|
13
13
|
var _unauthenticatedPage = _interopRequireDefault(require("./unauthenticatedPage"));
|
|
14
14
|
var _executionContext = _interopRequireDefault(require("./executionContext"));
|
|
15
|
-
var
|
|
15
|
+
var _actorContext = _interopRequireDefault(require("./actorContext"));
|
|
16
16
|
function extractTagsFromTitle(text) {
|
|
17
17
|
return text.match(/@\w+/g) || [];
|
|
18
18
|
}
|
|
19
19
|
function getBuiltInFixtures(bddMode) {
|
|
20
20
|
let builtInFixtures = {
|
|
21
21
|
..._page.default,
|
|
22
|
-
...
|
|
22
|
+
..._actorContext.default,
|
|
23
23
|
..._context.default,
|
|
24
24
|
..._cacheLayer.default,
|
|
25
25
|
..._i18N.default,
|
|
@@ -5,7 +5,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.additionProfiles = additionProfiles;
|
|
7
7
|
var _getUsers = require("./auth/getUsers");
|
|
8
|
-
|
|
8
|
+
var _customFixturesHelper = require("./customFixturesHelper");
|
|
9
|
+
function additionProfiles(tags) {
|
|
10
|
+
const {
|
|
11
|
+
editionInfo,
|
|
12
|
+
betaFeature,
|
|
13
|
+
portalInfo
|
|
14
|
+
} = (0, _customFixturesHelper.extractTagInfo)(tags);
|
|
9
15
|
const additionalProfileTags = tags.filter(tag => tag.startsWith('@additional_profile_'));
|
|
10
16
|
let additionalProfileActors = {};
|
|
11
17
|
if (additionalProfileTags.length > 0 && editionInfo) {
|
|
@@ -9,6 +9,7 @@ exports.performDefaultPageSteps = performDefaultPageSteps;
|
|
|
9
9
|
exports.verifyPageIsLoaded = verifyPageIsLoaded;
|
|
10
10
|
var _auth = require("../auth");
|
|
11
11
|
var _readConfigFile = require("../../readConfigFile");
|
|
12
|
+
var _logger = require("../../../../utils/logger");
|
|
12
13
|
let {
|
|
13
14
|
testSetup,
|
|
14
15
|
isAuthMode
|
|
@@ -48,6 +49,6 @@ async function executeDefaultLoginSteps(context, testInfo, testDetails, testPort
|
|
|
48
49
|
process.env.actorInfo = JSON.stringify(testPortalDetails);
|
|
49
50
|
}
|
|
50
51
|
} catch (error) {
|
|
51
|
-
Logger.log(Logger.FAILURE_TYPE, 'Error while executing the default login steps:', error);
|
|
52
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, 'Error while executing the default login steps:', error);
|
|
52
53
|
}
|
|
53
54
|
}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.extractTagInfo = extractTagInfo;
|
|
6
7
|
exports.getCustomAccountDetails = getCustomAccountDetails;
|
|
7
8
|
var _auth = require("../helpers/auth");
|
|
8
|
-
var _additionalProfiles = require("../helpers/additionalProfiles");
|
|
9
9
|
var _logger = require("../../../utils/logger");
|
|
10
10
|
/* eslint-disable global-require */
|
|
11
11
|
|
|
@@ -17,27 +17,42 @@ function getTagInputFromSelectedTags(tags, inputString) {
|
|
|
17
17
|
}
|
|
18
18
|
return tagInput;
|
|
19
19
|
}
|
|
20
|
+
function extractTagInfo(tags) {
|
|
21
|
+
const tagsTobeFiltered = ['@profile', '@edition', '@beta', '@portal'];
|
|
22
|
+
const filteredTags = tags.filter(tag => tagsTobeFiltered.some(prefix => tag.startsWith(prefix)));
|
|
23
|
+
if (!filteredTags.length) {
|
|
24
|
+
return {
|
|
25
|
+
portalInfo: null,
|
|
26
|
+
betaFeature: null,
|
|
27
|
+
profileInfo: null,
|
|
28
|
+
editionInfo: null
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const portalInfo = getTagInputFromSelectedTags(filteredTags, '@portal');
|
|
32
|
+
const betaFeature = getTagInputFromSelectedTags(filteredTags, '@beta');
|
|
33
|
+
const profileInfo = getTagInputFromSelectedTags(filteredTags, '@profile');
|
|
34
|
+
const editionInfo = getTagInputFromSelectedTags(filteredTags, '@edition');
|
|
35
|
+
return {
|
|
36
|
+
portalInfo,
|
|
37
|
+
betaFeature,
|
|
38
|
+
profileInfo,
|
|
39
|
+
editionInfo
|
|
40
|
+
};
|
|
41
|
+
}
|
|
20
42
|
function getCustomAccountDetails(tags) {
|
|
21
43
|
try {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
return {
|
|
32
|
-
main: mainActor,
|
|
33
|
-
additional: additionalActors
|
|
34
|
-
};
|
|
44
|
+
const {
|
|
45
|
+
portalInfo,
|
|
46
|
+
betaFeature,
|
|
47
|
+
profileInfo,
|
|
48
|
+
editionInfo
|
|
49
|
+
} = extractTagInfo(tags);
|
|
50
|
+
if (portalInfo || betaFeature || profileInfo || editionInfo) {
|
|
51
|
+
const user = (0, _auth.getUserForSelectedEditionAndProfile)(editionInfo, profileInfo, betaFeature, portalInfo);
|
|
52
|
+
return user;
|
|
35
53
|
}
|
|
36
|
-
return
|
|
37
|
-
main: (0, _auth.getDefaultActor)(),
|
|
38
|
-
additional: {}
|
|
39
|
-
};
|
|
54
|
+
return (0, _auth.getDefaultActor)();
|
|
40
55
|
} catch (err) {
|
|
41
|
-
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, 'Error while getting
|
|
56
|
+
_logger.Logger.log(_logger.Logger.FAILURE_TYPE, 'Error while getting accounts details:', err);
|
|
42
57
|
}
|
|
43
58
|
}
|
|
@@ -102,6 +102,7 @@ const createSpecEntry = (rootDir, test, testResultsById) => ({
|
|
|
102
102
|
...(test.location && {
|
|
103
103
|
snippet: formSnippet(test.location)
|
|
104
104
|
}),
|
|
105
|
+
tags: test.tags,
|
|
105
106
|
tests: [extractTestDetails(test, testResultsById)]
|
|
106
107
|
});
|
|
107
108
|
const extractTestDetails = (test, testResultsById) => {
|
|
@@ -112,7 +113,6 @@ const extractTestDetails = (test, testResultsById) => {
|
|
|
112
113
|
expectedStatus: test.expectedStatus,
|
|
113
114
|
timeout: test.timeout,
|
|
114
115
|
retries: test.retries,
|
|
115
|
-
tags: test.tags,
|
|
116
116
|
results: testResultsById.get(key) ?? [],
|
|
117
117
|
status: test.outcome()
|
|
118
118
|
};
|
|
@@ -14,16 +14,14 @@ describe('executionContext', () => {
|
|
|
14
14
|
profile: 'admin',
|
|
15
15
|
email: 'xxx.x+uat@zohotest.com'
|
|
16
16
|
};
|
|
17
|
-
|
|
18
|
-
main: mockMainActorInfo,
|
|
19
|
-
additional: {}
|
|
20
|
-
};
|
|
21
|
-
_customFixturesHelper.getCustomAccountDetails.mockReturnValue(mockActorInfo);
|
|
17
|
+
_customFixturesHelper.getCustomAccountDetails.mockReturnValue(mockMainActorInfo);
|
|
22
18
|
const use = jest.fn();
|
|
23
19
|
await _executionContext.default.executionContext({
|
|
24
20
|
$tags: mockTags
|
|
25
21
|
}, use);
|
|
26
22
|
expect(_customFixturesHelper.getCustomAccountDetails).toHaveBeenCalledWith(mockTags);
|
|
27
|
-
expect(use).toHaveBeenCalledWith(
|
|
23
|
+
expect(use).toHaveBeenCalledWith({
|
|
24
|
+
actorInfo: mockMainActorInfo
|
|
25
|
+
});
|
|
28
26
|
});
|
|
29
27
|
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _additionalProfiles = require("../../../../../core/playwright/helpers/additionalProfiles");
|
|
4
|
+
jest.mock('../../../../../core/playwright/helpers/auth/getUsers', () => ({
|
|
5
|
+
getUserForSelectedEditionAndProfile: jest.fn((edition, profile, betaFeature, portalInfo) => {
|
|
6
|
+
return {
|
|
7
|
+
email: 'manager.m@zohotest.com',
|
|
8
|
+
id: '1',
|
|
9
|
+
edition: edition || 'enterprise',
|
|
10
|
+
orgName: 'orgName',
|
|
11
|
+
profile: profile || 'admin',
|
|
12
|
+
betaFeature: betaFeature || null,
|
|
13
|
+
portalInfo: portalInfo || null
|
|
14
|
+
};
|
|
15
|
+
})
|
|
16
|
+
}));
|
|
17
|
+
const defaultTags = ['@profile_admin', '@edition_enterprise'];
|
|
18
|
+
const editionTags = ['@profile_admin', '@edition_enterprise', '@additional_profile_manager', '@additional_profile_agent'];
|
|
19
|
+
describe('additionalProfiles', () => {
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
jest.clearAllMocks();
|
|
22
|
+
});
|
|
23
|
+
test('should return empty object when no additional profile tags are present', () => {
|
|
24
|
+
const result = (0, _additionalProfiles.additionProfiles)(defaultTags);
|
|
25
|
+
expect(result).toEqual({});
|
|
26
|
+
});
|
|
27
|
+
test('should return empty object when additional profile tags are present but no editionInfo', () => {
|
|
28
|
+
const tags = ['@smoke', '@additional_profile_admin'];
|
|
29
|
+
const result = (0, _additionalProfiles.additionProfiles)(tags);
|
|
30
|
+
expect(result).toEqual({});
|
|
31
|
+
});
|
|
32
|
+
test('should return additional profile actors when additional profile tags and editionInfo are present', () => {
|
|
33
|
+
const mockBetaFeature = null;
|
|
34
|
+
const mockPortalInfo = null;
|
|
35
|
+
const result = (0, _additionalProfiles.additionProfiles)(editionTags, mockBetaFeature, mockPortalInfo);
|
|
36
|
+
expect(Object.keys(result)).toEqual(['manager', 'agent']);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _customFixturesHelper = require("../../../../../core/playwright/helpers/customFixturesHelper");
|
|
4
|
+
var _logger = require("../../../../../utils/logger");
|
|
5
|
+
var _getUsers = require("../../../../../core/playwright/helpers/auth/getUsers");
|
|
6
|
+
jest.mock('../../../../../core/playwright/helpers/auth/getUsers', () => ({
|
|
7
|
+
getUserForSelectedEditionAndProfile: jest.fn((edition, profile, betaFeature, portalInfo) => ({
|
|
8
|
+
email: 'manager.m@zohotest.com',
|
|
9
|
+
id: '1',
|
|
10
|
+
edition: edition || 'enterprise',
|
|
11
|
+
orgName: 'orgName',
|
|
12
|
+
profile: profile || 'admin',
|
|
13
|
+
betaFeature: betaFeature || null,
|
|
14
|
+
portalInfo: portalInfo || null
|
|
15
|
+
})),
|
|
16
|
+
getDefaultActor: jest.fn(() => ({
|
|
17
|
+
edition: 'enterprise',
|
|
18
|
+
profile: 'admin'
|
|
19
|
+
}))
|
|
20
|
+
}));
|
|
21
|
+
jest.mock('../../../../../utils/logger', () => ({
|
|
22
|
+
Logger: {
|
|
23
|
+
log: jest.fn(),
|
|
24
|
+
FAILURE_TYPE: 'FAILURE'
|
|
25
|
+
}
|
|
26
|
+
}));
|
|
27
|
+
const mockTags = ['@profile_admin', '@edition_enterprise', '@beta_feature', '@portal_clientuat'];
|
|
28
|
+
describe('getCustomAccountDetails', () => {
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
jest.clearAllMocks();
|
|
31
|
+
});
|
|
32
|
+
test('returns selected user when any tag info is present', () => {
|
|
33
|
+
const result = (0, _customFixturesHelper.getCustomAccountDetails)(mockTags);
|
|
34
|
+
expect(_getUsers.getUserForSelectedEditionAndProfile).toHaveBeenCalledWith('enterprise', 'admin', 'feature', 'clientuat');
|
|
35
|
+
expect(result).toHaveProperty('email', 'manager.m@zohotest.com');
|
|
36
|
+
});
|
|
37
|
+
test('logs and returns undefined if getCustomAccountDetails function throws', () => {
|
|
38
|
+
const error = new Error('failed to get user');
|
|
39
|
+
_getUsers.getUserForSelectedEditionAndProfile.mockImplementation(() => {
|
|
40
|
+
throw error;
|
|
41
|
+
});
|
|
42
|
+
const result = (0, _customFixturesHelper.getCustomAccountDetails)(mockTags);
|
|
43
|
+
expect(_logger.Logger.log).toHaveBeenCalledWith(_logger.Logger.FAILURE_TYPE, 'Error while getting accounts details:', error);
|
|
44
|
+
expect(result).toBeUndefined();
|
|
45
|
+
});
|
|
46
|
+
test('returns default actor when no tag info is not provided', () => {
|
|
47
|
+
const result = (0, _customFixturesHelper.getCustomAccountDetails)([]);
|
|
48
|
+
expect(_getUsers.getDefaultActor).toHaveBeenCalledTimes(1);
|
|
49
|
+
expect(result).toEqual((0, _getUsers.getDefaultActor)());
|
|
50
|
+
});
|
|
51
|
+
});
|
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';
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zohodesk/testinglibrary",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.90-n18-experimental",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@zohodesk/testinglibrary",
|
|
9
|
-
"version": "0.4.
|
|
9
|
+
"version": "0.4.90-n18-experimental",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "ISC",
|
|
12
12
|
"dependencies": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zohodesk/testinglibrary",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.90-n18-experimental",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
"test": "jest",
|
|
9
9
|
"clean": "rm -rf build && mkdir build",
|
|
10
10
|
"build-babel": "babel -d ./build ./src --copy-files",
|
|
11
|
-
"copy-common": "cp -r src/common build/",
|
|
12
11
|
"build": "npm run clean && npm run build-babel",
|
|
13
12
|
"prepare": "npm run build",
|
|
14
13
|
"lint": "eslint src/* --fix"
|
|
@@ -257,4 +257,4 @@ header {
|
|
|
257
257
|
font-size: 1rem;
|
|
258
258
|
padding: 0 0.5rem;
|
|
259
259
|
}
|
|
260
|
-
</style></head><body><div class="jesthtml-content"><header><h1 id="title">Unit Report</h1></header><div id="metadata-container"><div id="timestamp">Started: 2025-09-03 08:57:31</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 (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></div><div id="suite-1" class="suite-container"><input id="collapsible-0" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-0"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/buildInFixtures/__tests__/executionContext.test.js</div><div class="suite-time">0.851s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">executionContext</div><div class="test-title">should pass actorInfo with details from getCustomAccountDetails to use</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></div></div></body></html>
|
|
260
|
+
</style></head><body><div class="jesthtml-content"><header><h1 id="title">Unit Report</h1></header><div id="metadata-container"><div id="timestamp">Started: 2025-09-15 18:30:25</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (12)</div><div class="summary-passed ">12 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 (41)</div><div class="summary-passed ">41 passed</div><div class="summary-failed summary-empty">0 failed</div><div class="summary-pending summary-empty">0 pending</div></div></div></div><div id="suite-1" class="suite-container"><input id="collapsible-0" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-0"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/__tests__/tagProcessor.test.js</div><div class="suite-time">1.141s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should return tagArgs if no edition is provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle a single edition with <= operator</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle a single edition with >= operator</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle a single edition with < operator</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle a single edition with > operator</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle a single edition with no operator</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should log a message if edition is not found</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should handle multiple editions</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TagProcessor</div><div class="test-title">should build tags correctly when tags are empty</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div></div></div><div id="suite-2" class="suite-container"><input id="collapsible-1" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-1"><div 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">1.208s</div></div></label><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.013s</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">0.001s</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">0.001s</div></div></div></div></div><div id="suite-3" class="suite-container"><input id="collapsible-2" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-2"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/buildInFixtures/__tests__/executionContext.test.js</div><div class="suite-time">1.27s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">executionContext</div><div class="test-title">should pass actorInfo with details from getCustomAccountDetails to use</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div></div></div><div id="suite-4" class="suite-container"><input id="collapsible-3" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-3"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/helpers/__tests__/getUsers_ListOfActors.test.js</div><div class="suite-time">0.299s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">getListOfActors</div><div class="test-title">throws an error when config file cannot be loaded</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getListOfActors</div><div class="test-title">throws an error when beta feature config does not exist</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getListOfActors</div><div class="test-title">loads main configuration when betaFeature is not provided and main config file exists</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getListOfActors</div><div class="test-title">falls back to default configuration if main config file does not exist</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getListOfActors</div><div class="test-title">loads beta feature configuration when betaFeature is provided</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div></div></div><div id="suite-5" class="suite-container"><input id="collapsible-4" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-4"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/helpers/__tests__/additionalProfiles.test.js</div><div class="suite-time">0.171s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">additionalProfiles</div><div class="test-title">should return empty object when no additional profile tags are present</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">additionalProfiles</div><div class="test-title">should return empty object when additional profile tags are present but no editionInfo</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">additionalProfiles</div><div class="test-title">should return additional profile actors when additional profile tags and editionInfo are present</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></div><div id="suite-6" class="suite-container"><input id="collapsible-5" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-5"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/helpers/__tests__/configFileNameProvider.test.js</div><div class="suite-time">0.246s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">getUATFileName</div><div class="test-title">return the pipeline matched config files for pipeline matched files exists</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getUATFileName</div><div class="test-title">return the default config files for pipeline matched files not exists</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></div><div id="suite-7" class="suite-container"><input id="collapsible-6" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-6"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/examples/src/__tests__/App.test.js</div><div class="suite-time">0.168s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">example functions</div><div class="test-title">add function adds two numbers correctly</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">example functions</div><div class="test-title">greet function greets a person with their name</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div></div></div><div id="suite-8" class="suite-container"><input id="collapsible-7" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-7"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/configuration/__tests__/Configuration.test.js</div><div class="suite-time">0.174s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Configuration Class</div><div class="test-title">should add new key-value pair to the configuration</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Configuration Class</div><div class="test-title">should combine configurations correctly using addAll</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Configuration Class</div><div class="test-title">should return correct value for a given key</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></div><div id="suite-9" class="suite-container"><input id="collapsible-8" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-8"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/runner/__tests__/RunnerHelper.test.js</div><div class="suite-time">1.871s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">RunnerHelper > createRunner</div><div class="test-title">should throw error on invalid runner type</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RunnerHelper > createRunner</div><div class="test-title">should create a valid runner class</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div></div></div><div id="suite-10" class="suite-container"><input id="collapsible-9" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-9"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/runner/__tests__/SpawnRunner.test.js</div><div class="suite-time">1.912s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SpawnRunner > run</div><div class="test-title">should call runPreprocessing when bddMode is true</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></div><div id="suite-11" class="suite-container"><input id="collapsible-10" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-10"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/__tests__/validateFeature.test.js</div><div class="suite-time">1.941s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateFeatureFiles</div><div class="test-title">runPreprocessing with correct arguments and log success</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateFeatureFiles</div><div class="test-title">runPreprocessing with playwright conf</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateFeatureFiles</div><div class="test-title">error when runPreprocessing fails</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div></div></div><div id="suite-12" class="suite-container"><input id="collapsible-11" type="checkbox" class="toggle" checked="checked"/><label for="collapsible-11"><div class="suite-info"><div class="suite-path">/Users/muthu-19817/git/testing-framework/src/test/core/playwright/helpers/__tests__/fileMutex.test.js</div><div class="suite-time">2.22s</div></div></label><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > acquire</div><div class="test-title">should create the lock file if it does not exist</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > acquire</div><div class="test-title">should wait for lock file deletion if it exists</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">FileMutex > acquire</div><div class="test-title">should reject if watch timeout exceeds</div><div class="test-status">passed</div><div class="test-duration">1.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > release</div><div class="test-title">should delete the lock file if it exists</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">FileMutex > release</div><div class="test-title">should release lock by deleting lock file</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > release</div><div class="test-title">should not attempt to delete the lock file if it does not exist</div><div class="test-status">passed</div><div class="test-duration">0s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FileMutex > release</div><div class="test-title">should log an error if deleting the lock file fails</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div></div></div></div></body></html>
|