@alfresco/aca-playwright-shared 5.1.1 → 5.2.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.
- package/api/tags-api.d.ts +8 -2
- package/esm2022/api/api-client-factory.mjs +131 -0
- package/esm2022/api/categories-api.mjs +66 -0
- package/esm2022/api/favorites-api.mjs +130 -0
- package/esm2022/api/file-actions.mjs +167 -0
- package/esm2022/api/nodes-api.mjs +428 -0
- package/esm2022/api/people-api-models.mjs +41 -0
- package/esm2022/api/queries-api.mjs +70 -0
- package/esm2022/api/rules-api.mjs +258 -0
- package/esm2022/api/search-api.mjs +75 -0
- package/esm2022/api/shared-links-api.mjs +137 -0
- package/esm2022/api/sites-api.mjs +156 -0
- package/esm2022/api/tags-api.mjs +92 -0
- package/esm2022/api/trashcan-api.mjs +52 -0
- package/{esm2020 → esm2022}/models/user-model.mjs +11 -5
- package/esm2022/page-objects/components/aca-header.component.mjs +78 -0
- package/esm2022/page-objects/components/actions-dropdown.component.mjs +100 -0
- package/esm2022/page-objects/components/adf-info-drawer.component.mjs +102 -0
- package/esm2022/page-objects/components/base.component.mjs +70 -0
- package/esm2022/page-objects/components/breadcrumb/breadcrumb.component.mjs +47 -0
- package/esm2022/page-objects/components/conditions.component.mjs +72 -0
- package/esm2022/page-objects/components/dataTable/data-table.component.mjs +343 -0
- package/esm2022/page-objects/components/dataTable/mat-menu.component.mjs +67 -0
- package/{esm2020/page-objects/components/dialogs/manage-versions-dialog.component.mjs → esm2022/page-objects/components/dataTable/toolbar.component.mjs} +13 -8
- package/esm2022/page-objects/components/datetime-picker/datetime-picker.component.mjs +53 -0
- package/esm2022/page-objects/components/dialogs/adf-confirm-dialog.component.mjs +36 -0
- package/esm2022/page-objects/components/dialogs/adf-folder-dialog.component.mjs +57 -0
- package/esm2022/page-objects/components/dialogs/adf-library-dialog.component.mjs +64 -0
- package/esm2022/page-objects/components/dialogs/content-node-selector-dialog.mjs +68 -0
- package/esm2022/page-objects/components/dialogs/create-from-template-dialog-component.mjs +55 -0
- package/esm2022/page-objects/components/dialogs/delete-trash-dialog.component.mjs +54 -0
- package/esm2022/page-objects/components/dialogs/edit-dialog.component.mjs +39 -0
- package/esm2022/page-objects/components/dialogs/link-rules.component.mjs +58 -0
- package/esm2022/page-objects/components/dialogs/manage-versions-dialog.component.mjs +36 -0
- package/esm2022/page-objects/components/dialogs/password-overlay-dialog.component.mjs +71 -0
- package/esm2022/page-objects/components/dialogs/share-dialog.component.mjs +85 -0
- package/esm2022/page-objects/components/dialogs/upload-dialog.component.mjs +36 -0
- package/esm2022/page-objects/components/dialogs/upload-new-version-dialog.component.mjs +38 -0
- package/esm2022/page-objects/components/dialogs/viewer-overlay-dialog.component.mjs +56 -0
- package/esm2022/page-objects/components/error.component.mjs +34 -0
- package/esm2022/page-objects/components/manageRules/manage-rules-dialog.component.mjs +64 -0
- package/esm2022/page-objects/components/manageRules/manage-rules.component.mjs +70 -0
- package/esm2022/page-objects/components/pagination.component.mjs +174 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-categories.component.mjs +33 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-date.component.mjs +115 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-location.component.mjs +40 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-logic.component.mjs +36 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-properties.component.mjs +83 -0
- package/esm2022/page-objects/components/search/search-filters/search-filters-tags.component.mjs +40 -0
- package/esm2022/page-objects/components/search/search-filters.component.mjs +45 -0
- package/esm2022/page-objects/components/search/search-input.component.mjs +48 -0
- package/esm2022/page-objects/components/search/search-overlay.components.mjs +83 -0
- package/esm2022/page-objects/components/search/search-sorting-picker.components.mjs +72 -0
- package/esm2022/page-objects/components/sidenav.component.mjs +88 -0
- package/esm2022/page-objects/components/snackBar/snack-bar.component.mjs +54 -0
- package/esm2022/page-objects/components/spinner.component.mjs +41 -0
- package/esm2022/page-objects/components/viewer.component.mjs +110 -0
- package/esm2022/page-objects/pages/base.page.mjs +84 -0
- package/esm2022/page-objects/pages/favorites-libraries.page.mjs +43 -0
- package/esm2022/page-objects/pages/favorites.page.mjs +49 -0
- package/esm2022/page-objects/pages/login.page.mjs +62 -0
- package/esm2022/page-objects/pages/my-libraries.page.mjs +54 -0
- package/esm2022/page-objects/pages/nodes.page.mjs +40 -0
- package/esm2022/page-objects/pages/personal-files.page.mjs +85 -0
- package/esm2022/page-objects/pages/recent-files.page.mjs +45 -0
- package/esm2022/page-objects/pages/search.page.mjs +79 -0
- package/esm2022/page-objects/pages/shared.page.mjs +45 -0
- package/esm2022/page-objects/pages/trash.page.mjs +45 -0
- package/esm2022/page-objects/playwright-base.mjs +33 -0
- package/esm2022/resources/test-files/index.mjs +102 -0
- package/esm2022/utils/logger.mjs +71 -0
- package/esm2022/utils/utils.mjs +145 -0
- package/{fesm2020 → fesm2022}/alfresco-aca-playwright-shared.mjs +816 -675
- package/fesm2022/alfresco-aca-playwright-shared.mjs.map +1 -0
- package/package.json +5 -11
- package/page-objects/components/adf-info-drawer.component.d.ts +18 -0
- package/page-objects/components/viewer.component.d.ts +11 -0
- package/page-objects/pages/search.page.d.ts +1 -1
- package/resources/test-files/index.d.ts +24 -0
- package/utils/utils.d.ts +2 -2
- package/esm2020/api/api-client-factory.mjs +0 -111
- package/esm2020/api/categories-api.mjs +0 -65
- package/esm2020/api/favorites-api.mjs +0 -129
- package/esm2020/api/file-actions.mjs +0 -166
- package/esm2020/api/nodes-api.mjs +0 -427
- package/esm2020/api/people-api-models.mjs +0 -34
- package/esm2020/api/queries-api.mjs +0 -69
- package/esm2020/api/rules-api.mjs +0 -251
- package/esm2020/api/search-api.mjs +0 -74
- package/esm2020/api/shared-links-api.mjs +0 -136
- package/esm2020/api/sites-api.mjs +0 -155
- package/esm2020/api/tags-api.mjs +0 -61
- package/esm2020/api/trashcan-api.mjs +0 -54
- package/esm2020/page-objects/components/aca-header.component.mjs +0 -77
- package/esm2020/page-objects/components/actions-dropdown.component.mjs +0 -99
- package/esm2020/page-objects/components/adf-info-drawer.component.mjs +0 -83
- package/esm2020/page-objects/components/base.component.mjs +0 -69
- package/esm2020/page-objects/components/breadcrumb/breadcrumb.component.mjs +0 -46
- package/esm2020/page-objects/components/conditions.component.mjs +0 -75
- package/esm2020/page-objects/components/dataTable/data-table.component.mjs +0 -341
- package/esm2020/page-objects/components/dataTable/mat-menu.component.mjs +0 -66
- package/esm2020/page-objects/components/dataTable/toolbar.component.mjs +0 -39
- package/esm2020/page-objects/components/datetime-picker/datetime-picker.component.mjs +0 -52
- package/esm2020/page-objects/components/dialogs/adf-confirm-dialog.component.mjs +0 -35
- package/esm2020/page-objects/components/dialogs/adf-folder-dialog.component.mjs +0 -56
- package/esm2020/page-objects/components/dialogs/adf-library-dialog.component.mjs +0 -63
- package/esm2020/page-objects/components/dialogs/content-node-selector-dialog.mjs +0 -67
- package/esm2020/page-objects/components/dialogs/create-from-template-dialog-component.mjs +0 -54
- package/esm2020/page-objects/components/dialogs/delete-trash-dialog.component.mjs +0 -53
- package/esm2020/page-objects/components/dialogs/edit-dialog.component.mjs +0 -38
- package/esm2020/page-objects/components/dialogs/link-rules.component.mjs +0 -57
- package/esm2020/page-objects/components/dialogs/password-overlay-dialog.component.mjs +0 -70
- package/esm2020/page-objects/components/dialogs/share-dialog.component.mjs +0 -84
- package/esm2020/page-objects/components/dialogs/upload-dialog.component.mjs +0 -35
- package/esm2020/page-objects/components/dialogs/upload-new-version-dialog.component.mjs +0 -37
- package/esm2020/page-objects/components/dialogs/viewer-overlay-dialog.component.mjs +0 -55
- package/esm2020/page-objects/components/error.component.mjs +0 -33
- package/esm2020/page-objects/components/manageRules/manage-rules-dialog.component.mjs +0 -63
- package/esm2020/page-objects/components/manageRules/manage-rules.component.mjs +0 -69
- package/esm2020/page-objects/components/pagination.component.mjs +0 -173
- package/esm2020/page-objects/components/search/search-filters/search-filters-categories.component.mjs +0 -32
- package/esm2020/page-objects/components/search/search-filters/search-filters-date.component.mjs +0 -114
- package/esm2020/page-objects/components/search/search-filters/search-filters-location.component.mjs +0 -39
- package/esm2020/page-objects/components/search/search-filters/search-filters-logic.component.mjs +0 -35
- package/esm2020/page-objects/components/search/search-filters/search-filters-properties.component.mjs +0 -82
- package/esm2020/page-objects/components/search/search-filters/search-filters-tags.component.mjs +0 -39
- package/esm2020/page-objects/components/search/search-filters.component.mjs +0 -44
- package/esm2020/page-objects/components/search/search-input.component.mjs +0 -47
- package/esm2020/page-objects/components/search/search-overlay.components.mjs +0 -82
- package/esm2020/page-objects/components/search/search-sorting-picker.components.mjs +0 -71
- package/esm2020/page-objects/components/sidenav.component.mjs +0 -86
- package/esm2020/page-objects/components/snackBar/snack-bar.component.mjs +0 -53
- package/esm2020/page-objects/components/spinner.component.mjs +0 -40
- package/esm2020/page-objects/components/viewer.component.mjs +0 -92
- package/esm2020/page-objects/pages/base.page.mjs +0 -80
- package/esm2020/page-objects/pages/favorites-libraries.page.mjs +0 -42
- package/esm2020/page-objects/pages/favorites.page.mjs +0 -48
- package/esm2020/page-objects/pages/login.page.mjs +0 -61
- package/esm2020/page-objects/pages/my-libraries.page.mjs +0 -53
- package/esm2020/page-objects/pages/nodes.page.mjs +0 -39
- package/esm2020/page-objects/pages/personal-files.page.mjs +0 -84
- package/esm2020/page-objects/pages/recent-files.page.mjs +0 -44
- package/esm2020/page-objects/pages/search.page.mjs +0 -78
- package/esm2020/page-objects/pages/shared.page.mjs +0 -44
- package/esm2020/page-objects/pages/trash.page.mjs +0 -44
- package/esm2020/page-objects/playwright-base.mjs +0 -31
- package/esm2020/resources/test-files/index.mjs +0 -78
- package/esm2020/utils/logger.mjs +0 -69
- package/esm2020/utils/utils.mjs +0 -144
- package/fesm2015/alfresco-aca-playwright-shared.mjs +0 -6267
- package/fesm2015/alfresco-aca-playwright-shared.mjs.map +0 -1
- package/fesm2020/alfresco-aca-playwright-shared.mjs.map +0 -1
- /package/{esm2020 → esm2022}/alfresco-aca-playwright-shared.mjs +0 -0
- /package/{esm2020 → esm2022}/api/index.mjs +0 -0
- /package/{esm2020 → esm2022}/api/node-content-tree.mjs +0 -0
- /package/{esm2020 → esm2022}/base-config/global-variables.mjs +0 -0
- /package/{esm2020 → esm2022}/base-config/global.setup.mjs +0 -0
- /package/{esm2020 → esm2022}/base-config/index.mjs +0 -0
- /package/{esm2020 → esm2022}/base-config/playwright.config.mjs +0 -0
- /package/{esm2020 → esm2022}/base-config/report-portal.config.mjs +0 -0
- /package/{esm2020 → esm2022}/fixtures/index.mjs +0 -0
- /package/{esm2020 → esm2022}/fixtures/page-initialization.mjs +0 -0
- /package/{esm2020 → esm2022}/models/custom-config.mjs +0 -0
- /package/{esm2020 → esm2022}/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/components/dataTable/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/components/dialogs/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/components/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/components/manageRules/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/index.mjs +0 -0
- /package/{esm2020 → esm2022}/page-objects/pages/index.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/resources/index.mjs +0 -0
- /package/{esm2020 → esm2022}/resources/test-data/index.mjs +0 -0
- /package/{esm2020 → esm2022}/resources/test-data/test-data-files-folders.mjs +0 -0
- /package/{esm2020 → esm2022}/resources/test-data/test-data-permissions.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/api.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/config.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/error-strings.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/exclude-tests.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/library-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/paths.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/state-helper.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/timeouts.mjs +0 -0
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Alfresco Example Content Application
|
|
5
|
+
*
|
|
6
|
+
* This file is part of the Alfresco Example Content Application.
|
|
7
|
+
* If the software was purchased under a paid Alfresco license, the terms of
|
|
8
|
+
* the paid license agreement will prevail. Otherwise, the software is
|
|
9
|
+
* provided under the following open source license terms:
|
|
10
|
+
*
|
|
11
|
+
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
|
12
|
+
* it under the terms of the GNU Lesser General Public License as published by
|
|
13
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
14
|
+
* (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
|
17
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
+
* GNU Lesser General Public License for more details.
|
|
20
|
+
*
|
|
21
|
+
* You should have received a copy of the GNU Lesser General Public License
|
|
22
|
+
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
+
*/
|
|
24
|
+
import { BaseComponent } from '../base.component';
|
|
25
|
+
import { MatMenuComponent } from './mat-menu.component';
|
|
26
|
+
import { PaginationActionsType, PaginationComponent } from '../pagination.component';
|
|
27
|
+
import { timeouts } from '../../../utils';
|
|
28
|
+
class DataTableComponent extends BaseComponent {
|
|
29
|
+
static rootElement = 'adf-datatable';
|
|
30
|
+
contextMenuActions = new MatMenuComponent(this.page);
|
|
31
|
+
constructor(page, rootElement = DataTableComponent.rootElement) {
|
|
32
|
+
super(page, rootElement);
|
|
33
|
+
}
|
|
34
|
+
pagination = new PaginationComponent(this.page);
|
|
35
|
+
body = this.getChild('.adf-datatable-body');
|
|
36
|
+
getEmptyFolderLocator = this.getChild('.adf-empty-folder');
|
|
37
|
+
getEmptyContentTitleLocator = this.getChild('adf-empty-content .adf-empty-content__title');
|
|
38
|
+
getEmptyContentSubTitleLocator = this.getChild('adf-empty-content .adf-empty-content__subtitle');
|
|
39
|
+
getSelectedRow = this.getChild('.adf-datatable-row.adf-is-selected');
|
|
40
|
+
sortedColumnHeader = this.getChild(`.adf-datatable__header--sorted-asc .adf-datatable-cell-header-content .adf-datatable-cell-value,
|
|
41
|
+
.adf-datatable__header--sorted-desc .adf-datatable-cell-header-content .adf-datatable-cell-value`);
|
|
42
|
+
columnHeaders = this.getChild('.adf-datatable-row .adf-datatable-cell-header .adf-datatable-cell-value');
|
|
43
|
+
emptyList = this.getChild('div.adf-no-content-container');
|
|
44
|
+
emptyListTitle = this.getChild('.adf-empty-content__title');
|
|
45
|
+
emptyListSubtitle = this.getChild('.adf-empty-content__subtitle');
|
|
46
|
+
emptySearchText = this.getChild('.empty-search__text');
|
|
47
|
+
emptyListTest = this.getChild('adf-custom-empty-content-template');
|
|
48
|
+
paginationButton = this.page.locator('.adf-pagination__block button').nth(0);
|
|
49
|
+
paginationOptions = this.page.locator('#cdk-overlay-0 button');
|
|
50
|
+
sitesVisibility = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="Visibility"]');
|
|
51
|
+
sitesName = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="Name"]');
|
|
52
|
+
sitesRole = this.page.locator('.adf-datatable-body [data-automation-id*="datatable-row"] [aria-label="My Role"]');
|
|
53
|
+
lockOwner = this.page.locator('.aca-locked-by--name');
|
|
54
|
+
uncheckedCheckbox = this.page.locator('.mat-mdc-checkbox');
|
|
55
|
+
checkedCheckbox = this.page.locator('.mat-mdc-checkbox-checked');
|
|
56
|
+
highlightedText = '.aca-highlight';
|
|
57
|
+
searchFileName = '.search-file-name';
|
|
58
|
+
searchFileDescription = '[data-automation-id="search-results-entry-description"]';
|
|
59
|
+
searchFileContent = '.aca-result-content';
|
|
60
|
+
/** Locator for row (or rows) */
|
|
61
|
+
getRowLocator = this.page.getByRole('rowgroup').nth(1).locator('adf-datatable-row');
|
|
62
|
+
/** Locator to get "No results found" message */
|
|
63
|
+
getNoResultsFoundMessage = this.getChild('adf-custom-empty-content-template', { hasText: 'No results found' });
|
|
64
|
+
/**
|
|
65
|
+
* Method used in cases where we want to check that some record is visible in the datatable. It will consider whole row
|
|
66
|
+
*
|
|
67
|
+
* @returns reference to cell element which contains text.
|
|
68
|
+
*/
|
|
69
|
+
getRowByName = (name) => this.getChild(`adf-datatable-row`, { hasText: name.toString() });
|
|
70
|
+
/**
|
|
71
|
+
* Method used in cases where we want to check that some record is visible in the datatable.
|
|
72
|
+
* But we want to check it by column header title and value of this column.
|
|
73
|
+
*
|
|
74
|
+
* @returns reference to cell element which contains text.
|
|
75
|
+
*/
|
|
76
|
+
getRowByColumnTitleAndItsCellValue = (columnTitle, cellValue) => this.page.locator(`//div[contains(@title, '${columnTitle}')]//span[contains(text(), '${cellValue}')]/ancestor::adf-datatable-row`);
|
|
77
|
+
/**
|
|
78
|
+
* Method used in cases where we want to retrieve a row from the datatable based on its numerical order within the array.
|
|
79
|
+
*
|
|
80
|
+
* @returns reference to cell element which contains text.
|
|
81
|
+
*/
|
|
82
|
+
getNthRow = (orderNum) => this.getRowLocator.nth(orderNum);
|
|
83
|
+
/**
|
|
84
|
+
* Method used in cases where user have possibility to navigate "inside" the element (it's clickable and has link attribute).
|
|
85
|
+
* Perform action .click() to navigate inside it
|
|
86
|
+
*
|
|
87
|
+
* @returns reference to cell element which contains link.
|
|
88
|
+
*/
|
|
89
|
+
getCellLinkByName = (name) => this.getChild('.adf-cell-value span[role="link"]', { hasText: name });
|
|
90
|
+
/**
|
|
91
|
+
* Method used in cases where we want to localize the element by [aria-label]
|
|
92
|
+
*
|
|
93
|
+
* @returns reference to cell element.
|
|
94
|
+
*/
|
|
95
|
+
getByAriaLabelTitle = (title) => this.getChild(`[aria-label="${title}"]`);
|
|
96
|
+
/**
|
|
97
|
+
* Method used in cases where we want to get the button (hamburger menu) for row element
|
|
98
|
+
*
|
|
99
|
+
* @returns reference to menu placed in row localized by the name
|
|
100
|
+
*/
|
|
101
|
+
getActionsButtonByName = (name) => this.getRowByName(name).locator('mat-icon', { hasText: new RegExp(`^\\s*more_vert\\s*$`, 'g') });
|
|
102
|
+
/**
|
|
103
|
+
* Method used in cases where we want to get the edit button and there is no hamburger menu
|
|
104
|
+
*
|
|
105
|
+
* @returns reference to edit button placed in row localized by the name
|
|
106
|
+
*/
|
|
107
|
+
getEditButtonByName = (name) => this.getRowByName(name).locator('button#editButton');
|
|
108
|
+
/**
|
|
109
|
+
* Method used in cases where we want to get the button and there is no hamburger menu
|
|
110
|
+
*
|
|
111
|
+
* @returns reference to button placed in row localized by the name
|
|
112
|
+
*/
|
|
113
|
+
getButtonByNameForSpecificRow = (elementTitleInRow, buttonTitle) => this.getRowByName(elementTitleInRow).locator('button', { hasText: buttonTitle });
|
|
114
|
+
/**
|
|
115
|
+
* Method used in cases where you want to get some specific cell (by column name) for row which contains some name/title/etc.
|
|
116
|
+
*
|
|
117
|
+
* @returns reference to cell element
|
|
118
|
+
*/
|
|
119
|
+
getCellByColumnNameAndRowItem = (item, columnName) => this.getRowByName(item).locator(`[title="${columnName}"]`);
|
|
120
|
+
/**
|
|
121
|
+
* Method used in cases where we want to get the checkbox for row element
|
|
122
|
+
*
|
|
123
|
+
* @returns reference to checkbox placed in row localized by the name
|
|
124
|
+
*/
|
|
125
|
+
getCheckboxForElement = (item) => this.getRowByName(item).locator('.mat-mdc-checkbox');
|
|
126
|
+
getColumnHeaderByTitleLocator = (headerTitle) => this.getChild('[role="columnheader"]', { hasText: headerTitle });
|
|
127
|
+
getSearchResultLinkByName = (name) => this.getChild('.aca-search-results-row span[role="link"]', { hasText: name });
|
|
128
|
+
getColumnValuesByName = (name) => this.getChild(`div[title="${name}"] span`);
|
|
129
|
+
getColumnHeaderByName = (headerTitle) => this.getChild('.adf-datatable-row .adf-datatable-cell-header .adf-datatable-cell-value', { hasText: headerTitle });
|
|
130
|
+
async sortBy(label, order) {
|
|
131
|
+
const sortColumn = await this.getSortedColumnHeaderText();
|
|
132
|
+
let sortOrder = await this.getSortingOrder();
|
|
133
|
+
if (sortColumn !== label) {
|
|
134
|
+
await this.getColumnHeaderByName(label).hover();
|
|
135
|
+
await this.getColumnHeaderByName(label).click({ force: true });
|
|
136
|
+
sortOrder = await this.getSortingOrder();
|
|
137
|
+
}
|
|
138
|
+
if (sortOrder !== order) {
|
|
139
|
+
await this.getChild('span[class*="adf-datatable__header--sorted"]').click();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* This method is used when we want to perform right mouse click on the dataTable row and perform some action
|
|
144
|
+
*
|
|
145
|
+
* @param name of the data table element with which we want to click
|
|
146
|
+
* @param action provide which action you want to perform
|
|
147
|
+
*/
|
|
148
|
+
async performActionFromExpandableMenu(name, action) {
|
|
149
|
+
await this.goThroughPagesLookingForRowWithName(name);
|
|
150
|
+
const actionButtonLocator = await this.getActionLocatorFromExpandableMenu(name, action);
|
|
151
|
+
await actionButtonLocator.click();
|
|
152
|
+
await this.spinnerWaitForReload();
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Click action from the expandable kebab menu for the element in datatable
|
|
156
|
+
*
|
|
157
|
+
* @param name title of the record you would like to proceed
|
|
158
|
+
* @param action provide button title for the action
|
|
159
|
+
* @param subAction if the action is in sub menu, then provide it here
|
|
160
|
+
*/
|
|
161
|
+
async performActionForElement(name, action, subAction) {
|
|
162
|
+
await this.getActionsButtonByName(name).click();
|
|
163
|
+
await this.contextMenuActions.getButtonByText(action).click();
|
|
164
|
+
if (subAction) {
|
|
165
|
+
await this.contextMenuActions.getButtonByText(subAction).click();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* This method is used when we want to perform double click on the dataTable row to open a file or folder
|
|
170
|
+
*
|
|
171
|
+
* @param name of the data table element with which we want to double click
|
|
172
|
+
*/
|
|
173
|
+
async performClickFolderOrFileToOpen(name) {
|
|
174
|
+
await this.getCellLinkByName(name).click();
|
|
175
|
+
await this.spinnerWaitForReload();
|
|
176
|
+
}
|
|
177
|
+
async isItemPresent(name) {
|
|
178
|
+
await this.goThroughPagesLookingForRowWithName(name);
|
|
179
|
+
return this.getRowByName(name).isVisible();
|
|
180
|
+
}
|
|
181
|
+
async getActionLocatorFromExpandableMenu(name, action) {
|
|
182
|
+
await this.getRowByName(name).click({ button: 'right' });
|
|
183
|
+
return this.contextMenuActions.getButtonByText(action);
|
|
184
|
+
}
|
|
185
|
+
async performActionInExpandableMenu(name, action) {
|
|
186
|
+
await this.getRowByName(name).click({ button: 'right' });
|
|
187
|
+
await this.contextMenuActions.getButtonByText(action).click();
|
|
188
|
+
}
|
|
189
|
+
async goThroughPagesLookingForRowWithName(name) {
|
|
190
|
+
await this.spinnerWaitForReload();
|
|
191
|
+
if (await this.getRowByName(name).isVisible()) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
if (await this.pagination.currentPageLocator.isVisible()) {
|
|
195
|
+
if ((await this.pagination.currentPageLocator.textContent()) === ' of 1 ') {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (await this.pagination.totalPageLocator.isVisible()) {
|
|
200
|
+
const maxPages = (await this.pagination.totalPageLocator?.textContent())?.match(/\d/)[0];
|
|
201
|
+
for (let page = 1; page <= Number(maxPages); page++) {
|
|
202
|
+
if (await this.getRowByName(name).isVisible()) {
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
if (await this.pagination.getArrowLocatorFor(PaginationActionsType.NextPageSelector).isEnabled()) {
|
|
206
|
+
await this.pagination.getArrowLocatorFor(PaginationActionsType.NextPageSelector).click();
|
|
207
|
+
}
|
|
208
|
+
await this.spinnerWaitForReload();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async selectItems(...names) {
|
|
213
|
+
for (const name of names) {
|
|
214
|
+
const isSelected = await this.isRowSelected(name);
|
|
215
|
+
if (!isSelected) {
|
|
216
|
+
const row = this.getRowByName(name);
|
|
217
|
+
await row.hover();
|
|
218
|
+
await row.locator(this.uncheckedCheckbox).click();
|
|
219
|
+
await row.locator(this.checkedCheckbox).waitFor({ state: 'attached' });
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
async isRowSelected(itemName) {
|
|
224
|
+
const row = this.getRowByName(itemName);
|
|
225
|
+
return row.locator(this.checkedCheckbox).isVisible();
|
|
226
|
+
}
|
|
227
|
+
async getColumnHeaders() {
|
|
228
|
+
const columnNameLocator = this.columnHeaders;
|
|
229
|
+
await this.columnHeaders.nth(0).waitFor({ state: 'attached' });
|
|
230
|
+
return columnNameLocator.allTextContents();
|
|
231
|
+
}
|
|
232
|
+
async getSortedColumnHeaderText() {
|
|
233
|
+
return this.sortedColumnHeader.innerText();
|
|
234
|
+
}
|
|
235
|
+
getItemLocationEl(name) {
|
|
236
|
+
return this.getRowByName(name).locator('.aca-location-link');
|
|
237
|
+
}
|
|
238
|
+
async getItemLocationText(name) {
|
|
239
|
+
await this.getItemLocationEl(name).locator('a').waitFor({ state: 'attached' });
|
|
240
|
+
return this.getItemLocationEl(name).innerText();
|
|
241
|
+
}
|
|
242
|
+
async getItemLocationTooltip(name) {
|
|
243
|
+
const location = this.getItemLocationEl(name);
|
|
244
|
+
await location.hover();
|
|
245
|
+
return location.locator('a').getAttribute('title', { timeout: timeouts.normal });
|
|
246
|
+
}
|
|
247
|
+
async clickItemLocation(name) {
|
|
248
|
+
await this.getItemLocationEl(name).click();
|
|
249
|
+
}
|
|
250
|
+
async getSortingOrder() {
|
|
251
|
+
const str = await this.sortedColumnHeader.locator('../..').getAttribute('class');
|
|
252
|
+
if (str.includes('asc')) {
|
|
253
|
+
return 'asc';
|
|
254
|
+
}
|
|
255
|
+
else if (str.includes('desc')) {
|
|
256
|
+
return 'desc';
|
|
257
|
+
}
|
|
258
|
+
return 'none';
|
|
259
|
+
}
|
|
260
|
+
async getRowAllInnerTexts(name) {
|
|
261
|
+
return (await this.getRowByName(name).locator('span').allInnerTexts()).toString();
|
|
262
|
+
}
|
|
263
|
+
async getFirstElementDetail(name) {
|
|
264
|
+
const firstNode = this.getColumnValuesByName(name).first();
|
|
265
|
+
return firstNode.innerText();
|
|
266
|
+
}
|
|
267
|
+
async isEmpty() {
|
|
268
|
+
return this.emptyList.isVisible();
|
|
269
|
+
}
|
|
270
|
+
async getEmptyStateTitle() {
|
|
271
|
+
return (await this.isEmpty()) ? this.emptyListTitle.innerText() : '';
|
|
272
|
+
}
|
|
273
|
+
async getEmptyStateSubtitle() {
|
|
274
|
+
return (await this.isEmpty()) ? this.emptyListSubtitle.innerText() : '';
|
|
275
|
+
}
|
|
276
|
+
async getEmptyListText() {
|
|
277
|
+
return (await this.isEmpty()) ? this.emptyListTest.innerText() : '';
|
|
278
|
+
}
|
|
279
|
+
async getRowsCount() {
|
|
280
|
+
return this.getRowLocator.count();
|
|
281
|
+
}
|
|
282
|
+
async rightClickOnItem(itemName) {
|
|
283
|
+
await this.getCellByColumnNameAndRowItem(itemName, 'Name').click({ button: 'right' });
|
|
284
|
+
}
|
|
285
|
+
async setPaginationTo50() {
|
|
286
|
+
await this.paginationButton.click();
|
|
287
|
+
await this.paginationOptions.getByText('50').click();
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Method used to create objects from names and visibility of sites from datatable
|
|
291
|
+
*
|
|
292
|
+
* @returns an object with sites' names and their corresponding visibility values
|
|
293
|
+
*/
|
|
294
|
+
async getSitesNameAndVisibility() {
|
|
295
|
+
const rowsCount = await this.sitesName.count();
|
|
296
|
+
const sitesInfo = {};
|
|
297
|
+
for (let i = 0; i < rowsCount; i++) {
|
|
298
|
+
let siteVisibilityText = await this.sitesVisibility.nth(i).textContent();
|
|
299
|
+
let siteNameText = await this.sitesName.nth(i).textContent();
|
|
300
|
+
siteVisibilityText = siteVisibilityText.trim().toUpperCase();
|
|
301
|
+
siteNameText = siteNameText.trim();
|
|
302
|
+
sitesInfo[siteNameText] = siteVisibilityText;
|
|
303
|
+
}
|
|
304
|
+
return sitesInfo;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Method used to create objects from names and roles of sites from datatable
|
|
308
|
+
*
|
|
309
|
+
* @returns an object with sites' names and their corresponding role values
|
|
310
|
+
*/
|
|
311
|
+
async getSitesNameAndRole() {
|
|
312
|
+
const rowsCount = await this.sitesName.count();
|
|
313
|
+
const sitesInfo = {};
|
|
314
|
+
for (let i = 0; i < rowsCount; i++) {
|
|
315
|
+
let siteNameText = await this.sitesName.nth(i).textContent();
|
|
316
|
+
let siteRoleText = await this.sitesRole.nth(i).textContent();
|
|
317
|
+
siteNameText = siteNameText.trim();
|
|
318
|
+
siteRoleText = siteRoleText.trim();
|
|
319
|
+
sitesInfo[siteNameText] = siteRoleText;
|
|
320
|
+
}
|
|
321
|
+
return sitesInfo;
|
|
322
|
+
}
|
|
323
|
+
async hasLockIcon(itemName) {
|
|
324
|
+
const row = this.getRowByName(itemName);
|
|
325
|
+
return row.locator('img[src*="lock"]').isVisible();
|
|
326
|
+
}
|
|
327
|
+
async getLockOwner(itemName) {
|
|
328
|
+
const row = this.getRowByName(itemName);
|
|
329
|
+
return row.locator(this.lockOwner).innerText();
|
|
330
|
+
}
|
|
331
|
+
async hasHighlightedText(location) {
|
|
332
|
+
switch (location) {
|
|
333
|
+
case 'name':
|
|
334
|
+
return this.page.locator(this.searchFileName).locator(this.highlightedText).isVisible();
|
|
335
|
+
case 'description':
|
|
336
|
+
return this.page.locator(this.searchFileDescription).locator(this.highlightedText).isVisible();
|
|
337
|
+
case 'content':
|
|
338
|
+
return this.page.locator(this.searchFileContent).locator(this.highlightedText).isVisible();
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
export { DataTableComponent };
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtcGxheXdyaWdodC1zaGFyZWQvc3JjL3BhZ2Utb2JqZWN0cy9jb21wb25lbnRzL2RhdGFUYWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUdILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsTUFBYSxrQkFBbUIsU0FBUSxhQUFhO0lBQzNDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDO0lBQzdDLGtCQUFrQixHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJELFlBQVksSUFBVSxFQUFFLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxXQUFXO1FBQ2xFLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLFVBQVUsR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzVDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzRCwyQkFBMkIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDM0YsOEJBQThCLEdBQUcsSUFBSSxD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SUFDSCxDQUFDOztTQTlXVSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuaW1wb3J0IHsgTG9jYXRvciwgUGFnZSB9IGZyb20gJ0BwbGF5d3JpZ2h0L3Rlc3QnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdE1lbnVDb21wb25lbnQgfSBmcm9tICcuL21hdC1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQWN0aW9uc1R5cGUsIFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0aW1lb3V0cyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBwcml2YXRlIHN0YXRpYyByb290RWxlbWVudCA9ICdhZGYtZGF0YXRhYmxlJztcbiAgY29udGV4dE1lbnVBY3Rpb25zID0gbmV3IE1hdE1lbnVDb21wb25lbnQodGhpcy5wYWdlKTtcblxuICBjb25zdHJ1Y3RvcihwYWdlOiBQYWdlLCByb290RWxlbWVudCA9IERhdGFUYWJsZUNvbXBvbmVudC5yb290RWxlbWVudCkge1xuICAgIHN1cGVyKHBhZ2UsIHJvb3RFbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBwYWdpbmF0aW9uID0gbmV3IFBhZ2luYXRpb25Db21wb25lbnQodGhpcy5wYWdlKTtcbiAgYm9keSA9IHRoaXMuZ2V0Q2hpbGQoJy5hZGYtZGF0YXRhYmxlLWJvZHknKTtcbiAgZ2V0RW1wdHlGb2xkZXJMb2NhdG9yID0gdGhpcy5nZXRDaGlsZCgnLmFkZi1lbXB0eS1mb2xkZXInKTtcbiAgZ2V0RW1wdHlDb250ZW50VGl0bGVMb2NhdG9yID0gdGhpcy5nZXRDaGlsZCgnYWRmLWVtcHR5LWNvbnRlbnQgLmFkZi1lbXB0eS1jb250ZW50X190aXRsZScpO1xuICBnZXRFbXB0eUNvbnRlbnRTdWJUaXRsZUxvY2F0b3IgPSB0aGlzLmdldENoaWxkKCdhZGYtZW1wdHktY29udGVudCAuYWRmLWVtcHR5LWNvbnRlbnRfX3N1YnRpdGxlJyk7XG4gIGdldFNlbGVjdGVkUm93ID0gdGhpcy5nZXRDaGlsZCgnLmFkZi1kYXRhdGFibGUtcm93LmFkZi1pcy1zZWxlY3RlZCcpO1xuICBzb3J0ZWRDb2x1bW5IZWFkZXIgPSB0aGlzLmdldENoaWxkKGAuYWRmLWRhdGF0YWJsZV9faGVhZGVyLS1zb3J0ZWQtYXNjIC5hZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyLWNvbnRlbnQgLmFkZi1kYXRhdGFibGUtY2VsbC12YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZi1kYXRhdGFibGVfX2hlYWRlci0tc29ydGVkLWRlc2MgLmFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItY29udGVudCAuYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlYCk7XG4gIGNvbHVtbkhlYWRlcnMgPSB0aGlzLmdldENoaWxkKCcuYWRmLWRhdGF0YWJsZS1yb3cgLmFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgLmFkZi1kYXRhdGFibGUtY2VsbC12YWx1ZScpO1xuICBlbXB0eUxpc3QgPSB0aGlzLmdldENoaWxkKCdkaXYuYWRmLW5vLWNvbnRlbnQtY29udGFpbmVyJyk7XG4gIGVtcHR5TGlzdFRpdGxlID0gdGhpcy5nZXRDaGlsZCgnLmFkZi1lbXB0eS1jb250ZW50X190aXRsZScpO1xuICBlbXB0eUxpc3RTdWJ0aXRsZSA9IHRoaXMuZ2V0Q2hpbGQoJy5hZGYtZW1wdHktY29udGVudF9fc3VidGl0bGUnKTtcbiAgZW1wdHlTZWFyY2hUZXh0ID0gdGhpcy5nZXRDaGlsZCgnLmVtcHR5LXNlYXJjaF9fdGV4dCcpO1xuICBlbXB0eUxpc3RUZXN0ID0gdGhpcy5nZXRDaGlsZCgnYWRmLWN1c3RvbS1lbXB0eS1jb250ZW50LXRlbXBsYXRlJyk7XG4gIHBhZ2luYXRpb25CdXR0b24gPSB0aGlzLnBhZ2UubG9jYXRvcignLmFkZi1wYWdpbmF0aW9uX19ibG9jayBidXR0b24nKS5udGgoMCk7XG4gIHBhZ2luYXRpb25PcHRpb25zID0gdGhpcy5wYWdlLmxvY2F0b3IoJyNjZGstb3ZlcmxheS0wIGJ1dHRvbicpO1xuICBzaXRlc1Zpc2liaWxpdHkgPSB0aGlzLnBhZ2UubG9jYXRvcignLmFkZi1kYXRhdGFibGUtYm9keSBbZGF0YS1hdXRvbWF0aW9uLWlkKj1cImRhdGF0YWJsZS1yb3dcIl0gW2FyaWEtbGFiZWw9XCJWaXNpYmlsaXR5XCJdJyk7XG4gIHNpdGVzTmFtZSA9IHRoaXMucGFnZS5sb2NhdG9yKCcuYWRmLWRhdGF0YWJsZS1ib2R5IFtkYXRhLWF1dG9tYXRpb24taWQqPVwiZGF0YXRhYmxlLXJvd1wiXSBbYXJpYS1sYWJlbD1cIk5hbWVcIl0nKTtcbiAgc2l0ZXNSb2xlID0gdGhpcy5wYWdlLmxvY2F0b3IoJy5hZGYtZGF0YXRhYmxlLWJvZHkgW2RhdGEtYXV0b21hdGlvbi1pZCo9XCJkYXRhdGFibGUtcm93XCJdIFthcmlhLWxhYmVsPVwiTXkgUm9sZVwiXScpO1xuICBsb2NrT3duZXIgPSB0aGlzLnBhZ2UubG9jYXRvcignLmFjYS1sb2NrZWQtYnktLW5hbWUnKTtcbiAgdW5jaGVja2VkQ2hlY2tib3ggPSB0aGlzLnBhZ2UubG9jYXRvcignLm1hdC1tZGMtY2hlY2tib3gnKTtcbiAgY2hlY2tlZENoZWNrYm94ID0gdGhpcy5wYWdlLmxvY2F0b3IoJy5tYXQtbWRjLWNoZWNrYm94LWNoZWNrZWQnKTtcbiAgaGlnaGxpZ2h0ZWRUZXh0ID0gJy5hY2EtaGlnaGxpZ2h0JztcbiAgc2VhcmNoRmlsZU5hbWUgPSAnLnNlYXJjaC1maWxlLW5hbWUnO1xuICBzZWFyY2hGaWxlRGVzY3JpcHRpb24gPSAnW2RhdGEtYXV0b21hdGlvbi1pZD1cInNlYXJjaC1yZXN1bHRzLWVudHJ5LWRlc2NyaXB0aW9uXCJdJztcbiAgc2VhcmNoRmlsZUNvbnRlbnQgPSAnLmFjYS1yZXN1bHQtY29udGVudCc7XG5cbiAgLyoqIExvY2F0b3IgZm9yIHJvdyAob3Igcm93cykgKi9cbiAgZ2V0Um93TG9jYXRvciA9IHRoaXMucGFnZS5nZXRCeVJvbGUoJ3Jvd2dyb3VwJykubnRoKDEpLmxvY2F0b3IoJ2FkZi1kYXRhdGFibGUtcm93Jyk7XG5cbiAgLyoqIExvY2F0b3IgdG8gZ2V0IFwiTm8gcmVzdWx0cyBmb3VuZFwiIG1lc3NhZ2UgKi9cbiAgZ2V0Tm9SZXN1bHRzRm91bmRNZXNzYWdlID0gdGhpcy5nZXRDaGlsZCgnYWRmLWN1c3RvbS1lbXB0eS1jb250ZW50LXRlbXBsYXRlJywgeyBoYXNUZXh0OiAnTm8gcmVzdWx0cyBmb3VuZCcgfSk7XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1c2VkIGluIGNhc2VzIHdoZXJlIHdlIHdhbnQgdG8gY2hlY2sgdGhhdCBzb21lIHJlY29yZCBpcyB2aXNpYmxlIGluIHRoZSBkYXRhdGFibGUuIEl0IHdpbGwgY29uc2lkZXIgd2hvbGUgcm93XG4gICAqXG4gICAqIEByZXR1cm5zIHJlZmVyZW5jZSB0byBjZWxsIGVsZW1lbnQgd2hpY2ggY29udGFpbnMgdGV4dC5cbiAgICovXG4gIGdldFJvd0J5TmFtZSA9IChuYW1lOiBzdHJpbmcgfCBudW1iZXIpOiBMb2NhdG9yID0+IHRoaXMuZ2V0Q2hpbGQoYGFkZi1kYXRhdGFibGUtcm93YCwgeyBoYXNUZXh0OiBuYW1lLnRvU3RyaW5nKCkgfSk7XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1c2VkIGluIGNhc2VzIHdoZXJlIHdlIHdhbnQgdG8gY2hlY2sgdGhhdCBzb21lIHJlY29yZCBpcyB2aXNpYmxlIGluIHRoZSBkYXRhdGFibGUuXG4gICAqIEJ1dCB3ZSB3YW50IHRvIGNoZWNrIGl0IGJ5IGNvbHVtbiBoZWFkZXIgdGl0bGUgYW5kIHZhbHVlIG9mIHRoaXMgY29sdW1uLlxuICAgKlxuICAgKiBAcmV0dXJucyByZWZlcmVuY2UgdG8gY2VsbCBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIHRleHQuXG4gICAqL1xuICBnZXRSb3dCeUNvbHVtblRpdGxlQW5kSXRzQ2VsbFZhbHVlID0gKGNvbHVtblRpdGxlOiBzdHJpbmcsIGNlbGxWYWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogTG9jYXRvciA9PlxuICAgIHRoaXMucGFnZS5sb2NhdG9yKGAvL2Rpdltjb250YWlucyhAdGl0bGUsICcke2NvbHVtblRpdGxlfScpXS8vc3Bhbltjb250YWlucyh0ZXh0KCksICcke2NlbGxWYWx1ZX0nKV0vYW5jZXN0b3I6OmFkZi1kYXRhdGFibGUtcm93YCk7XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1c2VkIGluIGNhc2VzIHdoZXJlIHdlIHdhbnQgdG8gcmV0cmlldmUgYSByb3cgZnJvbSB0aGUgZGF0YXRhYmxlIGJhc2VkIG9uIGl0cyBudW1lcmljYWwgb3JkZXIgd2l0aGluIHRoZSBhcnJheS5cbiAgICpcbiAgICogQHJldHVybnMgcmVmZXJlbmNlIHRvIGNlbGwgZWxlbWVudCB3aGljaCBjb250YWlucyB0ZXh0LlxuICAgKi9cbiAgZ2V0TnRoUm93ID0gKG9yZGVyTnVtOiBudW1iZXIpOiBMb2NhdG9yID0+IHRoaXMuZ2V0Um93TG9jYXRvci5udGgob3JkZXJOdW0pO1xuXG4gIC8qKlxuICAgKiBNZXRob2QgdXNlZCBpbiBjYXNlcyB3aGVyZSB1c2VyIGhhdmUgcG9zc2liaWxpdHkgdG8gbmF2aWdhdGUgXCJpbnNpZGVcIiB0aGUgZWxlbWVudCAoaXQncyBjbGlja2FibGUgYW5kIGhhcyBsaW5rIGF0dHJpYnV0ZSkuXG4gICAqIFBlcmZvcm0gYWN0aW9uIC5jbGljaygpIHRvIG5hdmlnYXRlIGluc2lkZSBpdFxuICAgKlxuICAgKiBAcmV0dXJucyByZWZlcmVuY2UgdG8gY2VsbCBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIGxpbmsuXG4gICAqL1xuICBnZXRDZWxsTGlua0J5TmFtZSA9IChuYW1lOiBzdHJpbmcpOiBMb2NhdG9yID0+IHRoaXMuZ2V0Q2hpbGQoJy5hZGYtY2VsbC12YWx1ZSBzcGFuW3JvbGU9XCJsaW5rXCJdJywgeyBoYXNUZXh0OiBuYW1lIH0pO1xuXG4gIC8qKlxuICAgKiBNZXRob2QgdXNlZCBpbiBjYXNlcyB3aGVyZSB3ZSB3YW50IHRvIGxvY2FsaXplIHRoZSBlbGVtZW50IGJ5IFthcmlhLWxhYmVsXVxuICAgKlxuICAgKiBAcmV0dXJucyByZWZlcmVuY2UgdG8gY2VsbCBlbGVtZW50LlxuICAgKi9cbiAgZ2V0QnlBcmlhTGFiZWxUaXRsZSA9ICh0aXRsZTogc3RyaW5nKTogTG9jYXRvciA9PiB0aGlzLmdldENoaWxkKGBbYXJpYS1sYWJlbD1cIiR7dGl0bGV9XCJdYCk7XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1c2VkIGluIGNhc2VzIHdoZXJlIHdlIHdhbnQgdG8gZ2V0IHRoZSBidXR0b24gKGhhbWJ1cmdlciBtZW51KSBmb3Igcm93IGVsZW1lbnRcbiAgICpcbiAgICogQHJldHVybnMgcmVmZXJlbmNlIHRvIG1lbnUgcGxhY2VkIGluIHJvdyBsb2NhbGl6ZWQgYnkgdGhlIG5hbWVcbiAgICovXG4gIGdldEFjdGlvbnNCdXR0b25CeU5hbWUgPSAobmFtZTogc3RyaW5nKTogTG9jYXRvciA9PlxuICAgIHRoaXMuZ2V0Um93QnlOYW1lKG5hbWUpLmxvY2F0b3IoJ21hdC1pY29uJywgeyBoYXNUZXh0OiBuZXcgUmVnRXhwKGBeXFxcXHMqbW9yZV92ZXJ0XFxcXHMqJGAsICdnJykgfSk7XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1c2VkIGluIGNhc2VzIHdoZXJlIHdlIHdhbnQgdG8gZ2V0IHRoZSBlZGl0IGJ1dHRvbiBhbmQgdGhlcmUgaXMgbm8gaGFtYnVyZ2VyIG1lbnVcbiAgICpcbiAgICogQHJldHVybnMgcmVmZXJlbmNlIHRvIGVkaXQgYnV0dG9uIHBsYWNlZCBpbiByb3cgbG9jYWxpemVkIGJ5IHRoZSBuYW1lXG4gICAqL1xuICBnZXRFZGl0QnV0dG9uQnlOYW1lID0gKG5hbWU6IHN0cmluZyk6IExvY2F0b3IgPT4gdGhpcy5nZXRSb3dCeU5hbWUobmFtZSkubG9jYXRvcignYnV0dG9uI2VkaXRCdXR0b24nKTtcblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2Ugd2FudCB0byBnZXQgdGhlIGJ1dHRvbiBhbmQgdGhlcmUgaXMgbm8gaGFtYnVyZ2VyIG1lbnVcbiAgICpcbiAgICogQHJldHVybnMgcmVmZXJlbmNlIHRvIGJ1dHRvbiBwbGFjZWQgaW4gcm93IGxvY2FsaXplZCBieSB0aGUgbmFtZVxuICAgKi9cbiAgZ2V0QnV0dG9uQnlOYW1lRm9yU3BlY2lmaWNSb3cgPSAoZWxlbWVudFRpdGxlSW5Sb3c6IHN0cmluZywgYnV0dG9uVGl0bGU6IHN0cmluZyk6IExvY2F0b3IgPT5cbiAgICB0aGlzLmdldFJvd0J5TmFtZShlbGVtZW50VGl0bGVJblJvdykubG9jYXRvcignYnV0dG9uJywgeyBoYXNUZXh0OiBidXR0b25UaXRsZSB9KTtcblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgaW4gY2FzZXMgd2hlcmUgeW91IHdhbnQgdG8gZ2V0IHNvbWUgc3BlY2lmaWMgY2VsbCAoYnkgY29sdW1uIG5hbWUpIGZvciByb3cgd2hpY2ggY29udGFpbnMgc29tZSBuYW1lL3RpdGxlL2V0Yy5cbiAgICpcbiAgICogQHJldHVybnMgcmVmZXJlbmNlIHRvIGNlbGwgZWxlbWVudFxuICAgKi9cbiAgZ2V0Q2VsbEJ5Q29sdW1uTmFtZUFuZFJvd0l0ZW0gPSAoaXRlbTogc3RyaW5nIHwgbnVtYmVyLCBjb2x1bW5OYW1lOiBzdHJpbmcpOiBMb2NhdG9yID0+IHRoaXMuZ2V0Um93QnlOYW1lKGl0ZW0pLmxvY2F0b3IoYFt0aXRsZT1cIiR7Y29sdW1uTmFtZX1cIl1gKTtcblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2Ugd2FudCB0byBnZXQgdGhlIGNoZWNrYm94IGZvciByb3cgZWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJucyByZWZlcmVuY2UgdG8gY2hlY2tib3ggcGxhY2VkIGluIHJvdyBsb2NhbGl6ZWQgYnkgdGhlIG5hbWVcbiAgICovXG4gIGdldENoZWNrYm94Rm9yRWxlbWVudCA9IChpdGVtOiBzdHJpbmcpOiBMb2NhdG9yID0+IHRoaXMuZ2V0Um93QnlOYW1lKGl0ZW0pLmxvY2F0b3IoJy5tYXQtbWRjLWNoZWNrYm94Jyk7XG5cbiAgZ2V0Q29sdW1uSGVhZGVyQnlUaXRsZUxvY2F0b3IgPSAoaGVhZGVyVGl0bGU6IHN0cmluZyk6IExvY2F0b3IgPT4gdGhpcy5nZXRDaGlsZCgnW3JvbGU9XCJjb2x1bW5oZWFkZXJcIl0nLCB7IGhhc1RleHQ6IGhlYWRlclRpdGxlIH0pO1xuXG4gIGdldFNlYXJjaFJlc3VsdExpbmtCeU5hbWUgPSAobmFtZTogc3RyaW5nKTogTG9jYXRvciA9PiB0aGlzLmdldENoaWxkKCcuYWNhLXNlYXJjaC1yZXN1bHRzLXJvdyBzcGFuW3JvbGU9XCJsaW5rXCJdJywgeyBoYXNUZXh0OiBuYW1lIH0pO1xuXG4gIGdldENvbHVtblZhbHVlc0J5TmFtZSA9IChuYW1lOiBzdHJpbmcpOiBMb2NhdG9yID0+IHRoaXMuZ2V0Q2hpbGQoYGRpdlt0aXRsZT1cIiR7bmFtZX1cIl0gc3BhbmApO1xuXG4gIGdldENvbHVtbkhlYWRlckJ5TmFtZSA9IChoZWFkZXJUaXRsZTogc3RyaW5nKTogTG9jYXRvciA9PlxuICAgIHRoaXMuZ2V0Q2hpbGQoJy5hZGYtZGF0YXRhYmxlLXJvdyAuYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlciAuYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlJywgeyBoYXNUZXh0OiBoZWFkZXJUaXRsZSB9KTtcblxuICBhc3luYyBzb3J0QnkobGFiZWw6IHN0cmluZywgb3JkZXI6ICdhc2MnIHwgJ2Rlc2MnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc29ydENvbHVtbiA9IGF3YWl0IHRoaXMuZ2V0U29ydGVkQ29sdW1uSGVhZGVyVGV4dCgpO1xuICAgIGxldCBzb3J0T3JkZXIgPSBhd2FpdCB0aGlzLmdldFNvcnRpbmdPcmRlcigpO1xuICAgIGlmIChzb3J0Q29sdW1uICE9PSBsYWJlbCkge1xuICAgICAgYXdhaXQgdGhpcy5nZXRDb2x1bW5IZWFkZXJCeU5hbWUobGFiZWwpLmhvdmVyKCk7XG4gICAgICBhd2FpdCB0aGlzLmdldENvbHVtbkhlYWRlckJ5TmFtZShsYWJlbCkuY2xpY2soeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIHNvcnRPcmRlciA9IGF3YWl0IHRoaXMuZ2V0U29ydGluZ09yZGVyKCk7XG4gICAgfVxuICAgIGlmIChzb3J0T3JkZXIgIT09IG9yZGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldENoaWxkKCdzcGFuW2NsYXNzKj1cImFkZi1kYXRhdGFibGVfX2hlYWRlci0tc29ydGVkXCJdJykuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB3aGVuIHdlIHdhbnQgdG8gcGVyZm9ybSByaWdodCBtb3VzZSBjbGljayBvbiB0aGUgZGF0YVRhYmxlIHJvdyBhbmQgcGVyZm9ybSBzb21lIGFjdGlvblxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBvZiB0aGUgZGF0YSB0YWJsZSBlbGVtZW50IHdpdGggd2hpY2ggd2Ugd2FudCB0byBjbGlja1xuICAgKiBAcGFyYW0gYWN0aW9uIHByb3ZpZGUgd2hpY2ggYWN0aW9uIHlvdSB3YW50IHRvIHBlcmZvcm1cbiAgICovXG4gIGFzeW5jIHBlcmZvcm1BY3Rpb25Gcm9tRXhwYW5kYWJsZU1lbnUobmFtZTogc3RyaW5nIHwgbnVtYmVyLCBhY3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZ29UaHJvdWdoUGFnZXNMb29raW5nRm9yUm93V2l0aE5hbWUobmFtZSk7XG4gICAgY29uc3QgYWN0aW9uQnV0dG9uTG9jYXRvciA9IGF3YWl0IHRoaXMuZ2V0QWN0aW9uTG9jYXRvckZyb21FeHBhbmRhYmxlTWVudShuYW1lLCBhY3Rpb24pO1xuICAgIGF3YWl0IGFjdGlvbkJ1dHRvbkxvY2F0b3IuY2xpY2soKTtcbiAgICBhd2FpdCB0aGlzLnNwaW5uZXJXYWl0Rm9yUmVsb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2sgYWN0aW9uIGZyb20gdGhlIGV4cGFuZGFibGUga2ViYWIgbWVudSBmb3IgdGhlIGVsZW1lbnQgaW4gZGF0YXRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIHRpdGxlIG9mIHRoZSByZWNvcmQgeW91IHdvdWxkIGxpa2UgdG8gcHJvY2VlZFxuICAgKiBAcGFyYW0gYWN0aW9uIHByb3ZpZGUgYnV0dG9uIHRpdGxlIGZvciB0aGUgYWN0aW9uXG4gICAqIEBwYXJhbSBzdWJBY3Rpb24gaWYgdGhlIGFjdGlvbiBpcyBpbiBzdWIgbWVudSwgdGhlbiBwcm92aWRlIGl0IGhlcmVcbiAgICovXG4gIGFzeW5jIHBlcmZvcm1BY3Rpb25Gb3JFbGVtZW50KG5hbWU6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcsIHN1YkFjdGlvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZ2V0QWN0aW9uc0J1dHRvbkJ5TmFtZShuYW1lKS5jbGljaygpO1xuICAgIGF3YWl0IHRoaXMuY29udGV4dE1lbnVBY3Rpb25zLmdldEJ1dHRvbkJ5VGV4dChhY3Rpb24pLmNsaWNrKCk7XG5cbiAgICBpZiAoc3ViQWN0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbnRleHRNZW51QWN0aW9ucy5nZXRCdXR0b25CeVRleHQoc3ViQWN0aW9uKS5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHdoZW4gd2Ugd2FudCB0byBwZXJmb3JtIGRvdWJsZSBjbGljayBvbiB0aGUgZGF0YVRhYmxlIHJvdyB0byBvcGVuIGEgZmlsZSBvciBmb2xkZXJcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgb2YgdGhlIGRhdGEgdGFibGUgZWxlbWVudCB3aXRoIHdoaWNoIHdlIHdhbnQgdG8gZG91YmxlIGNsaWNrXG4gICAqL1xuICBhc3luYyBwZXJmb3JtQ2xpY2tGb2xkZXJPckZpbGVUb09wZW4obmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5nZXRDZWxsTGlua0J5TmFtZShuYW1lKS5jbGljaygpO1xuICAgIGF3YWl0IHRoaXMuc3Bpbm5lcldhaXRGb3JSZWxvYWQoKTtcbiAgfVxuXG4gIGFzeW5jIGlzSXRlbVByZXNlbnQobmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5nb1Rocm91Z2hQYWdlc0xvb2tpbmdGb3JSb3dXaXRoTmFtZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5nZXRSb3dCeU5hbWUobmFtZSkuaXNWaXNpYmxlKCk7XG4gIH1cblxuICBhc3luYyBnZXRBY3Rpb25Mb2NhdG9yRnJvbUV4cGFuZGFibGVNZW51KG5hbWU6IHN0cmluZyB8IG51bWJlciwgYWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPExvY2F0b3I+IHtcbiAgICBhd2FpdCB0aGlzLmdldFJvd0J5TmFtZShuYW1lKS5jbGljayh7IGJ1dHRvbjogJ3JpZ2h0JyB9KTtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0TWVudUFjdGlvbnMuZ2V0QnV0dG9uQnlUZXh0KGFjdGlvbik7XG4gIH1cblxuICBhc3luYyBwZXJmb3JtQWN0aW9uSW5FeHBhbmRhYmxlTWVudShuYW1lOiBzdHJpbmcgfCBudW1iZXIsIGFjdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5nZXRSb3dCeU5hbWUobmFtZSkuY2xpY2soeyBidXR0b246ICdyaWdodCcgfSk7XG4gICAgYXdhaXQgdGhpcy5jb250ZXh0TWVudUFjdGlvbnMuZ2V0QnV0dG9uQnlUZXh0KGFjdGlvbikuY2xpY2soKTtcbiAgfVxuXG4gIGFzeW5jIGdvVGhyb3VnaFBhZ2VzTG9va2luZ0ZvclJvd1dpdGhOYW1lKG5hbWU6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3Bpbm5lcldhaXRGb3JSZWxvYWQoKTtcbiAgICBpZiAoYXdhaXQgdGhpcy5nZXRSb3dCeU5hbWUobmFtZSkuaXNWaXNpYmxlKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChhd2FpdCB0aGlzLnBhZ2luYXRpb24uY3VycmVudFBhZ2VMb2NhdG9yLmlzVmlzaWJsZSgpKSB7XG4gICAgICBpZiAoKGF3YWl0IHRoaXMucGFnaW5hdGlvbi5jdXJyZW50UGFnZUxvY2F0b3IudGV4dENvbnRlbnQoKSkgPT09ICcgb2YgMSAnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYXdhaXQgdGhpcy5wYWdpbmF0aW9uLnRvdGFsUGFnZUxvY2F0b3IuaXNWaXNpYmxlKCkpIHtcbiAgICAgIGNvbnN0IG1heFBhZ2VzID0gKGF3YWl0IHRoaXMucGFnaW5hdGlvbi50b3RhbFBhZ2VMb2NhdG9yPy50ZXh0Q29udGVudCgpKT8ubWF0Y2goL1xcZC8pWzBdO1xuICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gTnVtYmVyKG1heFBhZ2VzKTsgcGFnZSsrKSB7XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLmdldFJvd0J5TmFtZShuYW1lKS5pc1Zpc2libGUoKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLnBhZ2luYXRpb24uZ2V0QXJyb3dMb2NhdG9yRm9yKFBhZ2luYXRpb25BY3Rpb25zVHlwZS5OZXh0UGFnZVNlbGVjdG9yKS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucGFnaW5hdGlvbi5nZXRBcnJvd0xvY2F0b3JGb3IoUGFnaW5hdGlvbkFjdGlvbnNUeXBlLk5leHRQYWdlU2VsZWN0b3IpLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5zcGlubmVyV2FpdEZvclJlbG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbGVjdEl0ZW1zKC4uLm5hbWVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGF3YWl0IHRoaXMuaXNSb3dTZWxlY3RlZChuYW1lKTtcbiAgICAgIGlmICghaXNTZWxlY3RlZCkge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvd0J5TmFtZShuYW1lKTtcbiAgICAgICAgYXdhaXQgcm93LmhvdmVyKCk7XG4gICAgICAgIGF3YWl0IHJvdy5sb2NhdG9yKHRoaXMudW5jaGVja2VkQ2hlY2tib3gpLmNsaWNrKCk7XG4gICAgICAgIGF3YWl0IHJvdy5sb2NhdG9yKHRoaXMuY2hlY2tlZENoZWNrYm94KS53YWl0Rm9yKHsgc3RhdGU6ICdhdHRhY2hlZCcgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNSb3dTZWxlY3RlZChpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3dCeU5hbWUoaXRlbU5hbWUpO1xuICAgIHJldHVybiByb3cubG9jYXRvcih0aGlzLmNoZWNrZWRDaGVja2JveCkuaXNWaXNpYmxlKCk7XG4gIH1cblxuICBhc3luYyBnZXRDb2x1bW5IZWFkZXJzKCk6IFByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xuICAgIGNvbnN0IGNvbHVtbk5hbWVMb2NhdG9yID0gdGhpcy5jb2x1bW5IZWFkZXJzO1xuICAgIGF3YWl0IHRoaXMuY29sdW1uSGVhZGVycy5udGgoMCkud2FpdEZvcih7IHN0YXRlOiAnYXR0YWNoZWQnIH0pO1xuICAgIHJldHVybiBjb2x1bW5OYW1lTG9jYXRvci5hbGxUZXh0Q29udGVudHMoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFNvcnRlZENvbHVtbkhlYWRlclRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zb3J0ZWRDb2x1bW5IZWFkZXIuaW5uZXJUZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIGdldEl0ZW1Mb2NhdGlvbkVsKG5hbWU6IHN0cmluZyk6IExvY2F0b3Ige1xuICAgIHJldHVybiB0aGlzLmdldFJvd0J5TmFtZShuYW1lKS5sb2NhdG9yKCcuYWNhLWxvY2F0aW9uLWxpbmsnKTtcbiAgfVxuXG4gIGFzeW5jIGdldEl0ZW1Mb2NhdGlvblRleHQobmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmdldEl0ZW1Mb2NhdGlvbkVsKG5hbWUpLmxvY2F0b3IoJ2EnKS53YWl0Rm9yKHsgc3RhdGU6ICdhdHRhY2hlZCcgfSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUxvY2F0aW9uRWwobmFtZSkuaW5uZXJUZXh0KCk7XG4gIH1cblxuICBhc3luYyBnZXRJdGVtTG9jYXRpb25Ub29sdGlwKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmdldEl0ZW1Mb2NhdGlvbkVsKG5hbWUpO1xuICAgIGF3YWl0IGxvY2F0aW9uLmhvdmVyKCk7XG4gICAgcmV0dXJuIGxvY2F0aW9uLmxvY2F0b3IoJ2EnKS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJywgeyB0aW1lb3V0OiB0aW1lb3V0cy5ub3JtYWwgfSk7XG4gIH1cblxuICBhc3luYyBjbGlja0l0ZW1Mb2NhdGlvbihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmdldEl0ZW1Mb2NhdGlvbkVsKG5hbWUpLmNsaWNrKCk7XG4gIH1cblxuICBhc3luYyBnZXRTb3J0aW5nT3JkZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzdHIgPSBhd2FpdCB0aGlzLnNvcnRlZENvbHVtbkhlYWRlci5sb2NhdG9yKCcuLi8uLicpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICBpZiAoc3RyLmluY2x1ZGVzKCdhc2MnKSkge1xuICAgICAgcmV0dXJuICdhc2MnO1xuICAgIH0gZWxzZSBpZiAoc3RyLmluY2x1ZGVzKCdkZXNjJykpIHtcbiAgICAgIHJldHVybiAnZGVzYyc7XG4gICAgfVxuICAgIHJldHVybiAnbm9uZSc7XG4gIH1cblxuICBhc3luYyBnZXRSb3dBbGxJbm5lclRleHRzKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldFJvd0J5TmFtZShuYW1lKS5sb2NhdG9yKCdzcGFuJykuYWxsSW5uZXJUZXh0cygpKS50b1N0cmluZygpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Rmlyc3RFbGVtZW50RGV0YWlsKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZmlyc3ROb2RlID0gdGhpcy5nZXRDb2x1bW5WYWx1ZXNCeU5hbWUobmFtZSkuZmlyc3QoKTtcbiAgICByZXR1cm4gZmlyc3ROb2RlLmlubmVyVGV4dCgpO1xuICB9XG5cbiAgYXN5bmMgaXNFbXB0eSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5lbXB0eUxpc3QuaXNWaXNpYmxlKCk7XG4gIH1cblxuICBhc3luYyBnZXRFbXB0eVN0YXRlVGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaXNFbXB0eSgpKSA/IHRoaXMuZW1wdHlMaXN0VGl0bGUuaW5uZXJUZXh0KCkgOiAnJztcbiAgfVxuXG4gIGFzeW5jIGdldEVtcHR5U3RhdGVTdWJ0aXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pc0VtcHR5KCkpID8gdGhpcy5lbXB0eUxpc3RTdWJ0aXRsZS5pbm5lclRleHQoKSA6ICcnO1xuICB9XG5cbiAgYXN5bmMgZ2V0RW1wdHlMaXN0VGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pc0VtcHR5KCkpID8gdGhpcy5lbXB0eUxpc3RUZXN0LmlubmVyVGV4dCgpIDogJyc7XG4gIH1cblxuICBhc3luYyBnZXRSb3dzQ291bnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRSb3dMb2NhdG9yLmNvdW50KCk7XG4gIH1cblxuICBhc3luYyByaWdodENsaWNrT25JdGVtKGl0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmdldENlbGxCeUNvbHVtbk5hbWVBbmRSb3dJdGVtKGl0ZW1OYW1lLCAnTmFtZScpLmNsaWNrKHsgYnV0dG9uOiAncmlnaHQnIH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0UGFnaW5hdGlvblRvNTAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wYWdpbmF0aW9uQnV0dG9uLmNsaWNrKCk7XG4gICAgYXdhaXQgdGhpcy5wYWdpbmF0aW9uT3B0aW9ucy5nZXRCeVRleHQoJzUwJykuY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdXNlZCB0byBjcmVhdGUgb2JqZWN0cyBmcm9tIG5hbWVzIGFuZCB2aXNpYmlsaXR5IG9mIHNpdGVzIGZyb20gZGF0YXRhYmxlXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNpdGVzJyBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB2aXNpYmlsaXR5IHZhbHVlc1xuICAgKi9cbiAgYXN5bmMgZ2V0U2l0ZXNOYW1lQW5kVmlzaWJpbGl0eSgpOiBQcm9taXNlPHsgW3NpdGVOYW1lOiBzdHJpbmddOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHJvd3NDb3VudCA9IGF3YWl0IHRoaXMuc2l0ZXNOYW1lLmNvdW50KCk7XG4gICAgY29uc3Qgc2l0ZXNJbmZvOiB7IFtzaXRlTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3NDb3VudDsgaSsrKSB7XG4gICAgICBsZXQgc2l0ZVZpc2liaWxpdHlUZXh0ID0gYXdhaXQgdGhpcy5zaXRlc1Zpc2liaWxpdHkubnRoKGkpLnRleHRDb250ZW50KCk7XG4gICAgICBsZXQgc2l0ZU5hbWVUZXh0ID0gYXdhaXQgdGhpcy5zaXRlc05hbWUubnRoKGkpLnRleHRDb250ZW50KCk7XG4gICAgICBzaXRlVmlzaWJpbGl0eVRleHQgPSBzaXRlVmlzaWJpbGl0eVRleHQudHJpbSgpLnRvVXBwZXJDYXNlKCk7XG4gICAgICBzaXRlTmFtZVRleHQgPSBzaXRlTmFtZVRleHQudHJpbSgpO1xuICAgICAgc2l0ZXNJbmZvW3NpdGVOYW1lVGV4dF0gPSBzaXRlVmlzaWJpbGl0eVRleHQ7XG4gICAgfVxuICAgIHJldHVybiBzaXRlc0luZm87XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHVzZWQgdG8gY3JlYXRlIG9iamVjdHMgZnJvbSBuYW1lcyBhbmQgcm9sZXMgb2Ygc2l0ZXMgZnJvbSBkYXRhdGFibGVcbiAgICpcbiAgICogQHJldHVybnMgYW4gb2JqZWN0IHdpdGggc2l0ZXMnIG5hbWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHJvbGUgdmFsdWVzXG4gICAqL1xuICBhc3luYyBnZXRTaXRlc05hbWVBbmRSb2xlKCk6IFByb21pc2U8eyBbc2l0ZU5hbWU6IHN0cmluZ106IHN0cmluZyB9PiB7XG4gICAgY29uc3Qgcm93c0NvdW50ID0gYXdhaXQgdGhpcy5zaXRlc05hbWUuY291bnQoKTtcbiAgICBjb25zdCBzaXRlc0luZm86IHsgW3NpdGVOYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93c0NvdW50OyBpKyspIHtcbiAgICAgIGxldCBzaXRlTmFtZVRleHQgPSBhd2FpdCB0aGlzLnNpdGVzTmFtZS5udGgoaSkudGV4dENvbnRlbnQoKTtcbiAgICAgIGxldCBzaXRlUm9sZVRleHQgPSBhd2FpdCB0aGlzLnNpdGVzUm9sZS5udGgoaSkudGV4dENvbnRlbnQoKTtcbiAgICAgIHNpdGVOYW1lVGV4dCA9IHNpdGVOYW1lVGV4dC50cmltKCk7XG4gICAgICBzaXRlUm9sZVRleHQgPSBzaXRlUm9sZVRleHQudHJpbSgpO1xuICAgICAgc2l0ZXNJbmZvW3NpdGVOYW1lVGV4dF0gPSBzaXRlUm9sZVRleHQ7XG4gICAgfVxuICAgIHJldHVybiBzaXRlc0luZm87XG4gIH1cblxuICBhc3luYyBoYXNMb2NrSWNvbihpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3dCeU5hbWUoaXRlbU5hbWUpO1xuICAgIHJldHVybiByb3cubG9jYXRvcignaW1nW3NyYyo9XCJsb2NrXCJdJykuaXNWaXNpYmxlKCk7XG4gIH1cblxuICBhc3luYyBnZXRMb2NrT3duZXIoaXRlbU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3dCeU5hbWUoaXRlbU5hbWUpO1xuICAgIHJldHVybiByb3cubG9jYXRvcih0aGlzLmxvY2tPd25lcikuaW5uZXJUZXh0KCk7XG4gIH1cblxuICBhc3luYyBoYXNIaWdobGlnaHRlZFRleHQobG9jYXRpb246ICduYW1lJyB8ICdkZXNjcmlwdGlvbicgfCAnY29udGVudCcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBzd2l0Y2ggKGxvY2F0aW9uKSB7XG4gICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZS5sb2NhdG9yKHRoaXMuc2VhcmNoRmlsZU5hbWUpLmxvY2F0b3IodGhpcy5oaWdobGlnaHRlZFRleHQpLmlzVmlzaWJsZSgpO1xuICAgICAgY2FzZSAnZGVzY3JpcHRpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5wYWdlLmxvY2F0b3IodGhpcy5zZWFyY2hGaWxlRGVzY3JpcHRpb24pLmxvY2F0b3IodGhpcy5oaWdobGlnaHRlZFRleHQpLmlzVmlzaWJsZSgpO1xuICAgICAgY2FzZSAnY29udGVudCc6XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UubG9jYXRvcih0aGlzLnNlYXJjaEZpbGVDb250ZW50KS5sb2NhdG9yKHRoaXMuaGlnaGxpZ2h0ZWRUZXh0KS5pc1Zpc2libGUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Alfresco Example Content Application
|
|
5
|
+
*
|
|
6
|
+
* This file is part of the Alfresco Example Content Application.
|
|
7
|
+
* If the software was purchased under a paid Alfresco license, the terms of
|
|
8
|
+
* the paid license agreement will prevail. Otherwise, the software is
|
|
9
|
+
* provided under the following open source license terms:
|
|
10
|
+
*
|
|
11
|
+
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
|
12
|
+
* it under the terms of the GNU Lesser General Public License as published by
|
|
13
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
14
|
+
* (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
|
17
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
+
* GNU Lesser General Public License for more details.
|
|
20
|
+
*
|
|
21
|
+
* You should have received a copy of the GNU Lesser General Public License
|
|
22
|
+
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
+
*/
|
|
24
|
+
import { expect } from '@playwright/test';
|
|
25
|
+
import { BaseComponent } from '../base.component';
|
|
26
|
+
class MatMenuComponent extends BaseComponent {
|
|
27
|
+
static rootElement = '.mat-mdc-menu-content';
|
|
28
|
+
constructor(page) {
|
|
29
|
+
super(page, MatMenuComponent.rootElement);
|
|
30
|
+
}
|
|
31
|
+
getMenuItemsLocator = this.getChild('button');
|
|
32
|
+
getMenuItemTextLocator = this.getChild('[data-automation-id="menu-item-title"]');
|
|
33
|
+
createFolder = this.getChild('[id="app.create.folder"]');
|
|
34
|
+
createFolderFromTemplate = this.getChild('[id="app.create.folderFromTemplate"]');
|
|
35
|
+
createFileFromTemplate = this.getChild('[id="app.create.fileFromTemplate"]');
|
|
36
|
+
createLibrary = this.getChild('[id="app.create.library"]');
|
|
37
|
+
getButtonByText = (text) => this.getChild('button', { hasText: text });
|
|
38
|
+
getMenuItemFromHeaderMenu = (text) => this.page.getByRole('menuitem', { name: text, exact: true });
|
|
39
|
+
async clickMenuItem(menuItem) {
|
|
40
|
+
const menuElement = this.getButtonByText(menuItem);
|
|
41
|
+
await menuElement.click();
|
|
42
|
+
await menuElement.waitFor({ state: 'detached' });
|
|
43
|
+
}
|
|
44
|
+
async clickMenuItemFromHeaderMenu(menuItem) {
|
|
45
|
+
const menuElement = this.getMenuItemFromHeaderMenu(menuItem);
|
|
46
|
+
await menuElement.click();
|
|
47
|
+
await menuElement.waitFor({ state: 'detached' });
|
|
48
|
+
}
|
|
49
|
+
async isMenuItemVisible(menuItem) {
|
|
50
|
+
const menuElement = this.getButtonByText(menuItem);
|
|
51
|
+
await menuElement.waitFor({ state: 'attached' });
|
|
52
|
+
return menuElement.isVisible();
|
|
53
|
+
}
|
|
54
|
+
async verifyActualMoreActions(expectedToolbarMore) {
|
|
55
|
+
await this.page.locator('.mat-mdc-menu-content').waitFor({ state: 'attached' });
|
|
56
|
+
const menus = await this.page.$$('.mat-mdc-menu-content .mat-mdc-menu-item');
|
|
57
|
+
const actualMoreActions = await Promise.all(menus.map(async (button) => {
|
|
58
|
+
const title = await (await button.$('.mat-mdc-menu-item-text span')).innerText();
|
|
59
|
+
return title || '';
|
|
60
|
+
}));
|
|
61
|
+
for (const action of expectedToolbarMore) {
|
|
62
|
+
expect(actualMoreActions.includes(action), `Expected to contain ${action} ${actualMoreActions}`).toBe(true);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export { MatMenuComponent };
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLXBsYXl3cmlnaHQtc2hhcmVkL3NyYy9wYWdlLW9iamVjdHMvY29tcG9uZW50cy9kYXRhVGFibGUvbWF0LW1lbnUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBUSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRCxNQUFhLGdCQUFpQixTQUFRLGFBQWE7SUFDekMsTUFBTSxDQUFDLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQztJQUVyRCxZQUFZLElBQVU7UUFDcEIsS0FBSyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFDakYsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUN6RCx3QkFBd0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDakYsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQzdFLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDM0QsZUFBZSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLHlCQUF5QixHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRWxILEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBZ0I7UUFDbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxNQUFNLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixNQUFNLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsS0FBSyxDQUFDLDJCQUEyQixDQUFDLFFBQWdCO1FBQ2hELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxNQUFNLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixNQUFNLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQWdCO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDakQsT0FBTyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBNkI7UUFDekQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUM3RSxNQUFNLGlCQUFpQixHQUFhLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDbkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakYsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDRixLQUFLLE1BQU0sTUFBTSxJQUFJLG1CQUFtQixFQUFFO1lBQ3hDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsdUJBQXVCLE1BQU0sSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdHO0lBQ0gsQ0FBQzs7U0E5Q1UsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI0IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gT3RoZXJ3aXNlLCB0aGUgc29mdHdhcmUgaXNcbiAqIHByb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtczpcbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBmcm9tIEh5bGFuZCBTb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbmltcG9ydCB7IGV4cGVjdCwgUGFnZSB9IGZyb20gJ0BwbGF5d3JpZ2h0L3Rlc3QnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIE1hdE1lbnVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBzdGF0aWMgcm9vdEVsZW1lbnQgPSAnLm1hdC1tZGMtbWVudS1jb250ZW50JztcblxuICBjb25zdHJ1Y3RvcihwYWdlOiBQYWdlKSB7XG4gICAgc3VwZXIocGFnZSwgTWF0TWVudUNvbXBvbmVudC5yb290RWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWVudUl0ZW1zTG9jYXRvciA9IHRoaXMuZ2V0Q2hpbGQoJ2J1dHRvbicpO1xuICBwdWJsaWMgZ2V0TWVudUl0ZW1UZXh0TG9jYXRvciA9IHRoaXMuZ2V0Q2hpbGQoJ1tkYXRhLWF1dG9tYXRpb24taWQ9XCJtZW51LWl0ZW0tdGl0bGVcIl0nKTtcbiAgcHVibGljIGNyZWF0ZUZvbGRlciA9IHRoaXMuZ2V0Q2hpbGQoJ1tpZD1cImFwcC5jcmVhdGUuZm9sZGVyXCJdJyk7XG4gIHB1YmxpYyBjcmVhdGVGb2xkZXJGcm9tVGVtcGxhdGUgPSB0aGlzLmdldENoaWxkKCdbaWQ9XCJhcHAuY3JlYXRlLmZvbGRlckZyb21UZW1wbGF0ZVwiXScpO1xuICBwdWJsaWMgY3JlYXRlRmlsZUZyb21UZW1wbGF0ZSA9IHRoaXMuZ2V0Q2hpbGQoJ1tpZD1cImFwcC5jcmVhdGUuZmlsZUZyb21UZW1wbGF0ZVwiXScpO1xuICBwdWJsaWMgY3JlYXRlTGlicmFyeSA9IHRoaXMuZ2V0Q2hpbGQoJ1tpZD1cImFwcC5jcmVhdGUubGlicmFyeVwiXScpO1xuICBwdWJsaWMgZ2V0QnV0dG9uQnlUZXh0ID0gKHRleHQ6IHN0cmluZykgPT4gdGhpcy5nZXRDaGlsZCgnYnV0dG9uJywgeyBoYXNUZXh0OiB0ZXh0IH0pO1xuICBwdWJsaWMgZ2V0TWVudUl0ZW1Gcm9tSGVhZGVyTWVudSA9ICh0ZXh0OiBzdHJpbmcpID0+IHRoaXMucGFnZS5nZXRCeVJvbGUoJ21lbnVpdGVtJywgeyBuYW1lOiB0ZXh0LCBleGFjdDogdHJ1ZSB9KTtcblxuICBhc3luYyBjbGlja01lbnVJdGVtKG1lbnVJdGVtOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZW51RWxlbWVudCA9IHRoaXMuZ2V0QnV0dG9uQnlUZXh0KG1lbnVJdGVtKTtcbiAgICBhd2FpdCBtZW51RWxlbWVudC5jbGljaygpO1xuICAgIGF3YWl0IG1lbnVFbGVtZW50LndhaXRGb3IoeyBzdGF0ZTogJ2RldGFjaGVkJyB9KTtcbiAgfVxuXG4gIGFzeW5jIGNsaWNrTWVudUl0ZW1Gcm9tSGVhZGVyTWVudShtZW51SXRlbTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVudUVsZW1lbnQgPSB0aGlzLmdldE1lbnVJdGVtRnJvbUhlYWRlck1lbnUobWVudUl0ZW0pO1xuICAgIGF3YWl0IG1lbnVFbGVtZW50LmNsaWNrKCk7XG4gICAgYXdhaXQgbWVudUVsZW1lbnQud2FpdEZvcih7IHN0YXRlOiAnZGV0YWNoZWQnIH0pO1xuICB9XG5cbiAgYXN5bmMgaXNNZW51SXRlbVZpc2libGUobWVudUl0ZW06IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IG1lbnVFbGVtZW50ID0gdGhpcy5nZXRCdXR0b25CeVRleHQobWVudUl0ZW0pO1xuICAgIGF3YWl0IG1lbnVFbGVtZW50LndhaXRGb3IoeyBzdGF0ZTogJ2F0dGFjaGVkJyB9KTtcbiAgICByZXR1cm4gbWVudUVsZW1lbnQuaXNWaXNpYmxlKCk7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlBY3R1YWxNb3JlQWN0aW9ucyhleHBlY3RlZFRvb2xiYXJNb3JlOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucGFnZS5sb2NhdG9yKCcubWF0LW1kYy1tZW51LWNvbnRlbnQnKS53YWl0Rm9yKHsgc3RhdGU6ICdhdHRhY2hlZCcgfSk7XG4gICAgY29uc3QgbWVudXMgPSBhd2FpdCB0aGlzLnBhZ2UuJCQoJy5tYXQtbWRjLW1lbnUtY29udGVudCAubWF0LW1kYy1tZW51LWl0ZW0nKTtcbiAgICBjb25zdCBhY3R1YWxNb3JlQWN0aW9uczogc3RyaW5nW10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1lbnVzLm1hcChhc3luYyAoYnV0dG9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgKGF3YWl0IGJ1dHRvbi4kKCcubWF0LW1kYy1tZW51LWl0ZW0tdGV4dCBzcGFuJykpLmlubmVyVGV4dCgpO1xuICAgICAgICByZXR1cm4gdGl0bGUgfHwgJyc7XG4gICAgICB9KVxuICAgICk7XG4gICAgZm9yIChjb25zdCBhY3Rpb24gb2YgZXhwZWN0ZWRUb29sYmFyTW9yZSkge1xuICAgICAgZXhwZWN0KGFjdHVhbE1vcmVBY3Rpb25zLmluY2x1ZGVzKGFjdGlvbiksIGBFeHBlY3RlZCB0byBjb250YWluICR7YWN0aW9ufSAke2FjdHVhbE1vcmVBY3Rpb25zfWApLnRvQmUodHJ1ZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -22,14 +22,19 @@
|
|
|
22
22
|
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
|
|
23
23
|
*/
|
|
24
24
|
import { BaseComponent } from '../base.component';
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
25
|
+
class ToolbarComponent extends BaseComponent {
|
|
26
|
+
static rootElement = 'adf-toolbar';
|
|
27
|
+
createRuleButton = this.getChild('[data-automation-id="manage-rules-create-button"]');
|
|
28
|
+
linkRulesButton = this.getChild('[data-automation-id="manage-rules-link-button"]');
|
|
30
29
|
constructor(page) {
|
|
31
|
-
super(page,
|
|
30
|
+
super(page, ToolbarComponent.rootElement);
|
|
31
|
+
}
|
|
32
|
+
async clickCreateRuleButton() {
|
|
33
|
+
await this.createRuleButton.click();
|
|
34
|
+
}
|
|
35
|
+
async clickLinkRulesButton() {
|
|
36
|
+
await this.linkRulesButton.click();
|
|
32
37
|
}
|
|
33
38
|
}
|
|
34
|
-
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
export { ToolbarComponent };
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY2EtcGxheXdyaWdodC1zaGFyZWQvc3JjL3BhZ2Utb2JqZWN0cy9jb21wb25lbnRzL2RhdGFUYWJsZS90b29sYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdsRCxNQUFhLGdCQUFpQixTQUFRLGFBQWE7SUFDekMsTUFBTSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7SUFDbkMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ3RGLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7SUFFM0YsWUFBWSxJQUFVO1FBQ3BCLEtBQUssQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUI7UUFDekIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0I7UUFDeEIsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7O1NBZlUsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI0IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gT3RoZXJ3aXNlLCB0aGUgc29mdHdhcmUgaXNcbiAqIHByb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtczpcbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBmcm9tIEh5bGFuZCBTb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWdlIH0gZnJvbSAnQHBsYXl3cmlnaHQvdGVzdCc7XG5cbmV4cG9ydCBjbGFzcyBUb29sYmFyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgc3RhdGljIHJvb3RFbGVtZW50ID0gJ2FkZi10b29sYmFyJztcbiAgcHJpdmF0ZSBjcmVhdGVSdWxlQnV0dG9uID0gdGhpcy5nZXRDaGlsZCgnW2RhdGEtYXV0b21hdGlvbi1pZD1cIm1hbmFnZS1ydWxlcy1jcmVhdGUtYnV0dG9uXCJdJyk7XG4gIHByaXZhdGUgbGlua1J1bGVzQnV0dG9uID0gdGhpcy5nZXRDaGlsZCgnW2RhdGEtYXV0b21hdGlvbi1pZD1cIm1hbmFnZS1ydWxlcy1saW5rLWJ1dHRvblwiXScpO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2U6IFBhZ2UpIHtcbiAgICBzdXBlcihwYWdlLCBUb29sYmFyQ29tcG9uZW50LnJvb3RFbGVtZW50KTtcbiAgfVxuXG4gIGFzeW5jIGNsaWNrQ3JlYXRlUnVsZUJ1dHRvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVJ1bGVCdXR0b24uY2xpY2soKTtcbiAgfVxuXG4gIGFzeW5jIGNsaWNrTGlua1J1bGVzQnV0dG9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubGlua1J1bGVzQnV0dG9uLmNsaWNrKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Alfresco Example Content Application
|
|
5
|
+
*
|
|
6
|
+
* This file is part of the Alfresco Example Content Application.
|
|
7
|
+
* If the software was purchased under a paid Alfresco license, the terms of
|
|
8
|
+
* the paid license agreement will prevail. Otherwise, the software is
|
|
9
|
+
* provided under the following open source license terms:
|
|
10
|
+
*
|
|
11
|
+
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
|
12
|
+
* it under the terms of the GNU Lesser General Public License as published by
|
|
13
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
14
|
+
* (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
|
17
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
+
* GNU Lesser General Public License for more details.
|
|
20
|
+
*
|
|
21
|
+
* You should have received a copy of the GNU Lesser General Public License
|
|
22
|
+
* from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
+
*/
|
|
24
|
+
import { BaseComponent } from '../base.component';
|
|
25
|
+
class DateTimePicker extends BaseComponent {
|
|
26
|
+
static rootElement = '.mat-calendar';
|
|
27
|
+
calendar = this.getChild('.mat-datepicker-popup');
|
|
28
|
+
dayPicker = this.getChild('mat-month-view');
|
|
29
|
+
nextMonthBtn = this.getChild('.mat-calendar-next-button');
|
|
30
|
+
rootElemLocator = this.page.locator('.mat-datepicker-popup');
|
|
31
|
+
constructor(page) {
|
|
32
|
+
super(page, DateTimePicker.rootElement);
|
|
33
|
+
}
|
|
34
|
+
async isCalendarOpen() {
|
|
35
|
+
const element = this.rootElemLocator;
|
|
36
|
+
return element.isVisible();
|
|
37
|
+
}
|
|
38
|
+
async pickDateTime() {
|
|
39
|
+
const today = new Date();
|
|
40
|
+
const nextAvailableDay = new Date();
|
|
41
|
+
nextAvailableDay.setDate(today.getDate() + 2);
|
|
42
|
+
if (nextAvailableDay.getMonth() !== today.getMonth()) {
|
|
43
|
+
await this.nextMonthBtn.click();
|
|
44
|
+
}
|
|
45
|
+
await this.selectDay(nextAvailableDay.getDate());
|
|
46
|
+
}
|
|
47
|
+
async selectDay(day) {
|
|
48
|
+
const firstActiveDayElem = this.dayPicker.locator(`text=${day}`).first();
|
|
49
|
+
await firstActiveDayElem.click();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export { DateTimePicker };
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1wbGF5d3JpZ2h0LXNoYXJlZC9zcmMvcGFnZS1vYmplY3RzL2NvbXBvbmVudHMvZGF0ZXRpbWUtcGlja2VyL2RhdGV0aW1lLXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFHSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQsTUFBYSxjQUFlLFNBQVEsYUFBYTtJQUN2QyxNQUFNLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQztJQUM3QyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ2xELFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUMxRCxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUU3RCxZQUFZLElBQVU7UUFDcEIsS0FBSyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDckMsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDcEQsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2pDO1FBQ0QsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBVztRQUN6QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6RSxNQUFNLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ25DLENBQUM7O1NBN0JVLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuaW1wb3J0IHsgUGFnZSB9IGZyb20gJ0BwbGF5d3JpZ2h0L3Rlc3QnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIERhdGVUaW1lUGlja2VyIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgc3RhdGljIHJvb3RFbGVtZW50ID0gJy5tYXQtY2FsZW5kYXInO1xuICBjYWxlbmRhciA9IHRoaXMuZ2V0Q2hpbGQoJy5tYXQtZGF0ZXBpY2tlci1wb3B1cCcpO1xuICBkYXlQaWNrZXIgPSB0aGlzLmdldENoaWxkKCdtYXQtbW9udGgtdmlldycpO1xuICBuZXh0TW9udGhCdG4gPSB0aGlzLmdldENoaWxkKCcubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uJyk7XG4gIHJvb3RFbGVtTG9jYXRvciA9IHRoaXMucGFnZS5sb2NhdG9yKCcubWF0LWRhdGVwaWNrZXItcG9wdXAnKTtcblxuICBjb25zdHJ1Y3RvcihwYWdlOiBQYWdlKSB7XG4gICAgc3VwZXIocGFnZSwgRGF0ZVRpbWVQaWNrZXIucm9vdEVsZW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgaXNDYWxlbmRhck9wZW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMucm9vdEVsZW1Mb2NhdG9yO1xuICAgIHJldHVybiBlbGVtZW50LmlzVmlzaWJsZSgpO1xuICB9XG5cbiAgYXN5bmMgcGlja0RhdGVUaW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBuZXh0QXZhaWxhYmxlRGF5ID0gbmV3IERhdGUoKTtcbiAgICBuZXh0QXZhaWxhYmxlRGF5LnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpICsgMik7XG4gICAgaWYgKG5leHRBdmFpbGFibGVEYXkuZ2V0TW9udGgoKSAhPT0gdG9kYXkuZ2V0TW9udGgoKSkge1xuICAgICAgYXdhaXQgdGhpcy5uZXh0TW9udGhCdG4uY2xpY2soKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5zZWxlY3REYXkobmV4dEF2YWlsYWJsZURheS5nZXREYXRlKCkpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0RGF5KGRheTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlyc3RBY3RpdmVEYXlFbGVtID0gdGhpcy5kYXlQaWNrZXIubG9jYXRvcihgdGV4dD0ke2RheX1gKS5maXJzdCgpO1xuICAgIGF3YWl0IGZpcnN0QWN0aXZlRGF5RWxlbS5jbGljaygpO1xuICB9XG59XG4iXX0=
|