@zohodesk/testinglibrary 0.4.6-experimental → 0.4.8-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.
Files changed (61) hide show
  1. package/.gitlab-ci.yml +35 -20
  2. package/README.md +13 -2
  3. package/build/core/playwright/builtInFixtures/page.js +7 -0
  4. package/build/core/playwright/fixtures.js +1 -1
  5. package/build/core/playwright/helpers/auth/getUsers.js +12 -25
  6. package/build/core/playwright/runner/Runner.js +22 -0
  7. package/build/core/playwright/runner/RunnerHelper.js +43 -0
  8. package/build/core/playwright/runner/RunnerTypes.js +17 -0
  9. package/build/core/playwright/runner/SpawnRunner.js +110 -0
  10. package/build/core/playwright/tagProcessor.js +79 -0
  11. package/build/core/playwright/test-runner.js +11 -36
  12. package/build/core/playwright/validateFeature.js +3 -33
  13. package/build/setup-folder-structure/samples/actors-index.js +0 -1
  14. package/build/setup-folder-structure/samples/settings.json +1 -1
  15. package/build/test/Test.js +11 -0
  16. package/build/test/core/playwright/__tests__/tagProcessor.test.js +94 -0
  17. package/build/test/core/playwright/__tests__/validateFeature.test.js +10 -5
  18. package/build/test/core/playwright/helpers/__tests__/getUsers_ListOfActors.test.js +80 -0
  19. package/build/test/core/playwright/runner/__tests__/RunnerHelper.test.js +16 -0
  20. package/build/test/core/playwright/runner/__tests__/SpawnRunner.test.js +27 -0
  21. package/nobdd/src/App.js +7 -0
  22. package/nobdd/uat/conf/default/actors/index.js +1 -4
  23. package/nobdd/uat/conf/default/settings.json +1 -1
  24. package/nobdd/uat/conf/nobdd/uat.config.js +3 -2
  25. package/nobdd/uat/env-config.json +3 -3
  26. package/nobdd/uat/fixtures/setup.teardown.js +2 -1
  27. package/nobdd/uat/modules/nobdd/steps/VerifyNoBDD.feature.spec.js +3 -3
  28. package/nobdd/uat/playwright/.auth/anitha.m+clientat@zohotest.com-cookies.json +276 -0
  29. package/nobdd/uat/playwright/.auth/anitha.m+clientattest@zohotest.com-cookies.json +3 -0
  30. package/nobdd/uat/playwright/.auth/anitha.m+uat@zohotest.com-cookies.json +3 -0
  31. package/nobdd/uat/playwright/.auth/skumaresan@zohotest.com-cookies.json +503 -0
  32. package/nobdd/uat/playwright/.auth/solairaj.m+26jun2023@zohotest.com-cookies.json +173 -0
  33. package/nobdd/uat/playwright/.auth/sridhar.parthasarathy@zohotest.com-cookies.json +520 -0
  34. package/nobdd/uat/playwright-report/data/15676399fddfec429bc2935c407212f42cfa65b2.webm +0 -0
  35. package/nobdd/uat/playwright-report/data/7be7af3de16a483f32cdcb86b3a290f584e21f76.zip +0 -0
  36. package/nobdd/uat/playwright-report/index.html +68 -0
  37. package/nobdd/uat/playwright-report/test-summary.json +17 -0
  38. package/nobdd/uat/playwright-report/trace/assets/codeMirrorModule-BK3t1EEu.js +24 -0
  39. package/nobdd/uat/playwright-report/trace/assets/wsPort-964mA9MZ.js +69 -0
  40. package/nobdd/uat/playwright-report/trace/codeMirrorModule.Hs9-1ZG4.css +1 -0
  41. package/nobdd/uat/playwright-report/trace/codicon.zGuYmc9o.ttf +0 -0
  42. package/nobdd/uat/playwright-report/trace/index.-g_5lMbJ.css +1 -0
  43. package/nobdd/uat/playwright-report/trace/index.cbtHmFgM.js +2 -0
  44. package/nobdd/uat/playwright-report/trace/index.html +26 -0
  45. package/nobdd/uat/playwright-report/trace/playwright-logo.svg +9 -0
  46. package/nobdd/uat/playwright-report/trace/snapshot.html +21 -0
  47. package/nobdd/uat/playwright-report/trace/sw.bundle.js +4 -0
  48. package/nobdd/uat/playwright-report/trace/uiMode.fcU_T5Nf.js +10 -0
  49. package/nobdd/uat/playwright-report/trace/uiMode.html +17 -0
  50. package/nobdd/uat/playwright-report/trace/uiMode.pWy0Re7G.css +1 -0
  51. package/nobdd/uat/playwright-report/trace/wsPort.zR1WIy9-.css +1 -0
  52. package/nobdd/uat/playwright-report/trace/xtermModule.0lwXJFHT.css +32 -0
  53. package/nobdd/uat/test-results/modules-nobdd-steps-ExamplesForTestData.featur-a74c6-required-nobdd-Verify-the-page-is-not-logged-in-chromium/trace.zip +0 -0
  54. package/nobdd/uat/test-results/modules-nobdd-steps-ExamplesForTestData.featur-a74c6-required-nobdd-Verify-the-page-is-not-logged-in-chromium/video.webm +0 -0
  55. package/nobdd/uat.config.js +3 -2
  56. package/package.json +1 -1
  57. package/build/core/playwright/tag-processor.js +0 -68
  58. package/nobdd/uat/conf/default/actors/beta/custom-module.json +0 -24
  59. package/nobdd/uat/conf/default/actors/beta/index.js +0 -6
  60. package/nobdd/uat/conf/default/actors/beta/parent-child.json +0 -24
  61. package/npm-shrinkwrap.json +0 -10125
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _tagProcessor = _interopRequireDefault(require("../../../../../src/core/playwright/tagProcessor"));
5
+ var _logger = require("../../../../utils/logger");
6
+ jest.mock('../../../../utils/logger');
7
+ describe('TagProcessor', () => {
8
+ const editionOrder = ['edition1', 'edition2', 'edition3', 'edition4'];
9
+ beforeEach(() => {
10
+ jest.clearAllMocks();
11
+ });
12
+ test('should return tagArgs if no edition is provided', () => {
13
+ const tagProcessor = new _tagProcessor.default(editionOrder);
14
+ const userArgs = {
15
+ tags: 'tag1',
16
+ edition: null
17
+ };
18
+ const result = tagProcessor.processTags(userArgs);
19
+ expect(result).toBe('tag1');
20
+ });
21
+ test('should handle a single edition with <= operator', () => {
22
+ const tagProcessor = new _tagProcessor.default(editionOrder);
23
+ const userArgs = {
24
+ tags: 'tag1',
25
+ edition: '<=edition2'
26
+ };
27
+ const result = tagProcessor.processTags(userArgs);
28
+ expect(result).toBe('tag1 and not (@edition_edition3 or @edition_edition4)');
29
+ });
30
+ test('should handle a single edition with >= operator', () => {
31
+ const tagProcessor = new _tagProcessor.default(editionOrder);
32
+ const userArgs = {
33
+ tags: 'tag1',
34
+ edition: '>=edition2'
35
+ };
36
+ const result = tagProcessor.processTags(userArgs);
37
+ expect(result).toBe('tag1 and not (@edition_edition1)');
38
+ });
39
+ test('should handle a single edition with < operator', () => {
40
+ const tagProcessor = new _tagProcessor.default(editionOrder);
41
+ const userArgs = {
42
+ tags: 'tag1',
43
+ edition: '<edition3'
44
+ };
45
+ const result = tagProcessor.processTags(userArgs);
46
+ expect(result).toBe('tag1 and not (@edition_edition3 or @edition_edition4)');
47
+ });
48
+ test('should handle a single edition with > operator', () => {
49
+ const tagProcessor = new _tagProcessor.default(editionOrder);
50
+ const userArgs = {
51
+ tags: 'tag1',
52
+ edition: '>edition1'
53
+ };
54
+ const result = tagProcessor.processTags(userArgs);
55
+ expect(result).toBe('tag1 and not (@edition_edition1)');
56
+ });
57
+ test('should handle a single edition with no operator', () => {
58
+ const tagProcessor = new _tagProcessor.default(editionOrder);
59
+ const userArgs = {
60
+ tags: 'tag1',
61
+ edition: 'edition2'
62
+ };
63
+ const result = tagProcessor.processTags(userArgs);
64
+ expect(result).toBe('tag1 and not (@edition_edition1 or @edition_edition3 or @edition_edition4)');
65
+ });
66
+ test('should log a message if edition is not found', () => {
67
+ const tagProcessor = new _tagProcessor.default(editionOrder);
68
+ const userArgs = {
69
+ tags: 'tag1',
70
+ edition: 'nonexistentEdition'
71
+ };
72
+ const result = tagProcessor.processTags(userArgs);
73
+ expect(result).toBe('tag1');
74
+ expect(_logger.Logger.log).toHaveBeenCalledWith(_logger.Logger.INFO_TYPE, expect.stringContaining('No matching editions for nonexistentEdition found.'));
75
+ });
76
+ test('should handle multiple editions', () => {
77
+ const tagProcessor = new _tagProcessor.default(editionOrder);
78
+ const userArgs = {
79
+ tags: 'tag1',
80
+ edition: 'edition1,edition3'
81
+ };
82
+ const result = tagProcessor.processTags(userArgs);
83
+ expect(result).toBe('tag1 and not (@edition_edition2 or @edition_edition4)');
84
+ });
85
+ test('should build tags correctly when tags are empty', () => {
86
+ const tagProcessor = new _tagProcessor.default(editionOrder);
87
+ const userArgs = {
88
+ tags: '',
89
+ edition: 'edition1'
90
+ };
91
+ const result = tagProcessor.processTags(userArgs);
92
+ expect(result).toBe('not (@edition_edition2 or @edition_edition3 or @edition_edition4)');
93
+ });
94
+ });
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  var _validateFeature = _interopRequireDefault(require("../../../../core/playwright/validateFeature"));
5
5
  var _parseUserArgs = _interopRequireDefault(require("../../../../core/playwright/helpers/parseUserArgs"));
