itemengine-cypress-automation 1.0.348 → 1.0.350-feature-thinkSphere-01c175a.0

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.
@@ -1,22 +1,133 @@
1
1
  import utilities from "../../support/helpers/utilities";
2
2
  import { commonComponents } from "./commonComponents";
3
+ import { dialogBoxBase } from '../dialogBoxBase';
4
+ const css = Cypress.env('css');
5
+
6
+ let duplicateItemReferenceID = "";
3
7
 
4
8
  const selectors = {
5
9
  ...commonComponents,
6
10
  browseItemPageWrapper: () => cy.get('.browse-item-page'),
11
+ browseItemPageHeaderActionWrapper: () => cy.get('.browse-item-header-action-wrapper'),
12
+ browseItemPageHeader: () => cy.get('.browse-title-wrapper'),
13
+ browseThinksphereItemsMenuBarOption: () => cy.get('[aria-label="Navigation Drawer List"]').contains('Browse ThinkSphere Items'),
14
+ datatableWrapper: () => cy.get('.data-table-wrapper'),
15
+ allTableRow: () => cy.get('[data-testid*="MUIDataTableBodyRow"]'),
16
+ buttonCreateItem: () => cy.get('.browse-item-header-action-wrapper .ngie-btn-contained[role="button"]'),
17
+ buttonCancelCreateQuestion: () => cy.get('.browse-item-header-action-wrapper .ngie-btn-outlined'),
18
+ tableColumnHeader: (columnNumber) => utilities.getNthElement(cy.get('div[class*="TableHeaderstyles__FlexWrapper"]'), columnNumber),
19
+ tableRow: (rowNumber) => utilities.getNthElement(cy.get('tr[data-testid*="MUIDataTableBodyRow"]'), rowNumber),
20
+ itemCellItemTitle: () => utilities.getNthElement(cy.get('td[data-testid*="MuiDataTableBodyCell-0"]').find('button'), 0),
21
+ itemCellInstructionText: () => cy.get('div[class*="ItemTitleCellstyles__InstructionText"]'),
22
+ lastUpdatedValue: () => cy.get('time'),
23
+ metadataCell: () => cy.get('td[data-testid*="MuiDataTableBodyCell-3"]'),
24
+ metadataCellTagLabel: () => cy.get('div[class*="DynamicMultilineTagsListstyles__TagsWrapper"]'),
25
+ headerActionButtonWrapper: () => cy.get('.browse-item-header-action-button-wrapper'),
26
+ itemListFilterWrapper: () => cy.get('.itemlist-filter-wrapper'),
27
+ actionsMenu: () => cy.get('[class*="ngie-action-cells-ul"]'),
28
+ actionsMenuItem: (menuItemNumber) => utilities.getNthElement(cy.get('li[role="menuitem"]'), menuItemNumber),
29
+ actionMenuButton: () => cy.get('[class*="ActionMenu__ButtonWrapper"]').find('button'),
30
+ iconSortAscending: () => cy.get('svg[aria-label="ascending-sort"]'),
31
+ iconSortDescending: () => cy.get('svg[aria-label="descending-sort"]'),
32
+ paginationCountText: () => cy.get('[class*="TablePaginationstyles__CountText"]'),
33
+ paginationBlock: () => cy.get('[class*="TablePaginationstyles__PaginationBlock"]'),
34
+ buttonSkipToFirstPage: () => cy.get('[aria-label*="Skip to first page"]'),
35
+ buttonSkipToLastPage: () => cy.get('[aria-label*="Skip to last page"]'),
36
+ buttonPrevious: () => cy.get('[aria-label*="Previous page"]'),
37
+ buttonNext: () => cy.get('[aria-label*="Next page"]'),
7
38
  itemLabel: () => cy.get('#reference-header'),
8
39
  lastUpdatedLabel: () => cy.get('#updated-header'),
9
- searchInputField: () => cy.get('.ngie-search input'),
10
40
  sortArrow: () => cy.get('.table-header-sort-arrow'),
11
41
  browseItemsLabel: () => cy.get('.browse-title-wrapper'),
12
42
  browseItemsItem: () => cy.get('tr[id*="MUIDataTableBodyRow"]'),
13
43
  browseItemPageReferenceId: () => cy.get('[class*="ItemTitleCellstyles__ReferenceId"]'),
14
- }
44
+ addReviewQuestionButton: () => cy.get('.ngie-btn-contained').contains('Add \'Check your math\' question'),
45
+ createItemButtonTypography: () => browseItemsPage.buttonCreateItem().find('.ngie-btn-typography'),
46
+ createQuestionCancelButtonTypography: () => browseItemsPage.buttonCancelCreateQuestion().find('.ngie-btn-typography'),
47
+ tableColumnHeaderBrowseItemWrapperDiv: (count) => browseItemsPage.tableColumnHeader(count).find('div.browse-item-component-wrapper div'),
48
+ };
49
+
50
+ const searchBarSelectors = {
51
+ searchBar: () => cy.get('input[placeholder="Search by title, tags and content"]'),
52
+ buttonClearSearch: () => cy.get('[data-at="clear-button"]'),
53
+ buttonSearch: () => cy.get('button[aria-label="Search"]'),
54
+ buttonSearchSVG: () => cy.get('button[aria-label="Search"]').find('svg'),
55
+ mobileViewSearchBar: () => cy.get('input[placeholder="Search by title, tags and content"]'),
56
+ searchInputField: () => cy.get('.ngie-search input'),
57
+ };
58
+
59
+ const mobileViewBrowsePageSelectors = {
60
+ mobileViewSortByWrapper: () => cy.get('.sortby-component-wrapper'),
61
+ mobileViewSortByDropdown: () => cy.get('[id="sortby-select"]'),
62
+ mobileViewSortByDropdownLabelWrapper: () => cy.get('[class*="sort-by-dropdown-label-wrapper"]'),
63
+ mobileViewSortByDropdownLabel : () => cy.get('.sort-by-dropdown-label'),
64
+ mobileViewSortDescendingSVG: () => cy.get('[aria-label="sorted descending"]'),
65
+ mobileViewSortAscendingSVG: () => cy.get('[aria-label="sorted ascending"]'),
66
+ mobileViewSortByDropdownList: (itemNumber) => utilities.getNthElement(cy.get('[aria-labelledby="scoring-type-dropdown-label"]').find('li'), itemNumber),
67
+ mobileViewSortbyDropdownOptions: (optionNumber) => utilities.getNthElement(cy.get('li[role="option"]'), optionNumber),
68
+ mobileViewSortbyDropdownOptionsList: () => cy.get('.dropdown-list'),
69
+ mobileViewIconSorted: () => cy.get('[aria-label*="sorted"]'),
70
+ mobileViewSortByLabel: () => cy.get('span[class*="SortBystyles__SortByTextSpan"]'),
71
+ mobileViewDropdownText: () => cy.get('div[class*="SortBystyles__ItemWrapper"]'),
72
+ mobileViewSortByDropdownUL: () => cy.get('ul[aria-labelledby="sortby-dropdown-label"]'),
73
+ mobileViewMetaDataLabel: () => cy.get('div[class*="ItemTitleCellstyles__MetaDataText"]'),
74
+ mobileViewlastUpdatedLabel: () => cy.get('div[class*="ItemTitleCellstyles__LastUpdatedText"]'),
75
+ mobileViewMetadataContent: () => cy.get('div[class*="ItemTitleCellstyles__MetaData-"]'),
76
+ filterSection: () => cy.get('.filter-section-content-wrapper'),
77
+ filterButton: () => cy.get('.itemlist-filter-wrapper .ngie-button'),
78
+ filterButtonText: () => browseItemsPage.filterButton().find('.filter-text'),
79
+ filterCategories: (category = '') => {
80
+ if (!category) {
81
+ return cy.get('.expansion-item-expansion-panel-summary-content div[role="menu"]');
82
+ }
83
+ return cy.get(`.expansion-item-expansion-panel-summary-content div[role="menu"][aria-label*="${category}"]`);
84
+ },
85
+ filterCategoryCheckbox: (category) => {
86
+ if(!category) {
87
+ return cy.get('.expansion-item-checkbox-label input');
88
+ }
89
+ return cy.get(`.expansion-item-checkbox-wrapper input[aria-label*="${category}"]`);
90
+ },
91
+ filterItem: (item) => {
92
+ if (!item) {
93
+ return cy.get('.expansion-item-checkbox-label input');
94
+ }
95
+ return cy.get(`.expansion-item-checkbox-label input[aria-label*="${item}"]`);
96
+ },
97
+ filterChip: (chip) => {
98
+ if (!chip) {
99
+ return cy.get('.filter-chip');
100
+ }
101
+ return cy.get(`.filter-chip[aria-label*="${chip}"]`);
102
+ },
103
+ filterChipCancelButton: (chip) => {
104
+ if (!chip) {
105
+ return utilities.getNthElement(cy.get(`.filter-chip button[aria-label*="Remove"]`), 0);
106
+ }
107
+ return utilities.getNthElement(cy.get(`.filter-chip[aria-label*="${chip}"] button[aria-label*="Remove"]`), 0);
108
+ },
109
+ filterChipClearAll: () => cy.get('.filter-chip-clearall'),
110
+ };
15
111
 
