dimsum-e2e-tests 3.27.0-next.2 → 3.27.0-next.3

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/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.27.0-next.3](https://git.elliemae.io/platform-ui/dimsum/compare/v3.27.0-next.2...v3.27.0-next.3) (2024-01-09)
7
+
8
+ **Note:** Version bump only for package dimsum-e2e-tests
9
+
6
10
  ## [3.27.0-next.2](https://git.elliemae.io/platform-ui/dimsum/compare/v3.27.0-next.1...v3.27.0-next.2) (2024-01-08)
7
11
 
8
12
  **Note:** Version bump only for package dimsum-e2e-tests
@@ -1,37 +1,41 @@
1
1
  import { BubbleCO } from './components';
2
2
  import { axeCoreCheck } from '../helpers';
3
3
 
4
- if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ if (
5
+ (!browser.capabilities['ice:options'].isPhone &&
6
+ !browser.capabilities['ice:options'].isTablet &&
7
+ browser.capabilities.browserName === 'chrome') ||
8
+ browser.capabilities.browserName === 'Chrome'
9
+ ) {
5
10
  describe('PUI-10688 - Chat:: Bubble: Axe-Core, Basic', () => {
6
11
  before('loading page', async () => {
7
12
  const errorOnGo = await BubbleCO.bubbleURL.go();
8
13
  if (errorOnGo) throw errorOnGo;
9
14
  });
10
- it('should display the chat bubbles properly', async () => {
15
+ it('should display the chat bubbles properly and pass axe-core', async () => {
11
16
  const result = await axeCoreCheck();
12
17
  expect(result.length).toBe(0);
13
18
  });
14
19
  });
15
20
 
16
- describe('PUI-10689 - Chat:: Bubble: Axe-Core, System Message in container - Visual Tests', () => {
21
+ describe('PUI-10689 - Chat:: Bubble: Axe-Core, System Message in container', () => {
17
22
  before('loading page', async () => {
18
23
  const errorOnGo = await BubbleCO.systemMessageInContainerUCURL.go();
19
24
  if (errorOnGo) throw errorOnGo;
20
25
  });
21
- it('should displat the system message properly', async () => {
26
+ it('should display the system message properly and pass axe-core', async () => {
22
27
  const result = await axeCoreCheck();
23
28
  expect(result.length).toBe(0);
24
29
  });
25
30
  });
26
- }
27
-
28
- describe('PUI-10688 - Chat: Bubble: Axe-core, Wrapping', () => {
29
- before('loading page', async () => {
30
- const errorOnGo = await BubbleCO.bubbleWrapping.go();
31
- if (errorOnGo) throw errorOnGo;
32
- });
33
- it('should display the chat bubbles properly', async () => {
34
- const result = await axeCoreCheck();
35
- expect(result.length).toBe(0);
31
+ describe('PUI-10688 - Chat: Bubble: Axe-core, Wrapping', () => {
32
+ before('loading page', async () => {
33
+ const errorOnGo = await BubbleCO.bubbleWrapping.go();
34
+ if (errorOnGo) throw errorOnGo;
35
+ });
36
+ it('should display the chat bubbles properly and pass axe-core', async () => {
37
+ const result = await axeCoreCheck();
38
+ expect(result.length).toBe(0);
39
+ });
36
40
  });
37
- });
41
+ }
@@ -1,6 +1,6 @@
1
1
  export { default as BubbleCO } from './BubbleCO';
2
2
  export { default as FloatingButtonCO } from './FloatingButtonCO';
3
- export { default as TileCO } from './TileCO';
3
+ export { default as TileCO } from '../../ds-chat-tile/TileCO';
4
4
  export { default as HeaderCO } from './HeaderCO';
5
5
  export { default as ComposerCO } from './ComposerCO';
6
6
  export { default as ChatCO } from '../DSChatCO';
@@ -0,0 +1,24 @@
1
+ import { Key } from 'webdriverio';
2
+ import { axeCoreCheck } from '../helpers';
3
+ import TileCO from './TileCO';
4
+
5
+ if (
6
+ (!browser.capabilities['ice:options'].isPhone &&
7
+ !browser.capabilities['ice:options'].isTablet &&
8
+ browser.capabilities.browserName === 'chrome') ||
9
+ browser.capabilities.browserName === 'Chrome'
10
+ ) {
11
+ describe('PUI-12203 - Tile, AxeCore test', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await TileCO.tilesURL.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+ it('should display the chat tiles properly and pass axe-core', async () => {
17
+ await browser.keys(Key.Tab);
18
+ const firstTile = await TileCO.getChatTile(0);
19
+ await firstTile.waitForDisplayed();
20
+ const result = await axeCoreCheck();
21
+ expect(result.length).toBe(0);
22
+ });
23
+ });
24
+ }
@@ -1,5 +1,5 @@
1
1
  import { Key } from 'webdriverio';
2
- import { TileCO } from './components';
2
+ import TileCO from './TileCO';
3
3
 
4
4
  if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
5
5
  describe('PUI-6684 - Chat, Tile, Keyboard Navigation', () => {
@@ -1,5 +1,5 @@
1
1
  import { Key } from 'webdriverio';
2
- import { TileCO } from './components';
2
+ import TileCO from './TileCO';
3
3
  import { mouseOver, keyboardActions, tickActions, performKeyboardAction } from '../helpers';
4
4
 
5
5
  if (!browser.capabilities['ice:options'].isPhone) {
@@ -1,5 +1,5 @@
1
- import { PATH_CHAT_PARTS } from '../../../environments/storybook/paths';
2
- import { PageObject, Urlbuilder } from '../../helpers';
1
+ import { PATH_CHAT_PARTS } from '../../environments/storybook/paths';
2
+ import { PageObject, Urlbuilder } from '../helpers';
3
3
 
4
4
  export default class TileCO extends PageObject {
5
5
  static tilesURL = new Urlbuilder(PATH_CHAT_PARTS, 'tile');
@@ -0,0 +1,22 @@
1
+ import DSSpinnerCO from './DSSpinnerCO';
2
+ import { axeCoreCheck } from '../helpers';
3
+
4
+ if (
5
+ (!browser.capabilities['ice:options'].isPhone &&
6
+ !browser.capabilities['ice:options'].isTablet &&
7
+ browser.capabilities.browserName === 'chrome') ||
8
+ browser.capabilities.browserName === 'Chrome'
9
+ ) {
10
+ describe('PUI-12207 - Spinner - AxeCore test', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSSpinnerCO.basicURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+ it('01: should display the spinner and pass axe-core', async () => {
16
+ const spinner = await DSSpinnerCO.getSpinner();
17
+ await spinner.waitForDisplayed();
18
+ const result = await axeCoreCheck();
19
+ expect(result.length).toBe(0);
20
+ });
21
+ });
22
+ }
@@ -0,0 +1,17 @@
1
+ import { PATH_SPINNER } from '../../environments/storybook/paths';
2
+ import { PageObject, Urlbuilder } from '../helpers';
3
+
4
+ export default class DSSpinnerCO extends PageObject {
5
+ // Desktop
6
+ static basicURL = new Urlbuilder(PATH_SPINNER, 'basic');
7
+
8
+ // Snapshots
9
+ static snapshotPath(example = 'basic') {
10
+ return PageObject.getSnapshotPathBuilder('Spinner', example);
11
+ }
12
+
13
+ // selectors
14
+ static async getSpinner() {
15
+ return $('#my-custom-id');
16
+ }
17
+ }
@@ -0,0 +1,25 @@
1
+ import DSSquareIndicatorCO from './DSSquareIndicatorCO';
2
+ import { axeCoreCheck } from '../helpers';
3
+
4
+ if (
5
+ (!browser.capabilities['ice:options'].isPhone &&
6
+ !browser.capabilities['ice:options'].isTablet &&
7
+ browser.capabilities.browserName === 'chrome') ||
8
+ browser.capabilities.browserName === 'Chrome'
9
+ ) {
10
+ describe('PUI-12197 - SquareIndicator - AxeCore test', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSSquareIndicatorCO.triggerableLoader.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+ it('01: should display SquareIndicator and pass axe-core check', async () => {
16
+ await browser.eyesOpen();
17
+ const openLoaderBtn = await DSSquareIndicatorCO.getOpenLoaderBtn();
18
+ await openLoaderBtn.click();
19
+ const squareIndicator = await DSSquareIndicatorCO.getLoadingLabel();
20
+ await squareIndicator.waitForDisplayed();
21
+ const result = await axeCoreCheck();
22
+ expect(result.length).toBe(0);
23
+ });
24
+ });
25
+ }
@@ -1,12 +1,12 @@
1
1
  import DSSquareIndicatorCO from './DSSquareIndicatorCO';
2
2
 
3
3
  if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
- describe('PUI-8794 - Square Indeterminate Indicator - Layout, Dialog - Visual Test', () => {
4
+ describe('PUI-8794 - SquareIndicator - Layout, Dialog', () => {
5
5
  before('loading page', async () => {
6
6
  const errorOnGo = await DSSquareIndicatorCO.insideDialog.go();
7
7
  if (errorOnGo) throw errorOnGo;
8
8
  });
9
- it('01: should display SquareIndeterminateIndicator within dialog correctly', async () => {
9
+ it('01: should display SquareIndicator within dialog correctly - Test2', async () => {
10
10
  await browser.eyesOpen();
11
11
  const openDialog = await DSSquareIndicatorCO.getOpenDialogBtn();
12
12
  await openDialog.click();
@@ -18,4 +18,19 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
18
18
  await expect(snapshot).toEqual(0);
19
19
  });
20
20
  });
21
+ describe('PUI-12192 - SquareIndicator - FullScreen, Backdrop integration', () => {
22
+ before('loading page', async () => {
23
+ const errorOnGo = await DSSquareIndicatorCO.fullscreen.go();
24
+ if (errorOnGo) throw errorOnGo;
25
+ });
26
+ it('01: should display SquareIndicator with backdrop integration correctly', async () => {
27
+ await browser.eyesOpen();
28
+ const squareIndicator = await DSSquareIndicatorCO.getLoadingLabel();
29
+ await squareIndicator.waitForDisplayed();
30
+ const snapshot = await browser.eyesCheckSnapshot(
31
+ DSSquareIndicatorCO.snapshotPath('square-indicator-backdrop-integration'),
32
+ );
33
+ await expect(snapshot).toEqual(0);
34
+ });
35
+ });
21
36
  }
@@ -6,6 +6,10 @@ export default class DSSquareIndicator extends PageObject {
6
6
 
7
7
  static insideDialog = new Urlbuilder(PATH_E2E_SQUARE_INDICATOR, 'inside-dialog-test');
8
8
 
9
+ static fullscreen = new Urlbuilder(PATH_E2E_SQUARE_INDICATOR, 'full-screen-test');
10
+
11
+ static triggerableLoader = new Urlbuilder(PATH_E2E_SQUARE_INDICATOR, 'triggerable-loader');
12
+
9
13
  // Snapshots
10
14
  static snapshotPath(example = 'basic') {
11
15
  return PageObject.getSnapshotPathBuilder('SquareIndicator', example, 'ds-squareindicator');
@@ -34,4 +38,8 @@ export default class DSSquareIndicator extends PageObject {
34
38
  static async getTooltip() {
35
39
  return $('[data-testid="ds-tooltip-v3-tooltip-text-wrapper"]');
36
40
  }
41
+
42
+ static async getOpenLoaderBtn() {
43
+ return $('[data-testid="open-loader-button"]');
44
+ }
37
45
  }
@@ -14,7 +14,7 @@ export const knobs = {
14
14
  disableGroups: 'knob-Disable Groups',
15
15
  };
16
16
 
17
- export default class TreeViewCO extends PageObject {
17
+ export default class DSTreeViewCO extends PageObject {
18
18
  static basicUrl = new Urlbuilder(PATH_TREEVIEW, 'basic');
19
19
 
20
20
  static compactURL = new Urlbuilder(PATH_TREEVIEW, 'compact');
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable wdio/no-pause */
2
2
  /* eslint-disable max-lines */
3
- import { Key } from 'webdriverio';
4
- import DSTreeViewCO from './DSTreeViewCO';
3
+ import { isChecked, isMixed } from '../../helpers';
4
+ import DSTreeViewCO from '../DSTreeViewCO';
5
5
 
6
6
  if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
7
7
  describe('PUI-4729 - TreeView multiselect::', () => {
@@ -11,8 +11,8 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
11
11
  });
12
12
  it('01: should select one folder', async () => {
13
13
  await (await DSTreeViewCO.getCheckbox(0)).click();
14
- const isChecked = await DSTreeViewCO.isChecked(0);
15
- await expect(isChecked).toBe(true);
14
+ const isCheckboxChecked = await DSTreeViewCO.isChecked(0);
15
+ await expect(isCheckboxChecked).toBe(true);
16
16
  });
17
17
  it('02: all children should be selected', async () => {
18
18
  await DSTreeViewCO.expandCollapseAll();
@@ -204,115 +204,6 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
204
204
  await expect(isChecked4).toBe(false);
205
205
  });
206
206
  });
207
- describe('PUI-3670 - TreeView single selection::', () => {
208
- before(async () => {
209
- const errorOnGo = await DSTreeViewCO.sigleSelect.go();
210
- if (errorOnGo) throw errorOnGo;
211
- });
212
- it('01: should select one folder', async () => {
213
- await (await DSTreeViewCO.radioButton(0)).waitForDisplayed({ timeout: 5000 });
214
- await (await DSTreeViewCO.radioButton(0)).click();
215
- const radioBtnChecked = await DSTreeViewCO.getRadioButtonChecked(0);
216
- await expect(radioBtnChecked).toBe(true);
217
- });
218
- it('02: should only select one item', async () => {
219
- await DSTreeViewCO.expandCollapseAll();
220
- await (await DSTreeViewCO.radioButton(3)).click();
221
- const radioBtnChecked0 = await DSTreeViewCO.getRadioButtonChecked(0);
222
- const radioBtnChecked3 = await DSTreeViewCO.getRadioButtonChecked(3);
223
- const radioBtnChecked2 = await DSTreeViewCO.getRadioButtonChecked(2);
224
- await expect(radioBtnChecked0).toBe(false);
225
- await expect(radioBtnChecked3).toBe(true);
226
- await expect(radioBtnChecked2).toBe(false);
227
- });
228
- it('03: should select radio on enter/space', async () => {
229
- await (await DSTreeViewCO.radioButton(0)).click();
230
- await DSTreeViewCO.tabSpaceEnter(Key.Space);
231
- const radioBtnChecked1 = await DSTreeViewCO.getRadioButtonChecked(1);
232
- await expect(radioBtnChecked1).toBe(true);
233
- await (await DSTreeViewCO.radioButton(2)).click();
234
- await DSTreeViewCO.tabSpaceEnter(Key.Enter);
235
- const radiobtnChecked3 = await DSTreeViewCO.getRadioButtonChecked(3);
236
- await expect(radiobtnChecked3).toBe(true);
237
- });
238
- });
239
- describe('PUI-3671 - TreeView single selection::', () => {
240
- describe('disable group', () => {
241
- before(async () => {
242
- const errorOnGo = await DSTreeViewCO.disableGroups.go();
243
- if (errorOnGo) throw errorOnGo;
244
- });
245
- it('01: should disable groups', async () => {
246
- await (await DSTreeViewCO.radioButton(0)).waitForDisplayed({ timeout: 5000 });
247
- const radioDisabled = await DSTreeViewCO.isRadioDisabled(0);
248
- await expect(radioDisabled).toBe(true);
249
- });
250
- it('02: should select one leaf', async () => {
251
- await (await DSTreeViewCO.radioButton(2)).waitForDisplayed({ timeout: 5000 });
252
- await (await DSTreeViewCO.radioButton(2)).click();
253
- const radioBtnChecked2 = await DSTreeViewCO.getRadioButtonChecked(2);
254
- await expect(radioBtnChecked2).toBe(true);
255
- });
256
-
257
- it('03: should not select disabled radio on enter/space', async () => {
258
- // safari tab nav is slightly different
259
- if (browser.capabilities.browserName === 'Safari') {
260
- // in safari we click the row before and tab into the next row
261
- await (await DSTreeViewCO.getRow(0)).waitForDisplayed({ timeout: 5000 });
262
- await (await DSTreeViewCO.getRow(0)).click(); // safari --> start row before
263
- await browser.keys(Key.Tab); // safari --> next row
264
- } else {
265
- await (await DSTreeViewCO.getRow(1)).waitForDisplayed({ timeout: 5000 });
266
- await (await DSTreeViewCO.getRow(1)).click();
267
- }
268
- await browser.keys(Key.Tab); // drag handler
269
- await browser.keys(Key.Tab); // radio button
270
- await browser.keys(Key.Space);
271
- let radioBtnChecked1 = await DSTreeViewCO.getRadioButtonChecked(1);
272
- await expect(radioBtnChecked1).toBe(false);
273
- await browser.keys(Key.Enter);
274
- radioBtnChecked1 = await DSTreeViewCO.getRadioButtonChecked(1);
275
- await expect(radioBtnChecked1).toBe(false);
276
- });
277
- });
278
- describe('disable leafs', () => {
279
- before(async () => {
280
- const errorOnGo = await DSTreeViewCO.disableLeafs.go();
281
- if (errorOnGo) throw errorOnGo;
282
- });
283
- it('01: should disable leafs', async () => {
284
- await (await DSTreeViewCO.radioButton(2)).waitForDisplayed({ timeout: 5000 });
285
- const radioDisabled = await DSTreeViewCO.isRadioDisabled(2);
286
- await expect(radioDisabled).toBe(true);
287
- });
288
- it('02: should select one folder', async () => {
289
- await (await DSTreeViewCO.radioButton(0)).waitForDisplayed({ timeout: 5000 });
290
- await (await DSTreeViewCO.radioButton(0)).click();
291
- const radioBtnChecked = await DSTreeViewCO.getRadioButtonChecked(0);
292
- await expect(radioBtnChecked).toBe(true);
293
- });
294
- it('03: should not select disabled radio on enter/space', async () => {
295
- // safari tab nav is slightly different
296
- if (browser.capabilities.browserName === 'Safari') {
297
- // in safari we click the row before and tab into the next row
298
- await (await DSTreeViewCO.getRow(1)).waitForDisplayed({ timeout: 5000 });
299
- await (await DSTreeViewCO.getRow(1)).click(); // safari --> start row before
300
- await browser.keys(Key.Tab); // safari --> next row
301
- } else {
302
- await (await DSTreeViewCO.getRow(2)).waitForDisplayed({ timeout: 5000 });
303
- await (await DSTreeViewCO.getRow(2)).click();
304
- }
305
- await browser.keys(Key.Tab); // drag handler
306
- await browser.keys(Key.Tab); // radio button
307
- await browser.keys(Key.Space);
308
- let radioBtnChecked = await DSTreeViewCO.getRadioButtonChecked(2);
309
- await expect(radioBtnChecked).toBe(false);
310
- await browser.keys(Key.Enter);
311
- radioBtnChecked = await DSTreeViewCO.getRadioButtonChecked(2);
312
- await expect(radioBtnChecked).toBe(false);
313
- });
314
- });
315
- });
316
207
  describe('PUI-5478 - TreeView multiselect, long list::', () => {
317
208
  before(async () => {
318
209
  const errorOnGo = await DSTreeViewCO.searchableWithNav.go();
@@ -413,4 +304,58 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
413
304
  await expect(isChecked3).toBe(false);
414
305
  });
415
306
  });
307
+ describe('PUI-12136 - TreeView: Controlled, multiselect whith expandable::', () => {
308
+ before(async () => {
309
+ const errorOnGo = await DSTreeViewCO.controlledSelect.go();
310
+ if (errorOnGo) throw errorOnGo;
311
+ });
312
+ it('01: the selection of a parent node should be maintained upon expanding', async () => {
313
+ const parentCheckboxNode1 = await DSTreeViewCO.getCheckbox(0);
314
+ await parentCheckboxNode1.click();
315
+ const expandableBtnNode1 = await DSTreeViewCO.getToggleBtn(0);
316
+ await expandableBtnNode1.click();
317
+ const firstChildCheckboxNode1 = await DSTreeViewCO.getCheckbox(1);
318
+ const secondChildCheckboxNode1 = await DSTreeViewCO.getCheckbox(2);
319
+
320
+ await expect(await isChecked(parentCheckboxNode1)).toBe(true);
321
+ await expect(await isChecked(firstChildCheckboxNode1)).toBe(true);
322
+ await expect(await isChecked(secondChildCheckboxNode1)).toBe(true);
323
+ });
324
+ it('02: the selection of a parent node should be maintained upon collapsing', async () => {
325
+ const expandableBtnNode1 = await DSTreeViewCO.getToggleBtn(0);
326
+ await expandableBtnNode1.click();
327
+ const parentCheckboxNode1 = await DSTreeViewCO.getCheckbox(0);
328
+
329
+ await expect(await isChecked(parentCheckboxNode1)).toBe(true);
330
+ });
331
+ });
332
+ describe('PUI-12139 - TreeView: Multiselect, Automatic Parent Selection on Selecting All Child Nodes::', () => {
333
+ before(async () => {
334
+ const errorOnGo = await DSTreeViewCO.controlledSelect.go();
335
+ if (errorOnGo) throw errorOnGo;
336
+ });
337
+ it('01: parent checkbox should be selected after all chlid nodes are selected', async () => {
338
+ const expandableBtnNode1 = await DSTreeViewCO.getToggleBtn(0);
339
+ await expandableBtnNode1.click();
340
+ const parentCheckboxNode1 = await DSTreeViewCO.getCheckbox(0);
341
+ const firstChildCheckboxNode1 = await DSTreeViewCO.getCheckbox(1);
342
+ const secondChildCheckboxNode1 = await DSTreeViewCO.getCheckbox(2);
343
+ await firstChildCheckboxNode1.click();
344
+ await secondChildCheckboxNode1.click();
345
+
346
+ await expect(await isChecked(parentCheckboxNode1)).toBe(true);
347
+ await expect(await isChecked(firstChildCheckboxNode1)).toBe(true);
348
+ await expect(await isChecked(secondChildCheckboxNode1)).toBe(true);
349
+ });
350
+ it('02: parent checkbox should be mixed after one of chlid nodes is not selected', async () => {
351
+ const parentCheckboxNode1 = await DSTreeViewCO.getCheckbox(0);
352
+ const firstChildCheckboxNode1 = await DSTreeViewCO.getCheckbox(1);
353
+ const secondChildCheckboxNode1 = await DSTreeViewCO.getCheckbox(2);
354
+ await firstChildCheckboxNode1.click();
355
+
356
+ await expect(await isMixed(parentCheckboxNode1)).toBe(true);
357
+ await expect(await isChecked(firstChildCheckboxNode1)).toBe(false);
358
+ await expect(await isChecked(secondChildCheckboxNode1)).toBe(true);
359
+ });
360
+ });
416
361
  }
@@ -0,0 +1,116 @@
1
+ /* eslint-disable wdio/no-pause */
2
+ /* eslint-disable max-lines */
3
+ import { Key } from 'webdriverio';
4
+ import DSTreeViewCO from '../DSTreeViewCO';
5
+
6
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
7
+ describe('PUI-3670 - TreeView single selection::', () => {
8
+ before(async () => {
9
+ const errorOnGo = await DSTreeViewCO.sigleSelect.go();
10
+ if (errorOnGo) throw errorOnGo;
11
+ });
12
+ it('01: should select one folder', async () => {
13
+ await (await DSTreeViewCO.radioButton(0)).waitForDisplayed({ timeout: 5000 });
14
+ await (await DSTreeViewCO.radioButton(0)).click();
15
+ const radioBtnChecked = await DSTreeViewCO.getRadioButtonChecked(0);
16
+ await expect(radioBtnChecked).toBe(true);
17
+ });
18
+ it('02: should only select one item', async () => {
19
+ await DSTreeViewCO.expandCollapseAll();
20
+ await (await DSTreeViewCO.radioButton(3)).click();
21
+ const radioBtnChecked0 = await DSTreeViewCO.getRadioButtonChecked(0);
22
+ const radioBtnChecked3 = await DSTreeViewCO.getRadioButtonChecked(3);
23
+ const radioBtnChecked2 = await DSTreeViewCO.getRadioButtonChecked(2);
24
+ await expect(radioBtnChecked0).toBe(false);
25
+ await expect(radioBtnChecked3).toBe(true);
26
+ await expect(radioBtnChecked2).toBe(false);
27
+ });
28
+ it('03: should select radio on enter/space', async () => {
29
+ await (await DSTreeViewCO.radioButton(0)).click();
30
+ await DSTreeViewCO.tabSpaceEnter(Key.Space);
31
+ const radioBtnChecked1 = await DSTreeViewCO.getRadioButtonChecked(1);
32
+ await expect(radioBtnChecked1).toBe(true);
33
+ await (await DSTreeViewCO.radioButton(2)).click();
34
+ await DSTreeViewCO.tabSpaceEnter(Key.Enter);
35
+ const radiobtnChecked3 = await DSTreeViewCO.getRadioButtonChecked(3);
36
+ await expect(radiobtnChecked3).toBe(true);
37
+ });
38
+ });
39
+ describe('PUI-3671 - TreeView single selection::', () => {
40
+ describe('disable group', () => {
41
+ before(async () => {
42
+ const errorOnGo = await DSTreeViewCO.disableGroups.go();
43
+ if (errorOnGo) throw errorOnGo;
44
+ });
45
+ it('01: should disable groups', async () => {
46
+ await (await DSTreeViewCO.radioButton(0)).waitForDisplayed({ timeout: 5000 });
47
+ const radioDisabled = await DSTreeViewCO.isRadioDisabled(0);
48
+ await expect(radioDisabled).toBe(true);
49
+ });
50
+ it('02: should select one leaf', async () => {
51
+ await (await DSTreeViewCO.radioButton(2)).waitForDisplayed({ timeout: 5000 });
52
+ await (await DSTreeViewCO.radioButton(2)).click();
53
+ const radioBtnChecked2 = await DSTreeViewCO.getRadioButtonChecked(2);
54
+ await expect(radioBtnChecked2).toBe(true);
55
+ });
56
+
57
+ it('03: should not select disabled radio on enter/space', async () => {
58
+ // safari tab nav is slightly different
59
+ if (browser.capabilities.browserName === 'Safari') {
60
+ // in safari we click the row before and tab into the next row
61
+ await (await DSTreeViewCO.getRow(0)).waitForDisplayed({ timeout: 5000 });
62
+ await (await DSTreeViewCO.getRow(0)).click(); // safari --> start row before
63
+ await browser.keys(Key.Tab); // safari --> next row
64
+ } else {
65
+ await (await DSTreeViewCO.getRow(1)).waitForDisplayed({ timeout: 5000 });
66
+ await (await DSTreeViewCO.getRow(1)).click();
67
+ }
68
+ await browser.keys(Key.Tab); // drag handler
69
+ await browser.keys(Key.Tab); // radio button
70
+ await browser.keys(Key.Space);
71
+ let radioBtnChecked1 = await DSTreeViewCO.getRadioButtonChecked(1);
72
+ await expect(radioBtnChecked1).toBe(false);
73
+ await browser.keys(Key.Enter);
74
+ radioBtnChecked1 = await DSTreeViewCO.getRadioButtonChecked(1);
75
+ await expect(radioBtnChecked1).toBe(false);
76
+ });
77
+ });
78
+ describe('disable leafs', () => {
79
+ before(async () => {
80
+ const errorOnGo = await DSTreeViewCO.disableLeafs.go();
81
+ if (errorOnGo) throw errorOnGo;
82
+ });
83
+ it('01: should disable leafs', async () => {
84
+ await (await DSTreeViewCO.radioButton(2)).waitForDisplayed({ timeout: 5000 });
85
+ const radioDisabled = await DSTreeViewCO.isRadioDisabled(2);
86
+ await expect(radioDisabled).toBe(true);
87
+ });
88
+ it('02: should select one folder', async () => {
89
+ await (await DSTreeViewCO.radioButton(0)).waitForDisplayed({ timeout: 5000 });
90
+ await (await DSTreeViewCO.radioButton(0)).click();
91
+ const radioBtnChecked = await DSTreeViewCO.getRadioButtonChecked(0);
92
+ await expect(radioBtnChecked).toBe(true);
93
+ });
94
+ it('03: should not select disabled radio on enter/space', async () => {
95
+ // safari tab nav is slightly different
96
+ if (browser.capabilities.browserName === 'Safari') {
97
+ // in safari we click the row before and tab into the next row
98
+ await (await DSTreeViewCO.getRow(1)).waitForDisplayed({ timeout: 5000 });
99
+ await (await DSTreeViewCO.getRow(1)).click(); // safari --> start row before
100
+ await browser.keys(Key.Tab); // safari --> next row
101
+ } else {
102
+ await (await DSTreeViewCO.getRow(2)).waitForDisplayed({ timeout: 5000 });
103
+ await (await DSTreeViewCO.getRow(2)).click();
104
+ }
105
+ await browser.keys(Key.Tab); // drag handler
106
+ await browser.keys(Key.Tab); // radio button
107
+ await browser.keys(Key.Space);
108
+ let radioBtnChecked = await DSTreeViewCO.getRadioButtonChecked(2);
109
+ await expect(radioBtnChecked).toBe(false);
110
+ await browser.keys(Key.Enter);
111
+ radioBtnChecked = await DSTreeViewCO.getRadioButtonChecked(2);
112
+ await expect(radioBtnChecked).toBe(false);
113
+ });
114
+ });
115
+ });
116
+ }
package/helpers.js CHANGED
@@ -315,6 +315,10 @@ export async function isChecked(checkBox) {
315
315
  return (await checkBox.getAttribute('aria-checked')) === 'true';
316
316
  }
317
317
 
318
+ export async function isMixed(checkBox) {
319
+ return (await checkBox.getAttribute('aria-checked')) === 'mixed';
320
+ }
321
+
318
322
  export const asyncSome = async (arr, predicate) => {
319
323
  // eslint-disable-next-line no-restricted-syntax
320
324
  for (const e of arr) {
package/package.json CHANGED
@@ -1,125 +1,125 @@
1
1
  {
2
2
  "name": "dimsum-e2e-tests",
3
- "version": "3.27.0-next.2",
3
+ "version": "3.27.0-next.3",
4
4
  "description": "End-to-end tests for dimsum library",
5
5
  "dependencies": {
6
- "@elliemae/ds-accessibility": "3.27.0-next.2",
7
- "@elliemae/ds-accordion": "3.27.0-next.2",
8
- "@elliemae/ds-app-picker": "3.27.0-next.2",
9
- "@elliemae/ds-backdrop": "3.27.0-next.2",
10
- "@elliemae/ds-banner": "3.27.0-next.2",
11
- "@elliemae/ds-basic": "3.27.0-next.2",
12
- "@elliemae/ds-breadcrumb": "3.27.0-next.2",
13
- "@elliemae/ds-button": "3.27.0-next.2",
14
- "@elliemae/ds-button-group": "3.27.0-next.2",
15
- "@elliemae/ds-button-v1": "3.27.0-next.2",
16
- "@elliemae/ds-button-v2": "3.27.0-next.2",
17
- "@elliemae/ds-card": "3.27.0-next.2",
18
- "@elliemae/ds-card-array": "3.27.0-next.2",
19
- "@elliemae/ds-card-navigation": "3.27.0-next.2",
20
- "@elliemae/ds-card-v2": "3.27.0-next.2",
21
- "@elliemae/ds-card-v2-action-addon": "3.27.0-next.2",
22
- "@elliemae/ds-card-v2-group": "3.27.0-next.2",
23
- "@elliemae/ds-chat": "3.27.0-next.2",
24
- "@elliemae/ds-chat-bubble": "3.27.0-next.2",
25
- "@elliemae/ds-chat-tile": "3.27.0-next.2",
26
- "@elliemae/ds-chip": "3.27.0-next.2",
27
- "@elliemae/ds-circular-progress-indicator": "3.27.0-next.2",
28
- "@elliemae/ds-codeeditor": "3.27.0-next.2",
29
- "@elliemae/ds-comments": "3.27.0-next.2",
30
- "@elliemae/ds-controlled-form": "3.27.0-next.2",
31
- "@elliemae/ds-csv-converter": "3.27.0-next.2",
32
- "@elliemae/ds-data-table": "3.27.0-next.2",
33
- "@elliemae/ds-datagrids": "3.27.0-next.2",
34
- "@elliemae/ds-dataviz": "3.27.0-next.2",
35
- "@elliemae/ds-dataviz-pie": "3.27.0-next.2",
36
- "@elliemae/ds-date-picker": "3.27.0-next.2",
37
- "@elliemae/ds-date-range-picker": "3.27.0-next.2",
38
- "@elliemae/ds-date-range-selector": "3.27.0-next.2",
39
- "@elliemae/ds-date-time-picker": "3.27.0-next.2",
40
- "@elliemae/ds-date-time-recurrence-picker": "3.27.0-next.2",
41
- "@elliemae/ds-decision-graph": "3.27.0-next.2",
42
- "@elliemae/ds-dialog": "3.27.0-next.2",
43
- "@elliemae/ds-drag-and-drop": "3.27.0-next.2",
44
- "@elliemae/ds-dropdownmenu": "3.27.0-next.2",
45
- "@elliemae/ds-dropzone": "3.27.0-next.2",
46
- "@elliemae/ds-fast-list": "3.27.0-next.2",
47
- "@elliemae/ds-filterbar": "3.27.0-next.2",
48
- "@elliemae/ds-form": "3.27.0-next.2",
49
- "@elliemae/ds-form-date-range-picker": "3.27.0-next.2",
50
- "@elliemae/ds-form-date-time-picker": "3.27.0-next.2",
51
- "@elliemae/ds-form-layout-blocks": "3.27.0-next.2",
52
- "@elliemae/ds-form-layout-label": "3.27.0-next.2",
53
- "@elliemae/ds-global-header": "3.27.0-next.2",
54
- "@elliemae/ds-grid": "3.27.0-next.2",
55
- "@elliemae/ds-group-box": "3.27.0-next.2",
56
- "@elliemae/ds-header": "3.27.0-next.2",
57
- "@elliemae/ds-hooks-fontsize-detector": "3.27.0-next.2",
58
- "@elliemae/ds-hooks-fontsize-media": "3.27.0-next.2",
59
- "@elliemae/ds-icon": "3.27.0-next.2",
60
- "@elliemae/ds-icons": "3.27.0-next.2",
61
- "@elliemae/ds-image": "3.27.0-next.2",
62
- "@elliemae/ds-imagelibrarymodal": "3.27.0-next.2",
63
- "@elliemae/ds-indeterminate-progress-indicator": "3.27.0-next.2",
64
- "@elliemae/ds-label-value": "3.27.0-next.2",
65
- "@elliemae/ds-left-navigation": "3.27.0-next.2",
66
- "@elliemae/ds-list-section-header": "3.27.0-next.2",
67
- "@elliemae/ds-loading-indicator": "3.27.0-next.2",
68
- "@elliemae/ds-menu": "3.27.0-next.2",
69
- "@elliemae/ds-menu-items": "3.27.0-next.2",
70
- "@elliemae/ds-mini-toolbar": "3.27.0-next.2",
71
- "@elliemae/ds-mobile": "3.27.0-next.2",
72
- "@elliemae/ds-modal": "3.27.0-next.2",
73
- "@elliemae/ds-modal-slide": "3.27.0-next.2",
74
- "@elliemae/ds-notification-badge": "3.27.0-next.2",
75
- "@elliemae/ds-number-range-field": "3.27.0-next.2",
76
- "@elliemae/ds-page-header": "3.27.0-next.2",
77
- "@elliemae/ds-page-header-v1": "3.27.0-next.2",
78
- "@elliemae/ds-page-header-v2": "3.27.0-next.2",
79
- "@elliemae/ds-page-layout": "3.27.0-next.2",
80
- "@elliemae/ds-page-number": "3.27.0-next.2",
81
- "@elliemae/ds-pagination": "3.27.0-next.2",
82
- "@elliemae/ds-pills": "3.27.0-next.2",
83
- "@elliemae/ds-popover": "3.27.0-next.2",
84
- "@elliemae/ds-popper": "3.27.0-next.2",
85
- "@elliemae/ds-popperjs": "3.27.0-next.2",
86
- "@elliemae/ds-progress-indicator": "3.27.0-next.2",
87
- "@elliemae/ds-query-builder": "3.27.0-next.2",
88
- "@elliemae/ds-read-more": "3.27.0-next.2",
89
- "@elliemae/ds-resizeable-container": "3.27.0-next.2",
90
- "@elliemae/ds-ribbon": "3.27.0-next.2",
91
- "@elliemae/ds-search-field": "3.27.0-next.2",
92
- "@elliemae/ds-separator": "3.27.0-next.2",
93
- "@elliemae/ds-shuttle": "3.27.0-next.2",
94
- "@elliemae/ds-shuttle-v2": "3.27.0-next.2",
95
- "@elliemae/ds-side-panel": "3.27.0-next.2",
96
- "@elliemae/ds-skeleton": "3.27.0-next.2",
97
- "@elliemae/ds-slider": "3.27.0-next.2",
98
- "@elliemae/ds-spinner": "3.27.0-next.2",
99
- "@elliemae/ds-square-indicator": "3.27.0-next.2",
100
- "@elliemae/ds-stepper": "3.27.0-next.2",
101
- "@elliemae/ds-svg": "3.27.0-next.2",
102
- "@elliemae/ds-system": "3.27.0-next.2",
103
- "@elliemae/ds-tabs": "3.27.0-next.2",
104
- "@elliemae/ds-test-utils": "3.27.0-next.2",
105
- "@elliemae/ds-text-wrapper": "3.27.0-next.2",
106
- "@elliemae/ds-time-picker": "3.27.0-next.2",
107
- "@elliemae/ds-toast": "3.27.0-next.2",
108
- "@elliemae/ds-toolbar": "3.27.0-next.2",
109
- "@elliemae/ds-toolbar-v2": "3.27.0-next.2",
110
- "@elliemae/ds-tooltip": "3.27.0-next.2",
111
- "@elliemae/ds-transition": "3.27.0-next.2",
112
- "@elliemae/ds-tree-model": "3.27.0-next.2",
113
- "@elliemae/ds-treeview": "3.27.0-next.2",
114
- "@elliemae/ds-truncated-expandable-text": "3.27.0-next.2",
115
- "@elliemae/ds-truncated-tooltip-text": "3.27.0-next.2",
116
- "@elliemae/ds-typography": "3.27.0-next.2",
117
- "@elliemae/ds-uploader": "3.27.0-next.2",
118
- "@elliemae/ds-utilities": "3.27.0-next.2",
119
- "@elliemae/ds-virtual-list": "3.27.0-next.2",
120
- "@elliemae/ds-wizard": "3.27.0-next.2",
121
- "@elliemae/ds-wysiwygeditor": "3.27.0-next.2",
122
- "@elliemae/ds-zipcode-search": "3.27.0-next.2",
123
- "@elliemae/ds-zoom": "3.27.0-next.2"
6
+ "@elliemae/ds-accordion": "3.27.0-next.3",
7
+ "@elliemae/ds-accessibility": "3.27.0-next.3",
8
+ "@elliemae/ds-app-picker": "3.27.0-next.3",
9
+ "@elliemae/ds-backdrop": "3.27.0-next.3",
10
+ "@elliemae/ds-banner": "3.27.0-next.3",
11
+ "@elliemae/ds-basic": "3.27.0-next.3",
12
+ "@elliemae/ds-breadcrumb": "3.27.0-next.3",
13
+ "@elliemae/ds-button": "3.27.0-next.3",
14
+ "@elliemae/ds-button-v2": "3.27.0-next.3",
15
+ "@elliemae/ds-card-array": "3.27.0-next.3",
16
+ "@elliemae/ds-card-navigation": "3.27.0-next.3",
17
+ "@elliemae/ds-card-v2": "3.27.0-next.3",
18
+ "@elliemae/ds-card-v2-action-addon": "3.27.0-next.3",
19
+ "@elliemae/ds-card-v2-group": "3.27.0-next.3",
20
+ "@elliemae/ds-chat": "3.27.0-next.3",
21
+ "@elliemae/ds-chat-tile": "3.27.0-next.3",
22
+ "@elliemae/ds-chat-bubble": "3.27.0-next.3",
23
+ "@elliemae/ds-chip": "3.27.0-next.3",
24
+ "@elliemae/ds-circular-progress-indicator": "3.27.0-next.3",
25
+ "@elliemae/ds-codeeditor": "3.27.0-next.3",
26
+ "@elliemae/ds-comments": "3.27.0-next.3",
27
+ "@elliemae/ds-controlled-form": "3.27.0-next.3",
28
+ "@elliemae/ds-datagrids": "3.27.0-next.3",
29
+ "@elliemae/ds-data-table": "3.27.0-next.3",
30
+ "@elliemae/ds-button-group": "3.27.0-next.3",
31
+ "@elliemae/ds-dataviz-pie": "3.27.0-next.3",
32
+ "@elliemae/ds-dataviz": "3.27.0-next.3",
33
+ "@elliemae/ds-date-picker": "3.27.0-next.3",
34
+ "@elliemae/ds-date-range-selector": "3.27.0-next.3",
35
+ "@elliemae/ds-date-range-picker": "3.27.0-next.3",
36
+ "@elliemae/ds-date-time-recurrence-picker": "3.27.0-next.3",
37
+ "@elliemae/ds-decision-graph": "3.27.0-next.3",
38
+ "@elliemae/ds-drag-and-drop": "3.27.0-next.3",
39
+ "@elliemae/ds-dialog": "3.27.0-next.3",
40
+ "@elliemae/ds-date-time-picker": "3.27.0-next.3",
41
+ "@elliemae/ds-dropdownmenu": "3.27.0-next.3",
42
+ "@elliemae/ds-fast-list": "3.27.0-next.3",
43
+ "@elliemae/ds-filterbar": "3.27.0-next.3",
44
+ "@elliemae/ds-dropzone": "3.27.0-next.3",
45
+ "@elliemae/ds-form": "3.27.0-next.3",
46
+ "@elliemae/ds-form-date-range-picker": "3.27.0-next.3",
47
+ "@elliemae/ds-form-date-time-picker": "3.27.0-next.3",
48
+ "@elliemae/ds-form-layout-blocks": "3.27.0-next.3",
49
+ "@elliemae/ds-form-layout-label": "3.27.0-next.3",
50
+ "@elliemae/ds-global-header": "3.27.0-next.3",
51
+ "@elliemae/ds-grid": "3.27.0-next.3",
52
+ "@elliemae/ds-group-box": "3.27.0-next.3",
53
+ "@elliemae/ds-hooks-fontsize-detector": "3.27.0-next.3",
54
+ "@elliemae/ds-header": "3.27.0-next.3",
55
+ "@elliemae/ds-hooks-fontsize-media": "3.27.0-next.3",
56
+ "@elliemae/ds-icon": "3.27.0-next.3",
57
+ "@elliemae/ds-image": "3.27.0-next.3",
58
+ "@elliemae/ds-icons": "3.27.0-next.3",
59
+ "@elliemae/ds-imagelibrarymodal": "3.27.0-next.3",
60
+ "@elliemae/ds-indeterminate-progress-indicator": "3.27.0-next.3",
61
+ "@elliemae/ds-label-value": "3.27.0-next.3",
62
+ "@elliemae/ds-left-navigation": "3.27.0-next.3",
63
+ "@elliemae/ds-card": "3.27.0-next.3",
64
+ "@elliemae/ds-list-section-header": "3.27.0-next.3",
65
+ "@elliemae/ds-loading-indicator": "3.27.0-next.3",
66
+ "@elliemae/ds-menu": "3.27.0-next.3",
67
+ "@elliemae/ds-menu-items": "3.27.0-next.3",
68
+ "@elliemae/ds-modal": "3.27.0-next.3",
69
+ "@elliemae/ds-mini-toolbar": "3.27.0-next.3",
70
+ "@elliemae/ds-modal-slide": "3.27.0-next.3",
71
+ "@elliemae/ds-notification-badge": "3.27.0-next.3",
72
+ "@elliemae/ds-number-range-field": "3.27.0-next.3",
73
+ "@elliemae/ds-mobile": "3.27.0-next.3",
74
+ "@elliemae/ds-page-header": "3.27.0-next.3",
75
+ "@elliemae/ds-page-layout": "3.27.0-next.3",
76
+ "@elliemae/ds-page-header-v2": "3.27.0-next.3",
77
+ "@elliemae/ds-page-number": "3.27.0-next.3",
78
+ "@elliemae/ds-pagination": "3.27.0-next.3",
79
+ "@elliemae/ds-pills": "3.27.0-next.3",
80
+ "@elliemae/ds-page-header-v1": "3.27.0-next.3",
81
+ "@elliemae/ds-popover": "3.27.0-next.3",
82
+ "@elliemae/ds-popper": "3.27.0-next.3",
83
+ "@elliemae/ds-popperjs": "3.27.0-next.3",
84
+ "@elliemae/ds-button-v1": "3.27.0-next.3",
85
+ "@elliemae/ds-read-more": "3.27.0-next.3",
86
+ "@elliemae/ds-query-builder": "3.27.0-next.3",
87
+ "@elliemae/ds-resizeable-container": "3.27.0-next.3",
88
+ "@elliemae/ds-ribbon": "3.27.0-next.3",
89
+ "@elliemae/ds-search-field": "3.27.0-next.3",
90
+ "@elliemae/ds-separator": "3.27.0-next.3",
91
+ "@elliemae/ds-progress-indicator": "3.27.0-next.3",
92
+ "@elliemae/ds-shuttle": "3.27.0-next.3",
93
+ "@elliemae/ds-shuttle-v2": "3.27.0-next.3",
94
+ "@elliemae/ds-side-panel": "3.27.0-next.3",
95
+ "@elliemae/ds-spinner": "3.27.0-next.3",
96
+ "@elliemae/ds-slider": "3.27.0-next.3",
97
+ "@elliemae/ds-square-indicator": "3.27.0-next.3",
98
+ "@elliemae/ds-stepper": "3.27.0-next.3",
99
+ "@elliemae/ds-svg": "3.27.0-next.3",
100
+ "@elliemae/ds-system": "3.27.0-next.3",
101
+ "@elliemae/ds-csv-converter": "3.27.0-next.3",
102
+ "@elliemae/ds-text-wrapper": "3.27.0-next.3",
103
+ "@elliemae/ds-time-picker": "3.27.0-next.3",
104
+ "@elliemae/ds-toast": "3.27.0-next.3",
105
+ "@elliemae/ds-toolbar": "3.27.0-next.3",
106
+ "@elliemae/ds-toolbar-v2": "3.27.0-next.3",
107
+ "@elliemae/ds-tabs": "3.27.0-next.3",
108
+ "@elliemae/ds-tooltip": "3.27.0-next.3",
109
+ "@elliemae/ds-tree-model": "3.27.0-next.3",
110
+ "@elliemae/ds-skeleton": "3.27.0-next.3",
111
+ "@elliemae/ds-transition": "3.27.0-next.3",
112
+ "@elliemae/ds-truncated-expandable-text": "3.27.0-next.3",
113
+ "@elliemae/ds-truncated-tooltip-text": "3.27.0-next.3",
114
+ "@elliemae/ds-typography": "3.27.0-next.3",
115
+ "@elliemae/ds-treeview": "3.27.0-next.3",
116
+ "@elliemae/ds-uploader": "3.27.0-next.3",
117
+ "@elliemae/ds-utilities": "3.27.0-next.3",
118
+ "@elliemae/ds-virtual-list": "3.27.0-next.3",
119
+ "@elliemae/ds-wizard": "3.27.0-next.3",
120
+ "@elliemae/ds-wysiwygeditor": "3.27.0-next.3",
121
+ "@elliemae/ds-zipcode-search": "3.27.0-next.3",
122
+ "@elliemae/ds-zoom": "3.27.0-next.3",
123
+ "@elliemae/ds-test-utils": "3.27.0-next.3"
124
124
  }
125
125
  }