6
6
  var _readConfigFile = require("../../../../core/playwright/readConfigFile");
7
- var _tagProcessor = require("../../../../core/playwright/tag-processor");
7
+ var _tagProcessor = _interopRequireDefault(require("../../../../core/playwright/tagProcessor"));
8
8
  var _testRunner = require("../../../../core/playwright/test-runner");
9
9
  var _logger = require("../../../../utils/logger");
10
10
  jest.mock('../../../../core/playwright/helpers/parseUserArgs', () => ({
@@ -12,7 +12,7 @@ jest.mock('../../../../core/playwright/helpers/parseUserArgs', () => ({
12
12
  default: jest.fn()
13
13
  }));
14
14
  jest.mock('../../../../core/playwright/readConfigFile');
15
- jest.mock('../../../../core/playwright/tag-processor');
15
+ jest.mock('../../../../core/playwright/tagProcessor');
16
16
  jest.mock('../../../../core/playwright/test-runner');
17
17
  jest.mock('../../../../utils/logger', () => ({
18
18
  __esModule: true,
@@ -23,8 +23,13 @@ jest.mock('../../../../utils/logger', () => ({
23
23
  }
24
24
  }));
25
25
  describe('validateFeatureFiles', () => {
26
+ let tagProcessorInstance;
26
27
  beforeEach(() => {
27
28
  jest.clearAllMocks();
29
+ tagProcessorInstance = {
30
+ processTags: jest.fn()
31
+ };
32
+ _tagProcessor.default.mockImplementation(() => tagProcessorInstance);
28
33
  });
29
34
  test('runPreprocessing with correct arguments and log success', async () => {
30
35
  const mockUserArgs = {
@@ -37,19 +42,19 @@ describe('validateFeatureFiles', () => {
37
42
  _readConfigFile.generateConfigFromFile.mockReturnValue(mockConfig);
38
43
  _readConfigFile.isUserConfigFileAvailable.mockReturnValue(true);
39
44
  const mockTagArgs = ['@beta_admin'];
40
- _tagProcessor.tagProcessor.mockReturnValue(mockTagArgs);
45
+ tagProcessorInstance.processTags.mockReturnValue(mockTagArgs);
41
46
  _testRunner.runPreprocessing.mockResolvedValueOnce();
42
47
  await (0, _validateFeature.default)();
43
48
  expect(_parseUserArgs.default).toHaveBeenCalled();
44
49
  expect(_readConfigFile.generateConfigFromFile).toHaveBeenCalled();
45
50
  expect(_readConfigFile.isUserConfigFileAvailable).toHaveBeenCalled();
46
- expect(_tagProcessor.tagProcessor).toHaveBeenCalledWith(mockUserArgs, ["beta", "enterprice"]);
51
+ expect(tagProcessorInstance.processTags).toHaveBeenCalledWith(mockUserArgs);
47
52
  expect(_testRunner.runPreprocessing).toHaveBeenCalledWith(mockTagArgs, expect.stringContaining('config-creator.js'));
48
53
  expect(_logger.Logger.log).toHaveBeenCalledWith(_logger.Logger.SUCCESS_TYPE, 'Feature files validated successfully.');
49
54
  });
50
55
  test('runPreprocessing with playwright conf', async () => {
51
56
  const mockTagArgs = ['@beta_admin'];
52
- _tagProcessor.tagProcessor.mockReturnValue(mockTagArgs);
57
+ tagProcessorInstance.processTags.mockReturnValue(mockTagArgs);
53
58
  _readConfigFile.isUserConfigFileAvailable.mockReturnValue(false);
54
59
  _testRunner.runPreprocessing.mockResolvedValueOnce();
55
60
  await (0, _validateFeature.default)();
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _fs = require("fs");
5
+ var _path = _interopRequireDefault(require("path"));
6
+ jest.mock('fs');
7
+ jest.mock('path');
8
+ jest.mock('../../../../../core/playwright/readConfigFile', () => ({
9
+ generateConfigFromFile: jest.fn(() => ({
10
+ uatDirectory: '/test/directory'
11
+ })),
12
+ getRunMode: jest.fn(() => 'dev')
13
+ }));
14
+ const {
15
+ getListOfActors
16
+ } = require('../../../../../core/playwright/helpers/auth/getUsers');
17
+ describe('getListOfActors', () => {
18
+ beforeEach(() => {
19
+ jest.clearAllMocks();
20
+ _path.default.join.mockImplementation((...args) => args.join('/'));
21
+ });
22
+ test('throws an error when config file cannot be loaded', () => {
23
+ _fs.existsSync.mockReturnValueOnce(true); // Main config file exists
24
+
25
+ jest.mock('/test/directory/conf/dev/actors/index.js', () => {
26
+ throw new Error('Loading error');
27
+ }, {
28
+ virtual: true
29
+ });
30
+ expect(() => getListOfActors()).toThrow('Error loading actor configuration from /test/directory/conf/dev/actors/index.js');
31
+ });
32
+ test('throws an error when beta feature config does not exist', () => {
33
+ _fs.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(() => 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 file exists', () => {
40
+ _fs.existsSync.mockReturnValueOnce(true);
41
+ jest.doMock('/test/directory/conf/dev/actors/index.js', () => ({
42
+ actors: []
43
+ }), {
44
+ virtual: true
45
+ });
46
+ const result = getListOfActors();
47
+ expect(result).toEqual({
48
+ actors: []
49
+ });
50
+ });
51
+ test('falls back to default configuration if main config file does not exist', () => {
52
+ _fs.existsSync.mockReturnValueOnce(false).mockReturnValueOnce(true);
53
+ jest.doMock('/test/directory/conf/default/actors/index.js', () => ({
54
+ actors: []
55
+ }), {
56
+ virtual: true
57
+ });
58
+ const result = getListOfActors();
59
+ expect(result).toEqual({
60
+ actors: []
61
+ });
62
+ });
63
+ test('loads beta feature configuration when betaFeature is provided', () => {
64
+ _fs.existsSync.mockReturnValueOnce(true) // Main config file exists
65
+ .mockReturnValueOnce(true); // Beta feature config exists
66
+
67
+ const betaFeature = 'parentchild';
68
+ const betaFeaturePath = `/test/directory/conf/dev/actors/beta/${betaFeature}/index.js`;
69
+ jest.doMock(betaFeaturePath, () => ({
70
+ betaActors: []
71
+ }), {
72
+ virtual: true
73
+ });
74
+ const result = getListOfActors(betaFeature);
75
+ expect(result).toEqual({
76
+ betaActors: []
77
+ });
78
+ expect(_path.default.join).toHaveBeenCalledWith('/test/directory', `conf/dev/actors/beta/${betaFeature}/index.js`);
79
+ });
80
+ });
@@ -0,0 +1,16 @@
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
+ describe('RunnerHelper', () => {
7
+ describe('createRunner', () => {
8
+ it('should throw error on invalid runner type', () => {
9
+ expect(() => _RunnerHelper.default.createRunner('invalid-type', {})).toThrow("Invalid runner type");
10
+ });
11
+ it('should create a valid runner class', () => {
12
+ const runnerInstance = _RunnerHelper.default.createRunner('spawn', {});
13
+ expect(runnerInstance).toBeInstanceOf(_SpawnRunner.default); // Directly pass the result
14
+ });
15
+ });
16
+ });
@@ -0,0 +1,27 @@
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
+ describe('SpawnRunner', () => {
10
+ let spawnRunner;
11
+ const runnerObj = new _Runner.default();
12
+ beforeEach(() => {
13
+ const config = new _Configuration.default({});
14
+ config.add("bddMode", true);
15
+ runnerObj.setConfig(config);
16
+ runnerObj.setTagArgs(["--headed"]);
17
+ spawnRunner = _RunnerHelper.default.createRunner('spawn', runnerObj);
18
+ });
19
+ describe('run', () => {
20
+ it('should call runPreprocessing when bddMode is true', () => {
21
+ const runPreprocessingSpy = jest.spyOn(spawnRunner, 'runPreprocessing').mockResolvedValue();
22
+ const runPlaywrightSpy = jest.spyOn(spawnRunner, 'runPlaywright').mockResolvedValue();
23
+ spawnRunner.run();
24
+ expect(runPreprocessingSpy).toHaveBeenCalled();
25
+ });
26
+ });
27
+ });
@@ -0,0 +1,7 @@
1
+ export function add(a, b) {
2
+ return a + b;
3
+ }
4
+
5
+ export function greet(name) {
6
+ return `Hello, ${name}!`;
7
+ }
@@ -1,5 +1,2 @@
1
1
  const editions = require('./editions/index');
2
- const beta = require('./beta/index');
3
-
4
-
5
- module.exports = { editions, beta }
2
+ module.exports = { editions }
@@ -2,5 +2,5 @@
2
2
  "environment": "ci",
3
3
  "edition": "enterprise",
4
4
  "profile": "admin",
5
- "domain": "https://zdesk-devops08.csez.zohocorpin.com:31007/agent"
5
+ "domain": "https://zdesk-devops16.csez.zohocorpin.com:31025/agent"
6
6
  }
@@ -17,8 +17,9 @@ module.exports = {
17
17
  browsers: ['Chrome'],
18
18
  isAuthMode: false,
19
19
  authFilePath: getPrimaryCookiePath(),
20
- trace: true,
21
- video: true,
20
+ trace: 'on-first-retry',
21
+ video: 'on-first-retry',
22
+ retries:1,
22
23
  bddMode: false,
23
24
  viewport: { width: 1280, height: 720 },
24
25
  testIdAttribute: 'data-id',
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "dev": {
3
- "domain": "https://desk.localzoho.com/agent",
3
+ "domain": "https://zdesk-devops16.csez.zohocorpin.com:31025/agent",
4
4
  "orgName": "org-name",
5
5
  "deptName": "dept-name",
6
6
  "moduleName": "module-name"
7
7
  },
8
8
  "prod": {
9
- "domain": "https://desk.localzoho.com/agent/",
9
+ "domain": "https://zdesk-devops16.csez.zohocorpin.com:31025/agent",
10
10
  "orgName": "sangeetha.t@zohocorp.com",
11
11
  "deptName": "sangeethat",
12
12
  "moduleName": "sangeethat"
13
13
  },
14
14
  "ci": {
15
- "domain": "https://zdesk-devops08.csez.zohocorpin.com:31007/agent/",
15
+ "domain": "https://zdesk-devops16.csez.zohocorpin.com:31025/agent",
16
16
  "orgName": "clientcicdk8",
17
17
  "deptName": "clientcicdk8",
18
18
  "moduleName": "tickets"
@@ -21,7 +21,8 @@ if (!isDevelopmentSetup()) {
21
21
  const authFilePath = path.join(authDirectory, file);
22
22
  await loadCookiesIfPresent(page, authFilePath);
23
23
  const domainOrigin = getUrlOrigin(process.env.domain);
24
- await page.goto(`${domainOrigin}/support/logout.sas `);
24
+ const logoutURL = `${domainOrigin}/support/logout.sas`;
25
+ await page.goto(logoutURL);
25
26
  await page.waitForNavigation();
26
27
  await expect(page.locator('[id="signin_flow"]')).toBeVisible();
27
28
  await fs.rmSync(authFilePath);
@@ -4,11 +4,11 @@ test.describe("Verify no authentication required @nobdd", () => {
4
4
 
5
5
  test("Verify the page is not logged in", async ({ page }) => {
6
6
 
7
- await page.goto('https://desk.localzoho.com/');
7
+ await page.goto(process.env.domain);
8
8
 
9
- await page.waitForSelector('.zgh-accounts');
9
+ await page.waitForSelector('#login');
10
10
 
11
- const isLoggedIn = await page.isVisible('.zgh-accounts');
11
+ const isLoggedIn = await page.isVisible('#login');
12
12
  expect(isLoggedIn).toBe(true);
13
13
 
14
14
  });
@@ -0,0 +1,276 @@
1
+ {
2
+ "cookies": [
3
+ {
4
+ "name": "zmuac",
5
+ "value": "ODEzNjcyMzNfMjQ2MDYwOQ==",
6
+ "domain": "mail.localzoho.com",
7
+ "path": "/biz",
8
+ "expires": 1732421825.753677,
9
+ "httpOnly": true,
10
+ "secure": true,
11
+ "sameSite": "Strict"
12
+ },
13
+ {
14
+ "name": "zalb_0572a5d605",
15
+ "value": "2c4303c5f018f1d2b10dafbb909828ce",
16
+ "domain": "desk.localzoho.com",
17
+ "path": "/",
18
+ "expires": -1,
19
+ "httpOnly": true,
20
+ "secure": true,
21
+ "sameSite": "Lax"
22
+ },
23
+ {
24
+ "name": "JSESSIONID",
25
+ "value": "7D5271305266E738F36217F7FCE20383",
26
+ "domain": "desk.localzoho.com",
27
+ "path": "/",
28
+ "expires": -1,
29
+ "httpOnly": true,
30
+ "secure": true,
31
+ "sameSite": "Lax"
32
+ },
33
+ {
34
+ "name": "zalb_5fe0f89cf8",
35
+ "value": "4ffb97e24235596cf235e20cb0f81c39",
36
+ "domain": "accounts.localzoho.com",
37
+ "path": "/",
38
+ "expires": -1,
39
+ "httpOnly": true,
40
+ "secure": true,
41
+ "sameSite": "Lax"
42
+ },
43
+ {
44
+ "name": "iamcsr",
45
+ "value": "a133ef70-73a7-437a-8d1c-6941f2636a7e",
46
+ "domain": "accounts.localzoho.com",
47
+ "path": "/",
48
+ "expires": -1,
49
+ "httpOnly": false,
50
+ "secure": true,
51
+ "sameSite": "None"
52
+ },
53
+ {
54
+ "name": "_zcsr_tmp",
55
+ "value": "a133ef70-73a7-437a-8d1c-6941f2636a7e",
56
+ "domain": "accounts.localzoho.com",
57
+ "path": "/",
58
+ "expires": -1,
59
+ "httpOnly": false,
60
+ "secure": true,
61
+ "sameSite": "Strict"
62
+ },
63
+ {
64
+ "name": "stk",
65
+ "value": "200de01944a250a6cfa263b67bf31721",
66
+ "domain": "accounts.localzoho.com",
67
+ "path": "/",
68
+ "expires": -1,
69
+ "httpOnly": true,
70
+ "secure": true,
71
+ "sameSite": "Lax"
72
+ },
73
+ {
74
+ "name": "iamcsr",
75
+ "value": "fb974c4a-9729-450d-acc1-51558ff63475",
76
+ "domain": "accounts.localzoho.eu",
77
+ "path": "/",
78
+ "expires": -1,
79
+ "httpOnly": false,
80
+ "secure": true,
81
+ "sameSite": "None"
82
+ },
83
+ {
84
+ "name": "_iamadt",
85
+ "value": "3093605001f1bf3724496956e18b51770d151a2567d8e503939441477715e75245810a2b80eac51208763321f8c3c11e",
86
+ "domain": ".localzoho.com",
87
+ "path": "/",
88
+ "expires": 1732853814.161261,
89
+ "httpOnly": true,
90
+ "secure": true,
91
+ "sameSite": "None"
92
+ },
93
+ {
94
+ "name": "_iambdt",
95
+ "value": "d7c1dba6f4ce338063e6fdcca52006784fc6ab93326fb2034853976d5ee2c720b590721a2fde57751b05afb0ec7df90aca7267635e1116f73a9c43c6d06de17c",
96
+ "domain": ".localzoho.com",
97
+ "path": "/",
98
+ "expires": 1732853814.161298,
99
+ "httpOnly": true,
100
+ "secure": true,
101
+ "sameSite": "None"
102
+ },
103
+ {
104
+ "name": "_z_identity",
105
+ "value": "true",
106
+ "domain": "accounts.localzoho.com",
107
+ "path": "/",
108
+ "expires": 1729837014.161314,
109
+ "httpOnly": false,
110
+ "secure": true,
111
+ "sameSite": "None"
112
+ },
113
+ {
114
+ "name": "crmcsr",
115
+ "value": "7c95fec263cc284d1e2398559b03ae971b76d6c4e9e042cdbd2131316772818e91c15cce3b2f7fe92181174f87d727762e77201ebc2aba4011ac663dbaf15d2f",
116
+ "domain": "desk.localzoho.com",
117
+ "path": "/",
118
+ "expires": -1,
119
+ "httpOnly": false,
120
+ "secure": true,
121
+ "sameSite": "None"
122
+ },
123
+ {
124
+ "name": "_zcsr_tmp",
125
+ "value": "7c95fec263cc284d1e2398559b03ae971b76d6c4e9e042cdbd2131316772818e91c15cce3b2f7fe92181174f87d727762e77201ebc2aba4011ac663dbaf15d2f",
126
+ "domain": "desk.localzoho.com",
127
+ "path": "/",
128
+ "expires": -1,
129
+ "httpOnly": false,
130
+ "secure": true,
131
+ "sameSite": "Strict"
132
+ },
133
+ {
134
+ "name": "zalb_0572a5d605",
135
+ "value": "2c4303c5f018f1d2b10dafbb909828ce",
136
+ "domain": "deskstatic.localzoho.com",
137
+ "path": "/",
138
+ "expires": -1,
139
+ "httpOnly": true,
140
+ "secure": true,
141
+ "sameSite": "Lax"
142
+ },
143
+ {
144
+ "name": "crmcsr",
145
+ "value": "4707ef2725dca798c77eea59097a4254c720d29284f0bf05ad5c36aed9f460064891c713846b27aa4be8d11db87889308428135522ce13eaf986aa68045da890",
146
+ "domain": "deskstatic.localzoho.com",
147
+ "path": "/",
148
+ "expires": -1,
149
+ "httpOnly": false,
150
+ "secure": true,
151
+ "sameSite": "None"
152
+ },
153
+ {
154
+ "name": "_zcsr_tmp",
155
+ "value": "4707ef2725dca798c77eea59097a4254c720d29284f0bf05ad5c36aed9f460064891c713846b27aa4be8d11db87889308428135522ce13eaf986aa68045da890",
156
+ "domain": "deskstatic.localzoho.com",
157
+ "path": "/",
158
+ "expires": -1,
159
+ "httpOnly": false,
160
+ "secure": true,
161
+ "sameSite": "Strict"
162
+ },
163
+ {
164
+ "name": "JSESSIONID",
165
+ "value": "69373AE39CEB7392AF6561A08A5EF281",
166
+ "domain": "webfonts.localzoho.com",
167
+ "path": "/",
168
+ "expires": -1,
169
+ "httpOnly": true,
170
+ "secure": false,
171
+ "sameSite": "Lax"
172
+ },
173
+ {
174
+ "name": "zalb_c95672b708",
175
+ "value": "c844d8570b3d76649b649a659a0e6f47",
176
+ "domain": "mail.localzoho.com",
177
+ "path": "/",
178
+ "expires": -1,
179
+ "httpOnly": true,
180
+ "secure": true,
181
+ "sameSite": "Lax"
182
+ },
183
+ {
184
+ "name": "zmcsr",
185
+ "value": "16e0e56091a3c35966797cba0b88bd551c0b15b5ad034487d79353409187ee5cccb13d74c6eec6167fb8fdf0b81b4b907e7b90f991c0e0c4688e3b20b765aeec",
186
+ "domain": "mail.localzoho.com",
187
+ "path": "/",
188
+ "expires": -1,
189
+ "httpOnly": false,
190
+ "secure": true,
191
+ "sameSite": "None"
192
+ },
193
+ {
194
+ "name": "_zcsr_tmp",
195
+ "value": "16e0e56091a3c35966797cba0b88bd551c0b15b5ad034487d79353409187ee5cccb13d74c6eec6167fb8fdf0b81b4b907e7b90f991c0e0c4688e3b20b765aeec",
196
+ "domain": "mail.localzoho.com",
197
+ "path": "/",
198
+ "expires": -1,
199
+ "httpOnly": false,
200
+ "secure": true,
201
+ "sameSite": "Strict"
202
+ },
203
+ {
204
+ "name": "JSESSIONID",
205
+ "value": "124A4E25A8B910402C9C2B7B4C49ABB0",
206
+ "domain": "mail.localzoho.com",
207
+ "path": "/",
208
+ "expires": -1,
209
+ "httpOnly": true,
210
+ "secure": true,
211
+ "sameSite": "Lax"
212
+ },
213
+ {
214
+ "name": "zmirc",
215
+ "value": "-1",
216
+ "domain": "mail.localzoho.com",
217
+ "path": "/",
218
+ "expires": 1729916225.75369,
219
+ "httpOnly": true,
220
+ "secure": true,
221
+ "sameSite": "Strict"
222
+ }
223
+ ],
224
+ "origins": [
225
+ {
226
+ "origin": "https://desk.localzoho.com",
227
+ "localStorage": [
228
+ {
229
+ "name": "@zohodesk",
230
+ "value": "{\"recommendationsExpiry\":1729831623391,\"recommendedOrg\":\"81367329\"}"
231
+ },
232
+ {
233
+ "name": "isDnBannerHide",
234
+ "value": "true"
235
+ },
236
+ {
237
+ "name": "currentTabId",
238
+ "value": "0cde9cf1-1fbb-478f-b967-63d9f3153e29"
239
+ },
240
+ {
241
+ "name": "zdPalette",
242
+ "value": "blue"
243
+ },
244
+ {
245
+ "name": "zdTheme",
246
+ "value": "light"
247
+ },
248
+ {
249
+ "name": "zdDarkMode",
250
+ "value": "pureDark"
251
+ },
252
+ {
253
+ "name": "onlyOne",
254
+ "value": "true"
255
+ },
256
+ {
257
+ "name": "noOfTabs",
258
+ "value": "1"
259
+ },
260
+ {
261
+ "name": "zdLhsPalette",
262
+ "value": "dark"
263
+ }
264
+ ]
265
+ },
266
+ {
267
+ "origin": "https://accounts.localzoho.com",
268
+ "localStorage": [
269
+ {
270
+ "name": "isDnBannerHide",
271
+ "value": "true"
272
+ }
273
+ ]
274
+ }
275
+ ]
276
+ }