16
112
  const steps = {
17
113
  navigateToBrowseItemsPage: () => {
18
114
  cy.visit('/item-engine/demo/browse-items');
19
115
  },
116
+
117
+ navigateToThinkSphereBrowseItemsPage: () => {
118
+ cy.visit('/item-engine/thinksphere/browse-items');
119
+ },
120
+
121
+ navigateToReviewItemsPage: () => {
122
+ browseItemsPage.steps.navigateToThinkSphereBrowseItemsPage();
123
+ browseItemsPage.steps.clickOnItemReferenceId();
124
+ browseItemsPage.steps.clickOnAddReviewItem();
125
+ },
126
+
127
+ clickOnAddReviewItem: () => {
128
+ browseItemsPage.addReviewQuestionButton()
129
+ .click();
130
+ },
20
131
 
21
132
  verifyBrowseItemContainerIsVisible: () => {
22
133
  browseItemsPage.browseItemPageWrapper()
@@ -44,8 +155,8 @@ const steps = {
44
155
  },
45
156
 
46
157
  /**
47
- * @param {string} value of the text that needs to be searched
48
- * @description enters value in input field and searched for the entered value
158
+ * @param {string} value - The text that needs to be searched.
159
+ * @description Enters value in input field and searches for the entered value.
49
160
  */
50
161
  search: (value) => {
51
162
  browseItemsPage.searchInputField()
@@ -81,9 +192,782 @@ const steps = {
81
192
  }
82
193
  });
83
194
  },
84
- }
195
+
196
+ clickOnBrowseThinkSphereItemsMenuBarOption: () => {
197
+ browseItemsPage.browseThinksphereItemsMenuBarOption()
198
+ .click();
199
+ cy.interceptGraphql('getItems');
200
+ cy.wait(2000);
201
+ },
202
+
203
+ verifyBrowseThinkSphereItemsMenuBarOptionSelected: () => {
204
+ browseItemsPage.browseThinksphereItemsMenuBarOption()
205
+ .parents('.MuiButtonBase-root.MuiListItemButton-root.MuiListItemButton-gutters')
206
+ .should('have.class', 'Mui-selected');
207
+ },
208
+
209
+ verifyBrowseItemsPageWrapperSection: () => {
210
+ utilities.verifyElementVisibilityState(browseItemsPage.browseItemPageWrapper(), 'visible');
211
+ },
212
+
213
+ verifyBrowseItemPageHeaderActionWrapper: () => {
214
+ utilities.verifyElementVisibilityState(browseItemsPage.browseItemPageHeaderActionWrapper(), 'visible');
215
+ },
216
+
217
+ clickOnCreateItemButton: () => {
218
+ browseItemsPage.buttonCreateItem()
219
+ .click();
220
+ cy.interceptGraphql('getQuestionTypeAndResourceTypeList');
221
+ cy.wait(2000);
222
+ },
223
+
224
+ /**
225
+ * Verifies the page URL.
226
+ * @param {string} url - The URL to verify.
227
+ */
228
+ verifyPageUrl: (url) => { cy.url().should('contain', Cypress.config().baseUrl + url); },
229
+
230
+ clickWindowsBack: () => { cy.go('back'); },
231
+
232
+ /**
233
+ * Verifies the column headers in the listing table.
234
+ * @param {Array<string>} tableHeader - The table headers to verify.
235
+ */
236
+ verifyColumnHeadersInListingTable: (tableHeader) => {
237
+ tableHeader.forEach((i, count) => { utilities.verifyInnerText(browseItemsPage.tableColumnHeader(count), i); });
238
+ },
239
+
240
+ /**
241
+ * Verifies the sort enable/disable state for table column headers.
242
+ * @param {Array<string>} sort - The sort states to verify.
243
+ */
244
+ verifySortEnableDisableForTableColumnHeader: (sort) => {
245
+ sort.forEach((i, count) => {
246
+ browseItemsPage.tableColumnHeader(count).parent()
247
+ .should(i, 'sort-enabled');
248
+ });
249
+ },
250
+
251
+ verifyTableSortDescendingByDefault: () => {
252
+ browseItemsPage.tableColumnHeader(1)
253
+ .within(() => {
254
+ utilities.verifyElementVisibilityState(browseItemsPage.iconSortDescending(), 'visible');
255
+ });
256
+ },
257
+
258
+ /**
259
+ * Verifies the sort functionality on column header click.
260
+ * @param {number} count - The column index to click.
261
+ */
262
+ verifySortFunctionalityOnColumnHeaderClick: (count) => {
263
+ browseItemsPage.tableColumnHeader(count)
264
+ .click();
265
+ cy.interceptGraphql('getItems');
266
+ browseItemsPage.tableColumnHeader(count)
267
+ .within(() => {
268
+ browseItemsPage.iconSortDescending()
269
+ .should('exist')
270
+ });
271
+ },
272
+
273
+ /**
274
+ * Adds text in the search bar.
275
+ * @param {string} text - The text to add in the search bar.
276
+ */
277
+ addTextInSearchBar: (text) => {
278
+ browseItemsPage.searchBar()
279
+ .type(text)
280
+ .should('have.value', text);
281
+ },
282
+
283
+ clickOnSearchIcon: () => {
284
+ browseItemsPage.buttonSearch()
285
+ .click();
286
+ cy.interceptGraphql('getItems');
287
+ },
288
+
289
+ /**
290
+ * Verifies the pagination count.
291
+ * @param {string} text - The text to verify in the pagination count.
292
+ */
293
+ verifyPaginationCount: (text) => {
294
+ utilities.getNthElement(browseItemsPage.paginationCountText(), 0)
295
+ .should('contain', text);
296
+ utilities.verifyElementVisibilityState(utilities.getNthElement(browseItemsPage.paginationCountText(), 0), 'visible');
297
+ },
298
+
299
+ clearSearchBar: () => {
300
+ browseItemsPage.buttonClearSearch()
301
+ .click();
302
+ cy.interceptGraphql('getItems');
303
+ },
304
+
305
+ clickOnItemReferenceId: () => {
306
+ browseItemsPage.tableRow(0)
307
+ .within(() => {
308
+ browseItemsPage.itemCellItemTitle()
309
+ .click();
310
+ });
311
+ cy.interceptGraphql('getItemPreview');
312
+ },
313
+
314
+ clickOnNgiePopoverContainer: () => {
315
+ browseItemsPage.popoverContainer()
316
+ .click();
317
+ },
318
+
319
+ clickOnActionButton: () => {
320
+ browseItemsPage.tableRow(0)
321
+ .within(() => {
322
+ browseItemsPage.actionMenuButton()
323
+ .click();
324
+ });
325
+ },
326
+
327
+ verifyActionMenuDisplaysCorrectOptions: () => {
328
+ const menuOptions = ['Delete', 'Duplicate/new version'];
329
+ browseItemsPage.actionsMenu()
330
+ .within(() => {
331
+ menuOptions.forEach((i, count) => {
332
+ browseItemsPage.actionsMenuItem(count)
333
+ .within(() => {
334
+ utilities.verifyInnerText(cy.get('span[class*="MuiListItemText-primary"]'), i);
335
+ });
336
+ });
337
+ });
338
+ },
339
+
340
+ verifySearchBarComponent: () => {
341
+ utilities.verifyElementVisibilityState(browseItemsPage.searchBar(), 'visible');
342
+ },
343
+
344
+ verifySearchIcon: () => {
345
+ utilities.verifyElementVisibilityState(browseItemsPage.buttonSearchSVG(), 'visible');
346
+ },
347
+
348
+ verifyCloseIcon: () => {
349
+ browseItemsPage.steps.addTextInSearchBar('~zzz');
350
+ utilities.verifyElementVisibilityState(browseItemsPage.buttonClearSearch(), 'visible');
351
+ browseItemsPage.steps.clearSearchBar();
352
+ },
353
+
354
+ hoverOnSearchBarComponent: () => {
355
+ utilities.hoverOverElement(browseItemsPage.searchBar().parent());
356
+ },
357
+
358
+ verifyPaginationSection: () => {
359
+ utilities.verifyElementVisibilityState(utilities.getNthElement(browseItemsPage.paginationBlock(), 0), 'visible');
360
+ },
361
+
362
+ /**
363
+ * Verifies the items on the page.
364
+ * @param {number} count - The number of items to verify.
365
+ */
366
+ verifyItemsOnPage: (count) => {
367
+ utilities.verifyElementVisibilityState(browseItemsPage.tableRow(count - 1), 'visible');
368
+ utilities.verifyElementVisibilityState(browseItemsPage.tableRow(count), 'notExist');
369
+ },
370
+
371
+ clickOnNextPageButton: () => {
372
+ utilities.getNthElement(browseItemsPage.paginationBlock(), 0)
373
+ .within(() => {
374
+ browseItemsPage.buttonNext()
375
+ .click();
376
+ });
377
+ cy.interceptGraphql('getItems');
378
+ },
379
+
380
+ clickOnPreviousPageButton: () => {
381
+ utilities.getNthElement(browseItemsPage.paginationBlock(), 0)
382
+ .within(() => {
383
+ browseItemsPage.buttonPrevious()
384
+ .click();
385
+ });
386
+ cy.interceptGraphql('getItems');
387
+ },
388
+
389
+ hoverOnNextPageButton: () => {
390
+ utilities.getNthElement(browseItemsPage.paginationBlock(), 0)
391
+ .within(() => {
392
+ utilities.hoverOverElement(browseItemsPage.buttonNext());
393
+ });
394
+ },
395
+
396
+ hoverOnCreateItemButton: () => {
397
+ utilities.hoverOverElement(browseItemsPage.buttonCreateItem());
398
+ },
399
+
400
+ /**
401
+ * Hovers over a table row.
402
+ * @param {number} rowNumber - The row number to hover over.
403
+ */
404
+ hoverOnTableRow: (rowNumber) => {
405
+ utilities.hoverOverElement(browseItemsPage.tableRow(rowNumber));
406
+ },
407
+
408
+ /**
409
+ * Hovers over the action button in a table row.
410
+ * @param {number} rowNumber - The row number containing the action button to hover over.
411
+ */
412
+ hoverOnActionButton: (rowNumber) => {
413
+ browseItemsPage.tableRow(rowNumber)
414
+ .within(() => {
415
+ utilities.hoverOverElement(browseItemsPage.actionMenuButton());
416
+ });
417
+ },
418
+
419
+ verifyDesktopIcon: () => {
420
+ utilities.verifyElementVisibilityState(browseItemsPage.buttonDesktopViewToggle(), 'visible');
421
+ },
422
+
423
+ verifyMobileIcon: () => {
424
+ utilities.verifyElementVisibilityState(browseItemsPage.buttonMobileViewToggle(), 'visible');
425
+ },
426
+
427
+ /**
428
+ * Hovers over the view mode button.
429
+ * @param {string} viewMode - The view mode to hover over ('desktop' or 'mobile').
430
+ */
431
+ hoverOnViewModeButton: (viewMode) => {
432
+ if (viewMode === 'desktop') {
433
+ utilities.hoverOverElement(browseItemsPage.buttonDesktopViewToggle());
434
+ } else {
435
+ utilities.hoverOverElement(browseItemsPage.buttonMobileViewToggle());
436
+ }
437
+ },
438
+
439
+ /**
440
+ * Triggers mouseover on the view mode icon.
441
+ * @param {string} viewMode - The view mode icon to trigger mouseover on ('desktop' or 'mobile').
442
+ */
443
+ triggerMouseOverOnViewModeIcon: (viewMode) => {
444
+ if (viewMode === 'desktop') {
445
+ browseItemsPage.buttonDesktopViewToggle().trigger('mouseover');
446
+ } else {
447
+ browseItemsPage.buttonMobileViewToggle().trigger('mouseover');
448
+ }
449
+ },
450
+
451
+ /**
452
+ * Triggers mouseout on the view mode icon.
453
+ * @param {string} viewMode - The view mode icon to trigger mouseout on ('desktop' or 'mobile').
454
+ */
455
+ triggerMouseOutOnViewModeIcon: (viewMode) => {
456
+ if (viewMode === 'desktop') {
457
+ browseItemsPage.buttonDesktopViewToggle().trigger('mouseout');
458
+ } else {
459
+ browseItemsPage.buttonMobileViewToggle().trigger('mouseout');
460
+ }
461
+ },
462
+
463
+ verifyTooltipPresent: () => {
464
+ utilities.verifyElementVisibilityState(browseItemsPage.tooltipText(), 'visible');
465
+ },
466
+
467
+ /**
468
+ * Verifies the tooltip text.
469
+ * @param {string} text - The text to verify in the tooltip.
470
+ */
471
+ verifyTooltipText: (text) => {
472
+ utilities.verifyInnerText(browseItemsPage.tooltipText(), text);
473
+ },
474
+
475
+ /**
476
+ * Clicks on the view mode icon.
477
+ * @param {string} viewMode - The view mode icon to click ('desktop' or 'mobile').
478
+ */
479
+ clickOnViewModeIcon: (viewMode) => {
480
+ if (viewMode === 'desktop') {
481
+ browseItemsPage.buttonDesktopViewToggle().click();
482
+ } else {
483
+ browseItemsPage.buttonMobileViewToggle().click();
484
+ }
485
+ },
486
+
487
+ /**
488
+ * Verifies the main wrapper width.
489
+ * @param {string} width - The width to verify.
490
+ */
491
+ verifyMainWrapperWidth: (width) => {
492
+ browseItemsPage.browseItemPageWrapper()
493
+ .should('have.css', 'width', width);
494
+ },
495
+
496
+ /**
497
+ * Verifies the enable/disable state of the mobile view sort dropdown.
498
+ * @param {boolean} isEnabled - Whether the sort dropdown should be enabled.
499
+ */
500
+ verifyMobileViewSortDropdownEnableDisableState: (isEnabled) => {
501
+ browseItemsPage.mobileViewSortByWrapper()
502
+ .should('have.css', 'opacity', isEnabled ? '1' : '0.5');
503
+ },
504
+
505
+ verifySortDropdown: () => {
506
+ utilities.verifyElementVisibilityState(browseItemsPage.mobileViewSortByDropdown(), 'visible');
507
+ },
508
+
509
+ /**
510
+ * Verifies the sort dropdown label.
511
+ * @param {string} sortText - The text to verify in the sort dropdown label.
512
+ */
513
+ verifySortDropdownLabel: (sortText) => {
514
+ utilities.verifyInnerText(browseItemsPage.mobileViewSortByDropdownLabelWrapper(), sortText);
515
+ },
516
+
517
+ verifySortDescendingIcon: () => {
518
+ utilities.verifyElementVisibilityState(browseItemsPage.mobileViewSortDescendingSVG(), 'visible');
519
+ },
520
+
521
+ clickOnSortDropdown: () => {
522
+ browseItemsPage.mobileViewSortByDropdown()
523
+ .click();
524
+ },
525
+
526
+ /**
527
+ * Verifies the sort dropdown options.
528
+ * @param {Array<string>} options - The options to verify in the sort dropdown.
529
+ */
530
+ verifySortDropdownOptions: (options) => {
531
+ options.forEach((i, count) => {
532
+ utilities.verifyElementVisibilityState(browseItemsPage.mobileViewSortbyDropdownOptions(count), 'visible');
533
+ utilities.verifyInnerText(browseItemsPage.mobileViewSortbyDropdownOptions(count), i);
534
+ });
535
+ },
536
+
537
+ /**
538
+ * Clicks on a sort option.
539
+ * @param {number} count - The index of the sort option to click.
540
+ */
541
+ clickOnSortOption: (count) => {
542
+ browseItemsPage.mobileViewSortbyDropdownOptions(count)
543
+ .click();
544
+ cy.interceptGraphql('getItems');
545
+ },
546
+
547
+ /**
548
+ * Verifies that a sort dropdown option is selected.
549
+ * @param {number} count - The index of the sort option to verify.
550
+ */
551
+ sortDropdownOptionSelected: (count) => {
552
+ browseItemsPage.mobileViewSortbyDropdownOptions(count)
553
+ .should('have.css', 'background-color', css.color.secondaryBtnBorder);
554
+ },
555
+
556
+ clickOnMobileViewSortAscendingIcon: () => {
557
+ browseItemsPage.mobileViewSortAscendingSVG()
558
+ .click();
559
+ cy.interceptGraphql('getItems');
560
+ },
561
+
562
+ hoverOnSortDropdown: () => {
563
+ utilities.hoverOverElement(browseItemsPage.mobileViewSortByDropdown());
564
+ },
565
+
566
+ /**
567
+ * Clicks on an action menu item.
568
+ * @param {number} NthActionMenuItem - The index of the action menu item to click.
569
+ */
570
+ clickOnActionMenuItem: (NthActionMenuItem) => {
571
+ browseItemsPage.actionsMenuItem(NthActionMenuItem)
572
+ .click();
573
+ cy.interceptGraphql('getItems');
574
+ cy.wait(2000);
575
+ },
576
+
577
+ /**
578
+ * Verifies the visibility of the duplicate item dialog box.
579
+ * @param {boolean} visible - Whether the dialog box should be visible.
580
+ */
581
+ verifyDuplicateItemDialogBoxIsVisible: (visible) => {
582
+ utilities.verifyElementVisibilityState(dialogBoxBase.dialogBoxRoot(), visible ? 'visible' : 'notExist');
583
+ if (visible) {
584
+ dialogBoxBase.dialogBoxContent()
585
+ .should('contain', "Item saved with reference ID: ")
586
+ .and('contain', " and it's available under 'Browse Items'.");
587
+ dialogBoxBase.dialogBoxContent()
588
+ .find('strong')
589
+ .then(($text) => {
590
+ duplicateItemReferenceID = $text.text();
591
+ });
592
+ }
593
+ },
594
+
595
+ /**
596
+ * Verifies the visibility of the delete item dialog box.
597
+ * @param {boolean} visible - Whether the dialog box should be visible.
598
+ */
599
+ verifyDeleteItemDialogBoxIsVisible: (visible) => {
600
+ utilities.verifyElementVisibilityState(dialogBoxBase.dialogBoxRoot(), visible ? 'visible' : 'notExist');
601
+ if (visible) {
602
+ utilities.verifyInnerText(dialogBoxBase.dialogBoxContent(), 'Are you sure you want to delete this item?');
603
+ }
604
+ },
605
+
606
+ /**
607
+ * Verifies that an item reference ID is not present.
608
+ * @param {string} referenceID - The reference ID to verify is not present.
609
+ */
610
+ verifyItemReferenceIdIsNotPresent: (referenceID) => {
611
+ browseItemsPage.itemCellItemTitle()
612
+ .should('not.contain', referenceID);
613
+ },
614
+
615
+ /**
616
+ * Toggles the filter section by clicking the filter button.
617
+ */
618
+ toggleFilterSection: () => {
619
+ browseItemsPage.filterButton().click();
620
+ },
621
+
622
+ /**
623
+ * Clicks on a filter category.
624
+ * @param {string} category - The category to click on.
625
+ */
626
+ clickOnFilterCategory: (category) => {
627
+ browseItemsPage.filterCategories(category).click();
628
+ },
629
+
630
+ /**
631
+ * Clicks on a filter category checkbox.
632
+ * @param {string} category - The category checkbox to click on.
633
+ */
634
+ clickOnFilterCategoryCheckbox: (category) => {
635
+ browseItemsPage.filterCategoryCheckbox(category).click();
636
+ },
637
+
638
+ /**
639
+ * Clicks on the cancel button of a filter chip.
640
+ * @param {string} category - The category of the filter chip to cancel.
641
+ */
642
+ clickOnFilterChipCancelButton: (category) => {
643
+ browseItemsPage.filterChipCancelButton(category).click();
644
+ },
645
+
646
+ /**
647
+ * Clicks on the "Clear All" button for filter chips.
648
+ */
649
+ clickOnFilterChipClearAll: () => {
650
+ browseItemsPage.filterChipClearAll().click();
651
+ },
652
+ };
653
+
654
+ const tests = {
655
+ verifyItemListTableRows: () => {
656
+ it('Item list table should contain rows in which it should have column data', () => {
657
+ utilities.verifyElementVisibilityState(browseItemsPage.tableRow(0), 'visible');
658
+ utilities.verifyElementVisibilityState(browseItemsPage.tableRow(1), 'visible');
659
+ });
660
+
661
+ it('CSS of \'Browse ThinkSphere Items\' list table row', { tags: 'css' }, () => {
662
+ utilities.verifyCSS(browseItemsPage.tableRow(0), { 'background-color': css.color.transparent });
663
+ utilities.verifyCSS(browseItemsPage.tableRow(1), { 'background-color': css.color.optionsBg });
664
+ });
665
+
666
+ it('CSS of \'Browse ThinkSphere Items\' list table row in hover state', { tags: 'css' }, () => {
667
+ browseItemsPage.steps.hoverOnTableRow(0);
668
+ utilities.verifyCSS(browseItemsPage.tableRow(0), { 'background-color': css.color.tableRowHoverColor });
669
+ });
670
+ },
671
+
672
+ /**
673
+ * Verifies the item reference ID.
674
+ * @param {string} referenceID - The reference ID to verify.
675
+ * @param {boolean} visible - Whether the reference ID should be visible.
676
+ */
677
+ verifyItemReferenceId: (referenceID, visible) => {
678
+ if (visible) {
679
+ it('Item list table should contain rows in which it should have Reference ID', () => {
680
+ browseItemsPage.tableRow(0)
681
+ .within(() => {
682
+ utilities.verifyInnerText(browseItemsPage.itemCellItemTitle(), referenceID);
683
+ utilities.verifyElementVisibilityState(browseItemsPage.itemCellItemTitle(), 'visible');
684
+ });
685
+ });
686
+
687
+ it('When user click on the Reference ID, then it should navigate to respective item edit item page', () => {
688
+ cy.interceptGraphql('getItems');
689
+ browseItemsPage.steps.clickOnItemReferenceId(referenceID);
690
+ browseItemsPage.steps.verifyPageUrl('/item-engine/thinksphere/edit-item');
691
+ browseItemsPage.steps.clickWindowsBack();
692
+ cy.wait('@getItems');
693
+ });
694
+
695
+ it('CSS of list table row data reference id', { tags: 'css' }, () => {
696
+ browseItemsPage.tableRow(0)
697
+ .within(() => {
698
+ utilities.verifyCSS(browseItemsPage.itemCellItemTitle(), {
699
+ 'color': css.color.primaryBtnBg,
700
+ 'font-size': css.fontSize.default,
701
+ 'font-weight': css.fontWeight.regular
702
+ });
703
+ });
704
+ });
705
+ } else {
706
+ it('Item list table should contain rows in which it should not have Reference ID', () => {
707
+ browseItemsPage.tableRow(0)
708
+ .within(() => {
709
+ browseItemsPage.itemCellItemTitle()
710
+ .should('not.contain', referenceID);
711
+ });
712
+ });
713
+ }
714
+ },
715
+
716
+ /**
717
+ * Verifies the question instruction.
718
+ * @param {string} questionInstruction - The question instruction to verify.
719
+ */
720
+ verifyQuestionInstruction: (questionInstruction) => {
721
+ it('Item list table should contain rows in which it should have question instruction', () => {
722
+ browseItemsPage.tableRow(0)
723
+ .within(() => {
724
+ utilities.verifyInnerText(browseItemsPage.itemCellInstructionText(), questionInstruction);
725
+ utilities.verifyElementVisibilityState(browseItemsPage.itemCellInstructionText(), 'visible');
726
+ });
727
+ });
728
+
729
+ it('CSS of list table row data question instruction', { tags: 'css' }, () => {
730
+ browseItemsPage.tableRow(0)
731
+ .within(() => {
732
+ utilities.verifyCSS(browseItemsPage.itemCellInstructionText(), {
733
+ 'color': css.color.placeholderText,
734
+ 'font-size': css.fontSize.normal,
735
+ 'font-weight': css.fontWeight.regular
736
+ });
737
+ });
738
+ });
739
+ },
740
+
741
+ verifyLastUpdatedTimeComponent: () => {
742
+ it('Item list table should contain rows in which it should have last updated time', () => {
743
+ browseItemsPage.tableRow(0)
744
+ .within(() => {
745
+ utilities.verifyElementVisibilityState(utilities.getNthElement(browseItemsPage.lastUpdatedValue(), 4), 'visible');
746
+ });
747
+ });
748
+
749
+ it('CSS of list table row data last updated time', { tags: 'css' }, () => {
750
+ browseItemsPage.tableRow(0)
751
+ .within(() => {
752
+ utilities.verifyCSS(utilities.getNthElement(browseItemsPage.lastUpdatedValue(), 4), {
753
+ 'color': css.color.labels,
754
+ 'font-size': css.fontSize.default,
755
+ 'font-weight': css.fontWeight.regular
756
+ });
757
+ });
758
+ });
759
+ },
760
+
761
+ verifyCreatedOnTimeComponent: () => {
762
+ it('Item list table should contain rows in which it should have last updated time', () => {
763
+ browseItemsPage.tableRow(0)
764
+ .within(() => {
765
+ utilities.verifyElementVisibilityState(utilities.getNthElement(browseItemsPage.lastUpdatedValue(), 6), 'visible');
766
+ });
767
+ });
768
+
769
+ it('CSS of list table row data last updated time', { tags: 'css' }, () => {
770
+ browseItemsPage.tableRow(0)
771
+ .within(() => {
772
+ utilities.verifyCSS(utilities.getNthElement(browseItemsPage.lastUpdatedValue(), 6), {
773
+ 'color': css.color.labels,
774
+ 'font-size': css.fontSize.default,
775
+ 'font-weight': css.fontWeight.regular
776
+ });
777
+ });
778
+ });
779
+ },
780
+
781
+ verifyActionButton: () => {
782
+ it('Item list table should contain rows in which it should have action button', () => {
783
+ browseItemsPage.tableRow(0)
784
+ .within(() => {
785
+ utilities.verifyElementVisibilityState(browseItemsPage.actionMenuButton(), 'visible');
786
+ });
787
+ });
788
+
789
+ it('CSS of list table row data action button', { tags: 'css' }, () => {
790
+ browseItemsPage.tableRow(0)
791
+ .within(() => {
792
+ utilities.verifyCSS(browseItemsPage.actionMenuButton(), {
793
+ 'color': css.color.primaryBtnBg
794
+ });
795
+ });
796
+ });
797
+
798
+ it('When user click on action button, then it should open action menu', () => {
799
+ browseItemsPage.steps.clickOnActionButton();
800
+ utilities.verifyElementVisibilityState(browseItemsPage.actionsMenu(), 'visible');
801
+ browseItemsPage.steps.verifyActionMenuDisplaysCorrectOptions();
802
+ });
803
+
804
+ it('CSS of list table row data action menu', { tags: 'css' }, () => {
805
+ browseItemsPage.actionsMenu()
806
+ .within(() => {
807
+ browseItemsPage.actionsMenuItem(0)
808
+ .within(() => {
809
+ utilities.verifyCSS(cy.get('span[class*="MuiListItemText-primary"]'), {
810
+ 'color': css.color.secondaryBtn,
811
+ 'font-size': css.fontSize.default,
812
+ 'font-weight': css.fontWeight.regular
813
+ })
814
+ });
815
+ });
816
+ });
817
+
818
+ it('When user click on \'ngie-popover-container\', then it should close action menu', () => {
819
+ browseItemsPage.steps.clickOnNgiePopoverContainer();
820
+ utilities.verifyElementVisibilityState(browseItemsPage.actionsMenu(), 'notExist');
821
+ });
822
+
823
+ it('CSS of list table row data action button in hover state', { tags: 'css' }, () => {
824
+ browseItemsPage.steps.hoverOnActionButton(0);
825
+ browseItemsPage.tableRow(0)
826
+ .within(() => {
827
+ utilities.verifyCSS(browseItemsPage.actionMenuButton(), {
828
+ 'background-color': css.color.tableRowHoverColor
829
+ });
830
+ });
831
+ });
832
+
833
+ it('If the user clicks on the Duplicate/New Version option, a popup should be displayed. Also, a copy of the item type should get created with a different name', () => {
834
+ browseItemsPage.steps.clickOnActionButton();
835
+ browseItemsPage.steps.clickOnActionMenuItem(1);
836
+ browseItemsPage.steps.verifyDuplicateItemDialogBoxIsVisible(true);
837
+ });
838
+
839
+ it('CSS of Duplicate/New Version option, a popup', { tags: 'css' }, () => {
840
+ utilities.verifyCSS(dialogBoxBase.dialogBoxRoot(), {
841
+ 'box-shadow': `${css.color.dialogBoxBoxShadow} 0px 0px 10px 0px`,
842
+ 'background-color': css.color.primaryBtn,
843
+ 'border': `1px solid ${css.color.secondaryBtnBorder}`,
844
+ 'border-radius': '8px'
845
+ });
846
+ utilities.verifyCSS(dialogBoxBase.dialogBoxContent(), {
847
+ 'color': css.color.codeBlockText,
848
+ 'font-size': css.fontSize.default,
849
+ 'font-weight': css.fontWeight.regular
850
+ });
851
+ utilities.verifyCSS(dialogBoxBase.buttonClose().find('svg'), {
852
+ 'fill': css.color.standardTableCellText,
853
+ 'width': '24px',
854
+ 'height': '24px'
855
+ });
856
+ });
857
+
858
+ it('If the user clicks on the close popup button, then popup should be close', () => {
859
+ dialogBoxBase.buttonClose()
860
+ .click();
861
+ browseItemsPage.steps.verifyDuplicateItemDialogBoxIsVisible(false);
862
+ });
863
+
864
+ it('Newly created item should be displayed in the list', () => {
865
+ cy.clearCookies();
866
+ cy.reload(true);
867
+ cy.interceptGraphql('getItems');
868
+ cy.wait(2000);
869
+ browseItemsPage.tests.verifyItemReferenceId(duplicateItemReferenceID, true);
870
+ });
871
+
872
+ it('If the user clicks on the Delete Action menu item, a warning popup should be displayed', () => {
873
+ browseItemsPage.steps.clickOnActionButton();
874
+ browseItemsPage.steps.clickOnActionMenuItem(0);
875
+ browseItemsPage.steps.verifyDeleteItemDialogBoxIsVisible(true);
876
+ });
877
+
878
+ it('CSS of Delete Action menu item warning popup', { tags: 'css' }, () => {
879
+ utilities.verifyCSS(dialogBoxBase.dialogBoxRoot(), {
880
+ 'box-shadow': `${css.color.dialogBoxBoxShadow} 0px 0px 10px 0px`,
881
+ 'background-color': css.color.primaryBtn,
882
+ 'border': `1px solid ${css.color.secondaryBtnBorder}`,
883
+ 'border-radius': '8px'
884
+ });
885
+ utilities.verifyCSS(dialogBoxBase.dialogBoxContent(), {
886
+ 'color': css.color.codeBlockText,
887
+ 'font-size': css.fontSize.default,
888
+ 'font-weight': css.fontWeight.regular
889
+ });
890
+ utilities.verifyCSS(dialogBoxBase.buttonReject(), {
891
+ 'color': css.color.highlightedTableCell,
892
+ 'box-shadow': `${css.color.secondaryBtnBorder} 0px 5px 0px 0px`,
893
+ 'background-color': css.color.transparent,
894
+ 'border': `1px solid ${css.color.secondaryBtnBorder}`,
895
+ 'font-size': css.fontSize.default,
896
+ 'font-weight': css.fontWeight.semibold,
897
+ 'padding': '12px 16px'
898
+ });
899
+ utilities.verifyCSS(dialogBoxBase.buttonAccept(), {
900
+ 'color': css.color.primaryBtn,
901
+ 'box-shadow': `${css.color.primaryBtnBorder} 0px 5px 0px 0px`,
902
+ 'background-color': css.color.primaryBtnBg,
903
+ 'border': `1px solid ${css.color.primaryBtnBorder}`,
904
+ 'font-size': css.fontSize.default,
905
+ 'font-weight': css.fontWeight.semibold,
906
+ 'padding': '12px 16px'
907
+ });
908
+ });
909
+
910
+ it('If the user clicks on the reject button of warning, then popup should be close', () => {
911
+ dialogBoxBase.buttonReject()
912
+ .click();
913
+ browseItemsPage.steps.verifyDeleteItemDialogBoxIsVisible(false);
914
+ });
915
+
916
+ it('If the user clicks on the accept button of warning, then popup should be close and Item should get deleted', () => {
917
+ browseItemsPage.steps.clickOnActionButton();
918
+ browseItemsPage.steps.clickOnActionMenuItem(0);
919
+ dialogBoxBase.buttonAccept()
920
+ .click();
921
+ cy.interceptGraphql('getItems');
922
+ cy.wait(2000);
923
+ browseItemsPage.steps.verifyDeleteItemDialogBoxIsVisible(false);
924
+ cy.clearCookies();
925
+ cy.reload(true);
926
+ cy.interceptGraphql('getItems');
927
+ cy.wait(2000);
928
+ browseItemsPage.steps.verifyItemReferenceIdIsNotPresent(duplicateItemReferenceID, false);
929
+ });
930
+ },
931
+
932
+ /**
933
+ * Verifies if the desktop icon is selected.
934
+ * @param {boolean} isSelected - Whether the desktop icon should be selected.
935
+ */
936
+ verifyDesktopIconSelected: (isSelected) => {
937
+ it('Desktop icon should have pressed in the aria lable attribute', () => {
938
+ browseItemsPage.buttonDesktopViewToggle()
939
+ .should('have.attr', 'aria-label', `Desktop View toggle button${isSelected ? ' pressed' : ' not pressed'}`);
940
+ });
941
+
942
+ it('Desktop icon svg should have selected css applied', { tags: 'css' }, () => {
943
+ utilities.verifyCSS(browseItemsPage.buttonDesktopViewToggle().parent(), {
944
+ 'background-color': isSelected ? css.color.desktopMobileViewtoggleButtonSelectedBg : css.color.transparent,
945
+ });
946
+ });
947
+ },
948
+
949
+ /**
950
+ * Verifies if the mobile icon is selected.
951
+ * @param {boolean} isSelected - Whether the mobile icon should be selected.
952
+ */
953
+ verifyMobileIconSelected: (isSelected) => {
954
+ it('Mobile icon should have pressed in the aria lable attribute', () => {
955
+ browseItemsPage.buttonMobileViewToggle()
956
+ .should('have.attr', 'aria-label', `Mobile View toggle button${isSelected ? ' pressed' : ' not pressed'}`);
957
+ });
958
+
959
+ it('Mobile icon svg should have selected css applied', { tags: 'css' }, () => {
960
+ utilities.verifyCSS(browseItemsPage.buttonMobileViewToggle().parent(), {
961
+ 'background-color': isSelected ? css.color.desktopMobileViewtoggleButtonSelectedBg : css.color.transparent,
962
+ });
963
+ });
964
+ },
965
+ };
85
966
 
86
967
  export const browseItemsPage = {
87
968
  ...selectors,
88
- steps
89
- }
969
+ ...searchBarSelectors,
970
+ ...mobileViewBrowsePageSelectors,
971
+ steps,
972
+ tests,
973
+ };