@alfresco/aca-playwright-shared 8.0.0-16785129299 → 8.0.0-16803524360

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 +1 @@
1
- {"version":3,"file":"alfresco-aca-playwright-shared.mjs","sources":["../../../../projects/aca-playwright-shared/src/utils/paths.ts","../../../../projects/aca-playwright-shared/src/utils/timeouts.ts","../../../../projects/aca-playwright-shared/src/utils/exclude-tests.ts","../../../../projects/aca-playwright-shared/src/utils/state-helper.ts","../../../../projects/aca-playwright-shared/src/utils/utils.ts","../../../../projects/aca-playwright-shared/src/utils/library-errors.ts","../../../../projects/aca-playwright-shared/src/utils/config.ts","../../../../projects/aca-playwright-shared/src/utils/error-strings.ts","../../../../projects/aca-playwright-shared/src/utils/api.ts","../../../../projects/aca-playwright-shared/src/utils/logger.ts","../../../../projects/aca-playwright-shared/src/utils/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/playwright-base.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/base.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/snackBar/snack-bar.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dataTable/mat-menu.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/pagination.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dataTable/data-table.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dataTable/toolbar.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dataTable/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/adf-folder-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/adf-library-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/password-overlay-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/viewer-overlay-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/content-node-selector-dialog.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/create-from-template-dialog-component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/adf-confirm-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/datetime-picker/datetime-picker.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/share-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/upload-new-version-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/manage-versions-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/upload-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/delete-trash-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/link-rules.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/edit-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/folder-information-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/manageRules/manage-rules-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/manageRules/manage-rules.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/manageRules/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/spinner.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/actions-dropdown.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/conditions.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/adf-info-drawer.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/aca-header.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/viewer.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-input.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-overlay.components.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-sorting-picker.components.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-categories.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-date.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-location.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-logic.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-properties.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-tags.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/breadcrumb/breadcrumb.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/sidenav.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/error.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/base.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/login.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/nodes.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/personal-files.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/my-libraries.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/recent-files.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/shared.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/search.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/favorites.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/trash.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/favorites-libraries.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/index.ts","../../../../projects/aca-playwright-shared/src/base-config/global-variables.ts","../../../../projects/aca-playwright-shared/src/base-config/global.setup.ts","../../../../projects/aca-playwright-shared/src/base-config/report-portal.config.ts","../../../../projects/aca-playwright-shared/src/base-config/playwright.config.ts","../../../../projects/aca-playwright-shared/src/base-config/index.ts","../../../../projects/aca-playwright-shared/src/api/people-api-models.ts","../../../../projects/aca-playwright-shared/src/api/api-client-factory.ts","../../../../projects/aca-playwright-shared/src/api/rules-api.ts","../../../../projects/aca-playwright-shared/src/api/file-actions.ts","../../../../projects/aca-playwright-shared/src/api/shared-links-api.ts","../../../../projects/aca-playwright-shared/src/api/favorites-api.ts","../../../../projects/aca-playwright-shared/src/api/node-content-tree.ts","../../../../projects/aca-playwright-shared/src/api/nodes-api.ts","../../../../projects/aca-playwright-shared/src/api/sites-api.ts","../../../../projects/aca-playwright-shared/src/api/search-api.ts","../../../../projects/aca-playwright-shared/src/api/trashcan-api.ts","../../../../projects/aca-playwright-shared/src/api/queries-api.ts","../../../../projects/aca-playwright-shared/src/api/categories-api.ts","../../../../projects/aca-playwright-shared/src/api/tags-api.ts","../../../../projects/aca-playwright-shared/src/api/index.ts","../../../../projects/aca-playwright-shared/src/models/user-model.ts","../../../../projects/aca-playwright-shared/src/models/custom-config.ts","../../../../projects/aca-playwright-shared/src/models/index.ts","../../../../projects/aca-playwright-shared/src/fixtures/page-initialization.ts","../../../../projects/aca-playwright-shared/src/fixtures/index.ts","../../../../projects/aca-playwright-shared/src/resources/test-data/test-data-permissions.ts","../../../../projects/aca-playwright-shared/src/resources/test-data/test-data-files-folders.ts","../../../../projects/aca-playwright-shared/src/resources/test-data/index.ts","../../../../projects/aca-playwright-shared/src/resources/test-files/index.ts","../../../../projects/aca-playwright-shared/src/resources/index.ts","../../../../projects/aca-playwright-shared/src/public-api.ts","../../../../projects/aca-playwright-shared/src/alfresco-aca-playwright-shared.ts"],"sourcesContent":["/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst rootFolder = 'e2e-output';\n\nexport const paths = {\n rootFolder,\n allData: `${rootFolder}/playwright-data`,\n files: `${rootFolder}/playwright-data/downloads`,\n report: `${rootFolder}/playwright-data/report`,\n userStates: `${rootFolder}/playwright-data/user-states`\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const timeouts = {\n typingDelay: 50,\n tiny: 500,\n short: 1000,\n normal: 2 * 1000,\n medium: 5 * 1000,\n big: 7.5 * 1000,\n large: 10 * 1000,\n extraLarge: 20 * 1000,\n fortySeconds: 40 * 1000,\n sixtySeconds: 60 * 1000,\n globalTest: 85 * 1000,\n extendedTest: 150 * 1000,\n extendedLongTest: 200 * 1000,\n webServer: 240 * 1000,\n globalSpec: 90 * 10 * 1000\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const getExcludedTestsRegExpArray = (excludedJson: any, projectName: string) => {\n const prefix = `[ 🎭 Playwright Excludes - ${projectName} ]`;\n const objectKeys = Object.keys(excludedJson);\n\n if (!objectKeys.length) {\n console.info(`${prefix} ✅ No excluded tests 🎉 `);\n } else {\n console.warn(`${prefix} ❌ Tests excluded because of 🐛 : ${objectKeys}`);\n }\n\n return objectKeys.map((key) => new RegExp(key));\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { resolve } from 'path';\nimport { paths } from '.';\nimport { users } from '../base-config';\n\nexport function getUserState(user: UserType) {\n return resolve(process.cwd(), `${paths.userStates}/${user}UserState.json`);\n}\n\ntype UserType = keyof typeof users;\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst crypto = require('crypto');\nimport * as path from 'path';\nimport { LoginPage, MyLibrariesPage, PersonalFilesPage, FavoritesLibrariesPage, SearchPage, SharedPage, TrashPage } from '../page-objects';\nimport { format, subDays, subMonths, endOfMonth } from 'date-fns';\nimport StreamZip from 'node-stream-zip';\nimport { NodesApi, SitesApi, TrashcanApi } from '../api';\n\nexport class Utils {\n static readonly string257Long = 'x'.repeat(257);\n static readonly string513Long = 'x'.repeat(513);\n\n static random(): string {\n return crypto.getRandomValues(new Uint32Array(1))[0].toString(36).substring(0, 5).toLowerCase();\n }\n\n static retryCall(fn: () => Promise<any>, retry: number = 30, delay: number = 1500): Promise<any> {\n const pause = (duration: number) => new Promise((res) => setTimeout(res, duration));\n\n const run = (retries: number): Promise<any> => {\n return fn().catch((err) => (retries > 1 ? pause(delay).then(() => run(retries - 1)) : Promise.reject(err)));\n };\n\n return run(retry);\n }\n\n static formatDate(date: string): string {\n return new Date(date).toLocaleDateString('en-US');\n }\n\n /**\n * Method used to login user with navigation. Also waits for the page to load after login\n *\n * @param loginPage page context passed from the test\n * @param username username string\n * @param password password string\n * @param errorMessage error message string if the login fails\n *\n */\n static async tryLoginUser(loginPage: LoginPage, username: string, password: string, errorMessage = 'Error '): Promise<void> {\n try {\n await loginPage.loginUser({ username, password }, { withNavigation: true, waitForLoading: true });\n } catch (error) {\n console.error(`${errorMessage}: ${error}`);\n }\n }\n\n /**\n * Method used to delete nodes and sites from user's account\n *\n * @param nodesApi nodesApi initialized with user credentials passed from the test\n * @param trashcanApi trashcanApi initialized with user credentials passed from the test\n * @param errorMessage error message string if the deleting sites/nodes fails\n * @param sitesApi sitesApi initialized with user credentials passed from the test\n * @param sitesToDelete array of sites' ids\n *\n */\n static async deleteNodesSitesEmptyTrashcan(\n nodesApi?: NodesApi,\n trashcanApi?: TrashcanApi,\n errorMessage = 'Error ',\n sitesApi?: SitesApi,\n sitesToDelete?: string[]\n ): Promise<void> {\n try {\n await nodesApi?.deleteCurrentUserNodes();\n await trashcanApi?.emptyTrashcan();\n if (sitesToDelete?.length > 0) {\n await sitesApi?.deleteSites(sitesToDelete);\n }\n } catch (error) {\n console.error(`${errorMessage}: ${error}`);\n }\n }\n\n static async uploadFileNewVersion(personalFilesPage: PersonalFilesPage, fileFromOS: string, fileType: string): Promise<void> {\n const fileInput = await personalFilesPage.page.$('#app-upload-file-version');\n await fileInput.setInputFiles(path.join(__dirname, `../resources/test-files/${fileFromOS}.${fileType}`));\n }\n\n static async reloadPageIfRowNotVisible(\n pageContext: PersonalFilesPage | MyLibrariesPage | FavoritesLibrariesPage | SearchPage | SharedPage,\n nodeName: string,\n errorMessage = 'reloadPageIfRowNotVisible Error '\n ): Promise<void> {\n try {\n if (!(await pageContext.dataTable.getRowByName(nodeName).isVisible())) {\n await pageContext.page.reload({ waitUntil: 'load' });\n }\n } catch (error) {\n console.error(`${errorMessage}: ${error}`);\n }\n }\n\n static async reloadPageIfDatatableEmpty(\n pageContext: PersonalFilesPage | MyLibrariesPage | FavoritesLibrariesPage | SearchPage | SharedPage | TrashPage,\n errorMessage = 'reloadPageIfDatatableEmpty Error '\n ): Promise<void> {\n try {\n if ((await pageContext.dataTable.getEmptyFolderLocator.isVisible()) || (await pageContext.dataTable.emptyListTitle.isVisible())) {\n await pageContext.page.reload({ waitUntil: 'load' });\n }\n } catch (error) {\n console.error(`${errorMessage}: ${error}`);\n }\n }\n\n static getCurrentAndPreviousDay(currentDate = new Date()): { currentDate: string; previousDate: string } {\n let formattedDate: string;\n let formattedDate2: string;\n\n const formatDate = (date: Date): string => {\n return format(date, 'dd-MMM-yy').toUpperCase();\n };\n\n if (currentDate.getDate() === 1) {\n const lastDayOfPreviousMonth: Date = endOfMonth(subMonths(currentDate, 1));\n formattedDate = formatDate(lastDayOfPreviousMonth);\n formattedDate2 = formatDate(subDays(lastDayOfPreviousMonth, 1));\n } else {\n formattedDate = formatDate(currentDate);\n formattedDate2 = formatDate(subDays(currentDate, 1));\n }\n\n return { currentDate: formattedDate, previousDate: formattedDate2 };\n }\n\n static async verifyZipFileContent(filePath: string, fileOrFolderName: string[]): Promise<boolean> {\n const zip = new StreamZip({\n file: filePath,\n storeEntries: true\n });\n\n return new Promise<boolean>((resolve) => {\n zip.on('ready', () => {\n const entries = zip.entries();\n const found = this.isFileOrFolderInEntries(entries, fileOrFolderName);\n zip.close();\n resolve(found);\n });\n });\n }\n\n private static isFileOrFolderInEntries(entries: { [name: string]: StreamZip.ZipEntry }, fileOrFolderName: string[]): boolean {\n return fileOrFolderName.some((name) => {\n return Object.keys(entries).some((entry) => entry.includes(name));\n });\n }\n\n /**\n * Method used trim all elements of an array from all spaces characters\n *\n * @param arr array needed to be trimmed\n *\n */\n static trimArrayElements(arr: string[]): string[] {\n return arr.map((element) => element.trim());\n }\n\n /**\n * Waits for a specific API response.\n *\n * @param page - The Playwright page object.\n * @param urlSubstring - The substring to look for in the URL.\n * @param statusCode - The expected status code of the response.\n */\n static async waitForApiResponse(\n contentPage: LoginPage | MyLibrariesPage | PersonalFilesPage | FavoritesLibrariesPage | SearchPage | SharedPage | TrashPage,\n urlSubstring: string,\n statusCode: number\n ) {\n await contentPage.page.waitForResponse((response) => response.url().includes(urlSubstring) && response.status() === statusCode);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const libraryErrors = {\n libraryIdIsNotAvailable: \"This Library ID isn't available. Try a different Library ID.\",\n libraryIdIsAlreadyUsed: 'This Library ID is already used. Check the trashcan.',\n useNumbersAndLettersOnly: 'Use numbers and letters only'\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const APP_ROUTES = {\n FAVORITES: '/favorites',\n MY_LIBRARIES: '/libraries',\n FAVORITE_LIBRARIES: '/favorite/libraries',\n LOGIN: '/login',\n LOGOUT: '/logout',\n PERSONAL_FILES: '/personal-files',\n RECENT_FILES: '/recent-files',\n SHARED_FILES: '/shared',\n TRASHCAN: '/trashcan'\n};\n\nexport const SIDEBAR_LABELS = {\n PERSONAL_FILES: 'Personal Files',\n MY_LIBRARIES: 'My Libraries',\n FAVORITE_LIBRARIES: 'Favorite Libraries',\n SHARED_FILES: 'Shared',\n RECENT_FILES: 'Recent Files',\n FAVORITES: 'Favorites',\n TRASH: 'Trash'\n};\n\nexport const SITE_ROLES = {\n SITE_MANAGER: {\n ROLE: 'SiteManager',\n LABEL: 'Manager'\n },\n SITE_CONSUMER: {\n ROLE: 'SiteConsumer',\n LABEL: 'Consumer'\n },\n SITE_CONTRIBUTOR: {\n ROLE: 'SiteContributor',\n LABEL: 'Contributor'\n },\n SITE_COLLABORATOR: {\n ROLE: 'SiteCollaborator',\n LABEL: 'Collaborator'\n },\n NONE: {\n LABEL: 'Not a member'\n }\n};\n\nexport const SITE_VISIBILITY = {\n PUBLIC: 'PUBLIC',\n MODERATED: 'MODERATED',\n PRIVATE: 'PRIVATE'\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const errorStrings = {\n errorMessageNotPresent: 'Error message is not displayed',\n nameIsRequiredError: 'Name is required',\n nameWithSpecialCharactersError: `Name can't contain these characters * \" < > \\\\ / ? : |`,\n nameEndWithDotError: `Name can't end with a period .`,\n nameContainOnlySpacesError: `Name can't contain only spaces`,\n titleLengthLimitError: 'Use 256 characters or less for title',\n descriptionLengthLimitError: 'Use 512 characters or less for description',\n nameAlreadyUsedError: 'This name is already in use, try a different name.',\n\n folderNameIsRequired: 'Folder name is required',\n folderNameCantEndWithAPeriod: `Folder name can't end with a period .`,\n folderNameCantContainTheseCharacters: `Folder name can't contain these characters`,\n folderNameCantContainOnlySpaces: `Folder name can't contain only spaces`,\n thereIsAlreadyAFolderWithThisName: `There's already a folder with this name. Try a different name.`\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport type ApiResultPredicate<T> = (result: T) => boolean;\nexport type ApiCall<T> = () => Promise<T>;\n\nexport async function waitForApi<T>(apiCall: ApiCall<T>, predicate: ApiResultPredicate<T>, retry: number = 30, delay: number = 1000) {\n const apiCallWithPredicateChecking = async () => {\n const apiCallResult = await apiCall();\n if (predicate(apiCallResult)) {\n return Promise.resolve(apiCallResult);\n } else {\n return Promise.reject(new Error(`API call did not satisfy predicate: ${JSON.stringify(apiCallResult)}`));\n }\n };\n\n return retryCall(apiCallWithPredicateChecking, retry, delay);\n}\n\nfunction retryCall(fn: () => Promise<any>, retry: number = 30, delay: number = 1000): Promise<string> {\n const pause = (duration) => new Promise((res) => setTimeout(res, duration));\n const run = (retries) =>\n fn().catch((err) =>\n retries > 1\n ? pause(delay).then(() => run(retries - 1))\n : Promise.reject(new Error(`API call did not satisfy predicate: ${JSON.stringify(err)}`))\n );\n\n return run(retry);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\nexport const infoColor = '\\x1b[36m%s\\x1b[0m';\nexport const logColor = '\\x1b[35m%s\\x1b[0m';\nexport const warnColor = '\\x1b[33m%s\\x1b[0m';\nexport const errorColor = '\\x1b[31m%s\\x1b[0m';\n\nexport type LOG_LEVEL = 'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'SILENT';\n\nexport class LogLevelsEnum extends Number {\n public static readonly TRACE: number = 5;\n public static readonly DEBUG: number = 4;\n public static readonly INFO: number = 3;\n public static readonly WARN: number = 2;\n public static readonly ERROR: number = 1;\n public static readonly SILENT: number = 0;\n}\n\nexport const logLevels: { level: LogLevelsEnum; name: LOG_LEVEL }[] = [\n { level: LogLevelsEnum.TRACE, name: 'TRACE' },\n { level: LogLevelsEnum.DEBUG, name: 'DEBUG' },\n { level: LogLevelsEnum.INFO, name: 'INFO' },\n { level: LogLevelsEnum.WARN, name: 'WARN' },\n { level: LogLevelsEnum.ERROR, name: 'ERROR' },\n { level: LogLevelsEnum.SILENT, name: 'SILENT' }\n];\n\nexport interface LoggerLike {\n info(...messages: string[]): void;\n log(...messages: string[]): void;\n warn(...messages: string[]): void;\n error(...messages: string[]): void;\n}\n\n/* eslint-disable no-console */\nexport class GenericLogger implements LoggerLike {\n private readonly level: LogLevelsEnum;\n\n constructor(logLevel: string) {\n this.level = logLevels.find(({ name }) => name === logLevel)?.level || LogLevelsEnum.ERROR;\n }\n\n info(...messages: string[]): void {\n if (Number(this.level) >= LogLevelsEnum.INFO) {\n console.log(infoColor, messages.join(''));\n }\n }\n\n log(...messages: string[]): void {\n if (Number(this.level) >= LogLevelsEnum.TRACE) {\n console.log(logColor, messages.join(''));\n }\n }\n\n warn(...messages: string[]): void {\n if (Number(this.level) >= LogLevelsEnum.WARN) {\n console.log(warnColor, messages.join(''));\n }\n }\n\n error(...messages: string[]): void {\n console.log(errorColor, messages.join(''));\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './paths';\nexport * from './timeouts';\nexport * from './exclude-tests';\nexport * from './state-helper';\nexport * from './utils';\nexport * from './library-errors';\nexport * from './config';\nexport * from './error-strings';\nexport * from './api';\nexport * from './logger';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { GenericLogger, LoggerLike } from '../utils';\n\nexport abstract class PlaywrightBase {\n public page: Page;\n public logger: LoggerLike;\n\n protected constructor(page: Page) {\n this.page = page;\n this.logger = new GenericLogger(process.env.PLAYWRIGHT_CUSTOM_LOG_LEVEL);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page } from '@playwright/test';\nimport { PlaywrightBase } from '../playwright-base';\nimport { timeouts } from '../../utils';\n\nexport abstract class BaseComponent extends PlaywrightBase {\n private readonly rootElement: string;\n private overlayElement = this.page.locator('.cdk-overlay-backdrop-showing');\n private progressBar = this.page.locator('mat-progress-bar');\n\n protected constructor(page: Page, rootElement: string) {\n super(page);\n this.rootElement = rootElement;\n }\n\n /**\n * Method which should be used across the repository, while creating\n * reference to elements, which are in root element of component.\n *\n * @param cssLocator css selector as String. Need to be in the tree under the root element\n * @param options if you want to localize it by text, then provide an optional hasText\n * @returns Locator object\n */\n getChild(cssLocator: string, options?: { hasText?: string | RegExp; has?: Locator }): Locator {\n return this.page.locator(`${this.rootElement} ${cssLocator}`, options);\n }\n\n async closeAdditionalOverlayElementIfVisible(): Promise<void> {\n if (await this.overlayElement.isVisible()) {\n await this.page.keyboard.press('Escape');\n await this.overlayElement.waitFor({ state: 'detached', timeout: timeouts.medium });\n }\n }\n\n async spinnerWaitForReload(): Promise<void> {\n try {\n await this.page.locator('mat-progress-spinner').waitFor({ state: 'attached', timeout: timeouts.medium });\n await this.page.locator('mat-progress-spinner').waitFor({ state: 'detached', timeout: timeouts.normal });\n } catch (e) {\n this.logger.info('Spinner was not present');\n }\n }\n\n async progressBarWaitForReload(): Promise<void> {\n try {\n await this.progressBar.waitFor({ state: 'visible', timeout: timeouts.medium });\n await this.progressBar.waitFor({ state: 'hidden', timeout: timeouts.normal });\n } catch (e) {\n this.logger.info('Progress bar was not present');\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page, expect } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class SnackBarComponent extends BaseComponent {\n private static rootElement = 'adf-snackbar-content';\n\n public message = this.getChild('[data-automation-id=\"adf-snackbar-message-content\"]').first();\n\n public actionButton = this.getChild('[data-automation-id=\"adf-snackbar-message-content-action-button\"]');\n\n public closeIcon = this.getChild('.adf-snackbar-message-content-action-icon');\n public getByMessageLocator = (message: string) =>\n this.getChild(`[data-automation-id='adf-snackbar-message-content']`, { hasText: message }).first();\n\n constructor(page: Page, rootElement = SnackBarComponent.rootElement) {\n super(page, rootElement);\n }\n\n async getSnackBarMessage(): Promise<string> {\n return this.message.innerText();\n }\n\n async getSnackBarActionText(): Promise<string> {\n if (await this.actionButton.isVisible()) {\n return this.actionButton.textContent();\n } else {\n return '';\n }\n }\n\n async verifySnackBarActionText(text: string): Promise<void> {\n expect(await this.message.textContent()).toContain(text);\n }\n\n async clickSnackBarAction(): Promise<void> {\n await this.actionButton.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { expect, Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class MatMenuComponent extends BaseComponent {\n private static rootElement = '.mat-mdc-menu-content';\n\n constructor(page: Page) {\n super(page, MatMenuComponent.rootElement);\n }\n\n public getMenuItemsLocator = this.getChild('button');\n public getMenuItemTextLocator = this.getChild('[data-automation-id=\"menu-item-title\"]');\n public createFolder = this.getChild('[id=\"app.create.folder\"]');\n public createFolderFromTemplate = this.getChild('[id=\"app.create.folderFromTemplate\"]');\n public createFileFromTemplate = this.getChild('[id=\"app.create.fileFromTemplate\"]');\n public createLibrary = this.getChild('[id=\"app.create.library\"]');\n public getButtonByText = (text: string) => this.getChild('button', { hasText: text });\n public getMenuItemFromHeaderMenu = (text: string) => this.page.getByRole('menuitem', { name: text, exact: true });\n\n async clickMenuItem(menuItem: string): Promise<void> {\n const menuElement = this.getButtonByText(menuItem);\n await menuElement.click();\n await menuElement.waitFor({ state: 'detached' });\n }\n\n async clickMenuItemFromHeaderMenu(menuItem: string): Promise<void> {\n const menuElement = this.getMenuItemFromHeaderMenu(menuItem);\n await menuElement.click();\n await menuElement.waitFor({ state: 'detached' });\n }\n\n async isMenuItemVisible(menuItem: string): Promise<boolean> {\n const menuElement = this.getButtonByText(menuItem);\n await menuElement.waitFor({ state: 'attached' });\n return menuElement.isVisible();\n }\n\n async verifyActualMoreActions(expectedToolbarMore: string[]): Promise<void> {\n await this.page.locator('.mat-mdc-menu-content').waitFor({ state: 'attached' });\n const menus = await this.page.$$('.mat-mdc-menu-content .mat-mdc-menu-item');\n const actualMoreActions: string[] = await Promise.all(\n menus.map(async (button) => {\n const title = await (await button.$('.mat-mdc-menu-item-text span')).innerText();\n return title || '';\n })\n );\n for (const action of expectedToolbarMore) {\n expect(actualMoreActions.includes(action), `Expected to contain ${action} ${actualMoreActions}`).toBe(true);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from './base.component';\nimport { Locator, Page } from '@playwright/test';\nimport { MatMenuComponent } from './dataTable/mat-menu.component';\nimport { timeouts } from '../../utils';\n\nexport enum PaginationActionsType {\n PageSizeSelector = 'Page size selector',\n CurrentPageSelector = 'Current page selector',\n NextPageSelector = 'Next page button'\n}\n\nexport class PaginationComponent extends BaseComponent {\n private static rootElement = 'adf-pagination';\n\n constructor(page: Page) {\n super(page, PaginationComponent.rootElement);\n }\n\n private range = this.getChild('.adf-pagination__range');\n private maxItems = this.getChild('.adf-pagination__max-items');\n private currentPage = this.getChild('.adf-pagination__current-page');\n private totalPages = this.getChild('.adf-pagination__total-pages');\n private previousButton = this.getChild('.adf-pagination__previous-button');\n private nextButton = this.getChild('.adf-pagination__next-button');\n private maxItemsButton = this.getChild('.adf-pagination__max-items + button[mat-icon-button]');\n\n private itemsPerPageMenu = new MatMenuComponent(this.page);\n\n public currentPageLocator = this.getChild('.adf-pagination__current-page');\n public totalPageLocator = this.getChild('.adf-pagination__total-pages');\n public getArrowLocatorFor = (action: PaginationActionsType) => this.getChild(`[aria-label=\"${action}\"]`);\n\n async setItemsPerPage(amount: number): Promise<void> {\n await this.getArrowLocatorFor(PaginationActionsType.PageSizeSelector).click();\n await this.itemsPerPageMenu.getButtonByText(amount.toString()).click();\n await this.spinnerWaitForReload();\n }\n\n async navigateToPage(pageNumber: number): Promise<void> {\n await this.getArrowLocatorFor(PaginationActionsType.CurrentPageSelector).click();\n await this.itemsPerPageMenu.getButtonByText(pageNumber.toString()).click();\n await this.spinnerWaitForReload();\n }\n\n async spinnerWaitForReload(): Promise<void> {\n try {\n await this.page.locator('mat-progress-spinner').waitFor({ state: 'attached', timeout: 2000 });\n await this.page.locator('mat-progress-spinner').waitFor({ state: 'detached', timeout: 2000 });\n } catch (e) {\n this.logger.info('Spinner was not present');\n }\n }\n\n async getRange(): Promise<string> {\n return this.range.innerText();\n }\n\n async getMaxItems(): Promise<string> {\n return this.maxItems.innerText();\n }\n\n async getCurrentPage(): Promise<string> {\n return this.currentPage.innerText();\n }\n\n async getTotalPages(): Promise<string> {\n return this.totalPages.innerText();\n }\n\n async isPreviousEnabled(): Promise<boolean> {\n return this.previousButton.isEnabled();\n }\n\n async isNextEnabled(): Promise<boolean> {\n await this.page.waitForTimeout(timeouts.tiny);\n return this.nextButton.isEnabled();\n }\n\n async clickOnNextPage(): Promise<void> {\n try {\n if (await this.isNextEnabled()) {\n await this.nextButton.click();\n }\n } catch (error) {\n throw new Error(`Failed on previous click: ${error}`);\n }\n }\n\n async clickOnPreviousPage(): Promise<void> {\n try {\n if (await this.isPreviousEnabled()) {\n await this.previousButton.click();\n }\n } catch (error) {\n throw new Error(`Failed on previous click: ${error}`);\n }\n }\n\n async openMaxItemsMenu(): Promise<void> {\n try {\n await this.maxItemsButton.waitFor({ state: 'visible' });\n await this.maxItemsButton.click();\n } catch (error) {\n throw new Error(`Open max items catch: ${error}`);\n }\n }\n\n async resetToDefaultPageSize(): Promise<void> {\n try {\n await this.openMaxItemsMenu();\n await this.clickNthItem(1);\n await this.page.waitForTimeout(timeouts.tiny);\n } catch (error) {\n throw new Error(`Reset to default page size catch: ${error}`);\n }\n }\n\n async clickMenuItem(menuItem: string): Promise<void> {\n try {\n await this.page.getByRole('menuitem', { name: menuItem }).click();\n } catch (e) {\n throw new Error(`Click menu item catch : failed to click on: ${e}`);\n }\n }\n\n async getNthItem(nth: number): Promise<Locator> {\n return this.page.getByRole('menuitem').nth(nth - 1);\n }\n\n async getItemsCount(): Promise<number> {\n return this.page.getByRole('menuitem').count();\n }\n\n async clickNthItem(nth: number): Promise<void> {\n try {\n await (await this.getNthItem(nth)).click();\n } catch (e) {\n throw new Error(`Click nth menu item catch: ${e}`);\n }\n }\n\n async closeMenu(): Promise<void> {\n await this.page.keyboard.press('Escape');\n }\n\n async isRangePresent(): Promise<boolean> {\n return this.range.isVisible();\n }\n\n async getMaxRange(): Promise<string> {\n return this.range.textContent();\n }\n\n async isMaxItemsPresent(): Promise<boolean> {\n return this.maxItems.isVisible();\n }\n\n async isCurrentPagePresent(): Promise<boolean> {\n return this.currentPage.isVisible();\n }\n\n async isTotalPagesPresent(): Promise<boolean> {\n return this.totalPages.isVisible();\n }\n\n async isPreviousButtonPresent(): Promise<boolean> {\n return this.previousButton.isVisible();\n }\n\n async isNextButtonPresent(): Promise<boolean> {\n return this.nextButton.isVisible();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\nimport { MatMenuComponent } from './mat-menu.component';\nimport { PaginationActionsType, PaginationComponent } from '../pagination.component';\nimport { timeouts } from '../../../utils';\n\nexport class DataTableComponent extends BaseComponent {\n private static rootElement = 'adf-datatable';\n contextMenuActions = new MatMenuComponent(this.page);\n\n constructor(page: Page, rootElement = DataTableComponent.rootElement) {\n super(page, rootElement);\n }\n\n public pagination = new PaginationComponent(this.page);\n body = this.getChild('.adf-datatable-body');\n getEmptyFolderLocator = this.getChild('.adf-empty-folder');\n getEmptyContentTitleLocator = this.getChild('adf-empty-content .adf-empty-content__title');\n getEmptyContentSubTitleLocator = this.getChild('adf-empty-content .adf-empty-content__subtitle');\n getSelectedRow = this.getChild('.adf-datatable-row.adf-is-selected');\n sortedColumnHeader = this.getChild(`.adf-datatable__header--sorted-asc .adf-datatable-cell-header-content .adf-datatable-cell-value,\n .adf-datatable__header--sorted-desc .adf-datatable-cell-header-content .adf-datatable-cell-value`);\n columnHeaders = this.getChild('.adf-datatable-row .adf-datatable-cell-header .adf-datatable-cell-value');\n emptyList = this.getChild('div.adf-no-content-container');\n emptyListTitle = this.getChild('.adf-empty-content__title');\n emptyListSubtitle = this.getChild('.adf-empty-content__subtitle');\n emptySearchText = this.getChild('.empty-search__text');\n emptyListTest = this.getChild('adf-custom-empty-content-template');\n paginationButton = this.page.locator('.adf-pagination__block button').nth(0);\n paginationOptions = this.page.locator('#cdk-overlay-0 button');\n sitesVisibility = this.page.locator('.adf-datatable-body [data-automation-id*=\"datatable-row\"] [aria-label=\"Visibility\"]');\n sitesName = this.page.locator('.adf-datatable-body [data-automation-id*=\"datatable-row\"] [aria-label=\"Name\"]');\n sitesRole = this.page.locator('.adf-datatable-body [data-automation-id*=\"datatable-row\"] [aria-label=\"My Role\"]');\n lockOwner = this.page.locator('.aca-locked-by--name');\n uncheckedCheckbox = this.page.locator('.mat-mdc-checkbox');\n checkedCheckbox = this.page.locator('.mat-mdc-checkbox-checked');\n highlightedText = '.aca-highlight';\n searchFileName = '.search-file-name';\n searchFileDescription = '[data-automation-id=\"search-results-entry-description\"]';\n searchFileContent = '.aca-result-content';\n\n /** Locator for row (or rows) */\n getRowLocator = this.page.getByRole('rowgroup').nth(1).locator('adf-datatable-row');\n\n /** Locator to get \"No results found\" message */\n getNoResultsFoundMessage = this.getChild('adf-custom-empty-content-template', { hasText: 'No results found' });\n\n /**\n * Method used in cases where we want to check that some record is visible in the datatable. It will consider whole row\n *\n * @returns reference to cell element which contains text.\n */\n getRowByName = (name: string | number): Locator => this.getChild(`adf-datatable-row`, { hasText: name.toString() });\n\n /**\n * Method used in cases where we want to check that some record is visible in the datatable.\n * But we want to check it by column header title and value of this column.\n *\n * @returns reference to cell element which contains text.\n */\n getRowByColumnTitleAndItsCellValue = (columnTitle: string, cellValue: string | number): Locator =>\n this.page.locator(`//div[contains(@title, '${columnTitle}')]//span[contains(text(), '${cellValue}')]/ancestor::adf-datatable-row`);\n\n /**\n * Method used in cases where we want to retrieve a row from the datatable based on its numerical order within the array.\n *\n * @returns reference to cell element which contains text.\n */\n getNthRow = (orderNum: number): Locator => this.getRowLocator.nth(orderNum);\n\n /**\n * Method used in cases where user have possibility to navigate \"inside\" the element (it's clickable and has link attribute).\n * Perform action .click() to navigate inside it\n *\n * @returns reference to cell element which contains link.\n */\n getCellLinkByName = (name: string): Locator => this.getChild('.adf-cell-value span[role=\"link\"]', { hasText: name });\n\n /**\n * Method used in cases where we want to localize the element by [aria-label]\n *\n * @returns reference to cell element.\n */\n getByAriaLabelTitle = (title: string): Locator => this.getChild(`[aria-label=\"${title}\"]`);\n\n /**\n * Method used in cases where we want to get the button (hamburger menu) for row element\n *\n * @returns reference to menu placed in row localized by the name\n */\n getActionsButtonByName = (name: string): Locator =>\n this.getRowByName(name).locator('mat-icon', { hasText: new RegExp(`^\\\\s*more_vert\\\\s*$`, 'g') });\n\n /**\n * Method used in cases where we want to get the edit button and there is no hamburger menu\n *\n * @returns reference to edit button placed in row localized by the name\n */\n getEditButtonByName = (name: string): Locator => this.getRowByName(name).locator('button#editButton');\n\n /**\n * Method used in cases where we want to get the button and there is no hamburger menu\n *\n * @returns reference to button placed in row localized by the name\n */\n getButtonByNameForSpecificRow = (elementTitleInRow: string, buttonTitle: string): Locator =>\n this.getRowByName(elementTitleInRow).locator('button', { hasText: buttonTitle });\n\n /**\n * Method used in cases where you want to get some specific cell (by column name) for row which contains some name/title/etc.\n *\n * @returns reference to cell element\n */\n getCellByColumnNameAndRowItem = (item: string | number, columnName: string): Locator => this.getRowByName(item).locator(`[title=\"${columnName}\"]`);\n\n /**\n * Method used in cases where we want to get the checkbox for row element\n *\n * @returns reference to checkbox placed in row localized by the name\n */\n getCheckboxForElement = (item: string): Locator => this.getRowByName(item).locator('.mat-mdc-checkbox');\n\n getColumnHeaderByTitleLocator = (headerTitle: string): Locator => this.getChild('[role=\"columnheader\"]', { hasText: headerTitle });\n\n getSearchResultLinkByName = (name: string): Locator => this.getChild('.aca-search-results-row span[role=\"link\"]', { hasText: name });\n\n getColumnValuesByName = (name: string): Locator => this.getChild(`div[title=\"${name}\"] span`);\n\n getColumnHeaderByName = (headerTitle: string): Locator =>\n this.getChild('.adf-datatable-row .adf-datatable-cell-header .adf-datatable-cell-value', { hasText: headerTitle });\n\n async sortBy(label: string, order: 'asc' | 'desc'): Promise<void> {\n const sortColumn = await this.getSortedColumnHeaderText();\n let sortOrder = await this.getSortingOrder();\n if (sortColumn !== label) {\n await this.getColumnHeaderByName(label).hover();\n await this.getColumnHeaderByName(label).click({ force: true });\n sortOrder = await this.getSortingOrder();\n }\n if (sortOrder !== order) {\n await this.getChild('span[class*=\"adf-datatable__header--sorted\"]').click();\n }\n }\n\n /**\n * This method is used when we want to perform right mouse click on the dataTable row and perform some action\n *\n * @param name of the data table element with which we want to click\n * @param action provide which action you want to perform\n */\n async performActionFromExpandableMenu(name: string | number, action: string): Promise<void> {\n await this.goThroughPagesLookingForRowWithName(name);\n const actionButtonLocator = await this.getActionLocatorFromExpandableMenu(name, action);\n await actionButtonLocator.click();\n await this.spinnerWaitForReload();\n }\n\n /**\n * Click action from the expandable kebab menu for the element in datatable\n *\n * @param name title of the record you would like to proceed\n * @param action provide button title for the action\n * @param subAction if the action is in sub menu, then provide it here\n */\n async performActionForElement(name: string, action: string, subAction?: string): Promise<void> {\n await this.getActionsButtonByName(name).click();\n await this.contextMenuActions.getButtonByText(action).click();\n\n if (subAction) {\n await this.contextMenuActions.getButtonByText(subAction).click();\n }\n }\n\n /**\n * This method is used when we want to perform double click on the dataTable row to open a file or folder\n *\n * @param name of the data table element with which we want to double click\n */\n async performClickFolderOrFileToOpen(name: string): Promise<void> {\n await this.getCellLinkByName(name).click();\n await this.spinnerWaitForReload();\n }\n\n async isItemPresent(name: string): Promise<boolean> {\n await this.goThroughPagesLookingForRowWithName(name);\n return this.getRowByName(name).isVisible();\n }\n\n async getActionLocatorFromExpandableMenu(name: string | number, action: string): Promise<Locator> {\n await this.getRowByName(name).click({ button: 'right' });\n return this.contextMenuActions.getButtonByText(action);\n }\n\n async performActionInExpandableMenu(name: string | number, action: string): Promise<void> {\n await this.getRowByName(name).click({ button: 'right' });\n await this.contextMenuActions.getButtonByText(action).click();\n }\n\n async goThroughPagesLookingForRowWithName(name: string | number): Promise<void> {\n await this.spinnerWaitForReload();\n if (await this.getRowByName(name).isVisible()) {\n return null;\n }\n\n if (await this.pagination.currentPageLocator.isVisible()) {\n if ((await this.pagination.currentPageLocator.textContent()) === ' of 1 ') {\n return null;\n }\n }\n if (await this.pagination.totalPageLocator.isVisible()) {\n const maxPages = (await this.pagination.totalPageLocator?.textContent())?.match(/\\d/)[0];\n for (let page = 1; page <= Number(maxPages); page++) {\n if (await this.getRowByName(name).isVisible()) {\n break;\n }\n if (await this.pagination.getArrowLocatorFor(PaginationActionsType.NextPageSelector).isEnabled()) {\n await this.pagination.getArrowLocatorFor(PaginationActionsType.NextPageSelector).click();\n }\n await this.spinnerWaitForReload();\n }\n }\n }\n\n async selectItems(...names: string[]): Promise<void> {\n for (const name of names) {\n const isSelected = await this.isRowSelected(name);\n if (!isSelected) {\n const row = this.getRowByName(name);\n await row.hover();\n await row.locator(this.uncheckedCheckbox).click();\n await row.locator(this.checkedCheckbox).waitFor({ state: 'visible', timeout: timeouts.large });\n }\n }\n }\n\n async isRowSelected(itemName: string): Promise<boolean> {\n const row = this.getRowByName(itemName);\n return row.locator(this.checkedCheckbox).isVisible();\n }\n\n async getColumnHeaders(): Promise<Array<string>> {\n const columnNameLocator = this.columnHeaders;\n await this.columnHeaders.nth(0).waitFor({ state: 'attached' });\n return columnNameLocator.allTextContents();\n }\n\n async getSortedColumnHeaderText(): Promise<string> {\n return this.sortedColumnHeader.innerText();\n }\n\n private getItemLocationEl(name: string): Locator {\n return this.getRowByName(name).locator('.aca-location-link');\n }\n\n async getItemLocationText(name: string): Promise<string> {\n await this.getItemLocationEl(name).locator('a').waitFor({ state: 'attached' });\n return this.getItemLocationEl(name).innerText();\n }\n\n async getItemLocationTooltip(name: string): Promise<string> {\n const location = this.getItemLocationEl(name);\n await location.hover();\n return location.locator('a').getAttribute('title', { timeout: timeouts.normal });\n }\n\n async clickItemLocation(name: string): Promise<void> {\n await this.getItemLocationEl(name).click();\n }\n\n async getSortingOrder(): Promise<string> {\n const str = await this.sortedColumnHeader.locator('../..').getAttribute('class');\n if (str.includes('asc')) {\n return 'asc';\n } else if (str.includes('desc')) {\n return 'desc';\n }\n return 'none';\n }\n\n async getRowAllInnerTexts(name: string): Promise<string> {\n return (await this.getRowByName(name).locator('span').allInnerTexts()).toString();\n }\n\n async getFirstElementDetail(name: string): Promise<string> {\n const firstNode = this.getColumnValuesByName(name).first();\n return firstNode.innerText();\n }\n\n async isEmpty(): Promise<boolean> {\n return this.emptyList.isVisible();\n }\n\n async getEmptyStateTitle(): Promise<string> {\n return (await this.isEmpty()) ? this.emptyListTitle.innerText() : '';\n }\n\n async getEmptyStateSubtitle(): Promise<string> {\n return (await this.isEmpty()) ? this.emptyListSubtitle.innerText() : '';\n }\n\n async getEmptyListText(): Promise<string> {\n return (await this.isEmpty()) ? this.emptyListTest.innerText() : '';\n }\n\n async getRowsCount(): Promise<number> {\n return this.getRowLocator.count();\n }\n\n async rightClickOnItem(itemName: string): Promise<void> {\n await this.getCellByColumnNameAndRowItem(itemName, 'Name').click({ button: 'right' });\n }\n\n async setPaginationTo50(): Promise<void> {\n await this.paginationButton.click();\n await this.paginationOptions.getByText('50').click();\n }\n\n /**\n * Method used to create objects from names and visibility of sites from datatable\n *\n * @returns an object with sites' names and their corresponding visibility values\n */\n async getSitesNameAndVisibility(): Promise<{ [siteName: string]: string }> {\n const rowsCount = await this.sitesName.count();\n const sitesInfo: { [siteName: string]: string } = {};\n for (let i = 0; i < rowsCount; i++) {\n let siteVisibilityText = await this.sitesVisibility.nth(i).textContent();\n let siteNameText = await this.sitesName.nth(i).textContent();\n siteVisibilityText = siteVisibilityText.trim().toUpperCase();\n siteNameText = siteNameText.trim();\n sitesInfo[siteNameText] = siteVisibilityText;\n }\n return sitesInfo;\n }\n\n /**\n * Method used to create objects from names and roles of sites from datatable\n *\n * @returns an object with sites' names and their corresponding role values\n */\n async getSitesNameAndRole(): Promise<{ [siteName: string]: string }> {\n const rowsCount = await this.sitesName.count();\n const sitesInfo: { [siteName: string]: string } = {};\n for (let i = 0; i < rowsCount; i++) {\n let siteNameText = await this.sitesName.nth(i).textContent();\n let siteRoleText = await this.sitesRole.nth(i).textContent();\n siteNameText = siteNameText.trim();\n siteRoleText = siteRoleText.trim();\n sitesInfo[siteNameText] = siteRoleText;\n }\n return sitesInfo;\n }\n\n async hasLockIcon(itemName: string): Promise<boolean> {\n const row = this.getRowByName(itemName);\n return row.locator('img[src*=\"lock\"]').isVisible();\n }\n\n async getLockOwner(itemName: string): Promise<string> {\n const row = this.getRowByName(itemName);\n return row.locator(this.lockOwner).innerText();\n }\n\n async hasHighlightedText(location: 'name' | 'description' | 'content'): Promise<boolean> {\n switch (location) {\n case 'name':\n return this.page.locator(this.searchFileName).locator(this.highlightedText).isVisible();\n case 'description':\n return this.page.locator(this.searchFileDescription).locator(this.highlightedText).isVisible();\n case 'content':\n return this.page.locator(this.searchFileContent).locator(this.highlightedText).isVisible();\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../base.component';\nimport { Page } from '@playwright/test';\n\nexport class ToolbarComponent extends BaseComponent {\n private static rootElement = 'adf-toolbar';\n private createRuleButton = this.getChild('[data-automation-id=\"manage-rules-create-button\"]');\n private linkRulesButton = this.getChild('[data-automation-id=\"manage-rules-link-button\"]');\n\n constructor(page: Page) {\n super(page, ToolbarComponent.rootElement);\n }\n\n async clickCreateRuleButton(): Promise<void> {\n await this.createRuleButton.click();\n }\n\n async clickLinkRulesButton(): Promise<void> {\n await this.linkRulesButton.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './data-table.component';\nexport * from './mat-menu.component';\nexport * from './toolbar.component';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../base.component';\nimport { Page } from '@playwright/test';\n\nexport class AdfFolderDialogComponent extends BaseComponent {\n private static rootElement = 'adf-folder-dialog';\n\n public folderNameInputLocator = this.getChild('[id=\"adf-folder-name-input\"]');\n public folderNameInputHint = this.getChild('mat-hint');\n public folderTitleInput = this.getChild('[id=\"adf-folder-title-input\"]');\n public folderDescriptionInput = this.getChild('[id=\"adf-folder-description-input\"]');\n public createButton = this.getChild('[id=\"adf-folder-create-button\"]');\n public cancelButton = this.getChild('[id=\"adf-folder-cancel-button\"]');\n\n constructor(page: Page) {\n super(page, AdfFolderDialogComponent.rootElement);\n }\n\n public getLabelText = (text: string) => this.getChild('label', { hasText: text });\n public getRequiredMarker = (text: string) => this.getLabelText(text).locator('.mat-mdc-form-field-required-marker');\n\n /**\n * This method is used when we want to fill in Create new Folder Dialog and choose Create button\n *\n * @param nameInput input for the Name field\n * @param titleInput input for Title field\n * @param descriptionInput input for Description field\n */\n async createNewFolderDialog(nameInput: string, titleInput?: string, descriptionInput?: string): Promise<void> {\n await this.folderNameInputLocator.fill(nameInput);\n if (titleInput) {\n await this.folderTitleInput.fill(titleInput);\n }\n if (descriptionInput) {\n await this.folderDescriptionInput.fill(descriptionInput);\n }\n await this.createButton.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { timeouts } from '../../../utils';\nimport { BaseComponent } from '../base.component';\nimport { Locator, Page } from '@playwright/test';\n\nexport class AdfLibraryDialogComponent extends BaseComponent {\n private static rootElement = 'adf-library-dialog';\n\n public createButton = this.getChild('[data-automation-id=\"create-library-id\"]');\n public cancelButton = this.getChild('[data-automation-id=\"cancel-library-id\"]');\n\n constructor(page: Page) {\n super(page, AdfLibraryDialogComponent.rootElement);\n }\n\n public getLabelText = (text: string) => this.getChild('label', { hasText: text });\n public getRequiredMarker = (text: string) => this.getLabelText(text).locator('.mat-mdc-form-field-required-marker');\n public getDialogTitle = (text: string) => this.getChild('.mat-mdc-dialog-title', { hasText: text });\n public getErrorByText = (text: string): Locator => this.page.locator('mat-error', { hasText: text });\n\n /**\n * This method is used when we want to fill in Create Library Dialog and choose Create button\n *\n * @param nameInput input for the Name field\n * @param libraryIdInput input for Library ID field\n * @param descriptionInput input for Description field\n * @param visibility visibility of the library\n */\n async createLibraryWithNameAndId(nameInput: string, libraryIdInput: string, descriptionInput?: string, visibility?: string): Promise<void> {\n await this.getLabelText('Name').fill(nameInput);\n await this.getLabelText('Library ID').clear();\n await this.getLabelText('Library ID').fill(libraryIdInput);\n if (descriptionInput) {\n await this.getLabelText('Description').fill(descriptionInput);\n }\n if (visibility) {\n await this.getLabelText(visibility).click();\n }\n await this.createButton.click();\n await this.spinnerWaitForReload();\n }\n\n async isErrorMessageDisplayed(errorText: string): Promise<boolean> {\n await this.getErrorByText(errorText).waitFor({ state: 'visible', timeout: timeouts.large });\n return this.getErrorByText(errorText).isVisible();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\nimport { timeouts } from '../../../utils';\n\nexport class PasswordOverlayDialogComponent extends BaseComponent {\n private static rootElement = '.cdk-overlay-pane';\n\n public closeButton = this.getChild('[data-automation-id=\"adf-password-dialog-close\"]');\n public submitButton = this.getChild('[data-automation-id=\"adf-password-dialog-submit\"]');\n public passwordInput = this.getChild('[data-automation-id=\"adf-password-dialog-input\"]');\n public errorMessage = this.getChild('[data-automation-id=\"adf-password-dialog-error\"]');\n\n constructor(page: Page, rootElement = PasswordOverlayDialogComponent.rootElement) {\n super(page, rootElement);\n }\n\n async waitForDialogToOpen(): Promise<void> {\n await this.spinnerWaitForReload();\n await this.passwordInput.waitFor({ state: 'attached', timeout: timeouts.large });\n await this.passwordInput.isVisible();\n }\n\n async waitForDialogToClose(): Promise<void> {\n await this.passwordInput.waitFor({ state: 'detached', timeout: timeouts.large });\n }\n\n async isDialogOpen(): Promise<boolean> {\n await this.waitForDialogToOpen();\n return this.passwordInput.isVisible();\n }\n\n async isCloseVisible(): Promise<boolean> {\n return this.closeButton.isVisible();\n }\n\n async isSubmitHidden(): Promise<boolean> {\n return this.submitButton.isHidden();\n }\n\n async isPasswordInputDisplayed(): Promise<boolean> {\n return this.passwordInput.isVisible();\n }\n\n async isErrorDisplayed(): Promise<boolean> {\n await this.errorMessage.waitFor({ state: 'visible', timeout: timeouts.short });\n return this.errorMessage.isVisible();\n }\n\n async getErrorMessage(): Promise<string> {\n if (await this.isErrorDisplayed()) {\n return this.errorMessage.innerText();\n }\n return '';\n }\n\n async enterPassword(password: string): Promise<void> {\n await this.passwordInput.fill(password);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\nimport { timeouts } from '../../../utils';\n\nexport class ViewerOverlayDialogComponent extends BaseComponent {\n private static rootElement = '.cdk-overlay-pane';\n\n public closeButton = this.getChild('[data-automation-id=\"adf-password-dialog-close\"]');\n public submitButton = this.getChild('[data-automation-id=\"adf-password-dialog-submit\"]');\n public passwordInput = this.getChild('[data-automation-id=\"adf-password-dialog-input\"]');\n public errorMessage = this.getChild('[data-automation-id=\"adf-password-dialog-error\"]');\n public copyDialog = this.getChild('[data-automation-id=\"content-node-selector-title\"]');\n public copyMenuButton = this.getChild('[id=\"app.viewer.copy\"]');\n public deleteMenuButton = this.getChild('[id=\"app.viewer.delete\"]');\n public favoriteMenuButton = this.getChild('[id=\"app.viewer.favorite.add\"]');\n public removeFavoriteMenuButton = this.getChild('[id=\"app.viewer.favorite.remove\"]');\n public shareDialogTitle = this.getChild('[data-automation-id=\"adf-share-dialog-title\"]');\n public shareDialogClose = this.getChild('[data-automation-id=\"adf-share-dialog-close\"]');\n\n constructor(page: Page, rootElement = ViewerOverlayDialogComponent.rootElement) {\n super(page, rootElement);\n }\n\n async isCopyDialogOpen(): Promise<boolean> {\n await this.copyDialog.waitFor({ state: 'attached', timeout: timeouts.medium });\n return this.copyDialog.isVisible();\n }\n\n async isCopyDialogClose(): Promise<boolean> {\n await this.copyDialog.waitFor({ state: 'detached', timeout: timeouts.medium });\n return this.copyDialog.isVisible();\n }\n\n async clickActionsCopy(): Promise<void> {\n await this.copyMenuButton.waitFor({ state: 'attached', timeout: timeouts.medium });\n await this.copyMenuButton.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page, expect } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class ContentNodeSelectorDialog extends BaseComponent {\n private static rootElement = 'adf-content-node-selector';\n\n constructor(page: Page) {\n super(page, ContentNodeSelectorDialog.rootElement);\n }\n\n public cancelButton = this.getChild('[data-automation-id=\"content-node-selector-actions-cancel\"]');\n public actionButton = this.getChild('[data-automation-id=\"content-node-selector-actions-choose\"]');\n public locationDropDown = this.getChild('[id=\"site-dropdown-container\"] mat-form-field');\n private selectedRow = this.getChild('.adf-is-selected');\n getOptionLocator = (optionName: string): Locator =>\n this.page.locator('.mat-mdc-select-panel .mdc-list-item__primary-text', { hasText: optionName });\n private getRowByName = (name: string | number): Locator => this.getChild(`adf-datatable-row`, { hasText: name.toString() });\n getDialogTitle = (text: string) => this.getChild('[data-automation-id=\"content-node-selector-title\"]', { hasText: text });\n getBreadcrumb = (text: string) => this.getChild('[data-automation-id=\"current-folder\"]', { hasText: text });\n getFolderIcon = this.getChild('[data-automation-id=\"dropdown-breadcrumb-trigger\"]');\n loadMoreButton = this.getChild('[data-automation-id=\"adf-infinite-pagination-button\"]');\n\n async loadMoreNodes(): Promise<void> {\n await this.spinnerWaitForReload();\n while (await this.loadMoreButton.isVisible()) {\n await this.loadMoreButton.click();\n }\n }\n\n async selectLocation(location: string): Promise<void> {\n await this.locationDropDown.click();\n const optionLocator = this.getOptionLocator(location);\n await optionLocator.click();\n await optionLocator.waitFor({ state: 'detached' });\n }\n\n async selectDestination(folderName: string): Promise<void> {\n const row = this.getRowByName(folderName);\n\n await expect(row).toBeVisible();\n await row.click({ trial: true });\n\n await expect(async () => {\n await row.hover({ timeout: 1000 });\n await row.click();\n await expect(this.selectedRow).toBeVisible();\n }).toPass({\n intervals: [2_000],\n timeout: 20_000\n });\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\nimport { timeouts } from '../../../utils';\n\nexport class CreateFromTemplateDialogComponent extends BaseComponent {\n private static rootElement = 'mat-dialog-container';\n\n constructor(page: Page) {\n super(page, CreateFromTemplateDialogComponent.rootElement);\n }\n\n cancelButton = this.getChild('[data-automation-id=\"create-from-template-dialog-cancel-button\"]');\n createButton = this.getChild('[data-automation-id=\"create-from-template-dialog-create-button\"]');\n getDialogTitle = (text: string) => this.getChild('[data-automation-id=\"create-from-template-title\"]', { hasText: text });\n getDialogLabel = (text: string) => this.getChild('label', { hasText: text });\n getErrorByText = (text: string): Locator => this.page.locator('[data-automation-id=\"create-from-template-field-error\"]', { hasText: text });\n\n async isErrorMessageDisplayed(errorText: string): Promise<boolean> {\n await this.getErrorByText(errorText).waitFor({ state: 'visible', timeout: timeouts.large });\n return this.getErrorByText(errorText).isVisible();\n }\n\n /**\n * This method is used when we want to fill in Create new folder/document/file from template dialog and choose Create button\n */\n async createFromTemplateAction(nameInput: string, titleInput?: string, descriptionInput?: string): Promise<void> {\n await this.getDialogLabel('Name').fill(nameInput);\n if (titleInput) {\n await this.getDialogLabel('Title').fill(titleInput);\n }\n if (descriptionInput) {\n await this.getDialogLabel('Description').fill(descriptionInput);\n }\n await this.createButton.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class AdfConfirmDialogComponent extends BaseComponent {\n private static rootElement = 'adf-confirm-dialog';\n\n constructor(page: Page) {\n super(page, AdfConfirmDialogComponent.rootElement);\n }\n\n getDialogTitle = (text: string) => this.getChild('[data-automation-id=\"adf-confirm-dialog-title\"]', { hasText: text });\n getDialogContent = (text: string) => this.getChild('[data-automation-id=\"adf-confirm-dialog-base-message\"]', { hasText: text });\n okButton = this.getChild('[data-automation-id=\"adf-confirm-dialog-confirmation\"]');\n cancelButton = this.getChild('[data-automation-id=\"adf-confirm-dialog-reject\"]');\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class DateTimePicker extends BaseComponent {\n private static rootElement = '.mat-calendar';\n calendar = this.getChild('.mat-datepicker-popup');\n dayPicker = this.getChild('mat-month-view');\n nextMonthBtn = this.getChild('.mat-calendar-next-button');\n rootElemLocator = this.page.locator('.mat-datepicker-popup');\n\n constructor(page: Page) {\n super(page, DateTimePicker.rootElement);\n }\n\n async isCalendarOpen(): Promise<boolean> {\n const element = this.rootElemLocator;\n return element.isVisible();\n }\n\n async pickDateTime(): Promise<void> {\n const today = new Date();\n const nextAvailableDay = new Date();\n nextAvailableDay.setDate(today.getDate() + 2);\n if (nextAvailableDay.getMonth() !== today.getMonth()) {\n await this.nextMonthBtn.click();\n }\n await this.selectDay(nextAvailableDay.getDate());\n }\n\n async selectDay(day: number): Promise<void> {\n const firstActiveDayElem = this.dayPicker.locator(`text=${day}`).first();\n await firstActiveDayElem.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ElementHandle, Locator, Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\nimport { timeouts } from '../../../utils';\nimport { DateTimePicker } from '../datetime-picker/datetime-picker.component';\n\nexport class ShareDialogComponent extends BaseComponent {\n private static rootElement = 'adf-share-dialog';\n\n constructor(page: Page) {\n super(page, ShareDialogComponent.rootElement);\n }\n\n closeButton = this.getChild('[data-automation-id=\"adf-share-dialog-close\"]');\n dialogTitle = this.getChild('[data-automation-id=\"adf-share-dialog-title\"]');\n infoText = this.getChild('.adf-share-link__info').first();\n labels = '.adf-share-link__label';\n shareToggle = this.getChild(`[data-automation-id='adf-share-toggle']`);\n url = this.getChild(`[data-automation-id='adf-share-link']`);\n urlAction = this.getChild('.adf-input-action');\n expireToggle = this.getChild(`[data-automation-id='adf-expire-toggle']`);\n expireInput = this.getChild('input[formcontrolname=\"time\"]');\n datetimePickerButton = this.getChild('.mat-datepicker-toggle');\n\n dateTimePicker = new DateTimePicker(this.page);\n\n getDialogLabel = () => this.getChild('label').innerText();\n getErrorByText = (text: string): Locator => this.page.locator('mat-error', { hasText: text });\n\n async getLabels(): Promise<Array<string>> {\n return this.page.$$eval('.adf-share-link__label', (elements) => elements.map((element) => element.textContent));\n }\n\n async getDialogTitle(): Promise<string> {\n return this.dialogTitle.innerText();\n }\n\n async getInfoText(): Promise<string> {\n return this.infoText.innerText();\n }\n\n async getLinkUrl(): Promise<string> {\n return this.url.first().inputValue();\n }\n\n async isUrlReadOnly(): Promise<boolean> {\n const urlAttr = await this.url.getAttribute('readonly');\n return urlAttr === 'true';\n }\n\n async isCloseEnabled(): Promise<boolean> {\n return this.closeButton.isEnabled();\n }\n\n async clickClose(): Promise<void> {\n await this.page.waitForTimeout(timeouts.tiny);\n await this.closeButton.click();\n }\n\n async isToggleStatus(toggle: ElementHandle, status: string): Promise<boolean> {\n const toggleClass = await toggle.getAttribute('class');\n return toggleClass.includes(status);\n }\n\n async isShareToggleChecked(): Promise<boolean> {\n const shareToggleElement = await this.shareToggle.elementHandle();\n return this.isToggleStatus(shareToggleElement, 'checked');\n }\n\n async isExpireToggleEnabled(): Promise<boolean> {\n const expireToggleElement = await this.expireToggle.elementHandle();\n return this.isToggleStatus(expireToggleElement, 'checked');\n }\n\n async getExpireDate(): Promise<string> {\n return this.expireInput.inputValue();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class UploadNewVersionDialog extends BaseComponent {\n private static rootElement = 'adf-new-version-uploader-dialog';\n\n public cancelButton = this.getChild('#adf-new-version-cancel');\n public uploadButton = this.getChild('[data-automation-id=\"adf-new-version-file-upload\"]');\n public majorOption = this.getChild('#adf-new-version-major');\n public minorOption = this.getChild('#adf-new-version-minor');\n public description = this.getChild('#adf-new-version-text-area');\n public title = this.getChild(' [data-automation-id=\"new-version-uploader-dialog-title\"]');\n\n constructor(page: Page) {\n super(page, UploadNewVersionDialog.rootElement);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class ManageVersionsDialog extends BaseComponent {\n private static rootElement = '.adf-new-version-uploader-dialog';\n\n async viewFileVersion(version: string): Promise<void> {\n const versionActionsButton = this.page.locator(`[id=\"adf-version-list-action-menu-button-${version}\"]`);\n await versionActionsButton.click();\n }\n\n constructor(page: Page) {\n super(page, ManageVersionsDialog.rootElement);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class UploadDialog extends BaseComponent {\n private static rootElement = '.adf-upload-dialog';\n\n public uploadDialog = this.page.locator('.adf-upload-dialog');\n public closeButton = this.getChild('#adf-upload-dialog-close');\n public minimizeButton = this.page.locator('[data-automation-id=\"adf-upload-dialog__toggle-minimize\"]');\n public uploadDialogMinimized = this.page.locator('.adf-upload-dialog--minimized');\n\n constructor(page: Page) {\n super(page, UploadDialog.rootElement);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class AdfDeleteTrashComponent extends BaseComponent {\n private static rootElement = 'adf-confirm-dialog';\n\n constructor(page: Page) {\n super(page, AdfDeleteTrashComponent.rootElement);\n }\n\n dialogTitle = this.getChild('[data-automation-id=\"adf-confirm-dialog-title\"]');\n dialogDescription = this.getChild('[data-automation-id=\"adf-confirm-dialog-base-message\"]');\n deleteButton = this.getChild('[id=\"adf-confirm-accept\"]');\n keepButton = this.getChild('[id=\"adf-confirm-cancel\"]');\n\n async waitForDialog(): Promise<void> {\n await this.dialogTitle.waitFor();\n }\n\n async isDialogOpen(): Promise<boolean> {\n return this.dialogTitle.isVisible();\n }\n\n async getDialogTitle(): Promise<string> {\n return this.dialogTitle.textContent();\n }\n\n async getDialogDescription(): Promise<string> {\n return this.dialogDescription.textContent();\n }\n\n async isDeleteEnabled(): Promise<boolean> {\n return this.deleteButton.isEnabled();\n }\n\n async isKeepEnabled(): Promise<boolean> {\n return this.keepButton.isEnabled();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page, expect } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class LinkRulesDialog extends BaseComponent {\n private static rootElement = 'aca-rule-set-picker';\n\n constructor(page: Page) {\n super(page, LinkRulesDialog.rootElement);\n }\n\n cancelButton = this.getChild('[data-automation-id=\"content-node-selector-actions-cancel\"]');\n selectFolderButton = this.getChild('button', { hasText: ' Select folder ' });\n emptyLinkRules = this.getChild('.adf-empty-content__title');\n getOptionLocator = (optionName: string): Locator =>\n this.page.locator('.mat-mdc-select-panel .mdc-list-item__primary-text', { hasText: optionName });\n private getRowByName = (name: string | number): Locator => this.getChild(`adf-datatable-row`, { hasText: name.toString() });\n getDialogTitle = (text: string) => this.getChild('[data-automation-id=\"content-node-selector-title\"]', { hasText: text });\n getBreadcrumb = (text: string) => this.getChild('[data-automation-id=\"current-folder\"]', { hasText: text });\n getFolderIcon = this.getChild('.adf-dropdown-breadcrumb-icon', { hasText: 'folder' });\n getLibraryIcon = this.getChild('.adf-empty-content__icon', { hasText: 'library_books' });\n\n async selectDestination(folderName: string): Promise<void> {\n const row = this.getRowByName(folderName);\n\n await expect(row).toBeVisible();\n await row.click({ trial: true });\n\n await expect(async () => {\n await row.hover({ timeout: 1000 });\n await row.click();\n await expect(this.selectFolderButton).toBeEnabled();\n }).toPass({\n intervals: [2_000],\n timeout: 20_000\n });\n }\n\n async waitForLinkRules(): Promise<void> {\n await this.getLibraryIcon.waitFor();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class EditDialog extends BaseComponent {\n private static rootElement = 'mat-dialog-container';\n\n public editDialog = this.getChild('');\n public titleInput = this.getChild('[data-automation-id=\"adf-folder-dialog-title\"]');\n public cancelButton = this.getChild('#adf-folder-cancel-button');\n public updateButton = this.getChild('#adf-folder-create-button');\n public descriptionInput = this.getChild('#adf-folder-description-input');\n public nameInput = this.getChild('#adf-folder-name-input');\n public fieldHint = this.getChild('mat-hint');\n\n constructor(page: Page) {\n super(page, EditDialog.rootElement);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class FolderInformationDialogComponent extends BaseComponent {\n private static readonly rootElement = '[data-automation-id=\"adf-dialog-container\"]';\n\n constructor(page: Page) {\n super(page, FolderInformationDialogComponent.rootElement);\n }\n\n folderName = this.getChild('.aca-folder-info-header');\n doneButton = this.getChild('[data-automation-id=\"adf-dialog-actions-confirm\"]');\n folderNumberOfFiles = this.getChild('[data-automation-id=\"folder-info-number-of-files\"]');\n folderSize = this.getChild('[data-automation-id=\"folder-info-size\"]');\n folderLocation = this.getChild('[data-automation-id=\"folder-info-location\"]');\n folderCreationDate = this.getChild('[data-automation-id=\"folder-info-creation-date\"]');\n folderModifiedDate = this.getChild('[data-automation-id=\"folder-info-modify-date\"]');\n\n async getFolderSizeNumber(): Promise<number> {\n const textContent = await this.folderSize.textContent();\n if (!textContent) {\n throw new Error('Folder size text content is null or undefined');\n }\n return parseInt(textContent.split(' ')[0].replace(/,/g, ''), 10);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './adf-folder-dialog.component';\nexport * from './adf-library-dialog.component';\nexport * from './password-overlay-dialog.component';\nexport * from './viewer-overlay-dialog.component';\nexport * from './content-node-selector-dialog';\nexport * from './create-from-template-dialog-component';\nexport * from './adf-confirm-dialog.component';\nexport * from './share-dialog.component';\nexport * from './upload-new-version-dialog.component';\nexport * from './manage-versions-dialog.component';\nexport * from './upload-dialog.component';\nexport * from './delete-trash-dialog.component';\nexport * from './link-rules.component';\nexport * from './edit-dialog.component';\nexport * from './folder-information-dialog.component';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../base.component';\nimport { Page } from '@playwright/test';\n\nexport class ManageRulesDialogComponent extends BaseComponent {\n private static rootElement = 'aca-edit-rule-dialog';\n\n public createRuleButton = this.getChild('[data-automation-id=\"edit-rule-dialog-submit\"]');\n public cancelRuleButton = this.getChild('.aca-edit-rule-dialog__footer button').filter({ hasText: 'Cancel' });\n public ruleNameInputLocator = this.getChild('[id=\"rule-details-name-input\"]');\n public ruleDescriptionInputLocator = this.getChild('[id=\"rule-details-description-textarea\"]');\n public addConditionButton = this.getChild('[data-automation-id=\"add-condition-button\"]');\n public addConditionGroupButton = this.getChild('[data-automation-id=\"add-group-button\"]');\n public fieldDropDown = this.getChild('[data-automation-id=\"field-select\"]');\n public comparatorDropDown = this.getChild('[data-automation-id=\"comparator-select\"]');\n public valueField = this.getChild('[data-automation-id=\"value-input\"]');\n public whenCreatedCheckbox = this.getChild('[data-automation-id=\"rule-trigger-checkbox-inbound\"]');\n public whenUpdatedCheckbox = this.getChild('[data-automation-id=\"rule-trigger-checkbox-update\"]');\n public whenDeletedCheckbox = this.getChild('[data-automation-id=\"rule-trigger-checkbox-outbound\"]');\n public destinationFolderButton = this.getChild('[data-automation-id=\"card-textitem-clickable-icon-destination-folder\"]');\n public ruleInBackgroundCheckbox = this.getChild('[data-automation-id=\"rule-option-checkbox-asynchronous\"]');\n public ruleSubfoldersCheckbox = this.getChild('[data-automation-id=\"rule-option-checkbox-inheritable\"]');\n public ruleDisableCheckbox = this.getChild('[data-automation-id=\"rule-option-checkbox-disabled\"] input');\n public actionsEllipsisButtons = this.getChild('[data-automation-id=\"rule-action-list-action-menu\"]');\n public actionsEllipsisDelete = this.page.locator('[data-automation-id=\"rule-action-list-remove-action-button\"]');\n public conditionsEllipsisButtons = this.getChild('[data-automation-id=\"condition-actions-button\"]');\n public conditionsEllipsisDelete = this.page.locator('button[title=\"Remove\"]');\n\n constructor(page: Page) {\n super(page, ManageRulesDialogComponent.rootElement);\n }\n\n async deleteActions(noActions: number): Promise<void> {\n for (let i = 0; i < noActions; i++) {\n await this.actionsEllipsisButtons.first().click();\n await this.actionsEllipsisDelete.click();\n }\n }\n\n async deleteConditions(noConditions: number): Promise<void> {\n for (let i = 0; i < noConditions; i++) {\n await this.conditionsEllipsisButtons.first().click();\n await this.conditionsEllipsisDelete.click();\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page, expect } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class ManageRules extends BaseComponent {\n private static rootElement = '.aca-manage-rules';\n\n public getGroupsList = (optionName: string): Locator => this.getChild('.aca-rule-list-item__header', { hasText: optionName });\n public ruleToggle = this.getChild('.aca-manage-rules__container .mdc-switch').first();\n public ruleToggleFalse = this.getChild('aca-rule-list-grouping aca-rule-list-item .mdc-switch--unselected').first();\n public ruleDetailsTitle = this.getChild('.aca-manage-rules__container__rule-details__header__title__name');\n public ruleDetailsDeleteButton = this.getChild('#delete-rule-btn');\n public ruleDetailsEditButton = this.getChild('#edit-rule-btn');\n public ruleDetailsWhenText = this.getChild('[data-automation-id=\"rule-details-triggers-component\"]');\n public ruleDetailsPerformActionsDiv = this.getChild('adf-card-view-selectitem .adf-property-read-only');\n public rulesEmptyListTitle = this.getChild('.adf-empty-content__title');\n public ruleActions = this.getChild('aca-rule-action');\n public ruleConditionsInGroup = this.getChild('aca-rule-composite-condition aca-rule-simple-condition');\n public ruleDescription = this.getChild('.aca-manage-rules__container__rule-details__header__title__description');\n\n constructor(page: Page) {\n super(page, ManageRules.rootElement);\n }\n\n async checkAspects(aspects: string[]): Promise<void> {\n for (let i = 0; i < aspects.length; i++) {\n const aspectsActions = await this.ruleDetailsPerformActionsDiv.nth(i).innerText();\n expect(aspects).toContain(aspectsActions);\n }\n }\n\n async checkIfRuleListEmpty(): Promise<boolean> {\n return this.rulesEmptyListTitle.isVisible();\n }\n\n async checkIfRuleIsOnTheList(ruleName: string): Promise<void> {\n await expect(this.getGroupsList(ruleName)).toBeVisible({ timeout: 5000 });\n }\n\n async countConditionsInGroup(): Promise<number> {\n return this.ruleConditionsInGroup.count();\n }\n\n async turnOffRuleToggle(): Promise<void> {\n await expect(async () => {\n await this.ruleToggle.hover({ timeout: 1000 });\n await this.ruleToggle.click();\n await expect(this.ruleToggleFalse).toBeVisible();\n }).toPass({\n intervals: [2_000],\n timeout: 20_000\n });\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './manage-rules-dialog.component';\nexport * from './manage-rules.component';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from './base.component';\n\nexport class SpinnerComponent extends BaseComponent {\n private static rootElement = 'mat-progress-spinner';\n\n constructor(page: Page, rootElement = SpinnerComponent.rootElement) {\n super(page, rootElement);\n }\n\n async waitForReload(): Promise<void> {\n try {\n await this.getChild('').waitFor({ state: 'attached', timeout: 2000 });\n await this.getChild('').waitFor({ state: 'detached', timeout: 2000 });\n } catch (e) {\n this.logger.info('Spinner was not present');\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page } from '@playwright/test';\nimport { BaseComponent } from './base.component';\n\nexport enum ActionType {\n AddAspect = 'Add aspect',\n SimpleWorkflow = 'Add simple workflow',\n IncrementCounter = 'Increment Counter',\n CheckIn = 'Check in',\n AutoDeclareOptions = 'Auto-Declare Options',\n CheckOut = 'Check out',\n Copy = 'Copy',\n ExecuteScript = 'Execute script',\n ExtractCommonMetadataFields = 'Extract common metadata fields',\n FileAsRecord = 'File as Record',\n FileVersionAsRecord = 'File Version as Record',\n HideRecord = 'Hide Record',\n Import = 'Import',\n Move = 'Move',\n RemoveAspect = 'Remove aspect',\n RequestAIRenditions = 'Request AI renditions',\n SendEmail = 'Send email',\n SetPropertyValue = 'Set property value',\n SpecialiseType = 'Specialise type',\n TransformAndCopyContent = 'Transform and copy content',\n TransformAndCopyImage = 'Transform and copy image'\n}\n\nexport class ActionsDropdownComponent extends BaseComponent {\n private static rootElement = 'aca-edit-rule-dialog aca-rule-action-list';\n\n private getOptionLocator = (optionName: string): Locator =>\n this.page.locator('.mat-mdc-select-panel .mdc-list-item__primary-text', { hasText: optionName }).first();\n private ruleActionLocator = this.getChild('aca-rule-action');\n private addActionButtonLocator = this.getChild('[data-automation-id=\"rule-action-list-add-action-button\"]');\n private actionDropdownLocator = this.getChild('[data-automation-id=\"rule-action-select\"]');\n private actionAspectNameLocator = '[data-automation-id=\"header-aspect-name\"] .adf-property-field';\n private actionCheckInInputLocator = '[data-automation-id=\"header-description\"] input';\n private actionAutoDeclareLocator = '[data-automation-id=\"header-version\"] mat-select';\n private actionSpecialiseTypeLocator = '[data-automation-id=\"header-type-name\"] mat-select';\n private actionSimpleWorkflowStepInputLocator = '[data-automation-id=\"header-approve-step\"] input';\n private actionSimpleWorkflowApproveFolderLocator = `[data-automation-id=\"header-approve-folder\"] mat-icon`;\n private actionSimpleWorkflowActionChoiceLocator = '[data-automation-id=\"content-node-selector-actions-choose\"]';\n private actionSimpleWorkflowLabelApproveLocator = `[data-automation-id=\"card-boolean-label-approve-move\"]`;\n private actionSimpleWorkflowSRejectStepLocator = '[data-automation-id=\"header-reject-step\"] input';\n private actionSimpleWorkflowRejectFolderLocator = `[data-automation-id=\"header-reject-folder\"] input`;\n\n constructor(page: Page) {\n super(page, ActionsDropdownComponent.rootElement);\n }\n\n async selectAction(action: Partial<ActionType>, index: number): Promise<void> {\n if (index > 0) {\n await this.addActionButtonLocator.click();\n }\n await this.actionDropdownLocator.nth(index).hover({ timeout: 1000 });\n await this.actionDropdownLocator.nth(index).click();\n const option = this.getOptionLocator(action);\n await option.click();\n }\n\n async dropdownSelection(selectValue: string, locator: string, index: number): Promise<void> {\n await this.ruleActionLocator.nth(index).locator(locator).click();\n await this.getOptionLocator(selectValue).nth(0).click();\n }\n\n async insertCheckInActionValues(checkInValue: string, index: number): Promise<void> {\n await this.ruleActionLocator.nth(index).locator(this.actionCheckInInputLocator).fill(checkInValue);\n }\n\n async insertAddAspectActionValues(AspectValue: string, index: number): Promise<void> {\n await this.dropdownSelection(AspectValue, this.actionAspectNameLocator, index);\n }\n\n async insertAutoDeclareOptionsActionValues(autoDeclareOptionsValue: string, index: number): Promise<void> {\n await this.dropdownSelection(autoDeclareOptionsValue, this.actionAutoDeclareLocator, index);\n }\n\n async insertSpecialiseTypeActionValues(specialiseTypeValue: string, index: number): Promise<void> {\n await this.dropdownSelection(specialiseTypeValue, this.actionSpecialiseTypeLocator, index);\n }\n\n async insertSimpleWorkflowActionValues(stepValue: string, index: number): Promise<void> {\n await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowStepInputLocator).fill(stepValue);\n await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowApproveFolderLocator).click();\n await this.page.locator(this.actionSimpleWorkflowActionChoiceLocator).click();\n await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowLabelApproveLocator).click();\n await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowSRejectStepLocator).fill(stepValue);\n await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowRejectFolderLocator).click();\n await this.page.locator(this.actionSimpleWorkflowActionChoiceLocator).click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator } from '@playwright/test';\nimport { ManageRulesDialogComponent } from './manageRules/manage-rules-dialog.component';\n\nexport enum Field {\n Name = 'Name',\n Size = 'Size',\n Mimetype = 'Mimetype',\n Encoding = 'Encoding',\n HasCategory = 'Has category',\n HasTag = 'Has tag',\n HasAspect = 'Has aspect'\n}\n\nexport enum Comparator {\n Equals = '(=) Equals',\n Contains = 'Contains',\n StartsWith = 'Starts with',\n EndsWith = 'Ends with'\n}\n\nexport class ConditionComponent extends ManageRulesDialogComponent {\n private getOptionLocator = (optionName: string): Locator => this.page.locator(`.cdk-overlay-pane .mat-mdc-option span`, { hasText: optionName });\n\n private async selectField(fields: Partial<Field>, index: number): Promise<void> {\n await this.fieldDropDown.nth(index).click();\n const option = this.getOptionLocator(fields);\n await option.click();\n }\n\n private async selectComparator(comparators: Partial<Comparator>, index: number): Promise<void> {\n await this.comparatorDropDown.nth(index).click();\n const option = this.getOptionLocator(comparators);\n await option.click();\n }\n\n async addCondition(fields: Partial<Field>, value: string, index: number, comparators?: Partial<Comparator>): Promise<void> {\n await this.addConditionButton.first().click();\n await this.selectField(fields, index);\n if (comparators) {\n await this.selectComparator(comparators, index);\n }\n await this.valueField.nth(index).fill(value);\n }\n\n async addConditionGroup(fields: Partial<Field>, value: string, index: number, comparators?: Partial<Comparator>): Promise<void> {\n await this.addConditionGroupButton.last().click();\n await this.addConditionButton.nth(index).click();\n await this.selectField(fields, index);\n if (comparators) {\n await this.selectComparator(comparators, index);\n }\n await this.valueField.nth(index).fill(value);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from './base.component';\nimport { Page } from '@playwright/test';\n\nexport class AdfInfoDrawerComponent extends BaseComponent {\n private static rootElement = 'adf-info-drawer';\n\n constructor(page: Page) {\n super(page, AdfInfoDrawerComponent.rootElement);\n }\n\n private readonly categoriesManagement = this.getChild('adf-categories-management');\n private readonly tagsCreator = this.getChild('adf-tags-creator');\n\n public getNameField = (labelText: string) =>\n this.getChild(`[data-automation-id=\"library-name-properties-wrapper\"] input[placeholder='${labelText}']`);\n public getIdField = (labelText: string) => this.getChild(`[data-automation-id=\"library-id-properties-wrapper\"] input[placeholder='${labelText}']`);\n public getVisibilityField = (labelText: string) =>\n this.getChild(`[data-automation-id=\"library-visibility-properties-wrapper\"] mat-select[ng-reflect-placeholder='${labelText}']`);\n public getDescriptionField = this.getChild('[data-automation-id=\"library-description-properties-wrapper\"] textarea');\n public propertiesTab = this.page.getByRole('tab', { name: 'Properties' });\n public commentsTab = this.page.getByRole('tab', { name: 'Comments' });\n public infoDrawerTabs = this.getChild('.adf-info-drawer-tab');\n public commentInputField = this.page.locator('#comment-input');\n public commentsHeader = this.getChild('#comment-header');\n public addCommentButton = this.getChild('[data-automation-id=\"comments-input-add\"]');\n public commentsList = this.getChild('.adf-comment-list-item');\n public commentUsername = this.getChild('.adf-comment-user-name');\n public commentTextContent = this.getChild('.adf-comment-message');\n public commentTimestamp = this.getChild('.adf-comment-message-time');\n public infoDrawerPanel = this.page.locator('.adf-info-drawer');\n public headerTitle = this.page.locator('.adf-info-drawer-layout-header-title').getByRole('heading');\n public editButton = this.page.getByRole('button', { name: 'Edit' });\n public cancelButton = this.page.getByRole('button', { name: 'Cancel' });\n public updateButton = this.page.getByRole('button', { name: 'Update' });\n public hintMessage = this.page.locator('mat-hint');\n public errorMessage = this.page.locator('mat-error');\n public expandDetailsButton = this.getChild(`button[title='Expand panel']`);\n public expandedDetailsTabs = this.page.locator('.aca-details-container .mdc-tab__text-label');\n public expandedDetailsPermissionsTab = this.expandedDetailsTabs.getByText('Permissions');\n public nameField = this.page.locator('input[placeholder=Name]');\n public idField = this.page.locator(`input[placeholder='Library ID']`);\n public descriptionField = this.page.locator('textarea[placeholder=Description]');\n public visibilityField = this.infoDrawerPanel.getByRole('combobox');\n public selectVisibility = (visibilityOption: string) => this.page.getByRole('listbox').getByRole('option', { name: visibilityOption }).click();\n public tagsAccordion = this.getChild('[data-automation-id=\"adf-content-metadata-tags-panel\"]');\n public categoriesAccordion = this.getChild('[data-automation-id=\"adf-content-metadata-categories-panel\"]');\n public tagsAccordionPenButton = this.tagsAccordion.locator('[data-automation-id=\"showing-tag-input-button\"]');\n public categoriesAccordionPenButton = this.categoriesAccordion.locator('[data-automation-id=\"meta-data-categories-edit\"]');\n public tagsInput = this.tagsCreator.locator('input');\n public createTagButton = this.tagsCreator.locator('.adf-create-tag-label');\n public tagsChips = this.tagsCreator.locator('mat-chip');\n public tagsChipsXButton = this.tagsChips.locator('.adf-dynamic-chip-list-delete-icon');\n public tagsAccordionCancelButton = this.getChild('[data-automation-id=\"reset-tags-metadata\"]');\n public tagsAccordionConfirmButton = this.getChild('[data-automation-id=\"save-tags-metadata\"]');\n public categoriesAccordionCancelButton = this.getChild('[data-automation-id=\"reset-metadata\"]');\n public categoriesAccordionConfirmButton = this.getChild('[data-automation-id=\"save-categories-metadata\"]');\n public categoriesInput = this.categoriesManagement.locator('input');\n public categoriesListItems = this.categoriesManagement.locator('.adf-category');\n public categoriesItemRemoveButton = this.categoriesManagement.locator('[data-automation-id=\"categories-remove-category-button\"]');\n public categoriesCreatedList = this.getChild('.adf-metadata-categories');\n public generalInfoAccordion = this.getChild('[data-automation-id=\"adf-metadata-group-properties\"]');\n public generalInfoProperties = this.generalInfoAccordion.locator('.adf-property');\n public generalInfoEditButton = this.getChild('[data-automation-id=\"meta-data-general-info-edit\"]');\n public exifInfoAccordion = this.getChild('[data-automation-id=\"adf-metadata-group-APP.CONTENT_METADATA.EXIF_GROUP_TITLE\"]');\n public exifInfoProperties = this.exifInfoAccordion.locator('.adf-property');\n public generalInfoNameField = this.getChild('[data-automation-id=\"card-textitem-value-properties.cm:name\"]');\n public generalInfoTitleField = this.getChild('[data-automation-id=\"card-textitem-value-properties.cm:title\"]');\n public generalInfoAuthorField = this.getChild('[data-automation-id=\"card-textitem-value-properties.cm:author\"]');\n public generalInfoDescriptionField = this.getChild('[data-automation-id=\"card-textitem-value-properties.cm:description\"]');\n public generalInfoCreatorField = this.getChild('[data-automation-id=\"card-textitem-value-createdByUser.displayName\"]');\n public generalInfoCreatedDateField = this.getChild('[data-automation-id=\"header-createdAt\"] .adf-property-value');\n public generalInfoModifiedDateField = this.getChild('[data-automation-id=\"header-modifiedAt\"] .adf-property-value');\n public generalInfoMimeTypeField = this.getChild('[data-automation-id=\"card-textitem-value-content.mimeTypeName\"]');\n public generalInfoContentTypeCombobox = this.getChild('[role=\"combobox\"]');\n public generalInfoNameError = this.getChild('[data-automation-id=\"card-textitem-error-properties.cm:name\"]');\n public generalInfoSaveButton = this.getChild('[data-automation-id=\"save-general-info-metadata\"]');\n\n async checkCommentsHeaderCount(): Promise<number> {\n const commentsCountTextContent = await this.commentsHeader.textContent();\n const commentsCountString = commentsCountTextContent.match(/\\d+/g)[0];\n return parseInt(commentsCountString, 10);\n }\n\n async getCommentsCountFromList(): Promise<number> {\n return this.commentsList.count();\n }\n\n async waitForComments(): Promise<void> {\n await this.commentsList.first().waitFor();\n }\n\n async addCommentToNode(commentText: string): Promise<void> {\n await this.commentInputField.click();\n await this.commentInputField.fill(commentText);\n await this.addCommentButton.click();\n }\n\n async getHeaderTitle(): Promise<string> {\n return this.headerTitle.textContent();\n }\n\n async getTabsCount(): Promise<number> {\n return this.infoDrawerTabs.count();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page, expect } from '@playwright/test';\nimport { MatMenuComponent } from './dataTable';\nimport { BaseComponent } from './base.component';\n\nexport class AcaHeader extends BaseComponent {\n private static rootElement = 'aca-toolbar';\n private moreActionsButton = this.getChild('button[id=\"app.viewer.toolbar.more\"]');\n private toolbarMoreActions = this.getChild('button[id=\"app.toolbar.more\"]');\n public createButton = this.getChild('[id=\"app.toolbar.create\"]');\n public viewDetails = this.getChild('[title=\"View Details\"]');\n public viewButton = this.getChild('button[title=\"View\"]');\n public searchButton = this.getChild('button[id=\"app.toolbar.search\"]');\n public fullScreenButton = this.getChild('button[id=\"app.viewer.fullscreen\"]');\n public shareButton = this.getChild('button[id=\"share-action-button\"]');\n public downloadButtonViewer = this.getChild('button[id=\"app.viewer.download\"]');\n public downloadButton = this.getChild('button[id=\"app.toolbar.download\"]');\n public sharedDownloadButton = this.getChild('button[id=\"app.viewer.shared.download\"]');\n public uploadButton = this.getChild('button[id=\"app.toolbar.upload\"]');\n public uploadFileButton = this.page.locator('button[id=\"app.create.uploadFile\"]');\n public uploadInput = this.page.locator('input[id=\"app-upload-files\"]');\n public uploadNewVersionButton = this.page.locator('#app-upload-file-version');\n public permanentlyDeleteButton = this.getChild('button[id=\"app.toolbar.purgeDeletedNodes\"]');\n public restoreButton = this.getChild('button[id=\"app.toolbar.restoreDeletedNodes\"]');\n\n constructor(page: Page) {\n super(page, AcaHeader.rootElement);\n }\n public matMenu = new MatMenuComponent(this.page);\n\n async clickViewerMoreActions(): Promise<void> {\n await this.moreActionsButton.waitFor({ state: 'attached' });\n await this.moreActionsButton.click();\n }\n\n async clickMoreActions(): Promise<void> {\n await this.toolbarMoreActions.waitFor({ state: 'attached' });\n await this.toolbarMoreActions.click();\n }\n\n async clickCreateFolderFromTemplate(): Promise<void> {\n await this.createButton.click();\n await this.matMenu.createFolderFromTemplate.click();\n }\n\n async verifyToolbarPrimaryActions(expectedToolbarPrimary: string[]): Promise<void> {\n const buttons = await this.page.$$('aca-toolbar button');\n const actualPrimaryActions: string[] = await Promise.all(\n buttons.map(async (button) => {\n const title = await button.getAttribute('title');\n return title || '';\n })\n );\n\n for (const action of expectedToolbarPrimary) {\n expect(actualPrimaryActions.includes(action), `Expected to contain ${action}`).toBe(true);\n }\n }\n\n async clickCreateFileFromTemplate(): Promise<void> {\n await this.createButton.click();\n await this.matMenu.createFileFromTemplate.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page, expect } from '@playwright/test';\nimport { BaseComponent } from './base.component';\nimport { AcaHeader } from './aca-header.component';\nimport { timeouts } from '../../utils';\n\nexport class ViewerComponent extends BaseComponent {\n private static rootElement = 'adf-viewer';\n\n public viewerLocator = this.getChild('adf-viewer-render');\n public closeButtonLocator = this.getChild('.adf-viewer-close-button');\n public fileTitleButtonLocator = this.getChild('.adf-viewer__file-title');\n public pdfViewerContentPages = this.getChild('.adf-pdf-viewer__content .page');\n public shareButton = this.getChild('button[id=\"share-action-button\"]');\n public downloadButton = this.getChild('button[id=\"app.viewer.download\"]');\n public allButtons = this.getChild('button');\n public unknownFormat = this.getChild(`adf-viewer-unknown-format .adf-viewer__unknown-format-view`);\n public viewerImage = this.viewerLocator.locator('.cropper-canvas img');\n public viewerDocument = this.viewerLocator.locator('.adf-pdf-viewer__content [role=\"document\"]');\n public documentThumbnailButton = this.getChild('[data-automation-id=\"adf-thumbnails-button\"]');\n public thumbnailsPages = this.getChild('[data-automation-id=\"adf-thumbnails-content\"] adf-pdf-thumb');\n public thumbnailsCloseButton = this.getChild('[data-automation-id=\"adf-thumbnails-close\"]');\n public viewerPage = this.getChild('[data-automation-id=\"adf-page-selector\"]');\n public viewerMedia = this.getChild('adf-media-player');\n public viewerSpinner = this.getChild('.adf-viewer-render__loading-screen');\n public zoomInButton = this.getChild('#viewer-zoom-in-button');\n public zoomOutButton = this.getChild('#viewer-zoom-out-button');\n public zoomScale = this.getChild('[data-automation-id=\"adf-page-scale\"]');\n public zoomResetButton = this.getChild('#viewer-reset-button');\n public fitToPageButton = this.getChild('#viewer-scale-page-button');\n\n toolbar = new AcaHeader(this.page);\n\n constructor(page: Page) {\n super(page, ViewerComponent.rootElement);\n }\n\n async isPdfViewerContentDisplayed(): Promise<boolean> {\n const count = await this.pdfViewerContentPages.count();\n return count > 0;\n }\n\n async isViewerOpened(): Promise<boolean> {\n await this.waitForViewerToOpen();\n return this.viewerLocator.isVisible();\n }\n\n async waitForViewerToOpen(waitForViewerContent?: 'wait for viewer content'): Promise<void> {\n if (waitForViewerContent) {\n await this.waitForViewerLoaderToFinish();\n }\n await this.viewerLocator.waitFor({ state: 'visible', timeout: timeouts.large });\n }\n\n async waitForViewerLoaderToFinish(customTimeout?: number): Promise<void> {\n try {\n await this.viewerSpinner.waitFor({ state: 'hidden', timeout: customTimeout || timeouts.extraLarge });\n } catch (error) {\n this.logger.log('waitForViewerLoaderToFinish: Timeout reached while waiting for viewer loader to finish.');\n throw error;\n }\n }\n\n async checkViewerActivePage(pageNumber: number): Promise<void> {\n await expect(this.viewerPage).toHaveValue(pageNumber.toString());\n }\n\n async clickViewerThumbnailPage(pageNumber: number): Promise<void> {\n await this.thumbnailsPages.nth(pageNumber - 1).click();\n }\n\n async isCloseButtonDisplayed(): Promise<boolean> {\n await this.closeButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal });\n return this.closeButtonLocator.isEnabled({ timeout: timeouts.normal });\n }\n\n async isFileTitleDisplayed(): Promise<boolean> {\n await this.fileTitleButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal });\n return this.fileTitleButtonLocator.isVisible();\n }\n\n async waitForZoomPercentageToDisplay(): Promise<void> {\n await this.zoomScale.waitFor({ state: 'visible', timeout: timeouts.normal });\n const startTime = Date.now();\n let textContent: string;\n\n while (Date.now() - startTime <= timeouts.medium) {\n textContent = await this.zoomScale.innerText();\n if (textContent.trim() !== '') {\n break;\n }\n await this.page.waitForTimeout(timeouts.tiny);\n }\n\n if (textContent.trim() === '') {\n throw new Error(`Timeout: Text did not show up within ${timeouts.medium} ms`);\n }\n }\n\n async getFileTitle(): Promise<string> {\n await this.fileTitleButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal });\n await this.waitForViewerLoaderToFinish();\n return this.fileTitleButtonLocator.textContent();\n }\n\n async getCloseButtonTooltip(): Promise<string> {\n await this.closeButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal });\n return this.closeButtonLocator.getAttribute('title');\n }\n\n async verifyViewerPrimaryActions(expectedToolbarPrimary: string[]): Promise<void> {\n const toRemove = ['Close', 'Previous File', 'Next File', 'View details'];\n const removeClosePreviousNextOldInfo = (actions: string[]): string[] => actions.filter((elem) => !toRemove.includes(elem));\n\n const buttons = await this.page.$$('adf-viewer button');\n let actualPrimaryActions: string[] = await Promise.all(\n buttons.map(async (button) => {\n const title = await button.getAttribute('title');\n return title || '';\n })\n );\n\n actualPrimaryActions = removeClosePreviousNextOldInfo(actualPrimaryActions);\n\n for (const action of expectedToolbarPrimary) {\n expect(actualPrimaryActions.includes(action), `Expected to contain ${action}`).toBe(true);\n }\n }\n\n async checkUnknownFormatIsDisplayed(): Promise<void> {\n await this.unknownFormat.waitFor({ state: 'visible', timeout: timeouts.normal });\n }\n\n async getUnknownFormatMessage(): Promise<string> {\n return this.unknownFormat.locator(`.adf-viewer__unknown-label`).innerText();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page } from '@playwright/test';\nimport { BaseComponent } from '.././base.component';\nimport { timeouts } from '../../../utils';\n\nexport class SearchInputComponent extends BaseComponent {\n private static rootElement = 'aca-page-layout';\n public searchInput = this.page.locator('#app-control-input');\n public searchButton = this.page.locator('.aca-search-input--search-button');\n public searchCloseButton = this.page.locator('.aca-search-input--close-button');\n\n /**\n * Method used in cases where user have possibility to navigate \"inside\" the element (it's clickable and has link attribute).\n * Perform action .click() to navigate inside it\n *\n * @returns reference to cell element which contains link.\n */\n getCellLinkByName = (name: string): Locator => this.getChild('.adf-datatable-row[role=\"row\"]', { hasText: name });\n\n constructor(page: Page, rootElement = SearchInputComponent.rootElement) {\n super(page, rootElement);\n }\n\n async performDoubleClickFolderOrFileToOpen(name: string): Promise<void> {\n await this.getCellLinkByName(name).waitFor({ state: 'visible', timeout: timeouts.medium });\n await this.getCellLinkByName(name).dblclick();\n await this.spinnerWaitForReload();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '.././base.component';\n\nexport class SearchOverlayComponent extends BaseComponent {\n private static rootElement = '.cdk-overlay-pane';\n\n public searchFilesOption = this.getChild('input#content-input');\n public searchFoldersOption = this.getChild('input#folder-input');\n public searchLibrariesOption = this.getChild('input#libraries-input');\n public searchInput = this.page.locator('#app-control-input');\n public searchButton = this.page.locator('app-search-input-control button[title=\"Search\"]');\n public searchInputControl = this.page.locator('.app-search-control');\n public searchOptions = this.page.locator('.app-search-options');\n\n constructor(page: Page, rootElement = SearchOverlayComponent.rootElement) {\n super(page, rootElement);\n }\n\n async isFoldersOptionChecked() {\n const optClass = await this.searchFoldersOption.getAttribute('class');\n return optClass.includes('.mat-mdc-checkbox-checked');\n }\n\n async isFilesOptionChecked() {\n const optClass = await this.searchFilesOption.getAttribute('class');\n return optClass.includes('.mat-mdc-checkbox-checked');\n }\n\n async isLibrariesOptionChecked() {\n const optClass = await this.searchLibrariesOption.getAttribute('class');\n return optClass.includes('.mat-mdc-checkbox-checked');\n }\n\n async clearOptions() {\n if (await this.isFilesOptionChecked()) {\n await this.searchFilesOption.click();\n }\n if (await this.isFoldersOptionChecked()) {\n await this.searchFoldersOption.click();\n }\n if (await this.isLibrariesOptionChecked()) {\n await this.searchLibrariesOption.click();\n }\n }\n\n async checkOnlyFolders(): Promise<void> {\n await this.clearOptions();\n await this.searchFoldersOption.click();\n }\n\n async checkOnlyFiles(): Promise<void> {\n await this.clearOptions();\n await this.searchFilesOption.click();\n }\n\n async checkLibraries(): Promise<void> {\n await this.clearOptions();\n await this.searchLibrariesOption.click();\n }\n\n async checkFilesAndFolders(): Promise<void> {\n await this.clearOptions();\n await this.searchFilesOption.click();\n await this.searchFoldersOption.click();\n }\n\n async searchFor(input: string): Promise<void> {\n await this.searchInput.fill(input);\n await this.searchButton.click({ force: true });\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport type SortByType = 'Relevance' | 'Title' | 'Filename' | 'Modified date' | 'Modifier' | 'Created date' | 'Size' | 'Type';\nexport type SortByDirection = 'asc' | 'desc';\n\nexport class SearchSortingPicker extends BaseComponent {\n private static rootElement = '#aca-button-action-menu';\n\n public actionMenu = this.page.locator('[data-automation-id=\"auto_header_content_id_$thumbnail\"]');\n public sortOrderButton = this.page.locator('#aca-button-sorting-menu');\n public sortByDropdownExpanded = this.page.locator('.mat-mdc-menu-panel').first();\n public sortByList = this.page.locator('.mat-mdc-menu-panel button');\n\n constructor(page: Page, rootElement = SearchSortingPicker.rootElement) {\n super(page, rootElement);\n }\n\n async waitForSortByDropdownToExpand(): Promise<void> {\n await this.sortByDropdownExpanded.waitFor();\n }\n\n async isSortOrderButtonDisplayed(): Promise<boolean> {\n return this.sortOrderButton.isVisible();\n }\n\n async isSortByDropdownExpanded(): Promise<boolean> {\n return this.sortByDropdownExpanded.isVisible();\n }\n\n async clickSortByDropdown(): Promise<void> {\n await this.sortOrderButton.click();\n await this.waitForSortByDropdownToExpand();\n }\n\n async getSortByOptionsList(): Promise<string[]> {\n const sortOptionsCount = await this.sortByList.count();\n const sortByOptions: string[] = [];\n for (let i = 1; i < sortOptionsCount; i++) {\n const textContent = (await this.sortByList.nth(i).textContent()).trim();\n sortByOptions.push(textContent);\n }\n sortByOptions.sort((a, b) => a.localeCompare(b));\n return sortByOptions;\n }\n\n async sortBy(option: SortByType, direction: SortByDirection): Promise<void> {\n await this.actionMenu.click();\n await this.clickSortByDropdown();\n\n if (!(await this.isSortByDropdownExpanded())) {\n await this.clickSortByDropdown();\n }\n const elem = this.sortByList.getByText(option);\n const optionId = await elem.locator('..').getAttribute('id');\n await elem.click();\n const directionSortElement = this.page.locator(`[id=\"${optionId}-${direction.toLocaleLowerCase()}\"]`);\n await directionSortElement.click();\n await this.progressBarWaitForReload();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFilters extends BaseComponent {\n private static rootElement = '.aca-content__advanced-filters';\n\n constructor(page: Page) {\n super(page, SearchFilters.rootElement);\n }\n\n public filtersButtons = this.page.locator('adf-search-widget-chip');\n public logicFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Logic' });\n public propertiesFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Properties' });\n public dateFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Date' });\n public locationFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Location' });\n public tagsFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Tags' });\n public categoriesFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Categories' });\n public resetButton = this.page.locator('button', { hasText: 'Reset' });\n public menuCardTitle = this.page.locator('.adf-search-filter-title');\n public menuCardClose = this.page.locator('.adf-search-filter-title-action');\n public menuCardClear = this.page.locator('#cancel-filter-button');\n public menuCardApply = this.page.locator('#apply-filter-button');\n public dropdownOptions = this.page.locator(`mat-option`);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFiltersCategories extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersCategories.rootElement);\n }\n\n public addOptionInput = this.getChild(`[data-automation-id$='adf-search-chip-autocomplete-input']`);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../../base.component';\nimport { Page, expect } from '@playwright/test';\nimport { SearchPage, SearchType } from '../../../pages';\n\ntype FilterTab = 'Created' | 'Modified';\n\ninterface FilterFilesByDateParams {\n searchPage: SearchPage;\n filterType: 'anytime' | 'inTheLast' | 'between';\n dateFilterTab: FilterTab;\n searchPhrase: string;\n searchType: SearchType;\n expectSearchResults: number;\n inTheLastInputValue?: string;\n startDay?: string;\n endDay?: string;\n}\n\nexport class SearchFiltersDate extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersDate.rootElement);\n }\n\n public createdTab = this.getChild(`[role='tab']`, { hasText: 'Created' });\n public modifiedTab = this.getChild(`[role='tab']`, { hasText: 'Modified' });\n public createdTabTitle = this.createdTab.locator(`div`);\n public modifiedTabTitle = this.modifiedTab.locator(`div`);\n public anytimeButton = this.getChild(`[data-automation-id$='date-range-anytime']`);\n public anytimeRadioButton = this.anytimeButton.locator(`input`);\n public inTheLastButton = this.getChild(`[data-automation-id$='date-range-in-last']`);\n public inTheLastInput = this.getChild(`[data-automation-id$='date-range-in-last-input']`);\n public inTheLastDropdown = this.getChild(`[data-automation-id$='date-range-in-last-dropdown']`);\n public betweenButton = this.getChild(`[data-automation-id$='date-range-between']`);\n public betweenRadioButton = this.betweenButton.locator(`input`);\n public betweenStartDate = this.getChild(`[data-automation-id$='date-range-between-start-input']`);\n public betweenEndDate = this.getChild(`[data-automation-id$='date-range-between-end-input']`);\n\n async openCreatedModifiedTab(page: SearchPage, tab: FilterTab): Promise<void> {\n switch (tab) {\n case 'Created':\n await page.searchFiltersDate.createdTab.click();\n break;\n case 'Modified':\n await page.searchFiltersDate.modifiedTab.click();\n break;\n default:\n break;\n }\n await page.page.waitForTimeout(2000);\n }\n\n /**\n * Method used in cases where we want to filter search results by Date\n *\n * @param searchPage page context for the test\n * @param filterType filter type for the Date filter\n * @param dateFilterTab tab in Date filter. Either Created or Modified\n * @param searchPhrase search phrase for the search\n * @param searchType type of items we want in search results e.g. files or folders\n * @param expectSearchResults expect a number of search results\n * @param inTheLastInputValue a value for 'in the last' input. e.g. in the last X days\n * @param startDay start day for time-frame search. DD-MMMM-YY\n * @param endDay end day for time-frame search. DD-MMMM-YY\n */\n async filterFilesByDate(params: FilterFilesByDateParams) {\n const { searchPage, filterType, dateFilterTab, searchPhrase, searchType, expectSearchResults, inTheLastInputValue, startDay, endDay } = params;\n\n await searchPage.searchWithin(searchPhrase, searchType);\n await searchPage.dataTable.progressBarWaitForReload();\n await searchPage.searchFilters.dateFilter.click();\n\n if (dateFilterTab === 'Modified') {\n await searchPage.searchFiltersDate.openCreatedModifiedTab(searchPage, 'Modified');\n }\n\n switch (filterType) {\n case 'anytime':\n await searchPage.searchFiltersDate.anytimeButton.click();\n break;\n case 'inTheLast':\n await searchPage.searchFiltersDate.inTheLastButton.click();\n await searchPage.searchFiltersDate.inTheLastInput.fill(inTheLastInputValue);\n break;\n case 'between':\n await searchPage.searchFiltersDate.betweenButton.click();\n await searchPage.searchFiltersDate.betweenStartDate.fill(startDay);\n await searchPage.searchFiltersDate.betweenEndDate.fill(endDay);\n break;\n default:\n throw new Error('Invalid filter type');\n }\n\n await searchPage.searchFilters.menuCardApply.click();\n await searchPage.dataTable.progressBarWaitForReload();\n expect(await searchPage.dataTable.getRowsCount()).toEqual(expectSearchResults);\n\n let dateText: string;\n if (filterType === 'between') {\n if (dateFilterTab === 'Modified') {\n dateText = `Modified: ${startDay} - ${endDay}`;\n } else {\n dateText = `Created: ${startDay} - ${endDay}`;\n }\n await expect(searchPage.searchFilters.dateFilter).toContainText(dateText, { ignoreCase: true });\n }\n }\n\n async isModifiedTabSelected(): Promise<string> {\n return this.modifiedTab.getAttribute('aria-selected');\n }\n\n async isSearchTabSelected(): Promise<string> {\n return this.createdTab.getAttribute('aria-selected');\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { SearchPage } from '../../../pages';\nimport { BaseComponent } from '../../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFiltersLocation extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersLocation.rootElement);\n }\n\n public addOptionInput = this.getChild(`[data-automation-id$='adf-search-chip-autocomplete-input']`);\n\n async filterByLocation(page: SearchPage, location: string): Promise<void> {\n await page.searchFilters.locationFilter.click();\n await page.searchFiltersLocation.addOptionInput.fill(location);\n await page.page.keyboard.press('Enter');\n await page.searchFilters.menuCardApply.click();\n await page.dataTable.progressBarWaitForReload();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFiltersLogic extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersLogic.rootElement);\n }\n\n public matchAllInput = this.getChild(`[placeholder$='Results will match all words entered here']`);\n public matchAnyInput = this.getChild(`[placeholder$='Results will match any words entered here']`);\n public excludeInput = this.getChild(`[placeholder$='Results will exclude matches with these words']`);\n public matchExactInput = this.getChild(`[placeholder$='Results will match this entire phrase']`);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { SearchPage } from '../../../pages';\nimport { BaseComponent } from '../../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFiltersProperties extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersProperties.rootElement);\n }\n\n public operatorButton = this.getChild(`.adf-search-properties-file-size-operator`);\n public fileSizeInput = this.getChild(`[placeholder$='Enter file size']`);\n public unitButton = this.getChild(`.adf-search-properties-file-size-unit`);\n public fileTypeInput = this.getChild(`[placeholder$='File Type']`);\n public atLeastOption = this.page.locator(`mat-option`, { hasText: 'At Least' });\n public atMostOption = this.page.locator(`mat-option`, { hasText: 'At Most' });\n public exactlyOption = this.page.locator(`mat-option`, { hasText: 'Exactly' });\n public kbUnit = this.page.locator(`mat-option`, { hasText: 'KB' });\n public mbUnit = this.page.locator(`mat-option`, { hasText: 'MB' });\n public gbUnit = this.page.locator(`mat-option`, { hasText: 'GB' });\n public dropdownOptions = this.page.locator(`mat-option`);\n\n async setPropertiesParameters(\n page: SearchPage,\n operator?: 'At Least' | 'At Most' | 'Exactly',\n unit?: 'KB' | 'MB' | 'GB',\n fileSizeInputText?: string,\n fileTypeInputText?: string\n ): Promise<void> {\n await page.searchFilters.propertiesFilter.click();\n\n if (operator) {\n await this.operatorButton?.click();\n switch (operator) {\n case 'At Least':\n await this.atLeastOption?.click();\n break;\n case 'At Most':\n await this.atMostOption?.click();\n break;\n case 'Exactly':\n await this.exactlyOption?.click();\n break;\n }\n }\n\n if (unit) {\n await this.unitButton?.click();\n switch (unit) {\n case 'KB':\n await this.kbUnit?.click();\n break;\n case 'MB':\n await this.mbUnit?.click();\n break;\n case 'GB':\n await this.gbUnit?.click();\n break;\n }\n }\n\n if (fileSizeInputText) {\n await this.fileSizeInput?.fill(fileSizeInputText);\n }\n\n if (fileTypeInputText) {\n await this.fileTypeInput?.fill(fileTypeInputText);\n await this.dropdownOptions.getByText(fileTypeInputText).waitFor();\n await this.dropdownOptions.getByText(fileTypeInputText).click();\n }\n\n await page.searchFilters.menuCardApply.click();\n await page.dataTable.progressBarWaitForReload();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { SearchPage } from '../../../pages';\nimport { BaseComponent } from '../../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFiltersTags extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersTags.rootElement);\n }\n\n public addOptionInput = this.getChild(`[data-automation-id$='adf-search-chip-autocomplete-input']`);\n\n async filterByTag(page: SearchPage, tag: string): Promise<void> {\n await page.searchFilters.tagsFilter.click();\n await page.searchFiltersTags.addOptionInput.fill(tag);\n await page.page.keyboard.press('Enter');\n await page.searchFilters.menuCardApply.click();\n await page.dataTable.progressBarWaitForReload();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '.././base.component';\nimport { Locator, Page } from '@playwright/test';\nexport class Breadcrumb extends BaseComponent {\n private static rootElement = 'adf-breadcrumb';\n public items = this.getChild('.adf-breadcrumb-item');\n public currentItem = this.getChild('.adf-breadcrumb-item-current');\n getItemByTitle = (name: string): Locator => this.getChild(`.adf-breadcrumb-item[title=${name}]`);\n\n constructor(page: Page) {\n super(page, Breadcrumb.rootElement);\n }\n\n async getAllItems(): Promise<string[]> {\n const itemElements = await this.page.$$('adf-breadcrumb .adf-breadcrumb-item');\n const itemTexts = await Promise.all(\n itemElements.map(async (elem) => {\n const text = await elem.innerText();\n return text.split('\\nchevron_right')[0];\n })\n );\n return itemTexts;\n }\n\n async clickItem(name: string): Promise<void> {\n const elem = this.getChild(`.adf-breadcrumb-item[title=${name}]`);\n await elem.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { SIDEBAR_LABELS, timeouts } from '../../utils';\nimport { BaseComponent } from './base.component';\nimport { Locator, Page } from '@playwright/test';\n\nexport class SidenavComponent extends BaseComponent {\n private static rootElement = 'app-sidenav';\n\n private personalFiles = this.getChild(`[data-automation-id='app.navbar.personalFiles']`);\n private myLibraries = this.getChild(`[data-automation-id='app.navbar.libraries.files']`);\n private favoriteLibraries = this.getChild(`[data-automation-id='app.navbar.libraries.favorite']`);\n private shared = this.getChild(`[data-automation-id='app.navbar.shared']`);\n private recentFiles = this.getChild(`[data-automation-id='app.navbar.recentFiles']`);\n private favorites = this.getChild(`[data-automation-id='app.navbar.favorites']`);\n private trash = this.getChild(`[data-automation-id='app.navbar.trashcan']`);\n private sidenavToggle = this.getChild(`.aca-sidenav-header-title-logo`);\n private sidenavExpand = this.page.getByTitle('Expand navigation menu');\n public expandedSidenav = this.page.locator(`[data-automation-id='expanded']`);\n\n constructor(page: Page) {\n super(page, SidenavComponent.rootElement);\n }\n\n async isActive(name: string): Promise<boolean> {\n const cssClass = await this.getLinkLabel(name).getAttribute('class');\n return cssClass.includes('action-button--active');\n }\n\n async openPanel(name: string): Promise<void> {\n await this.getLinkLabel(name).click();\n }\n\n private getLinkLabel(name: string): Locator {\n switch (name) {\n case SIDEBAR_LABELS.PERSONAL_FILES:\n return this.personalFiles;\n case SIDEBAR_LABELS.MY_LIBRARIES:\n return this.myLibraries;\n case SIDEBAR_LABELS.FAVORITE_LIBRARIES:\n return this.favoriteLibraries;\n case SIDEBAR_LABELS.SHARED_FILES:\n return this.shared;\n case SIDEBAR_LABELS.RECENT_FILES:\n return this.recentFiles;\n case SIDEBAR_LABELS.FAVORITES:\n return this.favorites;\n case SIDEBAR_LABELS.TRASH:\n return this.trash;\n default:\n return this.personalFiles;\n }\n }\n\n async isSidenavExpanded(): Promise<boolean> {\n await this.page.waitForTimeout(timeouts.tiny);\n return this.expandedSidenav.isVisible();\n }\n\n async expandSideNav(): Promise<void> {\n const expanded = await this.isSidenavExpanded();\n if (!expanded) {\n await this.sidenavExpand.click();\n await this.expandedSidenav.waitFor({ state: 'attached' });\n }\n }\n\n async collapseSideNav(): Promise<void> {\n const expanded = await this.isSidenavExpanded();\n if (expanded) {\n await this.sidenavToggle.click();\n await this.expandedSidenav.waitFor({ state: 'detached' });\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from './base.component';\n\nexport class ErrorComponent extends BaseComponent {\n private static rootElement = 'aca-page-layout';\n genericError = this.getChild('aca-generic-error');\n genericErrorTitle = this.getChild('.generic-error__title');\n\n constructor(page: Page) {\n super(page, ErrorComponent.rootElement);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './snackBar/snack-bar.component';\nexport * from './dataTable';\nexport * from './dialogs';\nexport * from './manageRules';\nexport * from './base.component';\nexport * from './spinner.component';\nexport * from './actions-dropdown.component';\nexport * from './conditions.component';\nexport * from './pagination.component';\nexport * from './adf-info-drawer.component';\nexport * from './viewer.component';\nexport * from './search/search-input.component';\nexport * from './search/search-overlay.components';\nexport * from './search/search-sorting-picker.components';\nexport * from './search/search-filters.component';\nexport * from './search/search-filters/search-filters-categories.component';\nexport * from './search/search-filters/search-filters-date.component';\nexport * from './search/search-filters/search-filters-location.component';\nexport * from './search/search-filters/search-filters-logic.component';\nexport * from './search/search-filters/search-filters-properties.component';\nexport * from './search/search-filters/search-filters-tags.component';\nexport * from './breadcrumb/breadcrumb.component';\nexport * from './sidenav.component';\nexport * from './aca-header.component';\nexport * from './error.component';\nexport * from './datetime-picker/datetime-picker.component';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { PlaywrightBase } from '../playwright-base';\nimport { SnackBarComponent, SpinnerComponent } from '../components';\n\nexport interface NavigateOptions {\n query?: string;\n waitForRequest?: boolean;\n waitUntil?: 'networkidle' | 'commit' | 'load' | 'domcontentloaded';\n remoteUrl?: string;\n}\nexport abstract class BasePage extends PlaywrightBase {\n private readonly pageUrl: string;\n private readonly urlRequest: RegExp;\n public snackBar: SnackBarComponent;\n public spinner: SpinnerComponent;\n\n protected constructor(page: Page, pageUrl: string, urlRequest?: RegExp) {\n super(page);\n this.pageUrl = pageUrl;\n this.urlRequest = urlRequest;\n this.snackBar = new SnackBarComponent(this.page);\n this.spinner = new SpinnerComponent(this.page);\n }\n\n /**\n * Method which navigate to appropriate page or remoteURL\n *\n * @param options object with configurable options\n * @property {string} query if you would like to navigate to page which support query,\n * then pass it in this option - e.g. '?appName=content'\n * @property {boolean} waitForRequest if you would like to NOT wait for request (which need to be passed\n * in the constructor of the page), then pass false. By default it'll wait for request to be fulfilled.\n * @property {'networkidle' | 'commit' | 'load' | 'domcontentloaded'} waitUntil by default will wait until 'networkidle' but you can change it if needed\n * @property {string} remoteUrl if you need to navigate to third part site, then you need to pass all of the URL in this option\n */\n async navigate(options?: Partial<NavigateOptions>): Promise<void> {\n const actualOptions: NavigateOptions = {\n query: '',\n waitForRequest: true,\n remoteUrl: '',\n waitUntil: 'load',\n ...options\n };\n\n if (actualOptions.remoteUrl) {\n await this.page.goto(actualOptions.remoteUrl, {\n waitUntil: actualOptions.waitUntil\n });\n } else if (this.urlRequest && actualOptions.waitForRequest) {\n await Promise.all([\n this.page.goto(`./#/${this.pageUrl}${actualOptions.query}`, { waitUntil: 'load' }),\n this.page.waitForResponse(this.urlRequest)\n ]);\n } else {\n await this.page.goto(`./#/${this.pageUrl}${actualOptions.query}`, {\n waitUntil: actualOptions.waitUntil,\n timeout: 60000\n });\n }\n await this.spinner.waitForReload();\n }\n\n async reload(options?: Pick<NavigateOptions, 'waitUntil'>): Promise<void> {\n const actualOptions: Pick<NavigateOptions, 'waitUntil'> = {\n waitUntil: 'networkidle',\n ...options\n };\n await this.page.reload(actualOptions);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport { UserModel } from '../../models';\n\ninterface LoginOptions {\n waitForLoading?: boolean;\n withNavigation?: boolean;\n}\nexport class LoginPage extends BasePage {\n private static pageUrl = 'login';\n\n constructor(page: Page) {\n super(page, LoginPage.pageUrl);\n }\n\n public username = this.page.locator('#username');\n public password = this.page.locator('#password');\n public submitButton = this.page.locator('#login-button');\n public userProfileButton = this.page.locator('aca-user-menu button');\n public userLogOutButton = this.page.locator('aca-logout button');\n public passwordVisibility = this.page.locator('.adf-login-password-icon');\n\n async loginUser(userData: { username: string; password: string } | UserModel, options?: LoginOptions): Promise<void> {\n if (options?.withNavigation) {\n await this.navigate();\n }\n await this.username.fill(userData.username);\n await this.password.fill(userData.password);\n await this.submitButton.click();\n\n if (options?.waitForLoading) {\n await Promise.all([this.page.waitForLoadState('domcontentloaded'), this.spinner.waitForReload()]);\n }\n }\n\n async logoutUser(): Promise<void> {\n await this.userProfileButton.click();\n await this.userLogOutButton.click();\n }\n\n async isPasswordDisplayed(): Promise<boolean> {\n const type = await this.password.getAttribute('type');\n return type === 'text';\n }\n\n async verifyUserLogin(): Promise<void> {\n if (await this.username.isVisible()) {\n await this.page.reload({ waitUntil: 'load' });\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport {\n ConditionComponent,\n ManageRules,\n ManageRulesDialogComponent,\n ToolbarComponent,\n ActionsDropdownComponent,\n ContentNodeSelectorDialog,\n LinkRulesDialog\n} from '../components';\nimport { BasePage } from './base.page';\n\nexport class NodesPage extends BasePage {\n private static pageUrl = 'nodes';\n\n constructor(page: Page) {\n super(page, NodesPage.pageUrl);\n }\n\n public toolbar = new ToolbarComponent(this.page);\n public manageRulesDialog = new ManageRulesDialogComponent(this.page);\n public actionsDropdown = new ActionsDropdownComponent(this.page);\n public conditionsDropdown = new ConditionComponent(this.page);\n public manageRules = new ManageRules(this.page);\n public contentNodeSelectorDialog = new ContentNodeSelectorDialog(this.page);\n public linkRulesDialog = new LinkRulesDialog(this.page);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport {\n AcaHeader,\n AdfFolderDialogComponent,\n ContentNodeSelectorDialog,\n CreateFromTemplateDialogComponent,\n PasswordOverlayDialogComponent,\n ViewerOverlayDialogComponent,\n Breadcrumb,\n DataTableComponent,\n MatMenuComponent,\n ViewerComponent,\n SidenavComponent,\n PaginationComponent,\n ErrorComponent,\n ShareDialogComponent,\n AdfConfirmDialogComponent,\n AdfInfoDrawerComponent,\n UploadNewVersionDialog,\n ManageVersionsDialog,\n UploadDialog,\n SnackBarComponent,\n EditDialog,\n FolderInformationDialogComponent\n} from '../components';\n\nexport class PersonalFilesPage extends BasePage {\n private static pageUrl = 'personal-files';\n\n constructor(page: Page) {\n super(page, PersonalFilesPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public contentNodeSelector = new ContentNodeSelectorDialog(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public passwordDialog = new PasswordOverlayDialogComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public sidenav = new SidenavComponent(this.page);\n public createFromTemplateDialogComponent = new CreateFromTemplateDialogComponent(this.page);\n public pagination = new PaginationComponent(this.page);\n public errorDialog = new ErrorComponent(this.page);\n public shareDialog = new ShareDialogComponent(this.page);\n public confirmDialog = new AdfConfirmDialogComponent(this.page);\n public infoDrawer = new AdfInfoDrawerComponent(this.page);\n public uploadNewVersionDialog = new UploadNewVersionDialog(this.page);\n public manageVersionsDialog = new ManageVersionsDialog(this.page);\n public uploadDialog = new UploadDialog(this.page);\n public snackBar = new SnackBarComponent(this.page);\n public editDialog = new EditDialog(this.page);\n public folderInformationDialog = new FolderInformationDialogComponent(this.page);\n\n async selectCreateFolder(): Promise<void> {\n await this.acaHeader.createButton.click();\n await this.matMenu.createFolder.click();\n }\n\n async closeMenu(): Promise<void> {\n await this.page.keyboard.press('Escape');\n }\n\n async waitForPageLoad() {\n await this.page.waitForURL(`**/${PersonalFilesPage.pageUrl}`);\n }\n\n async clickMoreActionsButton(buttonLabel: string): Promise<void> {\n await this.acaHeader.clickMoreActions();\n await this.matMenu.clickMenuItem(buttonLabel);\n }\n\n async copyOrMoveContentInDatatable(sourceFileList: string[], destinationName: string, operation = 'Copy'): Promise<void> {\n await this.page.keyboard.down('Control');\n for (const sourceName of sourceFileList) {\n await this.dataTable.selectItems(sourceName);\n }\n await this.page.keyboard.up('Control');\n await this.clickMoreActionsButton(operation);\n await this.contentNodeSelector.selectDestination(destinationName);\n await this.contentNodeSelector.actionButton.click();\n }\n\n async selectItemsAndToggleFavorite(item: string[], action: 'Favorite' | 'Remove Favorite') {\n for (const itemToSelect of item) {\n await this.dataTable.selectItems(itemToSelect);\n }\n await this.acaHeader.clickMoreActions();\n await this.matMenu.clickMenuItem(action);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport {\n AcaHeader,\n AdfInfoDrawerComponent,\n AdfLibraryDialogComponent,\n DataTableComponent,\n MatMenuComponent,\n ViewerComponent,\n ViewerOverlayDialogComponent,\n ContentNodeSelectorDialog,\n Breadcrumb,\n SidenavComponent,\n CreateFromTemplateDialogComponent,\n AdfConfirmDialogComponent,\n FolderInformationDialogComponent\n} from '../components';\n\nexport class MyLibrariesPage extends BasePage {\n private static pageUrl = 'libraries';\n\n constructor(page: Page) {\n super(page, MyLibrariesPage.pageUrl);\n }\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public libraryDialog = new AdfLibraryDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public libraryDetails = new AdfInfoDrawerComponent(this.page);\n public infoDrawer = new AdfInfoDrawerComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public copyMoveDialog = new ContentNodeSelectorDialog(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public sidenav = new SidenavComponent(this.page);\n public contentNodeSelector = new ContentNodeSelectorDialog(this.page);\n public createFromTemplateDialogComponent = new CreateFromTemplateDialogComponent(this.page);\n public confirmDialogComponent = new AdfConfirmDialogComponent(this.page);\n public folderInformationDialog = new FolderInformationDialogComponent(this.page);\n\n async selectCreateLibrary(): Promise<void> {\n await this.acaHeader.createButton.click();\n await this.matMenu.createLibrary.click();\n }\n\n async clickMoreActionsButton(buttonLabel: string): Promise<void> {\n await this.acaHeader.clickMoreActions();\n await this.matMenu.clickMenuItem(buttonLabel);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent, Breadcrumb, AdfInfoDrawerComponent } from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfFolderDialogComponent, ContentNodeSelectorDialog, ManageVersionsDialog } from '../components/dialogs';\n\nexport class RecentFilesPage extends BasePage {\n private static pageUrl = 'recent-files';\n\n constructor(page: Page) {\n super(page, RecentFilesPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public sidenav = new SidenavComponent(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public infoDrawer = new AdfInfoDrawerComponent(this.page);\n public contentNodeSelector = new ContentNodeSelectorDialog(this.page);\n public manageVersionsDialog = new ManageVersionsDialog(this.page);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent, Breadcrumb, AdfInfoDrawerComponent } from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfFolderDialogComponent, ViewerOverlayDialogComponent, ManageVersionsDialog } from '../components/dialogs';\n\nexport class SharedPage extends BasePage {\n private static pageUrl = 'shared';\n\n constructor(page: Page) {\n super(page, SharedPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public sidenav = new SidenavComponent(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public infoDrawer = new AdfInfoDrawerComponent(this.page);\n public manageVersionsDialog = new ManageVersionsDialog(this.page);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport {\n DataTableComponent,\n MatMenuComponent,\n ViewerComponent,\n SearchInputComponent,\n SearchOverlayComponent,\n SidenavComponent,\n SearchSortingPicker,\n SearchFilters,\n SearchFiltersTags,\n SearchFiltersCategories,\n SearchFiltersDate,\n SearchFiltersLocation,\n SearchFiltersLogic,\n SearchFiltersProperties,\n FolderInformationDialogComponent\n} from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfConfirmDialogComponent, AdfFolderDialogComponent, UploadNewVersionDialog, ManageVersionsDialog } from '../components/dialogs';\n\nexport type SearchType = 'files' | 'folders' | 'filesAndFolders' | 'libraries';\n\nexport class SearchPage extends BasePage {\n private static pageUrl = 'search';\n\n constructor(page: Page) {\n super(page, SearchPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public searchInput = new SearchInputComponent(this.page);\n public searchOverlay = new SearchOverlayComponent(this.page);\n public searchSortingPicker = new SearchSortingPicker(this.page);\n public searchFilters = new SearchFilters(this.page);\n public searchFiltersTags = new SearchFiltersTags(this.page);\n public searchFiltersCategories = new SearchFiltersCategories(this.page);\n public searchFiltersDate = new SearchFiltersDate(this.page);\n public searchFiltersLocation = new SearchFiltersLocation(this.page);\n public searchFiltersProperties = new SearchFiltersProperties(this.page);\n public searchFiltersLogic = new SearchFiltersLogic(this.page);\n public sidenav = new SidenavComponent(this.page);\n public confirmDialogComponent = new AdfConfirmDialogComponent(this.page);\n public uploadNewVersionDialog = new UploadNewVersionDialog(this.page);\n public manageVersionsDialog = new ManageVersionsDialog(this.page);\n public folderInformationDialog = new FolderInformationDialogComponent(this.page);\n\n async searchWithin(searchText: string, searchType?: SearchType): Promise<void> {\n await this.acaHeader.searchButton.click();\n await this.clickSearchButton();\n switch (searchType) {\n case 'files':\n await this.searchOverlay.checkOnlyFiles();\n break;\n case 'folders':\n await this.searchOverlay.checkOnlyFolders();\n break;\n case 'filesAndFolders':\n await this.searchOverlay.checkFilesAndFolders();\n break;\n case 'libraries':\n await this.searchOverlay.checkLibraries();\n break;\n default:\n break;\n }\n await this.searchOverlay.searchFor(searchText);\n await this.dataTable.progressBarWaitForReload();\n }\n\n async clickSearchButton() {\n await this.searchInput.searchButton.click({ force: true });\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport {\n DataTableComponent,\n MatMenuComponent,\n ViewerComponent,\n SidenavComponent,\n PaginationComponent,\n Breadcrumb,\n AdfInfoDrawerComponent\n} from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfFolderDialogComponent, ViewerOverlayDialogComponent, ManageVersionsDialog } from '../components/dialogs';\n\nexport class FavoritesPage extends BasePage {\n private static pageUrl = 'favorites';\n\n constructor(page: Page) {\n super(page, FavoritesPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public sidenav = new SidenavComponent(this.page);\n public pagination = new PaginationComponent(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public infoDrawer = new AdfInfoDrawerComponent(this.page);\n public manageVersionsDialog = new ManageVersionsDialog(this.page);\n\n async waitForPageLoad() {\n await this.page.waitForURL(`**/${FavoritesPage.pageUrl}`);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent, Breadcrumb, PaginationComponent } from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfFolderDialogComponent, ViewerOverlayDialogComponent, AdfDeleteTrashComponent } from '../components/dialogs';\n\nexport class TrashPage extends BasePage {\n private static pageUrl = 'trashcan';\n\n constructor(page: Page) {\n super(page, TrashPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public sidenav = new SidenavComponent(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public pagination = new PaginationComponent(this.page);\n public deleteDialog = new AdfDeleteTrashComponent(this.page);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport { DataTableComponent, MatMenuComponent, SidenavComponent, ViewerComponent } from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfConfirmDialogComponent, AdfFolderDialogComponent, ViewerOverlayDialogComponent } from '../components/dialogs';\n\nexport class FavoritesLibrariesPage extends BasePage {\n private static pageUrl = 'favorite/libraries';\n\n constructor(page: Page) {\n super(page, FavoritesLibrariesPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public sidenav = new SidenavComponent(this.page);\n public confirmDialogComponent = new AdfConfirmDialogComponent(this.page);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './base.page';\nexport * from './login.page';\nexport * from './nodes.page';\nexport * from './personal-files.page';\nexport * from './my-libraries.page';\nexport * from './recent-files.page';\nexport * from './shared.page';\nexport * from './search.page';\nexport * from './favorites.page';\nexport * from './trash.page';\nexport * from './favorites-libraries.page';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './components';\nexport * from './pages';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst env = process.env;\n\nexport const testEmailDomain = env.E2E_EMAIL_DOMAIN;\nexport const users = {\n hruser: {\n username: env.HR_USER,\n password: env.HR_USER_PASSWORD\n },\n admin: {\n username: env.ADMIN_EMAIL,\n password: env.ADMIN_PASSWORD\n }\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { chromium, FullConfig } from '@playwright/test';\nimport { LoginPage } from '../page-objects';\nimport { CustomConfig } from '../models';\nimport { users } from './global-variables';\nimport fs from 'fs';\nimport { paths } from '../utils/paths';\n\nasync function globalSetup(config: FullConfig<CustomConfig>) {\n const { use } = config.projects[0];\n\n await removeOutputFolders();\n await createOutputFolders();\n\n if (use.users) {\n for (const user of use.users) {\n if (users[user].username) {\n const browser = await chromium.launch();\n const page = await browser.newPage();\n const loginPage = new LoginPage(page);\n await page.goto(use.baseURL);\n await loginPage.loginUser(\n { username: users[user].username, password: users[user].password },\n {\n withNavigation: false,\n waitForLoading: true\n }\n );\n await page.context().storageState({ path: `${paths.userStates}/${user}UserState.json` });\n await browser.close();\n } else {\n throw new Error(`Add credentials for ${user} to you .env file!`);\n }\n }\n }\n}\n\nasync function createOutputFolders() {\n for (const path in paths) {\n if (!fs.existsSync(paths[path])) {\n fs.mkdirSync(paths[path], { recursive: true });\n }\n }\n}\n\nasync function removeOutputFolders() {\n if (fs.existsSync(paths.rootFolder)) {\n fs.rmdirSync(paths.rootFolder, { recursive: true });\n }\n}\n\nexport default globalSetup;\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ReporterDescription } from '@playwright/test';\nimport { timeouts } from '../utils';\n\nconst { env } = process;\n\nexport const getReportPortalConfig = () => {\n const attributes = [\n { key: 'Job', value: `${env.GITHUB_JOB}` },\n { key: 'Build_type', value: `${env.GITHUB_EVENT_NAME}` },\n { key: 'Repository', value: `${env.GITHUB_REPOSITORY}` },\n { key: 'Branch', value: `${env.GITHUB_HEAD_REF || env.GITHUB_REF}` }\n ];\n\n const launch = `GitHub Actions - ACA`;\n\n return {\n endpoint: env.REPORT_PORTAL_URL,\n apiKey: env.REPORT_PORTAL_TOKEN,\n project: 'alfresco-content-app',\n launch,\n includeTestSteps: true,\n restClientConfig: {\n timeout: timeouts.extendedTest\n },\n attributes,\n description: `[Run on GitHub Actions ${env.GITHUB_RUN_ID}](${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID})`\n };\n};\n\nexport const getReporter = (): ReporterDescription[] =>\n env.CI ? [['@reportportal/agent-js-playwright', getReportPortalConfig()], ['github']] : [['html']];\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { PlaywrightTestConfig, devices } from '@playwright/test';\nimport { timeouts } from '../utils';\nimport { getReporter } from './report-portal.config';\n\nrequire('@alfresco/adf-cli/tooling').dotenvConfig();\nconst { env } = process;\n\nexport const getGlobalConfig: PlaywrightTestConfig = {\n timeout: timeouts.globalTest,\n globalTimeout: timeouts.globalSpec,\n expect: {\n /**\n * Maximum time expect() should wait for the condition to be met.\n * For example in `await expect(locator).toHaveText();`\n */\n timeout: timeouts.medium\n },\n /* Run tests in files in parallel */\n fullyParallel: true,\n /* Fail the build on CI if you accidentally left test.only in the source code. */\n forbidOnly: !!env.CI,\n /* Retry on CI only */\n retries: env.CI ? 2 : 0,\n /* Opt out of parallel tests on CI. */\n workers: 3,\n /* Reporter to use. See https://playwright.dev/docs/test-reporters */\n reporter: [['list'], ...getReporter()],\n globalSetup: require.resolve('./global.setup'),\n testMatch: ['**/*.e2e.ts'],\n use: {\n /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */\n actionTimeout: 0,\n /* Base URL to use in actions like `await page.goto('/')`. */\n baseURL: env.PLAYWRIGHT_E2E_HOST,\n headless: env.PLAYWRIGHT_HEADLESS === 'true' || !!env.CI,\n ignoreHTTPSErrors: true,\n bypassCSP: true,\n /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */\n trace: 'retain-on-failure',\n video: 'retain-on-failure',\n screenshot: 'only-on-failure',\n launchOptions: {\n devtools: false,\n args: ['--no-sandbox', '--disable-site-isolation-trials']\n }\n },\n\n /* Configure projects for major browsers */\n projects: [\n {\n name: 'chromium',\n use: {\n ...devices['Desktop Chrome']\n }\n }\n ]\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './global.setup';\nexport * from './playwright.config';\nexport * from './global-variables';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport interface PersonModel {\n username?: string;\n password?: string;\n firstName?: string;\n lastName?: string;\n email?: string;\n enabled?: boolean;\n properties?: any;\n}\n\nexport class Person {\n id: string;\n password: string;\n firstName: string;\n lastName: string;\n email: string;\n enabled: boolean;\n properties: any;\n\n constructor(user: PersonModel) {\n this.id = user.username;\n this.password = user.password || user.username;\n this.firstName = user.firstName || user.username;\n this.lastName = user.lastName || user.username;\n this.email = user.email || `${user.username}@alfresco.com`;\n this.enabled = user.enabled || true;\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n AdminTenantsApi,\n AdminUsersApi,\n AlfrescoApi,\n ContentClient,\n GroupsApi,\n NodesApi,\n PeopleApi,\n QueriesApi,\n SearchApi,\n SecurityGroupsApi,\n SecurityMarksApi,\n SitesApi,\n UploadApi,\n SharedlinksApi,\n FavoritesApi,\n TrashcanApi,\n PersonEntry,\n CommentsApi,\n CategoriesApi,\n TagsApi\n} from '@alfresco/js-api';\nimport { users } from '../base-config';\nimport { Person, PersonModel } from './people-api-models';\n\nexport interface AcaBackend {\n sites: SitesApi;\n upload: UploadApi;\n nodes: NodesApi;\n share: SharedlinksApi;\n favorites: FavoritesApi;\n trashCan: TrashcanApi;\n\n tearDown(): Promise<any>;\n}\n\nconst { BASE_URL } = process.env;\n\nconst config = {\n authType: 'BASIC',\n hostBpm: BASE_URL,\n hostEcm: BASE_URL,\n provider: 'ECM',\n contextRoot: 'alfresco'\n};\n\nexport class ApiClientFactory {\n public alfrescoApi: AlfrescoApi;\n public sites: SitesApi;\n public upload: UploadApi;\n public nodes: NodesApi;\n public people: PeopleApi;\n public adminUsers: AdminUsersApi;\n public adminTenant: AdminTenantsApi;\n public groups: GroupsApi;\n public queries: QueriesApi;\n public search: SearchApi;\n public securityGroupsApi: SecurityGroupsApi;\n public securityMarksApi: SecurityMarksApi;\n public contentClient: ContentClient;\n public share: SharedlinksApi;\n public favorites: FavoritesApi;\n public trashCan: TrashcanApi;\n public commentsApi: CommentsApi;\n public queriesApi: QueriesApi;\n public categoriesApi: CategoriesApi;\n public tagsApi: TagsApi;\n constructor() {\n this.alfrescoApi = new AlfrescoApi(config);\n }\n\n public async setUpAcaBackend(userName: string, password?: string): Promise<AcaBackend> {\n await this.login(userName, password);\n\n this.sites = new SitesApi(this.alfrescoApi);\n this.upload = new UploadApi(this.alfrescoApi);\n this.nodes = new NodesApi(this.alfrescoApi);\n this.people = new PeopleApi(this.alfrescoApi);\n this.adminUsers = new AdminUsersApi(this.alfrescoApi);\n this.adminTenant = new AdminTenantsApi(this.alfrescoApi);\n this.groups = new GroupsApi(this.alfrescoApi);\n this.queries = new QueriesApi(this.alfrescoApi);\n this.search = new SearchApi(this.alfrescoApi);\n this.securityGroupsApi = new SecurityGroupsApi(this.alfrescoApi);\n this.securityMarksApi = new SecurityMarksApi(this.alfrescoApi);\n this.share = new SharedlinksApi(this.alfrescoApi);\n this.favorites = new FavoritesApi(this.alfrescoApi);\n this.trashCan = new TrashcanApi(this.alfrescoApi);\n this.commentsApi = new CommentsApi(this.alfrescoApi);\n this.queriesApi = new QueriesApi(this.alfrescoApi);\n this.categoriesApi = new CategoriesApi(this.alfrescoApi);\n this.tagsApi = new TagsApi(this.alfrescoApi);\n\n return this;\n }\n\n async tearDown(): Promise<ApiClientFactory> {\n await this.alfrescoApi.logout();\n return this;\n }\n\n async login(userName: string, password?: string) {\n const predefinedUserKey = Object.keys(users).find((user) => user === userName || users[user].username === userName);\n const userToLog = predefinedUserKey ? users[predefinedUserKey] : undefined;\n let e: any;\n\n const user = userToLog?.username ?? userName;\n const userPassword = userToLog?.password ?? password;\n try {\n e = await this.alfrescoApi.login(user, userPassword);\n } catch (error) {\n console.error(`[API Client Factory] Log in user ${user} failed ${e}`);\n throw error;\n }\n }\n\n async loginUser(user: PersonModel) {\n let e: any;\n try {\n e = await this.alfrescoApi.login(user.username, user.password);\n } catch (error) {\n console.error(`[API Client Factory] Log in user ${user.username} failed ${e}`);\n throw error;\n }\n }\n\n async createUser(user: PersonModel): Promise<PersonEntry> {\n const person = new Person(user);\n const peopleApi = new PeopleApi(this.alfrescoApi);\n\n try {\n return peopleApi.createPerson(person);\n } catch (error) {\n console.error('[API Client Factory] createUser failed : ', error);\n return null;\n }\n }\n\n async changePassword(username: string, newPassword: string): Promise<PersonEntry> {\n const peopleApi = new PeopleApi(this.alfrescoApi);\n\n try {\n return peopleApi.updatePerson(username, { password: newPassword });\n } catch (error) {\n console.error('[API Client Factory] changePassword failed : ', error);\n return null;\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport { AcaFolderRulesModule } from '@alfresco/aca-content/folder-rules';\nimport * as crypto from 'crypto';\n\nexport class RulesApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<RulesApi> {\n const classObj = new RulesApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n private callApi(path: string, httpMethod: string, body: object = {}): Promise<any> {\n // APIs used by this service are still private and not yet available for public use\n const params = [{}, {}, {}, {}, body, ['application/json'], ['application/json']];\n return this.apiService.alfrescoApi.contentPrivateClient.callApi(path, httpMethod, ...params);\n }\n\n async createRule(nodeId: string, rule: Partial<Rule>, ruleSetId: string = '-default-'): Promise<Rule> {\n const response = await this.callApi(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules`, 'POST', { ...rule });\n return response.entry;\n }\n\n async createRandomRule(folderId: string, ruleName: string): Promise<Rule> {\n const randomActionsIndex = crypto.randomInt(0, ActionTypes.actions.length);\n const randomAction = ActionTypes.actions[randomActionsIndex];\n return this.createRule(folderId, {\n name: ruleName,\n isEnabled: true,\n actions: [randomAction]\n });\n }\n\n async createRandomRuleWithMultipleConditions(folderId: string, ruleName: string, numOfConditions: number): Promise<Rule> {\n if (numOfConditions > ConditionsTypes.conditions.length) {\n numOfConditions = ConditionsTypes.conditions.length;\n }\n const randomActionsIndex = crypto.randomInt(0, ActionTypes.actions.length);\n const randomAction = ActionTypes.actions[randomActionsIndex];\n const conditionsArray = [];\n for (let i = 0; i < numOfConditions; i++) {\n const randomIndex = crypto.randomInt(0, ConditionsTypes.conditions.length);\n const randomCondition = ConditionsTypes.conditions[randomIndex];\n conditionsArray.push(randomCondition);\n }\n return this.createRule(folderId, {\n name: ruleName,\n isEnabled: true,\n actions: [randomAction],\n conditions: {\n inverted: false,\n booleanMode: 'and',\n compositeConditions: conditionsArray\n }\n });\n }\n\n async createRandomRuleWithMultipleActions(folderId: string, ruleName: string, numOfActions: number): Promise<Rule> {\n if (numOfActions > ActionTypes.actions.length) {\n numOfActions = ActionTypes.actions.length;\n }\n const actionsArray = [];\n for (let i = 0; i < numOfActions; i++) {\n const randomIndex = crypto.randomInt(0, ActionTypes.actions.length);\n const randomAction = ActionTypes.actions[randomIndex];\n actionsArray.push(randomAction);\n }\n return this.createRule(folderId, {\n name: ruleName,\n isEnabled: true,\n actions: actionsArray\n });\n }\n\n async createRandomComplexRule(\n folderId: string,\n ruleName: string,\n numOfConditions: number,\n numOfActions: number,\n ruleDescription?: string\n ): Promise<Rule> {\n if (numOfConditions > ConditionsTypes.conditions.length) {\n numOfConditions = ConditionsTypes.conditions.length;\n }\n const conditionsArray = [];\n for (let i = 0; i < numOfConditions; i++) {\n const randomIndex = crypto.randomInt(0, ConditionsTypes.conditions.length);\n const randomCondition = ConditionsTypes.conditions[randomIndex];\n conditionsArray.push(randomCondition);\n }\n if (numOfActions > ActionTypes.actions.length) {\n numOfActions = ActionTypes.actions.length;\n }\n const actionsArray = [];\n for (let i = 0; i < numOfActions; i++) {\n const randomIndex = crypto.randomInt(0, ActionTypes.actions.length);\n const randomAction = ActionTypes.actions[randomIndex];\n actionsArray.push(randomAction);\n }\n return this.createRule(folderId, {\n name: ruleName,\n description: ruleDescription,\n isEnabled: true,\n actions: actionsArray,\n conditions: {\n inverted: false,\n booleanMode: 'and',\n compositeConditions: conditionsArray\n }\n });\n }\n\n async createRuleWithRandomAspects(folderId: string, ruleName: string): Promise<Rule> {\n return this.createRule(folderId, {\n name: ruleName,\n isEnabled: true,\n actions: [\n {\n actionDefinitionId: 'add-features',\n params: {\n 'aspect-name': 'cm:auditable'\n }\n },\n {\n actionDefinitionId: 'add-features',\n params: {\n 'aspect-name': 'app:configurable'\n }\n },\n {\n actionDefinitionId: 'add-features',\n params: {\n 'aspect-name': 'exif:exif'\n }\n }\n ]\n });\n }\n\n async createRuleWithDestinationFolder(\n folderId: string,\n ruleName: string,\n actionType: 'move' | 'copy' | 'import',\n destinationFolderId: string\n ): Promise<Rule> {\n return this.createRule(folderId, {\n name: ruleName,\n isEnabled: true,\n actions: [\n {\n actionDefinitionId: actionType,\n params: {\n 'destination-folder': destinationFolderId\n }\n }\n ]\n });\n }\n}\n\ntype RuleTrigger = 'inbound' | 'update' | 'outbound';\n\nexport interface Rule {\n id: string;\n name: string;\n description: string;\n isEnabled: boolean;\n isInheritable: boolean;\n isAsynchronous: boolean;\n errorScript: string;\n isShared: boolean;\n triggers: RuleTrigger[];\n conditions: AcaFolderRulesModule;\n actions: RuleAction[];\n}\n\nexport interface RuleAction {\n actionDefinitionId: string;\n params?: { [key: string]: unknown };\n}\n\nexport class ActionTypes {\n static readonly ADDFEATURES = new ActionTypes('ADDFEATURES', {\n actionDefinitionId: 'add-features',\n params: { 'aspect-name': 'cm:thumbnailed' }\n });\n static readonly CHECKIN = new ActionTypes('CHECKIN', {\n actionDefinitionId: 'check-in',\n params: {\n description: 'test',\n minorChange: true\n }\n });\n static readonly SPECIALISETYPE = new ActionTypes('SPECIALISETYPE', {\n actionDefinitionId: 'specialise-type',\n params: { 'type-name': 'sys:base' }\n });\n static readonly SETPROPERTYVALUE = new ActionTypes('SETPROPERTYVALUE', {\n actionDefinitionId: 'set-property-value',\n params: { property: 'dl:ganttPercentComplete', value: 'test' }\n });\n static readonly actions = [\n ActionTypes.ADDFEATURES.value,\n ActionTypes.CHECKIN.value,\n ActionTypes.SPECIALISETYPE.value,\n ActionTypes.SETPROPERTYVALUE.value\n ];\n constructor(\n public key: string,\n public value: RuleAction\n ) {}\n}\n\nexport class ConditionsTypes {\n static readonly MIMETYPE = new ConditionsTypes('MIMETYPE', {\n inverted: false,\n booleanMode: 'and',\n simpleConditions: [\n {\n field: 'mimetype',\n comparator: 'equals',\n parameter: 'video/3gpp'\n }\n ]\n });\n static readonly CMNAME = new ConditionsTypes('CM:NAME', {\n inverted: false,\n booleanMode: 'and',\n simpleConditions: [\n {\n field: 'cm:name',\n comparator: 'equals',\n parameter: 'testname'\n }\n ]\n });\n static readonly SIZE = new ConditionsTypes('SIZE', {\n inverted: false,\n booleanMode: 'and',\n simpleConditions: [\n {\n field: 'size',\n comparator: 'equals',\n parameter: '345'\n }\n ]\n });\n static readonly TAG = new ConditionsTypes('TAG', {\n inverted: false,\n booleanMode: 'and',\n simpleConditions: [\n {\n field: 'tag',\n comparator: 'equals',\n parameter: 'testtag'\n }\n ]\n });\n static readonly conditions = [ConditionsTypes.MIMETYPE.value, ConditionsTypes.CMNAME.value, ConditionsTypes.SIZE.value, ConditionsTypes.TAG.value];\n constructor(\n public key: string,\n public value: AcaFolderRulesModule\n ) {}\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport * as fs from 'fs';\nimport { ApiClientFactory } from './api-client-factory';\nimport { Utils, waitForApi } from '../utils';\nimport { NodeBodyCreate, NodeEntry, ResultSetPaging, SearchRequest } from '@alfresco/js-api';\n\nexport class FileActionsApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<FileActionsApi> {\n const classObj = new FileActionsApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async uploadFile(fileLocation: string, fileName: string, parentFolderId: string): Promise<NodeEntry> {\n const file = fs.createReadStream(fileLocation);\n return this.apiService.upload.uploadFile(file, '', parentFolderId, null, {\n name: fileName,\n nodeType: 'cm:content',\n renditions: 'doclib'\n });\n }\n\n async uploadFileWithRename(\n fileLocation: string,\n newName: string,\n parentId: string = '-my-',\n title: string = '',\n description: string = ''\n ): Promise<NodeEntry> {\n const file = fs.createReadStream(fileLocation);\n const nodeProps = {\n properties: {\n 'cm:title': title,\n 'cm:description': description\n }\n } as NodeBodyCreate;\n\n const opts = {\n name: newName,\n nodeType: 'cm:content'\n };\n\n try {\n return this.apiService.upload.uploadFile(file, '', parentId, nodeProps, opts);\n } catch (error) {\n return Promise.reject(error);\n }\n }\n\n async lockNodes(nodeIds: string[], lockType: string = 'ALLOW_OWNER_CHANGES'): Promise<void> {\n try {\n for (const nodeId of nodeIds) {\n await this.apiService.nodes.lockNode(nodeId, { type: lockType });\n }\n } catch {}\n }\n\n async getNodeById(id: string): Promise<NodeEntry | null> {\n try {\n return this.apiService.nodes.getNode(id);\n } catch {\n return null;\n }\n }\n\n async getNodeProperty(nodeId: string, property: string): Promise<string> {\n try {\n const node = await this.getNodeById(nodeId);\n return node.entry.properties?.[property] || '';\n } catch {\n return '';\n }\n }\n\n private async getLockType(nodeId: string): Promise<string> {\n try {\n const lockType = await this.getNodeProperty(nodeId, 'cm:lockType');\n return lockType || '';\n } catch {\n return '';\n }\n }\n\n async isFileLockedWriteWithRetry(nodeId: string, expect: boolean): Promise<boolean> {\n const data = {\n expect: expect,\n retry: 5\n };\n let isLocked = false;\n try {\n const locked = async () => {\n isLocked = (await this.getLockType(nodeId)) === 'WRITE_LOCK';\n if (isLocked !== data.expect) {\n return Promise.reject(isLocked);\n } else {\n return Promise.resolve(isLocked);\n }\n };\n return await Utils.retryCall(locked, data.retry);\n } catch {}\n return isLocked;\n }\n\n private async queryNodesNames(searchTerm: string): Promise<ResultSetPaging> {\n const data = {\n query: {\n query: `cm:name:\\\"${searchTerm}*\\\"`,\n language: 'afts'\n },\n filterQueries: [{ query: `+TYPE:'cm:folder' OR +TYPE:'cm:content'` }]\n };\n\n try {\n return this.apiService.search.search(data);\n } catch {\n return new ResultSetPaging();\n }\n }\n\n async waitForNodes(searchTerm: string, data: { expect: number }): Promise<void> {\n const predicate = (totalItems: number) => totalItems === data.expect;\n\n const apiCall = async () => {\n try {\n return (await this.queryNodesNames(searchTerm)).list.pagination.totalItems;\n } catch (error) {\n return 0;\n }\n };\n\n try {\n await waitForApi(apiCall, predicate, 30, 2500);\n console.log(`waitForNodes: Found ${data.expect} nodes with search term \"${searchTerm}\"`);\n } catch (error) {\n console.error(`Error: ${error}`);\n }\n }\n\n private async queryNodesSearchHighlight(searchTerm: string): Promise<ResultSetPaging> {\n const data: SearchRequest = {\n query: {\n query: `cm:name:\"${searchTerm}*\"`,\n language: 'afts'\n },\n filterQueries: [{ query: `+TYPE:'cm:folder' OR +TYPE:'cm:content'` }],\n highlight: {\n prefix: \"<span class='aca-highlight'>\",\n postfix: '</span>',\n fields: [\n {\n field: 'cm:title'\n },\n {\n field: 'cm:name'\n },\n {\n field: 'cm:description',\n snippetCount: 1\n },\n {\n field: 'cm:content',\n snippetCount: 1\n }\n ]\n }\n };\n\n try {\n return this.apiService.search.search(data);\n } catch {\n return new ResultSetPaging();\n }\n }\n\n async waitForNodesSearchHighlight(searchTerm: string, data: { expect: number }): Promise<void> {\n const predicate = (totalItems: number): boolean => totalItems === data.expect;\n\n const apiCall = async (): Promise<number> => {\n try {\n return (await this.queryNodesSearchHighlight(searchTerm)).list.pagination.totalItems;\n } catch (error) {\n console.warn(`queryNodesSearchHighlight failed for \"${searchTerm}\":`, error);\n return 0;\n }\n };\n\n try {\n await waitForApi(apiCall, predicate, 30, 2500);\n console.log(`waitForNodesSearchHighlight: Found ${data.expect} nodes with search term \"${searchTerm}\"`);\n } catch (error) {\n console.error(`Error: ${error}`);\n }\n }\n\n async updateNodeContent(nodeId: string, content: string, majorVersion: boolean = true, comment?: string, newName?: string): Promise<NodeEntry> {\n try {\n const opts: { [key: string]: string | boolean } = {\n majorVersion: majorVersion,\n comment: comment,\n name: newName\n };\n return this.apiService.nodes.updateNodeContent(nodeId, content, opts);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.updateNodeContent.name}`, error);\n return Promise.reject(error);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport { SharedLinkEntry, SharedLinkPaging } from '@alfresco/js-api';\nimport { Utils } from '../utils';\n\nexport class SharedLinksApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n static async initialize(userName: string, password?: string): Promise<SharedLinksApi> {\n const classObj = new SharedLinksApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async shareFileById(id: string, expireDate?: Date): Promise<SharedLinkEntry | null> {\n try {\n const data = {\n nodeId: id,\n expiresAt: expireDate\n };\n return this.apiService.share.createSharedLink(data);\n } catch (error) {\n return null;\n }\n }\n\n async shareFilesByIds(ids: string[], expireDate?: Date): Promise<SharedLinkEntry[]> {\n const sharedLinks: SharedLinkEntry[] = [];\n try {\n if (ids && ids.length > 0) {\n for (const id of ids) {\n const sharedLink = await this.shareFileById(id, expireDate);\n sharedLinks.push(sharedLink);\n }\n }\n } catch (error) {\n console.error(`SharedLinksApi shareFilesByIds : catch : `, error);\n }\n return sharedLinks;\n }\n\n private async getSharedLinks(maxItems: number = 250): Promise<SharedLinkPaging> {\n try {\n const opts = {\n maxItems\n };\n return this.apiService.share.listSharedLinks(opts);\n } catch (error) {\n console.error(`SharedLinksApi getSharedLinks : catch : `, error);\n return new SharedLinkPaging();\n }\n }\n\n async waitForFilesToBeShared(filesIds: string[]): Promise<void> {\n try {\n const sharedFile = async () => {\n const sharedFiles = (await this.getSharedLinks()).list.entries.map((link) => link.entry.nodeId);\n const foundItems = filesIds.every((id) => sharedFiles.includes(id));\n if (foundItems) {\n return Promise.resolve(foundItems);\n } else {\n return Promise.reject(foundItems);\n }\n };\n\n return await Utils.retryCall(sharedFile);\n } catch (error) {\n console.error(`SharedLinksApi waitForFilesToBeShared : catch : ${error}`);\n console.error(`\\tWait timeout reached waiting for files to be shared`);\n }\n }\n\n private async getSharedIdOfNode(fileId: string): Promise<string> {\n try {\n const sharedLinksEntries = (await this.getSharedLinks())?.list.entries;\n const found = sharedLinksEntries.find((sharedLink) => sharedLink.entry.nodeId === fileId);\n return found?.entry.id;\n } catch (error) {\n console.error(`SharedLinksApi getSharedIdOfNode : catch : `, error);\n return null;\n }\n }\n\n async unshareFileById(fileId: string): Promise<void> {\n try {\n const sharedId = await this.getSharedIdOfNode(fileId);\n return this.apiService.share.deleteSharedLink(sharedId);\n } catch (error) {\n console.error(`SharedLinksApi unshareFileById : catch : `, error);\n }\n }\n\n async waitForFilesToNotBeShared(filesIds: string[]): Promise<any> {\n try {\n const sharedFile = async () => {\n const sharedFiles = (await this.getSharedLinks()).list.entries.map((link) => link.entry.nodeId);\n\n const foundItems = filesIds.some((id) => {\n return sharedFiles.includes(id);\n });\n\n if (foundItems) {\n return Promise.reject(foundItems);\n } else {\n return Promise.resolve(foundItems);\n }\n };\n\n return await Utils.retryCall(sharedFile);\n } catch (error) {\n console.error(`SharedLinksApi waitForFilesToNotBeShared : catch : ${error}`);\n console.error(`\\tWait timeout reached waiting for files to no longer be shared`);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport { FavoriteEntry, FavoritePaging } from '@alfresco/js-api';\nimport { Utils } from '../utils';\n\nexport class FavoritesPageApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n static async initialize(userName: string, password?: string): Promise<FavoritesPageApi> {\n const classObj = new FavoritesPageApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n async addFavoriteById(nodeType: 'file' | 'folder' | 'site', id: string): Promise<FavoriteEntry> {\n const guid = nodeType === 'site' ? (await this.apiService.sites.getSite(id)).entry.guid : id;\n const data = {\n target: {\n [nodeType]: {\n guid: guid\n }\n }\n };\n return this.apiService.favorites.createFavorite('-me-', data);\n }\n\n async addFavoritesByIds(nodeType: 'file' | 'folder' | 'site', ids: string[]): Promise<FavoriteEntry[]> {\n const favorites: FavoriteEntry[] = [];\n try {\n if (ids && ids.length > 0) {\n for (const id of ids) {\n const favorite = await this.addFavoriteById(nodeType, id);\n favorites.push(favorite);\n }\n }\n } catch {}\n return favorites;\n }\n\n private async getFavorites(username: string): Promise<FavoritePaging> {\n try {\n return this.apiService.favorites.listFavorites(username);\n } catch {\n return new FavoritePaging();\n }\n }\n\n async isFavorite(username: string, nodeId: string): Promise<boolean> {\n try {\n return JSON.stringify((await this.getFavorites(username)).list.entries).includes(nodeId);\n } catch {\n return false;\n }\n }\n\n async isFavoriteWithRetry(username: string, nodeId: string, data: { expect: boolean }): Promise<boolean> {\n let isFavorite = false;\n try {\n const favorite = async () => {\n isFavorite = await this.isFavorite(username, nodeId);\n if (isFavorite !== data.expect) {\n return Promise.reject(isFavorite);\n } else {\n return Promise.resolve(isFavorite);\n }\n };\n return await Utils.retryCall(favorite);\n } catch (error) {}\n return isFavorite;\n }\n\n async getFavoritesTotalItems(username: string): Promise<number> {\n try {\n return (await this.apiService.favorites.listFavorites(username)).list.pagination.totalItems;\n } catch {\n return -1;\n }\n }\n\n async waitForApi(username: string, data: { expect: number }) {\n try {\n const favoriteFiles = async () => {\n const totalItems = await this.getFavoritesTotalItems(username);\n if (totalItems !== data.expect) {\n return Promise.reject(totalItems);\n } else {\n return Promise.resolve(totalItems);\n }\n };\n return await Utils.retryCall(favoriteFiles);\n } catch {}\n }\n\n async removeFavoritesByIds(username: string, ids: string[]): Promise<void> {\n try {\n if (ids && ids.length > 0) {\n for (const id of ids) {\n await this.apiService.favorites.deleteFavorite(username, id);\n }\n }\n } catch (error) {\n console.error('FavoritesApi: removeFavoritesByIds failed ', error);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { NodeBodyCreate } from '@alfresco/js-api';\n\nconst NODE_TYPE_FILE = 'cm:content';\nconst NODE_TYPE_FOLDER = 'cm:folder';\nconst NODE_TITLE = 'cm:title';\nconst NODE_DESCRIPTION = 'cm:description';\n\nexport interface NodeContentTree {\n name?: string;\n files?: string[];\n folders?: (string | NodeContentTree)[];\n title?: string;\n description?: string;\n}\n\nexport function flattenNodeContentTree(content: NodeContentTree, relativePath: string = '/'): NodeBodyCreate[] {\n const { name, files, folders, title, description } = content;\n const aspectNames: string[] = ['cm:versionable'];\n let data: NodeBodyCreate[] = [];\n\n const properties = {\n [NODE_TITLE]: title,\n [NODE_DESCRIPTION]: description\n };\n\n if (name) {\n data = data.concat([\n {\n nodeType: NODE_TYPE_FOLDER,\n name,\n relativePath,\n properties\n }\n ]);\n\n relativePath = relativePath === '/' ? `/${name}` : `${relativePath}/${name}`;\n }\n\n if (folders) {\n const foldersData: NodeBodyCreate[] = folders\n .map((folder: string | NodeContentTree): NodeBodyCreate[] => {\n const folderData: NodeContentTree = typeof folder === 'string' ? { name: folder } : folder;\n\n return flattenNodeContentTree(folderData, relativePath);\n })\n .reduce((nodesData: NodeBodyCreate[], folderData: NodeBodyCreate[]) => nodesData.concat(folderData), []);\n\n data = data.concat(foldersData);\n }\n\n if (files) {\n const filesData: NodeBodyCreate[] = files.map(\n (filename: string): NodeBodyCreate => ({\n nodeType: NODE_TYPE_FILE,\n name: filename,\n relativePath,\n aspectNames\n })\n );\n\n data = data.concat(filesData);\n }\n\n return data;\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport { NodeChildAssociationPaging, NodeEntry, NodePaging, NodesIncludeQuery, NodeBodyUpdate } from '@alfresco/js-api';\nimport { NodeContentTree, flattenNodeContentTree } from './node-content-tree';\n\nexport class NodesApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<NodesApi> {\n const classObj = new NodesApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async createFolder(\n name: string,\n parentId: string = '-my-',\n title: string = '',\n description: string = '',\n author: string = '',\n aspectNames: string[] = null\n ): Promise<NodeEntry | null> {\n try {\n return await this.createNode('cm:folder', name, parentId, title, description, null, author, null, aspectNames);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFolder.name}`, error);\n return null;\n }\n }\n\n async createFile(\n name: string,\n parentId: string = '-my-',\n title: string = '',\n description: string = '',\n author: string = '',\n majorVersion: boolean = true,\n aspectNames: string[] = null\n ): Promise<NodeEntry> {\n try {\n return await this.createNode('cm:content', name, parentId, title, description, null, author, majorVersion, aspectNames);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFile.name}`, error);\n return null;\n }\n }\n\n async createFiles(names: string[], relativePath = '/'): Promise<NodePaging> {\n try {\n return await this.createContent({ files: names }, relativePath);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFiles.name}: ${error}`);\n return null;\n }\n }\n\n async createFolders(names: string[], relativePath = '/'): Promise<NodePaging> {\n try {\n return await this.createContent({ folders: names }, relativePath);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFolders.name}: ${error}`);\n return null;\n }\n }\n\n async deleteDeletedNode(name: string): Promise<void> {\n try {\n await this.apiService.trashCan.deleteDeletedNode(name);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteDeletedNode.name}: ${error}`);\n }\n }\n\n private async createNode(\n nodeType: string,\n name: string,\n parentId: string = '-my-',\n title: string = '',\n description: string = '',\n imageProps: any = null,\n author: string = '',\n majorVersion: boolean = true,\n aspectNames: string[] = null\n ): Promise<NodeEntry | null> {\n if (!aspectNames) {\n aspectNames = ['cm:versionable']; // workaround for REPO-4772\n }\n const nodeBody = {\n name,\n nodeType,\n relativePath: '/',\n properties: {\n 'cm:title': title,\n 'cm:description': description,\n 'cm:author': author\n },\n aspectNames\n };\n if (imageProps) {\n nodeBody.properties = Object.assign(nodeBody.properties, imageProps);\n }\n\n try {\n return this.apiService.nodes.createNode(parentId, nodeBody, {\n majorVersion\n });\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createNode.name}`, error);\n return null;\n }\n }\n\n async renameNode(nodeId: string, newName: string): Promise<NodeEntry | null> {\n try {\n return this.apiService.nodes.updateNode(nodeId, { name: newName });\n } catch (error) {\n console.error(`${this.constructor.name} ${this.renameNode.name}`, error);\n return null;\n }\n }\n\n /**\n * Delete multiple nodes.\n * @param nodeIds The list of node IDs to delete.\n * @param permanent Delete permanently, without moving to the trashcan? (default: true)\n */\n async deleteNodes(nodeIds: string[], permanent: boolean = true): Promise<any> {\n try {\n await this.apiService.nodes.deleteNodes(nodeIds, { permanent });\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteNodes.name}`, error);\n }\n }\n\n async updateNode(nodeId: string, nodeBodyUpdate: NodeBodyUpdate, opts?: NodesIncludeQuery): Promise<NodeEntry | null> {\n try {\n return await this.apiService.nodes.updateNode(nodeId, nodeBodyUpdate, opts);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.updateNode.name}`, error);\n return null;\n }\n }\n\n /**\n * Delete all nodes of the currently logged in user\n * @param userNodeId The id of User node, all child nodes of \"userNodeId\" will be gathered as a list and deleted ( e.g.: \"-my-\" - User Homes folder)\n */\n async deleteCurrentUserNodes(): Promise<void> {\n try {\n const userNodes = (await this.getNodeChildren('-my-')).list.entries;\n const userNodesIds = userNodes.map((nodeChild) => nodeChild.entry.id);\n await this.deleteNodes(userNodesIds);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteCurrentUserNodes.name}`, error);\n }\n }\n\n async lockNodes(nodeIds: string[], lockType: string = 'ALLOW_OWNER_CHANGES') {\n try {\n for (const nodeId of nodeIds) {\n await this.apiService.nodes.lockNode(nodeId, { type: lockType });\n }\n } catch (error) {\n console.error(`${this.constructor.name} ${this.lockNodes.name}`, error);\n }\n }\n\n async unlockNodes(nodeIds: string[]) {\n try {\n for (const nodeId of nodeIds) {\n await this.apiService.nodes.unlockNode(nodeId);\n }\n } catch (error) {\n console.error(`${this.constructor.name} ${this.unlockNodes.name}`, error);\n }\n }\n\n async createContent(content: NodeContentTree, relativePath: string = '/'): Promise<NodePaging> {\n try {\n return this.apiService.nodes.createNode('-my-', flattenNodeContentTree(content, relativePath) as any);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createContent.name}`, error);\n return null;\n }\n }\n\n async getNodeById(id: string): Promise<NodeEntry | null> {\n try {\n return this.apiService.nodes.getNode(id);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.getNodeById.name}`, error);\n return null;\n }\n }\n\n async getNodeIdFromParent(name: string, parentId: string): Promise<string> {\n try {\n const children = (await this.getNodeChildren(parentId)).list.entries;\n return children.find((elem) => elem.entry.name === name).entry.id || '';\n } catch (error) {\n console.error(`${this.constructor.name} ${this.getNodeIdFromParent.name}`, error);\n return '';\n }\n }\n\n private async getNodeChildren(nodeId: string): Promise<NodeChildAssociationPaging | null> {\n try {\n const opts = {\n include: ['properties']\n };\n return this.apiService.nodes.listNodeChildren(nodeId, opts);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.getNodeChildren.name}`, error);\n return null;\n }\n }\n\n async deleteNodeById(id: string, permanent: boolean = true): Promise<void> {\n try {\n await this.apiService.nodes.deleteNode(id, { permanent });\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteNodeById.name}`, error);\n }\n }\n\n async cleanupNodeTemplatesItems(nodeNames: string[]): Promise<void> {\n try {\n const templatesFolderId = await this.getNodeTemplatesFolderId();\n for (const nodeName of nodeNames) {\n const nodeId = await this.getNodeIdFromParent(nodeName, templatesFolderId);\n await this.deleteNodeById(nodeId);\n }\n } catch (error) {\n console.error('Admin Actions - cleanupNodeTemplatesItems failed : ', error);\n }\n }\n\n async cleanupSpaceTemplatesItems(nodeNames: string[]): Promise<void> {\n try {\n const spaceTemplatesNodeId = await this.getSpaceTemplatesFolderId();\n for (const nodeName of nodeNames) {\n const nodeId = await this.getNodeIdFromParent(nodeName, spaceTemplatesNodeId);\n await this.deleteNodeById(nodeId);\n }\n } catch (error) {\n console.error('Admin Actions - cleanupSpaceTemplatesFolder failed : ', error);\n }\n }\n\n async getNodeTemplatesFolderId(): Promise<string> {\n try {\n return this.getNodeIdFromParent('Node Templates', await this.getDataDictionaryId());\n } catch (error) {\n console.error('Admin Actions - getNodeTemplatesFolderId failed : ', error);\n return '';\n }\n }\n\n async getSpaceTemplatesFolderId(): Promise<string> {\n try {\n return this.getNodeIdFromParent('Space Templates', await this.getDataDictionaryId());\n } catch (error) {\n console.error('Admin Actions - getSpaceTemplatesFolderId failed : ', error);\n return '';\n }\n }\n\n private async getDataDictionaryId(): Promise<string> {\n return this.getNodeIdFromParent('Data Dictionary', '-root-').catch((error) => {\n console.error('Admin Actions - getDataDictionaryId failed : ', error);\n return '';\n });\n }\n\n async setGranularPermission(nodeId: string, username: string, role: string, inheritPermissions = false): Promise<NodeEntry | null> {\n const data = {\n permissions: {\n isInheritanceEnabled: inheritPermissions,\n locallySet: [\n {\n authorityId: username,\n name: role\n }\n ]\n }\n };\n\n try {\n return this.apiService.nodes.updateNode(nodeId, data);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.setGranularPermission.name}`, error);\n return null;\n }\n }\n\n async removeUserAccessOnNodeTemplate(nodeName: string): Promise<NodeEntry> {\n try {\n const templatesRootFolderId = await this.getNodeTemplatesFolderId();\n const nodeId: string = await this.getNodeIdFromParent(nodeName, templatesRootFolderId);\n\n return this.setInheritPermissions(nodeId, false);\n } catch (error) {\n console.error('Admin Actions - removeUserAccessOnNodeTemplate failed : ', error);\n return null;\n }\n }\n\n async removeUserAccessOnSpaceTemplate(nodeName: string): Promise<NodeEntry> {\n try {\n const templatesRootFolderId = await this.getSpaceTemplatesFolderId();\n const nodeId: string = await this.getNodeIdFromParent(nodeName, templatesRootFolderId);\n\n return this.setInheritPermissions(nodeId, false);\n } catch (error) {\n console.error('Admin Actions - removeUserAccessOnSpaceTemplate failed : ', error);\n return null;\n }\n }\n\n async setInheritPermissions(nodeId: string, inheritPermissions: boolean): Promise<NodeEntry | null> {\n const data = {\n permissions: {\n isInheritanceEnabled: inheritPermissions\n }\n };\n\n try {\n return this.apiService.nodes.updateNode(nodeId, data);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.setInheritPermissions.name}`, error);\n return null;\n }\n }\n\n private async addAspects(nodeId: string, aspectNames: string[]): Promise<NodeEntry> {\n try {\n return this.apiService.nodes.updateNode(nodeId, { aspectNames });\n } catch (error) {\n console.error(`${this.constructor.name} ${this.addAspects.name}`, error);\n return null;\n }\n }\n\n async createFileLink(originalNodeId: string, destinationId: string): Promise<NodeEntry | null> {\n const name = (await this.getNodeById(originalNodeId)).entry.name;\n const nodeBody = {\n name: `Link to ${name}.url`,\n nodeType: 'app:filelink',\n properties: {\n 'cm:destination': originalNodeId\n }\n };\n\n try {\n const link = await this.apiService.nodes.createNode(destinationId, nodeBody);\n await this.addAspects(originalNodeId, ['app:linked']);\n return link;\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFileLink.name}`, error);\n return null;\n }\n }\n\n async createFolderLink(originalNodeId: string, destinationId: string): Promise<NodeEntry | null> {\n const name = (await this.getNodeById(originalNodeId)).entry.name;\n const nodeBody = {\n name: `Link to ${name}.url`,\n nodeType: 'app:folderlink',\n properties: {\n 'cm:title': `Link to ${name}.url`,\n 'cm:destination': originalNodeId,\n 'cm:description': `Link to ${name}.url`,\n 'app:icon': 'space-icon-link'\n }\n };\n\n try {\n const link = await this.apiService.nodes.createNode(destinationId, nodeBody);\n await this.addAspects(originalNodeId, ['app:linked']);\n return link;\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFolderLink.name}`, error);\n return null;\n }\n }\n\n async createLinkToFileName(originalFileName: string, originalFileParentId: string, destinationParentId?: string): Promise<NodeEntry> {\n destinationParentId ??= originalFileParentId;\n\n try {\n const nodeId = await this.getNodeIdFromParent(originalFileName, originalFileParentId);\n\n return this.createFileLink(nodeId, destinationParentId);\n } catch (error) {\n console.error('Admin Actions - createLinkToFileName failed : ', error);\n return null;\n }\n }\n\n async createLinkToFolderName(originalFolderName: string, originalFolderParentId: string, destinationParentId?: string): Promise<NodeEntry> {\n destinationParentId ??= originalFolderParentId;\n\n try {\n const nodeId = await this.getNodeIdFromParent(originalFolderName, originalFolderParentId);\n return this.createFolderLink(nodeId, destinationParentId);\n } catch (error) {\n console.error('Admin Actions - createLinkToFolderName failed : ', error);\n return null;\n }\n }\n\n async getNodeProperty(nodeId: string, property: string): Promise<string> {\n try {\n const node = await this.getNodeById(nodeId);\n return node.entry.properties?.[property] || '';\n } catch (error) {\n console.error(`${this.constructor.name} ${this.getNodeProperty.name}`, error);\n return '';\n }\n }\n\n async isFileShared(nodeId: string): Promise<boolean> {\n try {\n const sharedId = await this.getNodeProperty(nodeId, 'qshare:sharedId');\n return sharedId !== '';\n } catch (error) {\n console.error(`${this.constructor.name} ${this.isFileShared.name}`, error);\n return null;\n }\n }\n\n private async getLockType(nodeId: string): Promise<string> {\n try {\n const lockType = await this.getNodeProperty(nodeId, 'cm:lockType');\n return lockType || '';\n } catch (error) {\n console.error(`${this.constructor.name} ${this.getLockType.name}`, error);\n return '';\n }\n }\n\n async isFileLockedWrite(nodeId: string): Promise<boolean> {\n try {\n return (await this.getLockType(nodeId)) === 'WRITE_LOCK';\n } catch (error) {\n console.error(`${this.constructor.name} ${this.isFileLockedWrite.name}`, error);\n return null;\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport {\n Site,\n SiteBodyCreate,\n SiteEntry,\n SiteMemberEntry,\n SiteMembershipBodyCreate,\n SiteMembershipBodyUpdate,\n SiteMembershipRequestBodyCreate,\n SiteMembershipRequestEntry\n} from '@alfresco/js-api';\n\nexport class SitesApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n static async initialize(userName: string, password?: string): Promise<SitesApi> {\n const classObj = new SitesApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async createSite(title: string, visibility?: string, description?: string, siteId?: string): Promise<SiteEntry | null> {\n const site = {\n title,\n visibility: visibility || Site.VisibilityEnum.PUBLIC,\n description: description,\n id: siteId || title\n } as SiteBodyCreate;\n\n try {\n return this.apiService.sites.createSite(site);\n } catch (error) {\n console.error(`SitesApi createSite : catch : `, error);\n return null;\n }\n }\n\n async getDocLibId(siteId: string): Promise<string> {\n try {\n return (await this.apiService.sites.listSiteContainers(siteId)).list.entries[0].entry.id;\n } catch (error) {\n console.error(`SitesApi getDocLibId : catch : `, error);\n return null;\n }\n }\n\n /**\n * Delete multiple sites/libraries.\n * @param siteIds The list of the site/library IDs to delete.\n * @param permanent Delete permanently, without moving to the trashcan? (default: true)\n */\n async deleteSites(siteIds: string[], permanent: boolean = true) {\n try {\n if (siteIds && siteIds.length > 0) {\n for (const siteId of siteIds) {\n await this.apiService.sites.deleteSite(siteId, { permanent });\n }\n }\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteSites.name}`, error);\n }\n }\n\n async updateSiteMember(siteId: string, userId: string, role: string): Promise<SiteMemberEntry> {\n const siteRole = {\n role: role\n } as SiteMembershipBodyUpdate;\n\n try {\n return this.apiService.sites.updateSiteMembership(siteId, userId, siteRole);\n } catch (error) {\n console.error(`SitesApi updateSiteMember : catch : `, error);\n return new SiteMemberEntry();\n }\n }\n\n async addSiteMember(siteId: string, userId: string, role: string): Promise<SiteMemberEntry> {\n const memberBody = {\n id: userId,\n role: role\n } as SiteMembershipBodyCreate;\n\n try {\n return this.apiService.sites.createSiteMembership(siteId, memberBody);\n } catch (error) {\n if (error.status === 409) {\n return this.updateSiteMember(siteId, userId, role);\n } else {\n console.error(`SitesApi addSiteMember : catch : `, error);\n return new SiteMemberEntry();\n }\n }\n }\n\n async createSiteMembershipRequestForPerson(personId: string, siteId: string): Promise<SiteMembershipRequestEntry> {\n const body = {\n id: siteId\n } as SiteMembershipRequestBodyCreate;\n\n try {\n return this.apiService.sites.createSiteMembershipRequestForPerson(personId, body);\n } catch (error) {\n console.error(`SitesApi createSiteMembershipRequestForPerson : catch : `, error);\n return null;\n }\n }\n\n async approveSiteMembershipRequest(siteId: string, inviteeId: string): Promise<SiteMemberEntry> {\n try {\n return this.apiService.sites.approveSiteMembershipRequest(siteId, inviteeId);\n } catch (error) {\n console.error(`SitesApi approveSiteMembershipRequest : catch : `, error);\n return null;\n }\n }\n\n async hasMembershipRequest(personId: string, siteId: string): Promise<boolean> {\n try {\n const requests = (await this.apiService.sites.listSiteMembershipRequestsForPerson(personId)).list.entries.map((e) => e.entry.id);\n return requests.includes(siteId);\n } catch (error) {\n console.error(`SitesApi hasMembershipRequest : catch : `, error);\n return null;\n }\n }\n\n async deleteSiteMember(siteId: string, userId: string) {\n try {\n return this.apiService.sites.deleteSiteMembership(siteId, userId);\n } catch (error) {\n console.error(`SitesApi deleteSiteMember : catch : `, error);\n }\n }\n\n async getSite(siteId: string): Promise<SiteEntry> {\n try {\n return this.apiService.sites.getSite(siteId);\n } catch (error) {\n console.error(`SitesApi getSite : catch : `, error);\n return null;\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport { Utils } from '../utils';\nimport { ResultSetPaging } from '@alfresco/js-api';\n\nexport class SearchPageApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n static async initialize(userName: string, password?: string): Promise<SearchPageApi> {\n const classObj = new SearchPageApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n private async querySearchFiles(username: string): Promise<ResultSetPaging> {\n const data = {\n query: {\n query: '*',\n language: 'afts'\n },\n filterQueries: [\n { query: `cm:modified:[NOW/DAY-30DAYS TO NOW/DAY+1DAY]` },\n { query: `cm:modifier:${username} OR cm:creator:${username}` },\n { query: `TYPE:\"content\" AND -TYPE:\"app:filelink\" AND -TYPE:\"fm:post\"` }\n ]\n };\n\n try {\n return this.apiService.search.search(data);\n } catch {\n return new ResultSetPaging();\n }\n }\n\n async getTotalItems(username: string): Promise<number> {\n return (await this.querySearchFiles(username)).list.pagination.totalItems;\n }\n\n async waitForApi(username: string, data: { expect: number }) {\n try {\n const searchFiles = async () => {\n const totalItems = await this.getTotalItems(username);\n if (totalItems !== data.expect) {\n return Promise.reject(totalItems);\n } else {\n return Promise.resolve(totalItems);\n }\n };\n\n return await Utils.retryCall(searchFiles);\n } catch {}\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\n\nexport class TrashcanApi {\n private apiService = new ApiClientFactory();\n\n static async initialize(userName: string, password?: string): Promise<TrashcanApi> {\n const classObj = new TrashcanApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n /**\n * Empties the trashcan. Uses multiple batches 1000 nodes each.\n */\n async emptyTrashcan(): Promise<void> {\n try {\n const nodes = await this.apiService.trashCan.listDeletedNodes({\n maxItems: 1000\n });\n\n if (nodes?.list?.entries?.length > 0) {\n const ids = nodes.list.entries.map((entries) => entries.entry.id);\n\n for (const nodeId of ids) {\n await this.apiService.trashCan.deleteDeletedNode(nodeId);\n }\n }\n } catch (error) {\n console.error('User Actions - emptyTrashcan failed : ', error);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { FindQuery } from '@alfresco/js-api';\nimport { Utils } from '../utils';\nimport { ApiClientFactory } from './api-client-factory';\n\nexport class QueriesApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<QueriesApi> {\n const classObj = new QueriesApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async waitForSites(searchTerm: string, data: { expect: number }): Promise<number> {\n try {\n const sites = async () => {\n const totalItems = await this.findSitesTotalItems(searchTerm);\n if (totalItems !== data.expect) {\n return Promise.reject(totalItems);\n } else {\n return Promise.resolve(totalItems);\n }\n };\n\n return await Utils.retryCall(sites);\n } catch (error) {\n console.error(`QueriesApi waitForSites : catch : `);\n console.error(`\\tExpected: ${data.expect} items, but found ${error}`);\n return null;\n }\n }\n\n private async findSitesTotalItems(searchTerm: string): Promise<number> {\n try {\n const opts: FindQuery = {\n term: searchTerm,\n fields: ['title']\n };\n\n const sites = await this.apiService.queries.findSites(searchTerm, opts);\n return sites.list.pagination.totalItems;\n } catch (error) {\n console.error(`QueriesApi findSitesTotalItems : catch :`, error);\n return null;\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport { CategoryEntry, CategoryBody, CategoryQuery, CategoryPaging, CategoryLinkBody } from '@alfresco/js-api';\n\nexport class CategoriesApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<CategoriesApi> {\n const classObj = new CategoriesApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async createCategory(categoryId: string, categoryBodyCreate: CategoryBody[], opts?: CategoryQuery): Promise<CategoryPaging | CategoryEntry> {\n try {\n return this.apiService.categoriesApi.createSubcategories(categoryId, categoryBodyCreate, opts);\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n async deleteCategory(categoryId: string): Promise<void> {\n if (categoryId === null) {\n console.error('categoryId is null, skipping deletion');\n return;\n }\n\n try {\n await this.apiService.categoriesApi.deleteCategory(categoryId);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteCategory.name}: ${error}`);\n }\n }\n\n async linkNodeToCategory(\n nodeId: string,\n categoryLinkBodyCreate: CategoryLinkBody[],\n opts?: CategoryQuery\n ): Promise<CategoryPaging | CategoryEntry> {\n try {\n return this.apiService.categoriesApi.linkNodeToCategory(nodeId, categoryLinkBodyCreate, opts);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.linkNodeToCategory.name}: ${error}`);\n return null;\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { TagBody, TagEntry, TagPaging } from '@alfresco/js-api';\nimport { ApiClientFactory } from './api-client-factory';\n\nexport class TagsApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<TagsApi> {\n const classObj = new TagsApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async createTags(tags: TagBody[]): Promise<TagEntry | TagPaging> {\n try {\n return this.apiService.tagsApi.createTags(tags);\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n async assignTagToNode(nodeId: string, tag: TagBody): Promise<TagEntry> {\n try {\n return this.apiService.tagsApi.assignTagToNode(nodeId, tag);\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n async deleteTags(tagIds: string[]): Promise<void> {\n try {\n for (const tagId of tagIds) {\n await this.apiService.tagsApi.deleteTag(tagId);\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n async listTagsForNode(nodeId: string): Promise<TagPaging> {\n try {\n return this.apiService.tagsApi.listTagsForNode(nodeId);\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n async listTags(params?: { tag?: string; matching?: boolean }): Promise<TagPaging> {\n try {\n return this.apiService.tagsApi.listTags(params);\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n async deleteTagsByTagName(tagName: string): Promise<void> {\n try {\n const response = await this.listTags({ tag: tagName, matching: true });\n const tagIds = response.list.entries.map((entry) => entry.entry.id);\n await this.deleteTags(tagIds);\n } catch (error) {\n console.error(error);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './rules-api';\nexport * from './api-client-factory';\nexport * from './file-actions';\nexport * from './shared-links-api';\nexport * from './favorites-api';\nexport * from './people-api-models';\nexport * from './nodes-api';\nexport * from './sites-api';\nexport * from './node-content-tree';\nexport * from './search-api';\nexport * from './trashcan-api';\nexport * from './queries-api';\nexport * from './categories-api';\nexport * from './tags-api';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst LOWER_CASE_ALPHA = 'helloworld';\n\nfunction generateRandomCharset(length: number = 8, charSet: string): string {\n let text = '';\n\n for (let i = 0; i < length; i++) {\n text += charSet.charAt(Math.floor(Math.random() * charSet.length));\n }\n\n return text;\n}\n\nexport class UserModel {\n firstName?: string = generateRandomCharset(7, LOWER_CASE_ALPHA);\n lastName?: string = generateRandomCharset(7, LOWER_CASE_ALPHA);\n password?: string = generateRandomCharset(7, LOWER_CASE_ALPHA);\n email?: string;\n username?: string;\n idIdentityService?: string;\n type = 'enterprise';\n tenantId?: number;\n company?: string;\n id: number;\n\n constructor(details: any = {}) {\n const EMAIL_DOMAIN = 'alfresco';\n this.firstName = details.firstName ?? this.firstName;\n this.lastName = details.lastName ?? this.lastName;\n\n const USER_IDENTIFY = `${this.firstName}${this.lastName}.${generateRandomCharset(7, LOWER_CASE_ALPHA)}`;\n\n this.password = details.password ?? this.password;\n this.email = details.email ?? `${USER_IDENTIFY}@${EMAIL_DOMAIN}.com`;\n this.username = details.username ?? USER_IDENTIFY;\n this.idIdentityService = details.idIdentityService ?? this.idIdentityService;\n this.type = details.type ?? this.type;\n this.tenantId = details.tenantId ?? this.tenantId;\n this.company = details.company ?? this.company;\n this.id = details.id ?? this.id;\n }\n\n get fullName(): string {\n return `${this.firstName ?? ''} ${this.lastName ?? ''}`;\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { users } from '../base-config';\n\nexport interface CustomConfig {\n users: Array<keyof typeof users>;\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './user-model';\nexport * from './custom-config';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { test as base } from '@playwright/test';\nimport {\n FavoritesLibrariesPage,\n LoginPage,\n MyLibrariesPage,\n NodesPage,\n PersonalFilesPage,\n RecentFilesPage,\n SharedPage,\n SearchPage,\n FavoritesPage,\n TrashPage\n} from '../page-objects';\nimport { FileActionsApi, SharedLinksApi, FavoritesPageApi, NodesApi, SitesApi } from '../api';\nimport { users } from '../base-config';\n\ninterface Pages {\n personalFiles: PersonalFilesPage;\n nodesPage: NodesPage;\n myLibrariesPage: MyLibrariesPage;\n recentFilesPage: RecentFilesPage;\n sharedPage: SharedPage;\n searchPage: SearchPage;\n favoritePage: FavoritesPage;\n favoritesLibrariesPage: FavoritesLibrariesPage;\n trashPage: TrashPage;\n loginPage: LoginPage;\n favoriteLibrariesPage: FavoritesLibrariesPage;\n}\n\ninterface Api {\n fileAction: FileActionsApi;\n shareAction: SharedLinksApi;\n favoritesPageAction: FavoritesPageApi;\n nodesApiAction: NodesApi;\n sitesApiAction: SitesApi;\n}\n\nexport const test = base.extend<Pages & Api>({\n personalFiles: async ({ page }, use) => {\n await use(new PersonalFilesPage(page));\n },\n nodesPage: async ({ page }, use) => {\n await use(new NodesPage(page));\n },\n recentFilesPage: async ({ page }, use) => {\n await use(new RecentFilesPage(page));\n },\n sharedPage: async ({ page }, use) => {\n await use(new SharedPage(page));\n },\n searchPage: async ({ page }, use) => {\n await use(new SearchPage(page));\n },\n favoritePage: async ({ page }, use) => {\n await use(new FavoritesPage(page));\n },\n favoritesLibrariesPage: async ({ page }, use) => {\n await use(new FavoritesLibrariesPage(page));\n },\n trashPage: async ({ page }, use) => {\n await use(new TrashPage(page));\n },\n loginPage: async ({ page }, use) => {\n await use(new LoginPage(page));\n },\n // eslint-disable-next-line no-empty-pattern\n fileAction: async ({}, use) => {\n await use(await FileActionsApi.initialize(users.hruser.username));\n },\n // eslint-disable-next-line no-empty-pattern\n shareAction: async ({}, use) => {\n await use(await SharedLinksApi.initialize(users.hruser.username));\n },\n // eslint-disable-next-line no-empty-pattern\n favoritesPageAction: async ({}, use) => {\n await use(await FavoritesPageApi.initialize(users.hruser.username));\n },\n // eslint-disable-next-line no-empty-pattern\n nodesApiAction: async ({}, use) => {\n await use(await NodesApi.initialize(users.admin.username, users.admin.password));\n },\n // eslint-disable-next-line no-empty-pattern\n sitesApiAction: async ({}, use) => {\n await use(await SitesApi.initialize(users.hruser.username));\n },\n myLibrariesPage: async ({ page }, use) => {\n await use(new MyLibrariesPage(page));\n },\n favoriteLibrariesPage: async ({ page }, use) => {\n await use(new FavoritesLibrariesPage(page));\n }\n});\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './page-initialization';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Utils } from '../../utils';\n\nexport const random = Utils.random();\n\n// ----- files -----\n\nconst consumerContextMenu = ['Share', 'Download', 'View', 'Favorite', 'Copy', 'Manage Versions'];\nconst consumerFavContextMenu = ['Share', 'Download', 'View', 'Remove Favorite', 'Copy', 'Manage Versions'];\nconst consumerSharedContextMenu = ['Shared Link Settings', 'Download', 'View', 'Favorite', 'Copy', 'Manage Versions'];\nconst consumerSharedFavContextMenu = ['Shared Link Settings', 'Download', 'View', 'Remove Favorite', 'Copy', 'Manage Versions'];\n\nconst consumerToolbarPrimary = ['Share', 'Download', 'View', 'View Details', 'More Actions'];\nconst consumerSharedToolbarPrimary = ['Shared Link Settings', 'Download', 'View', 'View Details', 'More Actions'];\n\nconst searchConsumerToolbarPrimary = ['Share', 'Download', 'View', 'View Details', 'More Actions'];\nconst searchConsumerSharedToolbarPrimary = ['Shared Link Settings', 'Download', 'View', 'View Details', 'More Actions'];\n\nconst consumerToolbarMore = ['Favorite', 'Copy', 'Manage Versions'];\nconst consumerFavToolbarMore = ['Remove Favorite', 'Copy', 'Manage Versions'];\n\nexport const collaboratorToolbarPrimary = ['Shared Link Settings', 'Download', 'View', 'View Details', 'More Actions'];\nexport const collaboratorEditRowToolbarMore = [\n 'Edit Offline',\n 'Upload New Version',\n 'Remove Favorite',\n 'Copy',\n 'Manage Versions',\n 'Edit Aspects',\n 'Permissions'\n];\nexport const favoritesCollaboratorToolbarMore = ['Upload New Version', 'Remove Favorite', 'Move', 'Copy', 'Delete', 'Manage Versions'];\nexport const collaboratorSharedToolbarPrimary = [\n 'Activate full-screen mode',\n 'Shared Link Settings',\n 'Download',\n 'Print',\n 'View Details',\n 'More Actions'\n];\nexport const collaboratorDocToolbarMore = [\n 'Edit in Microsoft Office™',\n 'Edit Offline',\n 'Upload New Version',\n 'Remove Favorite',\n 'Copy',\n 'Manage Versions',\n 'Edit Aspects',\n 'Permissions'\n];\nexport const collaboratorLockCurrentUserToolbarMore = ['Cancel Editing', 'Upload New Version', 'Remove Favorite', 'Copy', 'Manage Versions'];\nexport const collaboratorLockOtherUserToolbarMore = ['Cancel Editing', 'Remove Favorite', 'Move', 'Copy', 'Delete', 'Manage Versions', 'Permissions'];\nexport const collaboratorLockOtherUserSearchToolbarMore = ['Cancel Editing', 'Remove Favorite', 'Copy', 'Manage Versions', 'Permissions'];\n\n// ---- VIEWER ----\n\nconst consumerViewerSharedToolbarPrimary = ['Activate full-screen mode', 'Shared Link Settings', 'Download', 'Print', 'View Details', 'More Actions'];\nconst consumerViewerToolbarPrimary = ['Activate full-screen mode', 'Share', 'Download', 'Print', 'View Details', 'More Actions'];\nconst consumerViewerFavToolbarMore = ['Remove Favorite', 'Copy', 'Manage Versions'];\nconst consumerViewerToolbarMore = ['Favorite', 'Copy', 'Manage Versions'];\n\n// ---- FAVORITES workarounds ----\n\nconst favoritesConsumerToolbarMore = ['Upload New Version', 'Remove Favorite', 'Move', 'Copy', 'Delete', 'Manage Versions'];\n\nconst favoritesConsumerContextMenu = [\n 'Share',\n 'Download',\n 'View',\n 'Upload New Version',\n 'Remove Favorite',\n 'Move',\n 'Copy',\n 'Delete',\n 'Manage Versions'\n];\n\nconst favoritesConsumerSharedContextMenu = [\n 'Shared Link Settings',\n 'Download',\n 'View',\n 'Upload New Version',\n 'Remove Favorite',\n 'Move',\n 'Copy',\n 'Delete',\n 'Manage Versions'\n];\n\n// ---- SHARED FILES workaround ----\n\nconst sharedConsumerToolbarMore = ['Upload New Version', 'Favorite', 'Copy', 'Manage Versions'];\nconst sharedConsumerLockedToolbarMore = ['Cancel Editing', 'Upload New Version', 'Favorite', 'Copy', 'Manage Versions'];\nconst sharedConsumerFavToolbarMore = ['Upload New Version', 'Remove Favorite', 'Copy', 'Manage Versions'];\nconst sharedConsumerFavLockedToolbarMore = ['Cancel Editing', 'Upload New Version', 'Remove Favorite', 'Copy', 'Manage Versions'];\nconst sharedConsumerContextMenu = ['Shared Link Settings', 'Download', 'View', 'Upload New Version', 'Favorite', 'Copy', 'Manage Versions'];\nconst sharedConsumerLockedContextMenu = [\n 'Shared Link Settings',\n 'Download',\n 'View',\n 'Cancel Editing',\n 'Upload New Version',\n 'Favorite',\n 'Copy',\n 'Manage Versions'\n];\n\nconst sharedConsumerFavContextMenu = ['Shared Link Settings', 'Download', 'View', 'Upload New Version', 'Remove Favorite', 'Copy', 'Manage Versions'];\n\nconst sharedConsumerFavLockedContextMenu = [\n 'Shared Link Settings',\n 'Download',\n 'View',\n 'Cancel Editing',\n 'Upload New Version',\n 'Remove Favorite',\n 'Copy',\n 'Manage Versions'\n];\n\nexport const fileDocx = {\n name: `file-${random}-docx.docx`,\n description: 'file not shared, not fav, office, not locked',\n\n contextMenu: consumerContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const fileDocxFav = {\n name: `file-${random}-docx-fav.docx`,\n description: 'file not shared, fav, office, not locked',\n\n contextMenu: consumerFavContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerContextMenu,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const file = {\n name: `file-${random}.txt`,\n description: 'file not shared, not fav, not office, not locked',\n\n contextMenu: consumerContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const fileFav = {\n name: `file-${random}-fav.txt`,\n description: 'file not shared, fav, not office, not locked',\n\n contextMenu: consumerFavContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerContextMenu,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const fileDocxShared = {\n name: `file-${random}-docx-shared.docx`,\n description: 'file shared, not fav, office, not locked',\n\n contextMenu: consumerSharedContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n sharedToolbarMore: sharedConsumerToolbarMore,\n sharedContextMenu: sharedConsumerContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileDocxSharedFav = {\n name: `file-${random}-docx-shared-fav.docx`,\n description: 'file shared, fav, office, not locked',\n\n contextMenu: consumerSharedFavContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerSharedContextMenu,\n\n sharedToolbarMore: sharedConsumerFavToolbarMore,\n sharedContextMenu: sharedConsumerFavContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileShared = {\n name: `file-${random}-shared.txt`,\n description: 'file shared, not fav, not office, not locked',\n\n contextMenu: consumerSharedContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n sharedToolbarMore: sharedConsumerToolbarMore,\n sharedContextMenu: sharedConsumerContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileSharedFav = {\n name: `file-${random}-shared-fav.txt`,\n description: 'file shared, fav, not office, not locked',\n\n contextMenu: consumerSharedFavContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerSharedContextMenu,\n\n sharedToolbarMore: sharedConsumerFavToolbarMore,\n sharedContextMenu: sharedConsumerFavContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileLocked = {\n name: `file-${random}-locked.txt`,\n description: 'file not shared, not fav, not office, locked',\n\n contextMenu: consumerContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const fileFavLocked = {\n name: `file-${random}-fav-locked.txt`,\n description: 'file not shared, fav, not office, locked',\n\n contextMenu: consumerFavContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerContextMenu,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const fileSharedLocked = {\n name: `file-${random}-shared-locked.txt`,\n description: 'file shared, not fav, not office, locked',\n\n contextMenu: consumerSharedContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n sharedToolbarMore: sharedConsumerLockedToolbarMore,\n sharedContextMenu: sharedConsumerLockedContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileSharedFavLocked = {\n name: `file-${random}-shared-fav-locked.txt`,\n description: 'file shared, fav, not office, locked',\n\n contextMenu: consumerSharedFavContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerSharedContextMenu,\n\n sharedToolbarMore: sharedConsumerFavLockedToolbarMore,\n sharedContextMenu: sharedConsumerFavLockedContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileGranularPermission = `file-${random}-granular.txt`;\nexport const fileLockedByUser = `file-${random}-my-locked.txt`;\n\n// ---- folders ---\n\nconst consumerFolderContextMenu = ['Download', 'Favorite', 'Copy'];\nconst consumerFolderToolbarPrimary = ['Download', 'View Details', 'More Actions'];\nconst consumerFolderToolbarMore = ['Favorite', 'Copy'];\nconst searchConsumerFolderToolbarPrimary = ['Download', 'View Details', 'More Actions'];\nconst consumerFolderFavContextMenu = ['Download', 'Remove Favorite', 'Copy'];\nconst consumerFolderFavToolbarMore = ['Remove Favorite', 'Copy'];\n\n// ---- FAVORITES workarounds ----\n\nconst favoritesConsumerFolderContextMenu = ['Download', 'Edit', 'Remove Favorite', 'Move', 'Copy', 'Delete'];\n\nconst favoritesConsumerFolderToolbarMore = ['Edit', 'Remove Favorite', 'Move', 'Copy', 'Delete'];\n\nexport const folder = {\n name: `folder-${random}`,\n description: 'folder not favorite',\n contextMenu: consumerFolderContextMenu,\n toolbarPrimary: consumerFolderToolbarPrimary,\n toolbarMore: consumerFolderToolbarMore,\n\n searchToolbarPrimary: searchConsumerFolderToolbarPrimary\n};\n\nexport const folderFav = {\n name: `folder-fav-${random}`,\n description: 'folder favorite',\n contextMenu: consumerFolderFavContextMenu,\n toolbarPrimary: consumerFolderToolbarPrimary,\n toolbarMore: consumerFolderFavToolbarMore,\n\n favoritesContextMenu: favoritesConsumerFolderContextMenu,\n favoritesToolbarMore: favoritesConsumerFolderToolbarMore,\n\n searchToolbarPrimary: searchConsumerFolderToolbarPrimary\n};\n\nexport const folderFav2 = {\n name: `folder-fav-2-${random}`,\n description: 'folder 2 favorite'\n};\n\n// ---- multiple selection ---\n\nconst multipleSelContextMenu = ['Download', 'Favorite', 'Copy'];\nconst multipleSelAllFavContextMenu = ['Download', 'Remove Favorite', 'Copy'];\nconst multipleSelToolbarPrimary = ['Download', 'View Details', 'More Actions'];\nconst multipleSelToolbarMore = ['Favorite', 'Copy'];\nconst multipleSelAllFavToolbarMore = ['Remove Favorite', 'Copy'];\nconst searchMultipleSelToolbarPrimary = ['Download', 'View Details', 'More Actions'];\n\n// ---- FAVORITES workarounds ----\n\nconst favoritesMultipleSelContextMenu = ['Download', 'Favorite', 'Move', 'Copy', 'Delete'];\nconst favoritesMultipleSelToolbarMore = ['Favorite', 'Move', 'Copy', 'Delete'];\nconst favoritesMultipleSelAllFavContextMenu = ['Download', 'Remove Favorite', 'Move', 'Copy', 'Delete'];\nconst favoritesMultipleSelAllFavToolbarMore = ['Remove Favorite', 'Move', 'Copy', 'Delete'];\n\nexport const multipleSel = {\n contextMenu: multipleSelContextMenu,\n toolbarPrimary: multipleSelToolbarPrimary,\n toolbarMore: multipleSelToolbarMore,\n\n favoritesContextMenu: favoritesMultipleSelContextMenu,\n favoritesToolbarMore: favoritesMultipleSelToolbarMore,\n\n searchToolbarPrimary: searchMultipleSelToolbarPrimary\n};\n\nexport const multipleSelAllFav = {\n contextMenu: multipleSelAllFavContextMenu,\n toolbarPrimary: multipleSelToolbarPrimary,\n toolbarMore: multipleSelAllFavToolbarMore,\n\n favoritesContextMenu: favoritesMultipleSelAllFavContextMenu,\n favoritesToolbarMore: favoritesMultipleSelAllFavToolbarMore,\n\n searchToolbarPrimary: searchMultipleSelToolbarPrimary\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Utils } from '../../utils';\n\nconst random = Utils.random();\nconst multipleSelToolbarPrimary = ['Download', 'View Details', 'More Actions'];\n\n// ---- folders ---\n\nconst folderContextMenu = ['Download', 'Edit', 'Favorite', 'Move', 'Copy', 'Delete', 'Edit Aspects', 'Permissions', 'Manage Rules'];\nconst folderFavContextMenu = ['Download', 'Edit', 'Remove Favorite', 'Move', 'Copy', 'Delete', 'Edit Aspects', 'Permissions', 'Manage Rules'];\nconst folderToolbarMore = ['Edit', 'Favorite', 'Move', 'Copy', 'Delete', 'Edit Aspects', 'Permissions', 'Manage Rules'];\nconst folderFavToolbarMore = ['Edit', 'Remove Favorite', 'Move', 'Copy', 'Delete', 'Edit Aspects', 'Permissions', 'Manage Rules'];\n\nexport const folderFile = {\n name: `folderActions-${random}`,\n description: 'folder not favorite',\n contextMenu: folderContextMenu,\n toolbarPrimary: multipleSelToolbarPrimary,\n toolbarMore: folderToolbarMore\n};\n\nexport const folderFavFile = {\n name: `folderActions-fav-${random}`,\n contextMenu: folderFavContextMenu,\n toolbarPrimary: multipleSelToolbarPrimary,\n toolbarMore: folderFavToolbarMore\n};\n\n// ---- multiple selection ---\n\nconst multipleSelContextMenu = ['Download', 'Favorite', 'Move', 'Copy', 'Delete'];\nconst multipleSelToolbarMore = ['Favorite', 'Move', 'Copy', 'Delete'];\n\nexport const multipleSelFile = {\n contextMenu: multipleSelContextMenu,\n toolbarPrimary: multipleSelToolbarPrimary,\n toolbarMore: multipleSelToolbarMore\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './test-data-permissions';\nexport * from './test-data-files-folders';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { resolve } from 'path';\n\nexport const TEST_FILES = {\n DOCX: {\n path: resolve(__dirname, 'file-docx.docx'),\n name: 'file-docx',\n data: 'Lorem ipsum dolor sit amet'\n },\n DOCX2: {\n path: resolve(__dirname, 'file2-docx.docx'),\n name: 'file2-docx',\n data: 'Lorem ipsum dolor sit amet'\n },\n PDF: {\n path: resolve(__dirname, 'file-pdf.pdf'),\n name: 'file-pdf',\n extension: 'pdf',\n data: 'Lorem ipsum dolor sit amet'\n },\n FILE_UNSUPPORTED: {\n path: resolve(__dirname, 'file_unsupported.3DS'),\n name: 'file_unsupported.3DS',\n data: 'Lorem ipsum dolor sit amet'\n },\n PDF_PROTECTED: {\n path: resolve(__dirname, 'file-pdf-protected.pdf'),\n name: 'file-pdf-protected',\n data: 'Lorem ipsum dolor sit amet',\n password: '0000'\n },\n XLSX: {\n path: resolve(__dirname, 'file-xlsx.xlsx'),\n name: 'file-xlsx',\n data: 'Lorem ipsum dolor sit amet'\n },\n XLSX2: {\n path: resolve(__dirname, 'file2-xlsx.xlsx'),\n name: 'file2-xlsx',\n data: 'Lorem ipsum dolor sit amet'\n },\n JPG_FILE: {\n path: resolve(__dirname, 'file-jpg.jpg'),\n name: 'file-jpg'\n },\n JPG_FILE_1MB: {\n path: resolve(__dirname, 'file-jpg-1mb.jpg'),\n name: 'file-jpg-1mb'\n },\n PNG_FILE: {\n path: resolve(__dirname, 'file-png.png'),\n name: 'file-png'\n },\n GIF_FILE: {\n path: resolve(__dirname, 'file-gif.gif'),\n name: 'file-gif'\n },\n PPTX_FILE: {\n path: resolve(__dirname, 'file-pptx.pptx'),\n name: 'file-pptx'\n },\n MP3_FILE: {\n path: resolve(__dirname, 'file-mp3.mp3'),\n name: 'file-mp3'\n },\n MP4_FILE: {\n path: resolve(__dirname, 'file-mp4.mp4'),\n name: 'file-mp4'\n },\n WEBM_FILE: {\n path: resolve(__dirname, 'file-webm.webm'),\n name: 'file-webm'\n },\n PDF_PROTECTED2: {\n path: resolve(__dirname, 'protected.pdf'),\n name: 'file-protected',\n data: 'Lorem ipsum dolor sit amet',\n password: '0000'\n }\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './test-data';\nexport * from './test-files';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './api';\nexport * from './base-config';\nexport * from './models';\nexport * from './page-objects';\nexport * from './fixtures';\nexport * from './utils';\nexport * from './resources';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["env","fs","SitesApi","NodesApi","QueriesApi","TrashcanApi","CategoriesApi","TagsApi","crypto","base","random","multipleSelContextMenu","multipleSelToolbarPrimary","multipleSelToolbarMore"],"mappings":"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"}
1
+ {"version":3,"file":"alfresco-aca-playwright-shared.mjs","sources":["../../../../projects/aca-playwright-shared/src/utils/paths.ts","../../../../projects/aca-playwright-shared/src/utils/timeouts.ts","../../../../projects/aca-playwright-shared/src/utils/exclude-tests.ts","../../../../projects/aca-playwright-shared/src/utils/state-helper.ts","../../../../projects/aca-playwright-shared/src/utils/utils.ts","../../../../projects/aca-playwright-shared/src/utils/library-errors.ts","../../../../projects/aca-playwright-shared/src/utils/config.ts","../../../../projects/aca-playwright-shared/src/utils/error-strings.ts","../../../../projects/aca-playwright-shared/src/utils/api.ts","../../../../projects/aca-playwright-shared/src/utils/logger.ts","../../../../projects/aca-playwright-shared/src/utils/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/playwright-base.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/base.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/snackBar/snack-bar.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dataTable/mat-menu.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/pagination.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dataTable/data-table.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dataTable/toolbar.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dataTable/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/adf-folder-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/adf-library-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/password-overlay-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/viewer-overlay-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/content-node-selector-dialog.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/create-from-template-dialog-component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/adf-confirm-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/datetime-picker/datetime-picker.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/share-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/upload-new-version-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/manage-versions-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/upload-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/delete-trash-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/link-rules.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/edit-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/folder-information-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/dialogs/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/manageRules/manage-rules-dialog.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/manageRules/manage-rules.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/manageRules/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/spinner.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/actions-dropdown.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/conditions.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/adf-info-drawer.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/aca-header.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/viewer.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-input.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-overlay.components.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-sorting-picker.components.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-categories.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-date.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-location.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-logic.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-properties.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/search/search-filters/search-filters-tags.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/breadcrumb/breadcrumb.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/sidenav.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/error.component.ts","../../../../projects/aca-playwright-shared/src/page-objects/components/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/base.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/login.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/nodes.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/personal-files.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/my-libraries.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/recent-files.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/shared.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/search.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/favorites.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/trash.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/favorites-libraries.page.ts","../../../../projects/aca-playwright-shared/src/page-objects/pages/index.ts","../../../../projects/aca-playwright-shared/src/page-objects/index.ts","../../../../projects/aca-playwright-shared/src/base-config/global-variables.ts","../../../../projects/aca-playwright-shared/src/base-config/global.setup.ts","../../../../projects/aca-playwright-shared/src/base-config/report-portal.config.ts","../../../../projects/aca-playwright-shared/src/base-config/playwright.config.ts","../../../../projects/aca-playwright-shared/src/base-config/index.ts","../../../../projects/aca-playwright-shared/src/api/people-api-models.ts","../../../../projects/aca-playwright-shared/src/api/api-client-factory.ts","../../../../projects/aca-playwright-shared/src/api/rules-api.ts","../../../../projects/aca-playwright-shared/src/api/file-actions.ts","../../../../projects/aca-playwright-shared/src/api/shared-links-api.ts","../../../../projects/aca-playwright-shared/src/api/favorites-api.ts","../../../../projects/aca-playwright-shared/src/api/node-content-tree.ts","../../../../projects/aca-playwright-shared/src/api/nodes-api.ts","../../../../projects/aca-playwright-shared/src/api/sites-api.ts","../../../../projects/aca-playwright-shared/src/api/search-api.ts","../../../../projects/aca-playwright-shared/src/api/trashcan-api.ts","../../../../projects/aca-playwright-shared/src/api/queries-api.ts","../../../../projects/aca-playwright-shared/src/api/categories-api.ts","../../../../projects/aca-playwright-shared/src/api/tags-api.ts","../../../../projects/aca-playwright-shared/src/api/index.ts","../../../../projects/aca-playwright-shared/src/models/user-model.ts","../../../../projects/aca-playwright-shared/src/models/custom-config.ts","../../../../projects/aca-playwright-shared/src/models/index.ts","../../../../projects/aca-playwright-shared/src/fixtures/page-initialization.ts","../../../../projects/aca-playwright-shared/src/fixtures/index.ts","../../../../projects/aca-playwright-shared/src/resources/test-data/test-data-permissions.ts","../../../../projects/aca-playwright-shared/src/resources/test-data/test-data-files-folders.ts","../../../../projects/aca-playwright-shared/src/resources/test-data/index.ts","../../../../projects/aca-playwright-shared/src/resources/test-files/index.ts","../../../../projects/aca-playwright-shared/src/resources/index.ts","../../../../projects/aca-playwright-shared/src/public-api.ts","../../../../projects/aca-playwright-shared/src/alfresco-aca-playwright-shared.ts"],"sourcesContent":["/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst rootFolder = 'e2e-output';\n\nexport const paths = {\n rootFolder,\n allData: `${rootFolder}/playwright-data`,\n files: `${rootFolder}/playwright-data/downloads`,\n report: `${rootFolder}/playwright-data/report`,\n userStates: `${rootFolder}/playwright-data/user-states`\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const timeouts = {\n typingDelay: 50,\n tiny: 500,\n short: 1000,\n normal: 2 * 1000,\n medium: 5 * 1000,\n big: 7.5 * 1000,\n large: 10 * 1000,\n extraLarge: 20 * 1000,\n fortySeconds: 40 * 1000,\n sixtySeconds: 60 * 1000,\n globalTest: 85 * 1000,\n extendedTest: 150 * 1000,\n extendedLongTest: 200 * 1000,\n webServer: 240 * 1000,\n globalSpec: 90 * 10 * 1000\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const getExcludedTestsRegExpArray = (excludedJson: any, projectName: string) => {\n const prefix = `[ 🎭 Playwright Excludes - ${projectName} ]`;\n const objectKeys = Object.keys(excludedJson);\n\n if (!objectKeys.length) {\n console.info(`${prefix} ✅ No excluded tests 🎉 `);\n } else {\n console.warn(`${prefix} ❌ Tests excluded because of 🐛 : ${objectKeys}`);\n }\n\n return objectKeys.map((key) => new RegExp(key));\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { resolve } from 'path';\nimport { paths } from '.';\nimport { users } from '../base-config';\n\nexport function getUserState(user: UserType) {\n return resolve(process.cwd(), `${paths.userStates}/${user}UserState.json`);\n}\n\ntype UserType = keyof typeof users;\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst crypto = require('crypto');\nimport * as path from 'path';\nimport { LoginPage, MyLibrariesPage, PersonalFilesPage, FavoritesLibrariesPage, SearchPage, SharedPage, TrashPage } from '../page-objects';\nimport { format, subDays, subMonths, endOfMonth } from 'date-fns';\nimport StreamZip from 'node-stream-zip';\nimport { NodesApi, SitesApi, TrashcanApi } from '../api';\n\nexport class Utils {\n static readonly string257Long = 'x'.repeat(257);\n static readonly string513Long = 'x'.repeat(513);\n\n static random(): string {\n return crypto.getRandomValues(new Uint32Array(1))[0].toString(36).substring(0, 5).toLowerCase();\n }\n\n static retryCall(fn: () => Promise<any>, retry: number = 30, delay: number = 1500): Promise<any> {\n const pause = (duration: number) => new Promise((res) => setTimeout(res, duration));\n\n const run = (retries: number): Promise<any> => {\n return fn().catch((err) => (retries > 1 ? pause(delay).then(() => run(retries - 1)) : Promise.reject(err)));\n };\n\n return run(retry);\n }\n\n static formatDate(date: string): string {\n return new Date(date).toLocaleDateString('en-US');\n }\n\n /**\n * Method used to login user with navigation. Also waits for the page to load after login\n *\n * @param loginPage page context passed from the test\n * @param username username string\n * @param password password string\n * @param errorMessage error message string if the login fails\n *\n */\n static async tryLoginUser(loginPage: LoginPage, username: string, password: string, errorMessage = 'Error '): Promise<void> {\n try {\n await loginPage.loginUser({ username, password }, { withNavigation: true, waitForLoading: true });\n } catch (error) {\n console.error(`${errorMessage}: ${error}`);\n }\n }\n\n /**\n * Method used to delete nodes and sites from user's account\n *\n * @param nodesApi nodesApi initialized with user credentials passed from the test\n * @param trashcanApi trashcanApi initialized with user credentials passed from the test\n * @param errorMessage error message string if the deleting sites/nodes fails\n * @param sitesApi sitesApi initialized with user credentials passed from the test\n * @param sitesToDelete array of sites' ids\n *\n */\n static async deleteNodesSitesEmptyTrashcan(\n nodesApi?: NodesApi,\n trashcanApi?: TrashcanApi,\n errorMessage = 'Error ',\n sitesApi?: SitesApi,\n sitesToDelete?: string[]\n ): Promise<void> {\n try {\n await nodesApi?.deleteCurrentUserNodes();\n await trashcanApi?.emptyTrashcan();\n if (sitesToDelete?.length > 0) {\n await sitesApi?.deleteSites(sitesToDelete);\n }\n } catch (error) {\n console.error(`${errorMessage}: ${error}`);\n }\n }\n\n static async uploadFileNewVersion(personalFilesPage: PersonalFilesPage, fileFromOS: string, fileType: string): Promise<void> {\n const fileInput = await personalFilesPage.page.$('#app-upload-file-version');\n await fileInput.setInputFiles(path.join(__dirname, `../resources/test-files/${fileFromOS}.${fileType}`));\n }\n\n static async reloadPageIfRowNotVisible(\n pageContext: PersonalFilesPage | MyLibrariesPage | FavoritesLibrariesPage | SearchPage | SharedPage,\n nodeName: string,\n errorMessage = 'reloadPageIfRowNotVisible Error '\n ): Promise<void> {\n try {\n if (!(await pageContext.dataTable.getRowByName(nodeName).isVisible())) {\n await pageContext.page.reload({ waitUntil: 'load' });\n }\n } catch (error) {\n console.error(`${errorMessage}: ${error}`);\n }\n }\n\n static async reloadPageIfDatatableEmpty(\n pageContext: PersonalFilesPage | MyLibrariesPage | FavoritesLibrariesPage | SearchPage | SharedPage | TrashPage,\n errorMessage = 'reloadPageIfDatatableEmpty Error '\n ): Promise<void> {\n try {\n if ((await pageContext.dataTable.getEmptyFolderLocator.isVisible()) || (await pageContext.dataTable.emptyListTitle.isVisible())) {\n await pageContext.page.reload({ waitUntil: 'load' });\n }\n } catch (error) {\n console.error(`${errorMessage}: ${error}`);\n }\n }\n\n static getCurrentAndPreviousDay(currentDate = new Date()): { currentDate: string; previousDate: string } {\n let formattedDate: string;\n let formattedDate2: string;\n\n const formatDate = (date: Date): string => {\n return format(date, 'dd-MMM-yy').toUpperCase();\n };\n\n if (currentDate.getDate() === 1) {\n const lastDayOfPreviousMonth: Date = endOfMonth(subMonths(currentDate, 1));\n formattedDate = formatDate(lastDayOfPreviousMonth);\n formattedDate2 = formatDate(subDays(lastDayOfPreviousMonth, 1));\n } else {\n formattedDate = formatDate(currentDate);\n formattedDate2 = formatDate(subDays(currentDate, 1));\n }\n\n return { currentDate: formattedDate, previousDate: formattedDate2 };\n }\n\n static async verifyZipFileContent(filePath: string, fileOrFolderName: string[]): Promise<boolean> {\n const zip = new StreamZip({\n file: filePath,\n storeEntries: true\n });\n\n return new Promise<boolean>((resolve) => {\n zip.on('ready', () => {\n const entries = zip.entries();\n const found = this.isFileOrFolderInEntries(entries, fileOrFolderName);\n zip.close();\n resolve(found);\n });\n });\n }\n\n private static isFileOrFolderInEntries(entries: { [name: string]: StreamZip.ZipEntry }, fileOrFolderName: string[]): boolean {\n return fileOrFolderName.some((name) => {\n return Object.keys(entries).some((entry) => entry.includes(name));\n });\n }\n\n /**\n * Method used trim all elements of an array from all spaces characters\n *\n * @param arr array needed to be trimmed\n *\n */\n static trimArrayElements(arr: string[]): string[] {\n return arr.map((element) => element.trim());\n }\n\n /**\n * Waits for a specific API response.\n *\n * @param page - The Playwright page object.\n * @param urlSubstring - The substring to look for in the URL.\n * @param statusCode - The expected status code of the response.\n */\n static async waitForApiResponse(\n contentPage: LoginPage | MyLibrariesPage | PersonalFilesPage | FavoritesLibrariesPage | SearchPage | SharedPage | TrashPage,\n urlSubstring: string,\n statusCode: number\n ) {\n await contentPage.page.waitForResponse((response) => response.url().includes(urlSubstring) && response.status() === statusCode);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const libraryErrors = {\n libraryIdIsNotAvailable: \"This Library ID isn't available. Try a different Library ID.\",\n libraryIdIsAlreadyUsed: 'This Library ID is already used. Check the trashcan.',\n useNumbersAndLettersOnly: 'Use numbers and letters only'\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const APP_ROUTES = {\n FAVORITES: '/favorites',\n MY_LIBRARIES: '/libraries',\n FAVORITE_LIBRARIES: '/favorite/libraries',\n LOGIN: '/login',\n LOGOUT: '/logout',\n PERSONAL_FILES: '/personal-files',\n RECENT_FILES: '/recent-files',\n SHARED_FILES: '/shared',\n TRASHCAN: '/trashcan'\n};\n\nexport const SIDEBAR_LABELS = {\n PERSONAL_FILES: 'Personal Files',\n MY_LIBRARIES: 'My Libraries',\n FAVORITE_LIBRARIES: 'Favorite Libraries',\n SHARED_FILES: 'Shared',\n RECENT_FILES: 'Recent Files',\n FAVORITES: 'Favorites',\n TRASH: 'Trash'\n};\n\nexport const SITE_ROLES = {\n SITE_MANAGER: {\n ROLE: 'SiteManager',\n LABEL: 'Manager'\n },\n SITE_CONSUMER: {\n ROLE: 'SiteConsumer',\n LABEL: 'Consumer'\n },\n SITE_CONTRIBUTOR: {\n ROLE: 'SiteContributor',\n LABEL: 'Contributor'\n },\n SITE_COLLABORATOR: {\n ROLE: 'SiteCollaborator',\n LABEL: 'Collaborator'\n },\n NONE: {\n LABEL: 'Not a member'\n }\n};\n\nexport const SITE_VISIBILITY = {\n PUBLIC: 'PUBLIC',\n MODERATED: 'MODERATED',\n PRIVATE: 'PRIVATE'\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport const errorStrings = {\n errorMessageNotPresent: 'Error message is not displayed',\n nameIsRequiredError: 'Name is required',\n nameWithSpecialCharactersError: `Name can't contain these characters * \" < > \\\\ / ? : |`,\n nameEndWithDotError: `Name can't end with a period .`,\n nameContainOnlySpacesError: `Name can't contain only spaces`,\n titleLengthLimitError: 'Use 256 characters or less for title',\n descriptionLengthLimitError: 'Use 512 characters or less for description',\n nameAlreadyUsedError: 'This name is already in use, try a different name.',\n\n folderNameIsRequired: 'Folder name is required',\n folderNameCantEndWithAPeriod: `Folder name can't end with a period .`,\n folderNameCantContainTheseCharacters: `Folder name can't contain these characters`,\n folderNameCantContainOnlySpaces: `Folder name can't contain only spaces`,\n thereIsAlreadyAFolderWithThisName: `There's already a folder with this name. Try a different name.`\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport type ApiResultPredicate<T> = (result: T) => boolean;\nexport type ApiCall<T> = () => Promise<T>;\n\nexport async function waitForApi<T>(apiCall: ApiCall<T>, predicate: ApiResultPredicate<T>, retry: number = 30, delay: number = 1000) {\n const apiCallWithPredicateChecking = async () => {\n const apiCallResult = await apiCall();\n if (predicate(apiCallResult)) {\n return Promise.resolve(apiCallResult);\n } else {\n return Promise.reject(new Error(`API call did not satisfy predicate: ${JSON.stringify(apiCallResult)}`));\n }\n };\n\n return retryCall(apiCallWithPredicateChecking, retry, delay);\n}\n\nfunction retryCall(fn: () => Promise<any>, retry: number = 30, delay: number = 1000): Promise<string> {\n const pause = (duration) => new Promise((res) => setTimeout(res, duration));\n const run = (retries) =>\n fn().catch((err) =>\n retries > 1\n ? pause(delay).then(() => run(retries - 1))\n : Promise.reject(new Error(`API call did not satisfy predicate: ${JSON.stringify(err)}`))\n );\n\n return run(retry);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\nexport const infoColor = '\\x1b[36m%s\\x1b[0m';\nexport const logColor = '\\x1b[35m%s\\x1b[0m';\nexport const warnColor = '\\x1b[33m%s\\x1b[0m';\nexport const errorColor = '\\x1b[31m%s\\x1b[0m';\n\nexport type LOG_LEVEL = 'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'SILENT';\n\nexport class LogLevelsEnum extends Number {\n public static readonly TRACE: number = 5;\n public static readonly DEBUG: number = 4;\n public static readonly INFO: number = 3;\n public static readonly WARN: number = 2;\n public static readonly ERROR: number = 1;\n public static readonly SILENT: number = 0;\n}\n\nexport const logLevels: { level: LogLevelsEnum; name: LOG_LEVEL }[] = [\n { level: LogLevelsEnum.TRACE, name: 'TRACE' },\n { level: LogLevelsEnum.DEBUG, name: 'DEBUG' },\n { level: LogLevelsEnum.INFO, name: 'INFO' },\n { level: LogLevelsEnum.WARN, name: 'WARN' },\n { level: LogLevelsEnum.ERROR, name: 'ERROR' },\n { level: LogLevelsEnum.SILENT, name: 'SILENT' }\n];\n\nexport interface LoggerLike {\n info(...messages: string[]): void;\n log(...messages: string[]): void;\n warn(...messages: string[]): void;\n error(...messages: string[]): void;\n}\n\n/* eslint-disable no-console */\nexport class GenericLogger implements LoggerLike {\n private readonly level: LogLevelsEnum;\n\n constructor(logLevel: string) {\n this.level = logLevels.find(({ name }) => name === logLevel)?.level || LogLevelsEnum.ERROR;\n }\n\n info(...messages: string[]): void {\n if (Number(this.level) >= LogLevelsEnum.INFO) {\n console.log(infoColor, messages.join(''));\n }\n }\n\n log(...messages: string[]): void {\n if (Number(this.level) >= LogLevelsEnum.TRACE) {\n console.log(logColor, messages.join(''));\n }\n }\n\n warn(...messages: string[]): void {\n if (Number(this.level) >= LogLevelsEnum.WARN) {\n console.log(warnColor, messages.join(''));\n }\n }\n\n error(...messages: string[]): void {\n console.log(errorColor, messages.join(''));\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './paths';\nexport * from './timeouts';\nexport * from './exclude-tests';\nexport * from './state-helper';\nexport * from './utils';\nexport * from './library-errors';\nexport * from './config';\nexport * from './error-strings';\nexport * from './api';\nexport * from './logger';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { GenericLogger, LoggerLike } from '../utils';\n\nexport abstract class PlaywrightBase {\n public page: Page;\n public logger: LoggerLike;\n\n protected constructor(page: Page) {\n this.page = page;\n this.logger = new GenericLogger(process.env.PLAYWRIGHT_CUSTOM_LOG_LEVEL);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page } from '@playwright/test';\nimport { PlaywrightBase } from '../playwright-base';\nimport { timeouts } from '../../utils';\n\nexport abstract class BaseComponent extends PlaywrightBase {\n private readonly rootElement: string;\n private overlayElement = this.page.locator('.cdk-overlay-backdrop-showing');\n private progressBar = this.page.locator('mat-progress-bar');\n\n protected constructor(page: Page, rootElement: string) {\n super(page);\n this.rootElement = rootElement;\n }\n\n /**\n * Method which should be used across the repository, while creating\n * reference to elements, which are in root element of component.\n *\n * @param cssLocator css selector as String. Need to be in the tree under the root element\n * @param options if you want to localize it by text, then provide an optional hasText\n * @returns Locator object\n */\n getChild(cssLocator: string, options?: { hasText?: string | RegExp; has?: Locator }): Locator {\n return this.page.locator(`${this.rootElement} ${cssLocator}`, options);\n }\n\n async closeAdditionalOverlayElementIfVisible(): Promise<void> {\n if (await this.overlayElement.isVisible()) {\n await this.page.keyboard.press('Escape');\n await this.overlayElement.waitFor({ state: 'detached', timeout: timeouts.medium });\n }\n }\n\n async spinnerWaitForReload(): Promise<void> {\n try {\n await this.page.locator('mat-progress-spinner').waitFor({ state: 'attached', timeout: timeouts.medium });\n await this.page.locator('mat-progress-spinner').waitFor({ state: 'detached', timeout: timeouts.normal });\n } catch (e) {\n this.logger.info('Spinner was not present');\n }\n }\n\n async progressBarWaitForReload(): Promise<void> {\n try {\n await this.progressBar.waitFor({ state: 'visible', timeout: timeouts.medium });\n await this.progressBar.waitFor({ state: 'hidden', timeout: timeouts.normal });\n } catch (e) {\n this.logger.info('Progress bar was not present');\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page, expect } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class SnackBarComponent extends BaseComponent {\n private static rootElement = 'adf-snackbar-content';\n\n public message = this.getChild('[data-automation-id=\"adf-snackbar-message-content\"]').first();\n\n public actionButton = this.getChild('[data-automation-id=\"adf-snackbar-message-content-action-button\"]');\n\n public closeIcon = this.getChild('.adf-snackbar-message-content-action-icon');\n public getByMessageLocator = (message: string) =>\n this.getChild(`[data-automation-id='adf-snackbar-message-content']`, { hasText: message }).first();\n\n constructor(page: Page, rootElement = SnackBarComponent.rootElement) {\n super(page, rootElement);\n }\n\n async getSnackBarMessage(): Promise<string> {\n return this.message.innerText();\n }\n\n async getSnackBarActionText(): Promise<string> {\n if (await this.actionButton.isVisible()) {\n return this.actionButton.textContent();\n } else {\n return '';\n }\n }\n\n async verifySnackBarActionText(text: string): Promise<void> {\n expect(await this.message.textContent()).toContain(text);\n }\n\n async clickSnackBarAction(): Promise<void> {\n await this.actionButton.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { expect, Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class MatMenuComponent extends BaseComponent {\n private static rootElement = '.mat-mdc-menu-content';\n\n constructor(page: Page) {\n super(page, MatMenuComponent.rootElement);\n }\n\n public getMenuItemsLocator = this.getChild('button');\n public getMenuItemTextLocator = this.getChild('[data-automation-id=\"menu-item-title\"]');\n public createFolder = this.getChild('[id=\"app.create.folder\"]');\n public createFolderFromTemplate = this.getChild('[id=\"app.create.folderFromTemplate\"]');\n public createFileFromTemplate = this.getChild('[id=\"app.create.fileFromTemplate\"]');\n public createLibrary = this.getChild('[id=\"app.create.library\"]');\n public getButtonByText = (text: string) => this.getChild('button', { hasText: text });\n public getMenuItemFromHeaderMenu = (text: string) => this.page.getByRole('menuitem', { name: text, exact: true });\n\n async clickMenuItem(menuItem: string): Promise<void> {\n const menuElement = this.getButtonByText(menuItem);\n await menuElement.click();\n await menuElement.waitFor({ state: 'detached' });\n }\n\n async clickMenuItemFromHeaderMenu(menuItem: string): Promise<void> {\n const menuElement = this.getMenuItemFromHeaderMenu(menuItem);\n await menuElement.click();\n await menuElement.waitFor({ state: 'detached' });\n }\n\n async isMenuItemVisible(menuItem: string): Promise<boolean> {\n const menuElement = this.getButtonByText(menuItem);\n await menuElement.waitFor({ state: 'attached' });\n return menuElement.isVisible();\n }\n\n async verifyActualMoreActions(expectedToolbarMore: string[]): Promise<void> {\n await this.page.locator('.mat-mdc-menu-content').waitFor({ state: 'attached' });\n const menus = await this.page.$$('.mat-mdc-menu-content .mat-mdc-menu-item');\n const actualMoreActions: string[] = await Promise.all(\n menus.map(async (button) => {\n const title = await (await button.$('.mat-mdc-menu-item-text span')).innerText();\n return title || '';\n })\n );\n for (const action of expectedToolbarMore) {\n expect(actualMoreActions.includes(action), `Expected to contain ${action} ${actualMoreActions}`).toBe(true);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from './base.component';\nimport { Locator, Page } from '@playwright/test';\nimport { MatMenuComponent } from './dataTable/mat-menu.component';\nimport { timeouts } from '../../utils';\n\nexport enum PaginationActionsType {\n PageSizeSelector = 'Page size selector',\n CurrentPageSelector = 'Current page selector',\n NextPageSelector = 'Next page button'\n}\n\nexport class PaginationComponent extends BaseComponent {\n private static rootElement = 'adf-pagination';\n\n constructor(page: Page) {\n super(page, PaginationComponent.rootElement);\n }\n\n private range = this.getChild('.adf-pagination__range');\n private maxItems = this.getChild('.adf-pagination__max-items');\n private currentPage = this.getChild('.adf-pagination__current-page');\n private totalPages = this.getChild('.adf-pagination__total-pages');\n private previousButton = this.getChild('.adf-pagination__previous-button');\n private nextButton = this.getChild('.adf-pagination__next-button');\n private maxItemsButton = this.getChild('.adf-pagination__max-items + button[mat-icon-button]');\n\n private itemsPerPageMenu = new MatMenuComponent(this.page);\n\n public currentPageLocator = this.getChild('.adf-pagination__current-page');\n public totalPageLocator = this.getChild('.adf-pagination__total-pages');\n public getArrowLocatorFor = (action: PaginationActionsType) => this.getChild(`[aria-label=\"${action}\"]`);\n\n async setItemsPerPage(amount: number): Promise<void> {\n await this.getArrowLocatorFor(PaginationActionsType.PageSizeSelector).click();\n await this.itemsPerPageMenu.getButtonByText(amount.toString()).click();\n await this.spinnerWaitForReload();\n }\n\n async navigateToPage(pageNumber: number): Promise<void> {\n await this.getArrowLocatorFor(PaginationActionsType.CurrentPageSelector).click();\n await this.itemsPerPageMenu.getButtonByText(pageNumber.toString()).click();\n await this.spinnerWaitForReload();\n }\n\n async spinnerWaitForReload(): Promise<void> {\n try {\n await this.page.locator('mat-progress-spinner').waitFor({ state: 'attached', timeout: 2000 });\n await this.page.locator('mat-progress-spinner').waitFor({ state: 'detached', timeout: 2000 });\n } catch (e) {\n this.logger.info('Spinner was not present');\n }\n }\n\n async getRange(): Promise<string> {\n return this.range.innerText();\n }\n\n async getMaxItems(): Promise<string> {\n return this.maxItems.innerText();\n }\n\n async getCurrentPage(): Promise<string> {\n return this.currentPage.innerText();\n }\n\n async getTotalPages(): Promise<string> {\n return this.totalPages.innerText();\n }\n\n async isPreviousEnabled(): Promise<boolean> {\n return this.previousButton.isEnabled();\n }\n\n async isNextEnabled(): Promise<boolean> {\n await this.page.waitForTimeout(timeouts.tiny);\n return this.nextButton.isEnabled();\n }\n\n async clickOnNextPage(): Promise<void> {\n try {\n if (await this.isNextEnabled()) {\n await this.nextButton.click();\n }\n } catch (error) {\n throw new Error(`Failed on previous click: ${error}`);\n }\n }\n\n async clickOnPreviousPage(): Promise<void> {\n try {\n if (await this.isPreviousEnabled()) {\n await this.previousButton.click();\n }\n } catch (error) {\n throw new Error(`Failed on previous click: ${error}`);\n }\n }\n\n async openMaxItemsMenu(): Promise<void> {\n try {\n await this.maxItemsButton.waitFor({ state: 'visible' });\n await this.maxItemsButton.click();\n } catch (error) {\n throw new Error(`Open max items catch: ${error}`);\n }\n }\n\n async resetToDefaultPageSize(): Promise<void> {\n try {\n await this.openMaxItemsMenu();\n await this.clickNthItem(1);\n await this.page.waitForTimeout(timeouts.tiny);\n } catch (error) {\n throw new Error(`Reset to default page size catch: ${error}`);\n }\n }\n\n async clickMenuItem(menuItem: string): Promise<void> {\n try {\n await this.page.getByRole('menuitem', { name: menuItem }).click();\n } catch (e) {\n throw new Error(`Click menu item catch : failed to click on: ${e}`);\n }\n }\n\n async getNthItem(nth: number): Promise<Locator> {\n return this.page.getByRole('menuitem').nth(nth - 1);\n }\n\n async getItemsCount(): Promise<number> {\n return this.page.getByRole('menuitem').count();\n }\n\n async clickNthItem(nth: number): Promise<void> {\n try {\n await (await this.getNthItem(nth)).click();\n } catch (e) {\n throw new Error(`Click nth menu item catch: ${e}`);\n }\n }\n\n async closeMenu(): Promise<void> {\n await this.page.keyboard.press('Escape');\n }\n\n async isRangePresent(): Promise<boolean> {\n return this.range.isVisible();\n }\n\n async getMaxRange(): Promise<string> {\n return this.range.textContent();\n }\n\n async isMaxItemsPresent(): Promise<boolean> {\n return this.maxItems.isVisible();\n }\n\n async isCurrentPagePresent(): Promise<boolean> {\n return this.currentPage.isVisible();\n }\n\n async isTotalPagesPresent(): Promise<boolean> {\n return this.totalPages.isVisible();\n }\n\n async isPreviousButtonPresent(): Promise<boolean> {\n return this.previousButton.isVisible();\n }\n\n async isNextButtonPresent(): Promise<boolean> {\n return this.nextButton.isVisible();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\nimport { MatMenuComponent } from './mat-menu.component';\nimport { PaginationActionsType, PaginationComponent } from '../pagination.component';\nimport { timeouts } from '../../../utils';\n\nexport class DataTableComponent extends BaseComponent {\n private static rootElement = 'adf-datatable';\n contextMenuActions = new MatMenuComponent(this.page);\n\n constructor(page: Page, rootElement = DataTableComponent.rootElement) {\n super(page, rootElement);\n }\n\n public pagination = new PaginationComponent(this.page);\n body = this.getChild('.adf-datatable-body');\n getEmptyFolderLocator = this.getChild('.adf-empty-folder');\n getEmptyContentTitleLocator = this.getChild('adf-empty-content .adf-empty-content__title');\n getEmptyContentSubTitleLocator = this.getChild('adf-empty-content .adf-empty-content__subtitle');\n getSelectedRow = this.getChild('.adf-datatable-row.adf-is-selected');\n sortedColumnHeader = this.getChild(`.adf-datatable__header--sorted-asc .adf-datatable-cell-header-content .adf-datatable-cell-value,\n .adf-datatable__header--sorted-desc .adf-datatable-cell-header-content .adf-datatable-cell-value`);\n columnHeaders = this.getChild('.adf-datatable-row .adf-datatable-cell-header .adf-datatable-cell-value');\n emptyList = this.getChild('div.adf-no-content-container');\n emptyListTitle = this.getChild('.adf-empty-content__title');\n emptyListSubtitle = this.getChild('.adf-empty-content__subtitle');\n emptySearchText = this.getChild('.empty-search__text');\n emptyListTest = this.getChild('adf-custom-empty-content-template');\n paginationButton = this.page.locator('.adf-pagination__block button').nth(0);\n paginationOptions = this.page.locator('#cdk-overlay-0 button');\n sitesVisibility = this.page.locator('.adf-datatable-body [data-automation-id*=\"datatable-row\"] [aria-label=\"Visibility\"]');\n sitesName = this.page.locator('.adf-datatable-body [data-automation-id*=\"datatable-row\"] [aria-label=\"Name\"]');\n sitesRole = this.page.locator('.adf-datatable-body [data-automation-id*=\"datatable-row\"] [aria-label=\"My Role\"]');\n lockOwner = this.page.locator('.aca-locked-by--name');\n uncheckedCheckbox = this.page.locator('.mat-mdc-checkbox');\n checkedCheckbox = this.page.locator('.mat-mdc-checkbox-checked');\n highlightedText = '.aca-highlight';\n searchFileName = '.search-file-name';\n searchFileDescription = '[data-automation-id=\"search-results-entry-description\"]';\n searchFileContent = '.aca-result-content';\n\n /** Locator for row (or rows) */\n getRowLocator = this.page.getByRole('rowgroup').nth(1).locator('adf-datatable-row');\n\n /** Locator to get \"No results found\" message */\n getNoResultsFoundMessage = this.getChild('adf-custom-empty-content-template', { hasText: 'No results found' });\n\n /**\n * Method used in cases where we want to check that some record is visible in the datatable. It will consider whole row\n *\n * @returns reference to cell element which contains text.\n */\n getRowByName = (name: string | number): Locator => this.getChild(`adf-datatable-row`, { hasText: name.toString() });\n\n /**\n * Method used in cases where we want to check that some record is visible in the datatable.\n * But we want to check it by column header title and value of this column.\n *\n * @returns reference to cell element which contains text.\n */\n getRowByColumnTitleAndItsCellValue = (columnTitle: string, cellValue: string | number): Locator =>\n this.page.locator(`//div[contains(@title, '${columnTitle}')]//span[contains(text(), '${cellValue}')]/ancestor::adf-datatable-row`);\n\n /**\n * Method used in cases where we want to retrieve a row from the datatable based on its numerical order within the array.\n *\n * @returns reference to cell element which contains text.\n */\n getNthRow = (orderNum: number): Locator => this.getRowLocator.nth(orderNum);\n\n /**\n * Method used in cases where user have possibility to navigate \"inside\" the element (it's clickable and has link attribute).\n * Perform action .click() to navigate inside it\n *\n * @returns reference to cell element which contains link.\n */\n getCellLinkByName = (name: string): Locator => this.getChild('.adf-cell-value span[role=\"link\"]', { hasText: name });\n\n /**\n * Method used in cases where we want to localize the element by [aria-label]\n *\n * @returns reference to cell element.\n */\n getByAriaLabelTitle = (title: string): Locator => this.getChild(`[aria-label=\"${title}\"]`);\n\n /**\n * Method used in cases where we want to get the button (hamburger menu) for row element\n *\n * @returns reference to menu placed in row localized by the name\n */\n getActionsButtonByName = (name: string): Locator =>\n this.getRowByName(name).locator('mat-icon', { hasText: new RegExp(`^\\\\s*more_vert\\\\s*$`, 'g') });\n\n /**\n * Method used in cases where we want to get the edit button and there is no hamburger menu\n *\n * @returns reference to edit button placed in row localized by the name\n */\n getEditButtonByName = (name: string): Locator => this.getRowByName(name).locator('button#editButton');\n\n /**\n * Method used in cases where we want to get the button and there is no hamburger menu\n *\n * @returns reference to button placed in row localized by the name\n */\n getButtonByNameForSpecificRow = (elementTitleInRow: string, buttonTitle: string): Locator =>\n this.getRowByName(elementTitleInRow).locator('button', { hasText: buttonTitle });\n\n /**\n * Method used in cases where you want to get some specific cell (by column name) for row which contains some name/title/etc.\n *\n * @returns reference to cell element\n */\n getCellByColumnNameAndRowItem = (item: string | number, columnName: string): Locator => this.getRowByName(item).locator(`[title=\"${columnName}\"]`);\n\n /**\n * Method used in cases where we want to get the checkbox for row element\n *\n * @returns reference to checkbox placed in row localized by the name\n */\n getCheckboxForElement = (item: string): Locator => this.getRowByName(item).locator('.mat-mdc-checkbox');\n\n getColumnHeaderByTitleLocator = (headerTitle: string): Locator => this.getChild('[role=\"columnheader\"]', { hasText: headerTitle });\n\n getSearchResultLinkByName = (name: string): Locator => this.getChild('.aca-search-results-row span[role=\"link\"]', { hasText: name });\n\n getColumnValuesByName = (name: string): Locator => this.getChild(`div[title=\"${name}\"] span`);\n\n getColumnHeaderByName = (headerTitle: string): Locator =>\n this.getChild('.adf-datatable-row .adf-datatable-cell-header .adf-datatable-cell-value', { hasText: headerTitle });\n\n async sortBy(label: string, order: 'asc' | 'desc'): Promise<void> {\n const sortColumn = await this.getSortedColumnHeaderText();\n let sortOrder = await this.getSortingOrder();\n if (sortColumn !== label) {\n await this.getColumnHeaderByName(label).hover();\n await this.getColumnHeaderByName(label).click({ force: true });\n sortOrder = await this.getSortingOrder();\n }\n if (sortOrder !== order) {\n await this.getChild('span[class*=\"adf-datatable__header--sorted\"]').click();\n }\n }\n\n /**\n * This method is used when we want to perform right mouse click on the dataTable row and perform some action\n *\n * @param name of the data table element with which we want to click\n * @param action provide which action you want to perform\n */\n async performActionFromExpandableMenu(name: string | number, action: string): Promise<void> {\n await this.goThroughPagesLookingForRowWithName(name);\n const actionButtonLocator = await this.getActionLocatorFromExpandableMenu(name, action);\n await actionButtonLocator.click();\n await this.spinnerWaitForReload();\n }\n\n /**\n * Click action from the expandable kebab menu for the element in datatable\n *\n * @param name title of the record you would like to proceed\n * @param action provide button title for the action\n * @param subAction if the action is in sub menu, then provide it here\n */\n async performActionForElement(name: string, action: string, subAction?: string): Promise<void> {\n await this.getActionsButtonByName(name).click();\n await this.contextMenuActions.getButtonByText(action).click();\n\n if (subAction) {\n await this.contextMenuActions.getButtonByText(subAction).click();\n }\n }\n\n /**\n * This method is used when we want to perform double click on the dataTable row to open a file or folder\n *\n * @param name of the data table element with which we want to double click\n */\n async performClickFolderOrFileToOpen(name: string): Promise<void> {\n await this.getCellLinkByName(name).click();\n await this.spinnerWaitForReload();\n }\n\n async isItemPresent(name: string): Promise<boolean> {\n await this.goThroughPagesLookingForRowWithName(name);\n return this.getRowByName(name).isVisible();\n }\n\n async getActionLocatorFromExpandableMenu(name: string | number, action: string): Promise<Locator> {\n await this.getRowByName(name).click({ button: 'right' });\n return this.contextMenuActions.getButtonByText(action);\n }\n\n async performActionInExpandableMenu(name: string | number, action: string): Promise<void> {\n await this.getRowByName(name).click({ button: 'right' });\n await this.contextMenuActions.getButtonByText(action).click();\n }\n\n async goThroughPagesLookingForRowWithName(name: string | number): Promise<void> {\n await this.spinnerWaitForReload();\n if (await this.getRowByName(name).isVisible()) {\n return null;\n }\n\n if (await this.pagination.currentPageLocator.isVisible()) {\n if ((await this.pagination.currentPageLocator.textContent()) === ' of 1 ') {\n return null;\n }\n }\n if (await this.pagination.totalPageLocator.isVisible()) {\n const maxPages = (await this.pagination.totalPageLocator?.textContent())?.match(/\\d/)[0];\n for (let page = 1; page <= Number(maxPages); page++) {\n if (await this.getRowByName(name).isVisible()) {\n break;\n }\n if (await this.pagination.getArrowLocatorFor(PaginationActionsType.NextPageSelector).isEnabled()) {\n await this.pagination.getArrowLocatorFor(PaginationActionsType.NextPageSelector).click();\n }\n await this.spinnerWaitForReload();\n }\n }\n }\n\n async selectItems(...names: string[]): Promise<void> {\n for (const name of names) {\n const isSelected = await this.isRowSelected(name);\n if (!isSelected) {\n const row = this.getRowByName(name);\n await row.hover();\n await row.locator(this.uncheckedCheckbox).click();\n await row.locator(this.checkedCheckbox).waitFor({ state: 'visible', timeout: timeouts.large });\n }\n }\n }\n\n async isRowSelected(itemName: string): Promise<boolean> {\n const row = this.getRowByName(itemName);\n return row.locator(this.checkedCheckbox).isVisible();\n }\n\n async getColumnHeaders(): Promise<Array<string>> {\n const columnNameLocator = this.columnHeaders;\n await this.columnHeaders.nth(0).waitFor({ state: 'attached' });\n return columnNameLocator.allTextContents();\n }\n\n async getSortedColumnHeaderText(): Promise<string> {\n return this.sortedColumnHeader.innerText();\n }\n\n private getItemLocationEl(name: string): Locator {\n return this.getRowByName(name).locator('.aca-location-link');\n }\n\n async getItemLocationText(name: string): Promise<string> {\n await this.getItemLocationEl(name).locator('a').waitFor({ state: 'attached' });\n return this.getItemLocationEl(name).innerText();\n }\n\n async getItemLocationTooltip(name: string): Promise<string> {\n const location = this.getItemLocationEl(name);\n await location.hover();\n return location.locator('a').getAttribute('title', { timeout: timeouts.normal });\n }\n\n async clickItemLocation(name: string): Promise<void> {\n await this.getItemLocationEl(name).click();\n }\n\n async getSortingOrder(): Promise<string> {\n const str = await this.sortedColumnHeader.locator('../..').getAttribute('class');\n if (str.includes('asc')) {\n return 'asc';\n } else if (str.includes('desc')) {\n return 'desc';\n }\n return 'none';\n }\n\n async getRowAllInnerTexts(name: string): Promise<string> {\n return (await this.getRowByName(name).locator('span').allInnerTexts()).toString();\n }\n\n async getFirstElementDetail(name: string): Promise<string> {\n const firstNode = this.getColumnValuesByName(name).first();\n return firstNode.innerText();\n }\n\n async isEmpty(): Promise<boolean> {\n return this.emptyList.isVisible();\n }\n\n async getEmptyStateTitle(): Promise<string> {\n return (await this.isEmpty()) ? this.emptyListTitle.innerText() : '';\n }\n\n async getEmptyStateSubtitle(): Promise<string> {\n return (await this.isEmpty()) ? this.emptyListSubtitle.innerText() : '';\n }\n\n async getEmptyListText(): Promise<string> {\n return (await this.isEmpty()) ? this.emptyListTest.innerText() : '';\n }\n\n async getRowsCount(): Promise<number> {\n return this.getRowLocator.count();\n }\n\n async rightClickOnItem(itemName: string): Promise<void> {\n await this.getCellByColumnNameAndRowItem(itemName, 'Name').click({ button: 'right' });\n }\n\n async setPaginationTo50(): Promise<void> {\n await this.paginationButton.click();\n await this.paginationOptions.getByText('50').click();\n }\n\n /**\n * Method used to create objects from names and visibility of sites from datatable\n *\n * @returns an object with sites' names and their corresponding visibility values\n */\n async getSitesNameAndVisibility(): Promise<{ [siteName: string]: string }> {\n const rowsCount = await this.sitesName.count();\n const sitesInfo: { [siteName: string]: string } = {};\n for (let i = 0; i < rowsCount; i++) {\n let siteVisibilityText = await this.sitesVisibility.nth(i).textContent();\n let siteNameText = await this.sitesName.nth(i).textContent();\n siteVisibilityText = siteVisibilityText.trim().toUpperCase();\n siteNameText = siteNameText.trim();\n sitesInfo[siteNameText] = siteVisibilityText;\n }\n return sitesInfo;\n }\n\n /**\n * Method used to create objects from names and roles of sites from datatable\n *\n * @returns an object with sites' names and their corresponding role values\n */\n async getSitesNameAndRole(): Promise<{ [siteName: string]: string }> {\n const rowsCount = await this.sitesName.count();\n const sitesInfo: { [siteName: string]: string } = {};\n for (let i = 0; i < rowsCount; i++) {\n let siteNameText = await this.sitesName.nth(i).textContent();\n let siteRoleText = await this.sitesRole.nth(i).textContent();\n siteNameText = siteNameText.trim();\n siteRoleText = siteRoleText.trim();\n sitesInfo[siteNameText] = siteRoleText;\n }\n return sitesInfo;\n }\n\n async hasLockIcon(itemName: string): Promise<boolean> {\n const row = this.getRowByName(itemName);\n return row.locator('img[src*=\"lock\"]').isVisible();\n }\n\n async getLockOwner(itemName: string): Promise<string> {\n const row = this.getRowByName(itemName);\n return row.locator(this.lockOwner).innerText();\n }\n\n async hasHighlightedText(location: 'name' | 'description' | 'content'): Promise<boolean> {\n switch (location) {\n case 'name':\n return this.page.locator(this.searchFileName).locator(this.highlightedText).isVisible();\n case 'description':\n return this.page.locator(this.searchFileDescription).locator(this.highlightedText).isVisible();\n case 'content':\n return this.page.locator(this.searchFileContent).locator(this.highlightedText).isVisible();\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../base.component';\nimport { Page } from '@playwright/test';\n\nexport class ToolbarComponent extends BaseComponent {\n private static rootElement = 'adf-toolbar';\n private createRuleButton = this.getChild('[data-automation-id=\"manage-rules-create-button\"]');\n private linkRulesButton = this.getChild('[data-automation-id=\"manage-rules-link-button\"]');\n\n constructor(page: Page) {\n super(page, ToolbarComponent.rootElement);\n }\n\n async clickCreateRuleButton(): Promise<void> {\n await this.createRuleButton.click();\n }\n\n async clickLinkRulesButton(): Promise<void> {\n await this.linkRulesButton.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './data-table.component';\nexport * from './mat-menu.component';\nexport * from './toolbar.component';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../base.component';\nimport { Page } from '@playwright/test';\n\nexport class AdfFolderDialogComponent extends BaseComponent {\n private static rootElement = 'adf-folder-dialog';\n\n public folderNameInputLocator = this.getChild('[id=\"adf-folder-name-input\"]');\n public folderNameInputHint = this.getChild('mat-hint');\n public folderTitleInput = this.getChild('[id=\"adf-folder-title-input\"]');\n public folderDescriptionInput = this.getChild('[id=\"adf-folder-description-input\"]');\n public createButton = this.getChild('[id=\"adf-folder-create-button\"]');\n public cancelButton = this.getChild('[id=\"adf-folder-cancel-button\"]');\n\n constructor(page: Page) {\n super(page, AdfFolderDialogComponent.rootElement);\n }\n\n public getLabelText = (text: string) => this.getChild('label', { hasText: text });\n public getRequiredMarker = (text: string) => this.getLabelText(text).locator('.mat-mdc-form-field-required-marker');\n\n /**\n * This method is used when we want to fill in Create new Folder Dialog and choose Create button\n *\n * @param nameInput input for the Name field\n * @param titleInput input for Title field\n * @param descriptionInput input for Description field\n */\n async createNewFolderDialog(nameInput: string, titleInput?: string, descriptionInput?: string): Promise<void> {\n await this.folderNameInputLocator.fill(nameInput);\n if (titleInput) {\n await this.folderTitleInput.fill(titleInput);\n }\n if (descriptionInput) {\n await this.folderDescriptionInput.fill(descriptionInput);\n }\n await this.createButton.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { timeouts } from '../../../utils';\nimport { BaseComponent } from '../base.component';\nimport { Locator, Page } from '@playwright/test';\n\nexport class AdfLibraryDialogComponent extends BaseComponent {\n private static rootElement = 'adf-library-dialog';\n\n public createButton = this.getChild('[data-automation-id=\"create-library-id\"]');\n public cancelButton = this.getChild('[data-automation-id=\"cancel-library-id\"]');\n\n constructor(page: Page) {\n super(page, AdfLibraryDialogComponent.rootElement);\n }\n\n public getLabelText = (text: string) => this.getChild('label', { hasText: text });\n public getRequiredMarker = (text: string) => this.getLabelText(text).locator('.mat-mdc-form-field-required-marker');\n public getDialogTitle = (text: string) => this.getChild('.mat-mdc-dialog-title', { hasText: text });\n public getErrorByText = (text: string): Locator => this.page.locator('mat-error', { hasText: text });\n\n /**\n * This method is used when we want to fill in Create Library Dialog and choose Create button\n *\n * @param nameInput input for the Name field\n * @param libraryIdInput input for Library ID field\n * @param descriptionInput input for Description field\n * @param visibility visibility of the library\n */\n async createLibraryWithNameAndId(nameInput: string, libraryIdInput: string, descriptionInput?: string, visibility?: string): Promise<void> {\n await this.getLabelText('Name').fill(nameInput);\n await this.getLabelText('Library ID').clear();\n await this.getLabelText('Library ID').fill(libraryIdInput);\n if (descriptionInput) {\n await this.getLabelText('Description').fill(descriptionInput);\n }\n if (visibility) {\n await this.getLabelText(visibility).click();\n }\n await this.createButton.click();\n await this.spinnerWaitForReload();\n }\n\n async isErrorMessageDisplayed(errorText: string): Promise<boolean> {\n await this.getErrorByText(errorText).waitFor({ state: 'visible', timeout: timeouts.large });\n return this.getErrorByText(errorText).isVisible();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\nimport { timeouts } from '../../../utils';\n\nexport class PasswordOverlayDialogComponent extends BaseComponent {\n private static rootElement = '.cdk-overlay-pane';\n\n public closeButton = this.getChild('[data-automation-id=\"adf-password-dialog-close\"]');\n public submitButton = this.getChild('[data-automation-id=\"adf-password-dialog-submit\"]');\n public passwordInput = this.getChild('[data-automation-id=\"adf-password-dialog-input\"]');\n public errorMessage = this.getChild('[data-automation-id=\"adf-password-dialog-error\"]');\n\n constructor(page: Page, rootElement = PasswordOverlayDialogComponent.rootElement) {\n super(page, rootElement);\n }\n\n async waitForDialogToOpen(): Promise<void> {\n await this.spinnerWaitForReload();\n await this.passwordInput.waitFor({ state: 'attached', timeout: timeouts.large });\n await this.passwordInput.isVisible();\n }\n\n async waitForDialogToClose(): Promise<void> {\n await this.passwordInput.waitFor({ state: 'detached', timeout: timeouts.large });\n }\n\n async isDialogOpen(): Promise<boolean> {\n await this.waitForDialogToOpen();\n return this.passwordInput.isVisible();\n }\n\n async isCloseVisible(): Promise<boolean> {\n return this.closeButton.isVisible();\n }\n\n async isSubmitHidden(): Promise<boolean> {\n return this.submitButton.isHidden();\n }\n\n async isPasswordInputDisplayed(): Promise<boolean> {\n return this.passwordInput.isVisible();\n }\n\n async isErrorDisplayed(): Promise<boolean> {\n await this.errorMessage.waitFor({ state: 'visible', timeout: timeouts.short });\n return this.errorMessage.isVisible();\n }\n\n async getErrorMessage(): Promise<string> {\n if (await this.isErrorDisplayed()) {\n return this.errorMessage.innerText();\n }\n return '';\n }\n\n async enterPassword(password: string): Promise<void> {\n await this.passwordInput.fill(password);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\nimport { timeouts } from '../../../utils';\n\nexport class ViewerOverlayDialogComponent extends BaseComponent {\n private static rootElement = '.cdk-overlay-pane';\n\n public closeButton = this.getChild('[data-automation-id=\"adf-password-dialog-close\"]');\n public submitButton = this.getChild('[data-automation-id=\"adf-password-dialog-submit\"]');\n public passwordInput = this.getChild('[data-automation-id=\"adf-password-dialog-input\"]');\n public errorMessage = this.getChild('[data-automation-id=\"adf-password-dialog-error\"]');\n public copyDialog = this.getChild('[data-automation-id=\"content-node-selector-title\"]');\n public copyMenuButton = this.getChild('[id=\"app.viewer.copy\"]');\n public deleteMenuButton = this.getChild('[id=\"app.viewer.delete\"]');\n public favoriteMenuButton = this.getChild('[id=\"app.viewer.favorite.add\"]');\n public removeFavoriteMenuButton = this.getChild('[id=\"app.viewer.favorite.remove\"]');\n public shareDialogTitle = this.getChild('[data-automation-id=\"adf-share-dialog-title\"]');\n public shareDialogClose = this.getChild('[data-automation-id=\"adf-share-dialog-close\"]');\n\n constructor(page: Page, rootElement = ViewerOverlayDialogComponent.rootElement) {\n super(page, rootElement);\n }\n\n async isCopyDialogOpen(): Promise<boolean> {\n await this.copyDialog.waitFor({ state: 'attached', timeout: timeouts.medium });\n return this.copyDialog.isVisible();\n }\n\n async isCopyDialogClose(): Promise<boolean> {\n await this.copyDialog.waitFor({ state: 'detached', timeout: timeouts.medium });\n return this.copyDialog.isVisible();\n }\n\n async clickActionsCopy(): Promise<void> {\n await this.copyMenuButton.waitFor({ state: 'attached', timeout: timeouts.medium });\n await this.copyMenuButton.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page, expect } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class ContentNodeSelectorDialog extends BaseComponent {\n private static rootElement = 'adf-content-node-selector';\n\n constructor(page: Page) {\n super(page, ContentNodeSelectorDialog.rootElement);\n }\n\n public cancelButton = this.getChild('[data-automation-id=\"content-node-selector-actions-cancel\"]');\n public actionButton = this.getChild('[data-automation-id=\"content-node-selector-actions-choose\"]');\n public locationDropDown = this.getChild('[id=\"site-dropdown-container\"] mat-form-field');\n private selectedRow = this.getChild('.adf-is-selected');\n getOptionLocator = (optionName: string): Locator =>\n this.page.locator('.mat-mdc-select-panel .mdc-list-item__primary-text', { hasText: optionName });\n private getRowByName = (name: string | number): Locator => this.getChild(`adf-datatable-row`, { hasText: name.toString() });\n getDialogTitle = (text: string) => this.getChild('[data-automation-id=\"content-node-selector-title\"]', { hasText: text });\n getBreadcrumb = (text: string) => this.getChild('[data-automation-id=\"current-folder\"]', { hasText: text });\n getFolderIcon = this.getChild('[data-automation-id=\"dropdown-breadcrumb-trigger\"]');\n loadMoreButton = this.getChild('[data-automation-id=\"adf-infinite-pagination-button\"]');\n\n async loadMoreNodes(): Promise<void> {\n await this.spinnerWaitForReload();\n while (await this.loadMoreButton.isVisible()) {\n await this.loadMoreButton.click();\n }\n }\n\n async selectLocation(location: string): Promise<void> {\n await this.locationDropDown.click();\n const optionLocator = this.getOptionLocator(location);\n await optionLocator.click();\n await optionLocator.waitFor({ state: 'detached' });\n }\n\n async selectDestination(folderName: string): Promise<void> {\n const row = this.getRowByName(folderName);\n\n await expect(row).toBeVisible();\n await row.click({ trial: true });\n\n await expect(async () => {\n await row.hover({ timeout: 1000 });\n await row.click();\n await expect(this.selectedRow).toBeVisible();\n }).toPass({\n intervals: [2_000],\n timeout: 20_000\n });\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\nimport { timeouts } from '../../../utils';\n\nexport class CreateFromTemplateDialogComponent extends BaseComponent {\n private static rootElement = 'mat-dialog-container';\n\n constructor(page: Page) {\n super(page, CreateFromTemplateDialogComponent.rootElement);\n }\n\n cancelButton = this.getChild('[data-automation-id=\"create-from-template-dialog-cancel-button\"]');\n createButton = this.getChild('[data-automation-id=\"create-from-template-dialog-create-button\"]');\n getDialogTitle = (text: string) => this.getChild('[data-automation-id=\"create-from-template-title\"]', { hasText: text });\n getDialogLabel = (text: string) => this.getChild('label', { hasText: text });\n getErrorByText = (text: string): Locator => this.page.locator('[data-automation-id=\"create-from-template-field-error\"]', { hasText: text });\n\n async isErrorMessageDisplayed(errorText: string): Promise<boolean> {\n await this.getErrorByText(errorText).waitFor({ state: 'visible', timeout: timeouts.large });\n return this.getErrorByText(errorText).isVisible();\n }\n\n /**\n * This method is used when we want to fill in Create new folder/document/file from template dialog and choose Create button\n */\n async createFromTemplateAction(nameInput: string, titleInput?: string, descriptionInput?: string): Promise<void> {\n await this.getDialogLabel('Name').fill(nameInput);\n if (titleInput) {\n await this.getDialogLabel('Title').fill(titleInput);\n }\n if (descriptionInput) {\n await this.getDialogLabel('Description').fill(descriptionInput);\n }\n await this.createButton.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class AdfConfirmDialogComponent extends BaseComponent {\n private static rootElement = 'adf-confirm-dialog';\n\n constructor(page: Page) {\n super(page, AdfConfirmDialogComponent.rootElement);\n }\n\n getDialogTitle = (text: string) => this.getChild('[data-automation-id=\"adf-confirm-dialog-title\"]', { hasText: text });\n getDialogContent = (text: string) => this.getChild('[data-automation-id=\"adf-confirm-dialog-base-message\"]', { hasText: text });\n okButton = this.getChild('[data-automation-id=\"adf-confirm-dialog-confirmation\"]');\n cancelButton = this.getChild('[data-automation-id=\"adf-confirm-dialog-reject\"]');\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class DateTimePicker extends BaseComponent {\n private static rootElement = '.mat-calendar';\n calendar = this.getChild('.mat-datepicker-popup');\n dayPicker = this.getChild('mat-month-view');\n nextMonthBtn = this.getChild('.mat-calendar-next-button');\n rootElemLocator = this.page.locator('.mat-datepicker-popup');\n\n constructor(page: Page) {\n super(page, DateTimePicker.rootElement);\n }\n\n async isCalendarOpen(): Promise<boolean> {\n const element = this.rootElemLocator;\n return element.isVisible();\n }\n\n async pickDateTime(): Promise<void> {\n const today = new Date();\n const nextAvailableDay = new Date();\n nextAvailableDay.setDate(today.getDate() + 2);\n if (nextAvailableDay.getMonth() !== today.getMonth()) {\n await this.nextMonthBtn.click();\n }\n await this.selectDay(nextAvailableDay.getDate());\n }\n\n async selectDay(day: number): Promise<void> {\n const firstActiveDayElem = this.dayPicker.locator(`text=${day}`).first();\n await firstActiveDayElem.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ElementHandle, Locator, Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\nimport { timeouts } from '../../../utils';\nimport { DateTimePicker } from '../datetime-picker/datetime-picker.component';\n\nexport class ShareDialogComponent extends BaseComponent {\n private static rootElement = 'adf-share-dialog';\n\n constructor(page: Page) {\n super(page, ShareDialogComponent.rootElement);\n }\n\n closeButton = this.getChild('[data-automation-id=\"adf-share-dialog-close\"]');\n dialogTitle = this.getChild('[data-automation-id=\"adf-share-dialog-title\"]');\n infoText = this.getChild('.adf-share-link__info').first();\n labels = '.adf-share-link__label';\n shareToggle = this.getChild(`[data-automation-id='adf-share-toggle']`);\n url = this.getChild(`[data-automation-id='adf-share-link']`);\n urlAction = this.getChild('.adf-input-action');\n expireToggle = this.getChild(`[data-automation-id='adf-expire-toggle']`);\n expireInput = this.getChild('input[formcontrolname=\"time\"]');\n datetimePickerButton = this.getChild('.mat-datepicker-toggle');\n\n dateTimePicker = new DateTimePicker(this.page);\n\n getDialogLabel = () => this.getChild('label').innerText();\n getErrorByText = (text: string): Locator => this.page.locator('mat-error', { hasText: text });\n\n async getLabels(): Promise<Array<string>> {\n return this.page.$$eval('.adf-share-link__label', (elements) => elements.map((element) => element.textContent));\n }\n\n async getDialogTitle(): Promise<string> {\n return this.dialogTitle.innerText();\n }\n\n async getInfoText(): Promise<string> {\n return this.infoText.innerText();\n }\n\n async getLinkUrl(): Promise<string> {\n return this.url.first().inputValue();\n }\n\n async isUrlReadOnly(): Promise<boolean> {\n const urlAttr = await this.url.getAttribute('readonly');\n return urlAttr === 'true';\n }\n\n async isCloseEnabled(): Promise<boolean> {\n return this.closeButton.isEnabled();\n }\n\n async clickClose(): Promise<void> {\n await this.page.waitForTimeout(timeouts.tiny);\n await this.closeButton.click();\n }\n\n async isToggleStatus(toggle: ElementHandle, status: string): Promise<boolean> {\n const toggleClass = await toggle.getAttribute('class');\n return toggleClass.includes(status);\n }\n\n async isShareToggleChecked(): Promise<boolean> {\n const shareToggleElement = await this.shareToggle.elementHandle();\n return this.isToggleStatus(shareToggleElement, 'checked');\n }\n\n async isExpireToggleEnabled(): Promise<boolean> {\n const expireToggleElement = await this.expireToggle.elementHandle();\n return this.isToggleStatus(expireToggleElement, 'checked');\n }\n\n async getExpireDate(): Promise<string> {\n return this.expireInput.inputValue();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class UploadNewVersionDialog extends BaseComponent {\n private static rootElement = 'adf-new-version-uploader-dialog';\n\n public cancelButton = this.getChild('#adf-new-version-cancel');\n public uploadButton = this.getChild('[data-automation-id=\"adf-new-version-file-upload\"]');\n public majorOption = this.getChild('#adf-new-version-major');\n public minorOption = this.getChild('#adf-new-version-minor');\n public description = this.getChild('#adf-new-version-text-area');\n public title = this.getChild(' [data-automation-id=\"new-version-uploader-dialog-title\"]');\n\n constructor(page: Page) {\n super(page, UploadNewVersionDialog.rootElement);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class ManageVersionsDialog extends BaseComponent {\n private static rootElement = '.adf-new-version-uploader-dialog';\n\n async viewFileVersion(version: string): Promise<void> {\n const versionActionsButton = this.page.locator(`[id=\"adf-version-list-action-menu-button-${version}\"]`);\n await versionActionsButton.click();\n }\n\n constructor(page: Page) {\n super(page, ManageVersionsDialog.rootElement);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class UploadDialog extends BaseComponent {\n private static rootElement = '.adf-upload-dialog';\n\n public uploadDialog = this.page.locator('.adf-upload-dialog');\n public closeButton = this.getChild('#adf-upload-dialog-close');\n public minimizeButton = this.page.locator('[data-automation-id=\"adf-upload-dialog__toggle-minimize\"]');\n public uploadDialogMinimized = this.page.locator('.adf-upload-dialog--minimized');\n\n constructor(page: Page) {\n super(page, UploadDialog.rootElement);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class AdfDeleteTrashComponent extends BaseComponent {\n private static rootElement = 'adf-confirm-dialog';\n\n constructor(page: Page) {\n super(page, AdfDeleteTrashComponent.rootElement);\n }\n\n dialogTitle = this.getChild('[data-automation-id=\"adf-confirm-dialog-title\"]');\n dialogDescription = this.getChild('[data-automation-id=\"adf-confirm-dialog-base-message\"]');\n deleteButton = this.getChild('[id=\"adf-confirm-accept\"]');\n keepButton = this.getChild('[id=\"adf-confirm-cancel\"]');\n\n async waitForDialog(): Promise<void> {\n await this.dialogTitle.waitFor();\n }\n\n async isDialogOpen(): Promise<boolean> {\n return this.dialogTitle.isVisible();\n }\n\n async getDialogTitle(): Promise<string> {\n return this.dialogTitle.textContent();\n }\n\n async getDialogDescription(): Promise<string> {\n return this.dialogDescription.textContent();\n }\n\n async isDeleteEnabled(): Promise<boolean> {\n return this.deleteButton.isEnabled();\n }\n\n async isKeepEnabled(): Promise<boolean> {\n return this.keepButton.isEnabled();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page, expect } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class LinkRulesDialog extends BaseComponent {\n private static rootElement = 'aca-rule-set-picker';\n\n constructor(page: Page) {\n super(page, LinkRulesDialog.rootElement);\n }\n\n cancelButton = this.getChild('[data-automation-id=\"content-node-selector-actions-cancel\"]');\n selectFolderButton = this.getChild('button', { hasText: ' Select folder ' });\n emptyLinkRules = this.getChild('.adf-empty-content__title');\n getOptionLocator = (optionName: string): Locator =>\n this.page.locator('.mat-mdc-select-panel .mdc-list-item__primary-text', { hasText: optionName });\n private getRowByName = (name: string | number): Locator => this.getChild(`adf-datatable-row`, { hasText: name.toString() });\n getDialogTitle = (text: string) => this.getChild('[data-automation-id=\"content-node-selector-title\"]', { hasText: text });\n getBreadcrumb = (text: string) => this.getChild('[data-automation-id=\"current-folder\"]', { hasText: text });\n getFolderIcon = this.getChild('.adf-dropdown-breadcrumb-icon', { hasText: 'folder' });\n getLibraryIcon = this.getChild('.adf-empty-content__icon', { hasText: 'library_books' });\n\n async selectDestination(folderName: string): Promise<void> {\n const row = this.getRowByName(folderName);\n\n await expect(row).toBeVisible();\n await row.click({ trial: true });\n\n await expect(async () => {\n await row.hover({ timeout: 1000 });\n await row.click();\n await expect(this.selectFolderButton).toBeEnabled();\n }).toPass({\n intervals: [2_000],\n timeout: 20_000\n });\n }\n\n async waitForLinkRules(): Promise<void> {\n await this.getLibraryIcon.waitFor();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class EditDialog extends BaseComponent {\n private static rootElement = 'mat-dialog-container';\n\n public editDialog = this.getChild('');\n public titleInput = this.getChild('[data-automation-id=\"adf-folder-dialog-title\"]');\n public cancelButton = this.getChild('#adf-folder-cancel-button');\n public updateButton = this.getChild('#adf-folder-create-button');\n public descriptionInput = this.getChild('#adf-folder-description-input');\n public nameInput = this.getChild('#adf-folder-name-input');\n public fieldHint = this.getChild('mat-hint');\n\n constructor(page: Page) {\n super(page, EditDialog.rootElement);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class FolderInformationDialogComponent extends BaseComponent {\n private static readonly rootElement = '[data-automation-id=\"adf-dialog-container\"]';\n\n constructor(page: Page) {\n super(page, FolderInformationDialogComponent.rootElement);\n }\n\n folderName = this.getChild('.aca-folder-info-header');\n doneButton = this.getChild('[data-automation-id=\"adf-dialog-actions-confirm\"]');\n folderNumberOfFiles = this.getChild('[data-automation-id=\"folder-info-number-of-files\"]');\n folderSize = this.getChild('[data-automation-id=\"folder-info-size\"]');\n folderLocation = this.getChild('[data-automation-id=\"folder-info-location\"]');\n folderCreationDate = this.getChild('[data-automation-id=\"folder-info-creation-date\"]');\n folderModifiedDate = this.getChild('[data-automation-id=\"folder-info-modify-date\"]');\n\n async getFolderSizeNumber(): Promise<number> {\n const textContent = await this.folderSize.textContent();\n if (!textContent) {\n throw new Error('Folder size text content is null or undefined');\n }\n return parseInt(textContent.split(' ')[0].replace(/,/g, ''), 10);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './adf-folder-dialog.component';\nexport * from './adf-library-dialog.component';\nexport * from './password-overlay-dialog.component';\nexport * from './viewer-overlay-dialog.component';\nexport * from './content-node-selector-dialog';\nexport * from './create-from-template-dialog-component';\nexport * from './adf-confirm-dialog.component';\nexport * from './share-dialog.component';\nexport * from './upload-new-version-dialog.component';\nexport * from './manage-versions-dialog.component';\nexport * from './upload-dialog.component';\nexport * from './delete-trash-dialog.component';\nexport * from './link-rules.component';\nexport * from './edit-dialog.component';\nexport * from './folder-information-dialog.component';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../base.component';\nimport { Page } from '@playwright/test';\n\nexport class ManageRulesDialogComponent extends BaseComponent {\n private static rootElement = 'aca-edit-rule-dialog';\n\n public createRuleButton = this.getChild('[data-automation-id=\"edit-rule-dialog-submit\"]');\n public cancelRuleButton = this.getChild('.aca-edit-rule-dialog__footer button').filter({ hasText: 'Cancel' });\n public ruleNameInputLocator = this.getChild('[id=\"rule-details-name-input\"]');\n public ruleDescriptionInputLocator = this.getChild('[id=\"rule-details-description-textarea\"]');\n public addConditionButton = this.getChild('[data-automation-id=\"add-condition-button\"]');\n public addConditionGroupButton = this.getChild('[data-automation-id=\"add-group-button\"]');\n public fieldDropDown = this.getChild('[data-automation-id=\"field-select\"]');\n public comparatorDropDown = this.getChild('[data-automation-id=\"comparator-select\"]');\n public valueField = this.getChild('[data-automation-id=\"value-input\"]');\n public whenCreatedCheckbox = this.getChild('[data-automation-id=\"rule-trigger-checkbox-inbound\"]');\n public whenUpdatedCheckbox = this.getChild('[data-automation-id=\"rule-trigger-checkbox-update\"]');\n public whenDeletedCheckbox = this.getChild('[data-automation-id=\"rule-trigger-checkbox-outbound\"]');\n public destinationFolderButton = this.getChild('[data-automation-id=\"card-textitem-clickable-icon-destination-folder\"]');\n public ruleInBackgroundCheckbox = this.getChild('[data-automation-id=\"rule-option-checkbox-asynchronous\"]');\n public ruleSubfoldersCheckbox = this.getChild('[data-automation-id=\"rule-option-checkbox-inheritable\"]');\n public ruleDisableCheckbox = this.getChild('[data-automation-id=\"rule-option-checkbox-disabled\"] input');\n public actionsEllipsisButtons = this.getChild('[data-automation-id=\"rule-action-list-action-menu\"]');\n public actionsEllipsisDelete = this.page.locator('[data-automation-id=\"rule-action-list-remove-action-button\"]');\n public conditionsEllipsisButtons = this.getChild('[data-automation-id=\"condition-actions-button\"]');\n public conditionsEllipsisDelete = this.page.locator('button[title=\"Remove\"]');\n\n constructor(page: Page) {\n super(page, ManageRulesDialogComponent.rootElement);\n }\n\n async deleteActions(noActions: number): Promise<void> {\n for (let i = 0; i < noActions; i++) {\n await this.actionsEllipsisButtons.first().click();\n await this.actionsEllipsisDelete.click();\n }\n }\n\n async deleteConditions(noConditions: number): Promise<void> {\n for (let i = 0; i < noConditions; i++) {\n await this.conditionsEllipsisButtons.first().click();\n await this.conditionsEllipsisDelete.click();\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page, expect } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport class ManageRules extends BaseComponent {\n private static rootElement = '.aca-manage-rules';\n\n public getGroupsList = (optionName: string): Locator => this.getChild('.aca-rule-list-item__header', { hasText: optionName });\n public ruleToggle = this.getChild('.aca-manage-rules__container .mdc-switch').first();\n public ruleToggleFalse = this.getChild('aca-rule-list-grouping aca-rule-list-item .mdc-switch--unselected').first();\n public ruleDetailsTitle = this.getChild('.aca-manage-rules__container__rule-details__header__title__name');\n public ruleDetailsDeleteButton = this.getChild('#delete-rule-btn');\n public ruleDetailsEditButton = this.getChild('#edit-rule-btn');\n public ruleDetailsWhenText = this.getChild('[data-automation-id=\"rule-details-triggers-component\"]');\n public ruleDetailsPerformActionsDiv = this.getChild('adf-card-view-selectitem .adf-property-read-only');\n public rulesEmptyListTitle = this.getChild('.adf-empty-content__title');\n public ruleActions = this.getChild('aca-rule-action');\n public ruleConditionsInGroup = this.getChild('aca-rule-composite-condition aca-rule-simple-condition');\n public ruleDescription = this.getChild('.aca-manage-rules__container__rule-details__header__title__description');\n\n constructor(page: Page) {\n super(page, ManageRules.rootElement);\n }\n\n async checkAspects(aspects: string[]): Promise<void> {\n for (let i = 0; i < aspects.length; i++) {\n const aspectsActions = await this.ruleDetailsPerformActionsDiv.nth(i).innerText();\n expect(aspects).toContain(aspectsActions);\n }\n }\n\n async checkIfRuleListEmpty(): Promise<boolean> {\n return this.rulesEmptyListTitle.isVisible();\n }\n\n async checkIfRuleIsOnTheList(ruleName: string): Promise<void> {\n await expect(this.getGroupsList(ruleName)).toBeVisible({ timeout: 5000 });\n }\n\n async countConditionsInGroup(): Promise<number> {\n return this.ruleConditionsInGroup.count();\n }\n\n async turnOffRuleToggle(): Promise<void> {\n await expect(async () => {\n await this.ruleToggle.hover({ timeout: 1000 });\n await this.ruleToggle.click();\n await expect(this.ruleToggleFalse).toBeVisible();\n }).toPass({\n intervals: [2_000],\n timeout: 20_000\n });\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './manage-rules-dialog.component';\nexport * from './manage-rules.component';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from './base.component';\n\nexport class SpinnerComponent extends BaseComponent {\n private static rootElement = 'mat-progress-spinner';\n\n constructor(page: Page, rootElement = SpinnerComponent.rootElement) {\n super(page, rootElement);\n }\n\n async waitForReload(): Promise<void> {\n try {\n await this.getChild('').waitFor({ state: 'attached', timeout: 2000 });\n await this.getChild('').waitFor({ state: 'detached', timeout: 2000 });\n } catch (e) {\n this.logger.info('Spinner was not present');\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page } from '@playwright/test';\nimport { BaseComponent } from './base.component';\n\nexport enum ActionType {\n AddAspect = 'Add aspect',\n SimpleWorkflow = 'Add simple workflow',\n IncrementCounter = 'Increment Counter',\n CheckIn = 'Check in',\n AutoDeclareOptions = 'Auto-Declare Options',\n CheckOut = 'Check out',\n Copy = 'Copy',\n ExecuteScript = 'Execute script',\n ExtractCommonMetadataFields = 'Extract common metadata fields',\n FileAsRecord = 'File as Record',\n FileVersionAsRecord = 'File Version as Record',\n HideRecord = 'Hide Record',\n Import = 'Import',\n Move = 'Move',\n RemoveAspect = 'Remove aspect',\n RequestAIRenditions = 'Request AI renditions',\n SendEmail = 'Send email',\n SetPropertyValue = 'Set property value',\n SpecialiseType = 'Specialise type',\n TransformAndCopyContent = 'Transform and copy content',\n TransformAndCopyImage = 'Transform and copy image'\n}\n\nexport class ActionsDropdownComponent extends BaseComponent {\n private static rootElement = 'aca-edit-rule-dialog aca-rule-action-list';\n\n private getOptionLocator = (optionName: string): Locator =>\n this.page.locator('.mat-mdc-select-panel .mdc-list-item__primary-text', { hasText: optionName }).first();\n private ruleActionLocator = this.getChild('aca-rule-action');\n private addActionButtonLocator = this.getChild('[data-automation-id=\"rule-action-list-add-action-button\"]');\n private actionDropdownLocator = this.getChild('[data-automation-id=\"rule-action-select\"]');\n private actionAspectNameLocator = '[data-automation-id=\"header-aspect-name\"] .adf-property-field';\n private actionCheckInInputLocator = '[data-automation-id=\"header-description\"] input';\n private actionAutoDeclareLocator = '[data-automation-id=\"header-version\"] mat-select';\n private actionSpecialiseTypeLocator = '[data-automation-id=\"header-type-name\"] mat-select';\n private actionSimpleWorkflowStepInputLocator = '[data-automation-id=\"header-approve-step\"] input';\n private actionSimpleWorkflowApproveFolderLocator = `[data-automation-id=\"header-approve-folder\"] mat-icon`;\n private actionSimpleWorkflowActionChoiceLocator = '[data-automation-id=\"content-node-selector-actions-choose\"]';\n private actionSimpleWorkflowLabelApproveLocator = `[data-automation-id=\"card-boolean-label-approve-move\"]`;\n private actionSimpleWorkflowSRejectStepLocator = '[data-automation-id=\"header-reject-step\"] input';\n private actionSimpleWorkflowRejectFolderLocator = `[data-automation-id=\"header-reject-folder\"] input`;\n\n constructor(page: Page) {\n super(page, ActionsDropdownComponent.rootElement);\n }\n\n async selectAction(action: Partial<ActionType>, index: number): Promise<void> {\n if (index > 0) {\n await this.addActionButtonLocator.click();\n }\n await this.actionDropdownLocator.nth(index).hover({ timeout: 1000 });\n await this.actionDropdownLocator.nth(index).click();\n const option = this.getOptionLocator(action);\n await option.click();\n }\n\n async dropdownSelection(selectValue: string, locator: string, index: number): Promise<void> {\n await this.ruleActionLocator.nth(index).locator(locator).click();\n await this.getOptionLocator(selectValue).nth(0).click();\n }\n\n async insertCheckInActionValues(checkInValue: string, index: number): Promise<void> {\n await this.ruleActionLocator.nth(index).locator(this.actionCheckInInputLocator).fill(checkInValue);\n }\n\n async insertAddAspectActionValues(AspectValue: string, index: number): Promise<void> {\n await this.dropdownSelection(AspectValue, this.actionAspectNameLocator, index);\n }\n\n async insertAutoDeclareOptionsActionValues(autoDeclareOptionsValue: string, index: number): Promise<void> {\n await this.dropdownSelection(autoDeclareOptionsValue, this.actionAutoDeclareLocator, index);\n }\n\n async insertSpecialiseTypeActionValues(specialiseTypeValue: string, index: number): Promise<void> {\n await this.dropdownSelection(specialiseTypeValue, this.actionSpecialiseTypeLocator, index);\n }\n\n async insertSimpleWorkflowActionValues(stepValue: string, index: number): Promise<void> {\n await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowStepInputLocator).fill(stepValue);\n await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowApproveFolderLocator).click();\n await this.page.locator(this.actionSimpleWorkflowActionChoiceLocator).click();\n await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowLabelApproveLocator).click();\n await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowSRejectStepLocator).fill(stepValue);\n await this.ruleActionLocator.nth(index).locator(this.actionSimpleWorkflowRejectFolderLocator).click();\n await this.page.locator(this.actionSimpleWorkflowActionChoiceLocator).click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator } from '@playwright/test';\nimport { ManageRulesDialogComponent } from './manageRules/manage-rules-dialog.component';\n\nexport enum Field {\n Name = 'Name',\n Size = 'Size',\n Mimetype = 'Mimetype',\n Encoding = 'Encoding',\n HasCategory = 'Has category',\n HasTag = 'Has tag',\n HasAspect = 'Has aspect'\n}\n\nexport enum Comparator {\n Equals = '(=) Equals',\n Contains = 'Contains',\n StartsWith = 'Starts with',\n EndsWith = 'Ends with'\n}\n\nexport class ConditionComponent extends ManageRulesDialogComponent {\n private getOptionLocator = (optionName: string): Locator => this.page.locator(`.cdk-overlay-pane .mat-mdc-option span`, { hasText: optionName });\n\n private async selectField(fields: Partial<Field>, index: number): Promise<void> {\n await this.fieldDropDown.nth(index).click();\n const option = this.getOptionLocator(fields);\n await option.click();\n }\n\n private async selectComparator(comparators: Partial<Comparator>, index: number): Promise<void> {\n await this.comparatorDropDown.nth(index).click();\n const option = this.getOptionLocator(comparators);\n await option.click();\n }\n\n async addCondition(fields: Partial<Field>, value: string, index: number, comparators?: Partial<Comparator>): Promise<void> {\n await this.addConditionButton.first().click();\n await this.selectField(fields, index);\n if (comparators) {\n await this.selectComparator(comparators, index);\n }\n await this.valueField.nth(index).fill(value);\n }\n\n async addConditionGroup(fields: Partial<Field>, value: string, index: number, comparators?: Partial<Comparator>): Promise<void> {\n await this.addConditionGroupButton.last().click();\n await this.addConditionButton.nth(index).click();\n await this.selectField(fields, index);\n if (comparators) {\n await this.selectComparator(comparators, index);\n }\n await this.valueField.nth(index).fill(value);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from './base.component';\nimport { Page } from '@playwright/test';\n\nexport class AdfInfoDrawerComponent extends BaseComponent {\n private static rootElement = 'adf-info-drawer';\n\n constructor(page: Page) {\n super(page, AdfInfoDrawerComponent.rootElement);\n }\n\n private readonly categoriesManagement = this.getChild('adf-categories-management');\n private readonly tagsCreator = this.getChild('adf-tags-creator');\n\n public getNameField = (labelText: string) =>\n this.getChild(`[data-automation-id=\"library-name-properties-wrapper\"] input[placeholder='${labelText}']`);\n public getIdField = (labelText: string) => this.getChild(`[data-automation-id=\"library-id-properties-wrapper\"] input[placeholder='${labelText}']`);\n public getVisibilityField = (labelText: string) =>\n this.getChild(`[data-automation-id=\"library-visibility-properties-wrapper\"] mat-select[ng-reflect-placeholder='${labelText}']`);\n public getDescriptionField = this.getChild('[data-automation-id=\"library-description-properties-wrapper\"] textarea');\n public propertiesTab = this.page.getByRole('tab', { name: 'Properties' });\n public commentsTab = this.page.getByRole('tab', { name: 'Comments' });\n public infoDrawerTabs = this.getChild('.adf-info-drawer-tab');\n public commentInputField = this.page.locator('#comment-input');\n public commentsHeader = this.getChild('#comment-header');\n public addCommentButton = this.getChild('[data-automation-id=\"comments-input-add\"]');\n public commentsList = this.getChild('.adf-comment-list-item');\n public commentUsername = this.getChild('.adf-comment-user-name');\n public commentTextContent = this.getChild('.adf-comment-message');\n public commentTimestamp = this.getChild('.adf-comment-message-time');\n public infoDrawerPanel = this.page.locator('.adf-info-drawer');\n public headerTitle = this.page.locator('.adf-info-drawer-layout-header-title').getByRole('heading');\n public editButton = this.page.getByRole('button', { name: 'Edit' });\n public cancelButton = this.page.getByRole('button', { name: 'Cancel' });\n public updateButton = this.page.getByRole('button', { name: 'Update' });\n public hintMessage = this.page.locator('mat-hint');\n public errorMessage = this.page.locator('mat-error');\n public expandDetailsButton = this.getChild(`button[title='Expand panel']`);\n public expandedDetailsTabs = this.page.locator('.aca-details-container .mdc-tab__text-label');\n public expandedDetailsPermissionsTab = this.expandedDetailsTabs.getByText('Permissions');\n public nameField = this.page.locator('input[placeholder=Name]');\n public idField = this.page.locator(`input[placeholder='Library ID']`);\n public descriptionField = this.page.locator('textarea[placeholder=Description]');\n public visibilityField = this.infoDrawerPanel.getByRole('combobox');\n public selectVisibility = (visibilityOption: string) => this.page.getByRole('listbox').getByRole('option', { name: visibilityOption }).click();\n public tagsAccordion = this.getChild('[data-automation-id=\"adf-content-metadata-tags-panel\"]');\n public categoriesAccordion = this.getChild('[data-automation-id=\"adf-content-metadata-categories-panel\"]');\n public tagsAccordionPenButton = this.tagsAccordion.locator('[data-automation-id=\"showing-tag-input-button\"]');\n public categoriesAccordionPenButton = this.categoriesAccordion.locator('[data-automation-id=\"meta-data-categories-edit\"]');\n public tagsInput = this.tagsCreator.locator('input');\n public createTagButton = this.tagsCreator.locator('.adf-create-tag-label');\n public tagsChips = this.tagsCreator.locator('mat-chip');\n public tagsChipsXButton = this.tagsChips.locator('.adf-dynamic-chip-list-delete-icon');\n public tagsAccordionCancelButton = this.getChild('[data-automation-id=\"reset-tags-metadata\"]');\n public tagsAccordionConfirmButton = this.getChild('[data-automation-id=\"save-tags-metadata\"]');\n public categoriesAccordionCancelButton = this.getChild('[data-automation-id=\"reset-metadata\"]');\n public categoriesAccordionConfirmButton = this.getChild('[data-automation-id=\"save-categories-metadata\"]');\n public categoriesInput = this.categoriesManagement.locator('input');\n public categoriesListItems = this.categoriesManagement.locator('.adf-category');\n public categoriesItemRemoveButton = this.categoriesManagement.locator('[data-automation-id=\"categories-remove-category-button\"]');\n public categoriesCreatedList = this.getChild('.adf-metadata-categories');\n public generalInfoAccordion = this.getChild('[data-automation-id=\"adf-metadata-group-properties\"]');\n public generalInfoProperties = this.generalInfoAccordion.locator('.adf-property');\n public generalInfoEditButton = this.getChild('[data-automation-id=\"meta-data-general-info-edit\"]');\n public exifInfoAccordion = this.getChild('[data-automation-id=\"adf-metadata-group-APP.CONTENT_METADATA.EXIF_GROUP_TITLE\"]');\n public exifInfoProperties = this.exifInfoAccordion.locator('.adf-property');\n public generalInfoNameField = this.getChild('[data-automation-id=\"card-textitem-value-properties.cm:name\"]');\n public generalInfoTitleField = this.getChild('[data-automation-id=\"card-textitem-value-properties.cm:title\"]');\n public generalInfoAuthorField = this.getChild('[data-automation-id=\"card-textitem-value-properties.cm:author\"]');\n public generalInfoDescriptionField = this.getChild('[data-automation-id=\"card-textitem-value-properties.cm:description\"]');\n public generalInfoCreatorField = this.getChild('[data-automation-id=\"card-textitem-value-createdByUser.displayName\"]');\n public generalInfoCreatedDateField = this.getChild('[data-automation-id=\"header-createdAt\"] .adf-property-value');\n public generalInfoModifiedDateField = this.getChild('[data-automation-id=\"header-modifiedAt\"] .adf-property-value');\n public generalInfoMimeTypeField = this.getChild('[data-automation-id=\"card-textitem-value-content.mimeTypeName\"]');\n public generalInfoContentTypeCombobox = this.getChild('[role=\"combobox\"]');\n public generalInfoNameError = this.getChild('[data-automation-id=\"card-textitem-error-properties.cm:name\"]');\n public generalInfoSaveButton = this.getChild('[data-automation-id=\"save-general-info-metadata\"]');\n\n async checkCommentsHeaderCount(): Promise<number> {\n const commentsCountTextContent = await this.commentsHeader.textContent();\n const commentsCountString = commentsCountTextContent.match(/\\d+/g)[0];\n return parseInt(commentsCountString, 10);\n }\n\n async getCommentsCountFromList(): Promise<number> {\n return this.commentsList.count();\n }\n\n async waitForComments(): Promise<void> {\n await this.commentsList.first().waitFor();\n }\n\n async addCommentToNode(commentText: string): Promise<void> {\n await this.commentInputField.click();\n await this.commentInputField.fill(commentText);\n await this.addCommentButton.click();\n }\n\n async getHeaderTitle(): Promise<string> {\n return this.headerTitle.textContent();\n }\n\n async getTabsCount(): Promise<number> {\n return this.infoDrawerTabs.count();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page, expect } from '@playwright/test';\nimport { MatMenuComponent } from './dataTable';\nimport { BaseComponent } from './base.component';\n\nexport class AcaHeader extends BaseComponent {\n private static rootElement = 'aca-toolbar';\n private moreActionsButton = this.getChild('button[id=\"app.viewer.toolbar.more\"]');\n private toolbarMoreActions = this.getChild('button[id=\"app.toolbar.more\"]');\n public createButton = this.getChild('[id=\"app.toolbar.create\"]');\n public viewDetails = this.getChild('[title=\"View Details\"]');\n public viewButton = this.getChild('button[title=\"View\"]');\n public searchButton = this.getChild('button[id=\"app.toolbar.search\"]');\n public fullScreenButton = this.getChild('button[id=\"app.viewer.fullscreen\"]');\n public shareButton = this.getChild('button[id=\"share-action-button\"]');\n public downloadButtonViewer = this.getChild('button[id=\"app.viewer.download\"]');\n public downloadButton = this.getChild('button[id=\"app.toolbar.download\"]');\n public sharedDownloadButton = this.getChild('button[id=\"app.viewer.shared.download\"]');\n public uploadButton = this.getChild('button[id=\"app.toolbar.upload\"]');\n public uploadFileButton = this.page.locator('button[id=\"app.create.uploadFile\"]');\n public uploadInput = this.page.locator('input[id=\"app-upload-files\"]');\n public uploadNewVersionButton = this.page.locator('#app-upload-file-version');\n public permanentlyDeleteButton = this.getChild('button[id=\"app.toolbar.purgeDeletedNodes\"]');\n public restoreButton = this.getChild('button[id=\"app.toolbar.restoreDeletedNodes\"]');\n\n constructor(page: Page) {\n super(page, AcaHeader.rootElement);\n }\n public matMenu = new MatMenuComponent(this.page);\n\n async clickViewerMoreActions(): Promise<void> {\n await this.moreActionsButton.waitFor({ state: 'attached' });\n await this.moreActionsButton.click();\n }\n\n async clickMoreActions(): Promise<void> {\n await this.toolbarMoreActions.waitFor({ state: 'attached' });\n await this.toolbarMoreActions.click();\n }\n\n async clickCreateFolderFromTemplate(): Promise<void> {\n await this.createButton.click();\n await this.matMenu.createFolderFromTemplate.click();\n }\n\n async verifyToolbarPrimaryActions(expectedToolbarPrimary: string[]): Promise<void> {\n const buttons = await this.page.$$('aca-toolbar button');\n const actualPrimaryActions: string[] = await Promise.all(\n buttons.map(async (button) => {\n const title = await button.getAttribute('title');\n return title || '';\n })\n );\n\n for (const action of expectedToolbarPrimary) {\n expect(actualPrimaryActions.includes(action), `Expected to contain ${action}`).toBe(true);\n }\n }\n\n async clickCreateFileFromTemplate(): Promise<void> {\n await this.createButton.click();\n await this.matMenu.createFileFromTemplate.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page, expect } from '@playwright/test';\nimport { BaseComponent } from './base.component';\nimport { AcaHeader } from './aca-header.component';\nimport { timeouts } from '../../utils';\n\nexport class ViewerComponent extends BaseComponent {\n private static rootElement = 'adf-viewer';\n\n public viewerLocator = this.getChild('adf-viewer-render');\n public closeButtonLocator = this.getChild('.adf-viewer-close-button');\n public fileTitleButtonLocator = this.getChild('.adf-viewer__file-title');\n public pdfViewerContentPages = this.getChild('.adf-pdf-viewer__content .page');\n public shareButton = this.getChild('button[id=\"share-action-button\"]');\n public downloadButton = this.getChild('button[id=\"app.viewer.download\"]');\n public allButtons = this.getChild('button');\n public unknownFormat = this.getChild(`adf-viewer-unknown-format .adf-viewer__unknown-format-view`);\n public viewerImage = this.viewerLocator.locator('.cropper-canvas img');\n public viewerDocument = this.viewerLocator.locator('.adf-pdf-viewer__content [role=\"document\"]');\n public documentThumbnailButton = this.getChild('[data-automation-id=\"adf-thumbnails-button\"]');\n public thumbnailsPages = this.getChild('[data-automation-id=\"adf-thumbnails-content\"] adf-pdf-thumb');\n public thumbnailsCloseButton = this.getChild('[data-automation-id=\"adf-thumbnails-close\"]');\n public viewerPage = this.getChild('[data-automation-id=\"adf-page-selector\"]');\n public viewerMedia = this.getChild('adf-media-player');\n public viewerSpinner = this.getChild('.adf-viewer-render__loading-screen');\n public zoomInButton = this.getChild('#viewer-zoom-in-button');\n public zoomOutButton = this.getChild('#viewer-zoom-out-button');\n public zoomScale = this.getChild('[data-automation-id=\"adf-page-scale\"]');\n public zoomResetButton = this.getChild('#viewer-reset-button');\n public fitToPageButton = this.getChild('#viewer-scale-page-button');\n\n toolbar = new AcaHeader(this.page);\n\n constructor(page: Page) {\n super(page, ViewerComponent.rootElement);\n }\n\n async isPdfViewerContentDisplayed(): Promise<boolean> {\n const count = await this.pdfViewerContentPages.count();\n return count > 0;\n }\n\n async isViewerOpened(): Promise<boolean> {\n await this.waitForViewerToOpen();\n return this.viewerLocator.isVisible();\n }\n\n async waitForViewerToOpen(waitForViewerContent?: 'wait for viewer content'): Promise<void> {\n if (waitForViewerContent) {\n await this.waitForViewerLoaderToFinish();\n }\n await this.viewerLocator.waitFor({ state: 'visible', timeout: timeouts.large });\n }\n\n async waitForViewerLoaderToFinish(customTimeout?: number): Promise<void> {\n try {\n await this.viewerSpinner.waitFor({ state: 'hidden', timeout: customTimeout || timeouts.extraLarge });\n } catch (error) {\n this.logger.log('waitForViewerLoaderToFinish: Timeout reached while waiting for viewer loader to finish.');\n throw error;\n }\n }\n\n async checkViewerActivePage(pageNumber: number): Promise<void> {\n await expect(this.viewerPage).toHaveValue(pageNumber.toString());\n }\n\n async clickViewerThumbnailPage(pageNumber: number): Promise<void> {\n await this.thumbnailsPages.nth(pageNumber - 1).click();\n }\n\n async isCloseButtonDisplayed(): Promise<boolean> {\n await this.closeButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal });\n return this.closeButtonLocator.isEnabled({ timeout: timeouts.normal });\n }\n\n async isFileTitleDisplayed(): Promise<boolean> {\n await this.fileTitleButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal });\n return this.fileTitleButtonLocator.isVisible();\n }\n\n async waitForZoomPercentageToDisplay(): Promise<void> {\n await this.zoomScale.waitFor({ state: 'visible', timeout: timeouts.normal });\n const startTime = Date.now();\n let textContent: string;\n\n while (Date.now() - startTime <= timeouts.medium) {\n textContent = await this.zoomScale.innerText();\n if (textContent.trim() !== '') {\n break;\n }\n await this.page.waitForTimeout(timeouts.tiny);\n }\n\n if (textContent.trim() === '') {\n throw new Error(`Timeout: Text did not show up within ${timeouts.medium} ms`);\n }\n }\n\n async getFileTitle(): Promise<string> {\n await this.fileTitleButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal });\n await this.waitForViewerLoaderToFinish();\n return this.fileTitleButtonLocator.textContent();\n }\n\n async getCloseButtonTooltip(): Promise<string> {\n await this.closeButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal });\n return this.closeButtonLocator.getAttribute('title');\n }\n\n async verifyViewerPrimaryActions(expectedToolbarPrimary: string[]): Promise<void> {\n const toRemove = ['Close', 'Previous File', 'Next File', 'View details'];\n const removeClosePreviousNextOldInfo = (actions: string[]): string[] => actions.filter((elem) => !toRemove.includes(elem));\n\n const buttons = await this.page.$$('adf-viewer button');\n let actualPrimaryActions: string[] = await Promise.all(\n buttons.map(async (button) => {\n const title = await button.getAttribute('title');\n return title || '';\n })\n );\n\n actualPrimaryActions = removeClosePreviousNextOldInfo(actualPrimaryActions);\n\n for (const action of expectedToolbarPrimary) {\n expect(actualPrimaryActions.includes(action), `Expected to contain ${action}`).toBe(true);\n }\n }\n\n async checkUnknownFormatIsDisplayed(): Promise<void> {\n await this.unknownFormat.waitFor({ state: 'visible', timeout: timeouts.normal });\n }\n\n async getUnknownFormatMessage(): Promise<string> {\n return this.unknownFormat.locator(`.adf-viewer__unknown-label`).innerText();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Locator, Page } from '@playwright/test';\nimport { BaseComponent } from '.././base.component';\nimport { timeouts } from '../../../utils';\n\nexport class SearchInputComponent extends BaseComponent {\n private static rootElement = 'aca-page-layout';\n public searchInput = this.page.locator('#app-control-input');\n public searchButton = this.page.locator('.aca-search-input--search-button');\n public searchCloseButton = this.page.locator('.aca-search-input--close-button');\n\n /**\n * Method used in cases where user have possibility to navigate \"inside\" the element (it's clickable and has link attribute).\n * Perform action .click() to navigate inside it\n *\n * @returns reference to cell element which contains link.\n */\n getCellLinkByName = (name: string): Locator => this.getChild('.adf-datatable-row[role=\"row\"]', { hasText: name });\n\n constructor(page: Page, rootElement = SearchInputComponent.rootElement) {\n super(page, rootElement);\n }\n\n async performDoubleClickFolderOrFileToOpen(name: string): Promise<void> {\n await this.getCellLinkByName(name).waitFor({ state: 'visible', timeout: timeouts.medium });\n await this.getCellLinkByName(name).dblclick();\n await this.spinnerWaitForReload();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '.././base.component';\n\nexport class SearchOverlayComponent extends BaseComponent {\n private static rootElement = '.cdk-overlay-pane';\n\n public searchFilesOption = this.getChild('input#content-input');\n public searchFoldersOption = this.getChild('input#folder-input');\n public searchLibrariesOption = this.getChild('input#libraries-input');\n public searchInput = this.page.locator('#app-control-input');\n public searchButton = this.page.locator('app-search-input-control button[title=\"Search\"]');\n public searchInputControl = this.page.locator('.app-search-control');\n public searchOptions = this.page.locator('.app-search-options');\n\n constructor(page: Page, rootElement = SearchOverlayComponent.rootElement) {\n super(page, rootElement);\n }\n\n async isFoldersOptionChecked() {\n const optClass = await this.searchFoldersOption.getAttribute('class');\n return optClass.includes('.mat-mdc-checkbox-checked');\n }\n\n async isFilesOptionChecked() {\n const optClass = await this.searchFilesOption.getAttribute('class');\n return optClass.includes('.mat-mdc-checkbox-checked');\n }\n\n async isLibrariesOptionChecked() {\n const optClass = await this.searchLibrariesOption.getAttribute('class');\n return optClass.includes('.mat-mdc-checkbox-checked');\n }\n\n async clearOptions() {\n if (await this.isFilesOptionChecked()) {\n await this.searchFilesOption.click();\n }\n if (await this.isFoldersOptionChecked()) {\n await this.searchFoldersOption.click();\n }\n if (await this.isLibrariesOptionChecked()) {\n await this.searchLibrariesOption.click();\n }\n }\n\n async checkOnlyFolders(): Promise<void> {\n await this.clearOptions();\n await this.searchFoldersOption.click();\n }\n\n async checkOnlyFiles(): Promise<void> {\n await this.clearOptions();\n await this.searchFilesOption.click();\n }\n\n async checkLibraries(): Promise<void> {\n await this.clearOptions();\n await this.searchLibrariesOption.click();\n }\n\n async checkFilesAndFolders(): Promise<void> {\n await this.clearOptions();\n await this.searchFilesOption.click();\n await this.searchFoldersOption.click();\n }\n\n async searchFor(input: string): Promise<void> {\n await this.searchInput.fill(input);\n await this.searchButton.click({ force: true });\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from '../base.component';\n\nexport type SortByType = 'Relevance' | 'Title' | 'Filename' | 'Modified date' | 'Modifier' | 'Created date' | 'Size' | 'Type';\nexport type SortByDirection = 'asc' | 'desc';\n\nexport class SearchSortingPicker extends BaseComponent {\n private static rootElement = '#aca-button-action-menu';\n\n public actionMenu = this.page.locator('[data-automation-id=\"auto_header_content_id_$thumbnail\"]');\n public sortOrderButton = this.page.locator('#aca-button-sorting-menu');\n public sortByDropdownExpanded = this.page.locator('.mat-mdc-menu-panel').first();\n public sortByList = this.page.locator('.mat-mdc-menu-panel button');\n\n constructor(page: Page, rootElement = SearchSortingPicker.rootElement) {\n super(page, rootElement);\n }\n\n async waitForSortByDropdownToExpand(): Promise<void> {\n await this.sortByDropdownExpanded.waitFor();\n }\n\n async isSortOrderButtonDisplayed(): Promise<boolean> {\n return this.sortOrderButton.isVisible();\n }\n\n async isSortByDropdownExpanded(): Promise<boolean> {\n return this.sortByDropdownExpanded.isVisible();\n }\n\n async clickSortByDropdown(): Promise<void> {\n await this.sortOrderButton.click();\n await this.waitForSortByDropdownToExpand();\n }\n\n async getSortByOptionsList(): Promise<string[]> {\n const sortOptionsCount = await this.sortByList.count();\n const sortByOptions: string[] = [];\n for (let i = 1; i < sortOptionsCount; i++) {\n const textContent = (await this.sortByList.nth(i).textContent()).trim();\n sortByOptions.push(textContent);\n }\n sortByOptions.sort((a, b) => a.localeCompare(b));\n return sortByOptions;\n }\n\n async sortBy(option: SortByType, direction: SortByDirection): Promise<void> {\n await this.actionMenu.click();\n await this.clickSortByDropdown();\n\n if (!(await this.isSortByDropdownExpanded())) {\n await this.clickSortByDropdown();\n }\n const elem = this.sortByList.getByText(option);\n const optionId = await elem.locator('..').getAttribute('id');\n await elem.click();\n const directionSortElement = this.page.locator(`[id=\"${optionId}-${direction.toLocaleLowerCase()}\"]`);\n await directionSortElement.click();\n await this.progressBarWaitForReload();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFilters extends BaseComponent {\n private static rootElement = '.aca-content__advanced-filters';\n\n constructor(page: Page) {\n super(page, SearchFilters.rootElement);\n }\n\n public filtersButtons = this.page.locator('adf-search-widget-chip');\n public logicFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Logic' });\n public propertiesFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Properties' });\n public dateFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Date' });\n public locationFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Location' });\n public tagsFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Tags' });\n public categoriesFilter = this.page.locator('adf-search-widget-chip', { hasText: 'Categories' });\n public resetButton = this.page.locator('button', { hasText: 'Reset' });\n public menuCardTitle = this.page.locator('.adf-search-filter-title');\n public menuCardClose = this.page.locator('.adf-search-filter-title-action');\n public menuCardClear = this.page.locator('#cancel-filter-button');\n public menuCardApply = this.page.locator('#apply-filter-button');\n public dropdownOptions = this.page.locator(`mat-option`);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFiltersCategories extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersCategories.rootElement);\n }\n\n public addOptionInput = this.getChild(`[data-automation-id$='adf-search-chip-autocomplete-input']`);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../../base.component';\nimport { Page, expect } from '@playwright/test';\nimport { SearchPage, SearchType } from '../../../pages';\n\ntype FilterTab = 'Created' | 'Modified';\n\ninterface FilterFilesByDateParams {\n searchPage: SearchPage;\n filterType: 'anytime' | 'inTheLast' | 'between';\n dateFilterTab: FilterTab;\n searchPhrase: string;\n searchType: SearchType;\n expectSearchResults: number;\n inTheLastInputValue?: string;\n startDay?: string;\n endDay?: string;\n}\n\nexport class SearchFiltersDate extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersDate.rootElement);\n }\n\n public createdTab = this.getChild(`[role='tab']`, { hasText: 'Created' });\n public modifiedTab = this.getChild(`[role='tab']`, { hasText: 'Modified' });\n public createdTabTitle = this.createdTab.locator(`div`);\n public modifiedTabTitle = this.modifiedTab.locator(`div`);\n public anytimeButton = this.getChild(`[data-automation-id$='date-range-anytime']`);\n public anytimeRadioButton = this.anytimeButton.locator(`input`);\n public inTheLastButton = this.getChild(`[data-automation-id$='date-range-in-last']`);\n public inTheLastInput = this.getChild(`[data-automation-id$='date-range-in-last-input']`);\n public inTheLastDropdown = this.getChild(`[data-automation-id$='date-range-in-last-dropdown']`);\n public betweenButton = this.getChild(`[data-automation-id$='date-range-between']`);\n public betweenRadioButton = this.betweenButton.locator(`input`);\n public betweenStartDate = this.getChild(`[data-automation-id$='date-range-between-start-input']`);\n public betweenEndDate = this.getChild(`[data-automation-id$='date-range-between-end-input']`);\n\n async openCreatedModifiedTab(page: SearchPage, tab: FilterTab): Promise<void> {\n switch (tab) {\n case 'Created':\n await page.searchFiltersDate.createdTab.click();\n break;\n case 'Modified':\n await page.searchFiltersDate.modifiedTab.click();\n break;\n default:\n break;\n }\n await page.page.waitForTimeout(2000);\n }\n\n /**\n * Method used in cases where we want to filter search results by Date\n *\n * @param searchPage page context for the test\n * @param filterType filter type for the Date filter\n * @param dateFilterTab tab in Date filter. Either Created or Modified\n * @param searchPhrase search phrase for the search\n * @param searchType type of items we want in search results e.g. files or folders\n * @param expectSearchResults expect a number of search results\n * @param inTheLastInputValue a value for 'in the last' input. e.g. in the last X days\n * @param startDay start day for time-frame search. DD-MMMM-YY\n * @param endDay end day for time-frame search. DD-MMMM-YY\n */\n async filterFilesByDate(params: FilterFilesByDateParams) {\n const { searchPage, filterType, dateFilterTab, searchPhrase, searchType, expectSearchResults, inTheLastInputValue, startDay, endDay } = params;\n\n await searchPage.searchWithin(searchPhrase, searchType);\n await searchPage.dataTable.progressBarWaitForReload();\n await searchPage.searchFilters.dateFilter.click();\n\n if (dateFilterTab === 'Modified') {\n await searchPage.searchFiltersDate.openCreatedModifiedTab(searchPage, 'Modified');\n }\n\n switch (filterType) {\n case 'anytime':\n await searchPage.searchFiltersDate.anytimeButton.click();\n break;\n case 'inTheLast':\n await searchPage.searchFiltersDate.inTheLastButton.click();\n await searchPage.searchFiltersDate.inTheLastInput.fill(inTheLastInputValue);\n break;\n case 'between':\n await searchPage.searchFiltersDate.betweenButton.click();\n await searchPage.searchFiltersDate.betweenStartDate.fill(startDay);\n await searchPage.searchFiltersDate.betweenEndDate.fill(endDay);\n break;\n default:\n throw new Error('Invalid filter type');\n }\n\n await searchPage.searchFilters.menuCardApply.click();\n await searchPage.dataTable.progressBarWaitForReload();\n expect(await searchPage.dataTable.getRowsCount()).toEqual(expectSearchResults);\n\n let dateText: string;\n if (filterType === 'between') {\n if (dateFilterTab === 'Modified') {\n dateText = `Modified: ${startDay} - ${endDay}`;\n } else {\n dateText = `Created: ${startDay} - ${endDay}`;\n }\n await expect(searchPage.searchFilters.dateFilter).toContainText(dateText, { ignoreCase: true });\n }\n }\n\n async isModifiedTabSelected(): Promise<string> {\n return this.modifiedTab.getAttribute('aria-selected');\n }\n\n async isSearchTabSelected(): Promise<string> {\n return this.createdTab.getAttribute('aria-selected');\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { SearchPage } from '../../../pages';\nimport { BaseComponent } from '../../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFiltersLocation extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersLocation.rootElement);\n }\n\n public addOptionInput = this.getChild(`[data-automation-id$='adf-search-chip-autocomplete-input']`);\n\n async filterByLocation(page: SearchPage, location: string): Promise<void> {\n await page.searchFilters.locationFilter.click();\n await page.searchFiltersLocation.addOptionInput.fill(location);\n await page.page.keyboard.press('Enter');\n await page.searchFilters.menuCardApply.click();\n await page.dataTable.progressBarWaitForReload();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '../../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFiltersLogic extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersLogic.rootElement);\n }\n\n public matchAllInput = this.getChild(`[placeholder$='Results will match all words entered here']`);\n public matchAnyInput = this.getChild(`[placeholder$='Results will match any words entered here']`);\n public excludeInput = this.getChild(`[placeholder$='Results will exclude matches with these words']`);\n public matchExactInput = this.getChild(`[placeholder$='Results will match this entire phrase']`);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { SearchPage } from '../../../pages';\nimport { BaseComponent } from '../../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFiltersProperties extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersProperties.rootElement);\n }\n\n public operatorButton = this.getChild(`.adf-search-properties-file-size-operator`);\n public fileSizeInput = this.getChild(`[placeholder$='Enter file size']`);\n public unitButton = this.getChild(`.adf-search-properties-file-size-unit`);\n public fileTypeInput = this.getChild(`[placeholder$='File Type']`);\n public atLeastOption = this.page.locator(`mat-option`, { hasText: 'At Least' });\n public atMostOption = this.page.locator(`mat-option`, { hasText: 'At Most' });\n public exactlyOption = this.page.locator(`mat-option`, { hasText: 'Exactly' });\n public kbUnit = this.page.locator(`mat-option`, { hasText: 'KB' });\n public mbUnit = this.page.locator(`mat-option`, { hasText: 'MB' });\n public gbUnit = this.page.locator(`mat-option`, { hasText: 'GB' });\n public dropdownOptions = this.page.locator(`mat-option`);\n\n async setPropertiesParameters(\n page: SearchPage,\n operator?: 'At Least' | 'At Most' | 'Exactly',\n unit?: 'KB' | 'MB' | 'GB',\n fileSizeInputText?: string,\n fileTypeInputText?: string\n ): Promise<void> {\n await page.searchFilters.propertiesFilter.click();\n\n if (operator) {\n await this.operatorButton?.click();\n switch (operator) {\n case 'At Least':\n await this.atLeastOption?.click();\n break;\n case 'At Most':\n await this.atMostOption?.click();\n break;\n case 'Exactly':\n await this.exactlyOption?.click();\n break;\n }\n }\n\n if (unit) {\n await this.unitButton?.click();\n switch (unit) {\n case 'KB':\n await this.kbUnit?.click();\n break;\n case 'MB':\n await this.mbUnit?.click();\n break;\n case 'GB':\n await this.gbUnit?.click();\n break;\n }\n }\n\n if (fileSizeInputText) {\n await this.fileSizeInput?.fill(fileSizeInputText);\n }\n\n if (fileTypeInputText) {\n await this.fileTypeInput?.fill(fileTypeInputText);\n await this.dropdownOptions.getByText(fileTypeInputText).waitFor();\n await this.dropdownOptions.getByText(fileTypeInputText).click();\n }\n\n await page.searchFilters.menuCardApply.click();\n await page.dataTable.progressBarWaitForReload();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { SearchPage } from '../../../pages';\nimport { BaseComponent } from '../../base.component';\nimport { Page } from '@playwright/test';\n\nexport class SearchFiltersTags extends BaseComponent {\n private static rootElement = '.adf-search-filter-menu-card';\n\n constructor(page: Page) {\n super(page, SearchFiltersTags.rootElement);\n }\n\n public addOptionInput = this.getChild(`[data-automation-id$='adf-search-chip-autocomplete-input']`);\n\n async filterByTag(page: SearchPage, tag: string): Promise<void> {\n await page.searchFilters.tagsFilter.click();\n await page.searchFiltersTags.addOptionInput.fill(tag);\n await page.page.keyboard.press('Enter');\n await page.searchFilters.menuCardApply.click();\n await page.dataTable.progressBarWaitForReload();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { BaseComponent } from '.././base.component';\nimport { Locator, Page } from '@playwright/test';\nexport class Breadcrumb extends BaseComponent {\n private static rootElement = 'adf-breadcrumb';\n public items = this.getChild('.adf-breadcrumb-item');\n public currentItem = this.getChild('.adf-breadcrumb-item-current');\n getItemByTitle = (name: string): Locator => this.getChild(`.adf-breadcrumb-item[title=${name}]`);\n\n constructor(page: Page) {\n super(page, Breadcrumb.rootElement);\n }\n\n async getAllItems(): Promise<string[]> {\n const itemElements = await this.page.$$('adf-breadcrumb .adf-breadcrumb-item');\n const itemTexts = await Promise.all(\n itemElements.map(async (elem) => {\n const text = await elem.innerText();\n return text.split('\\nchevron_right')[0];\n })\n );\n return itemTexts;\n }\n\n async clickItem(name: string): Promise<void> {\n const elem = this.getChild(`.adf-breadcrumb-item[title=${name}]`);\n await elem.click();\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { SIDEBAR_LABELS, timeouts } from '../../utils';\nimport { BaseComponent } from './base.component';\nimport { Locator, Page } from '@playwright/test';\n\nexport class SidenavComponent extends BaseComponent {\n private static rootElement = 'app-sidenav';\n\n private personalFiles = this.getChild(`[data-automation-id='app.navbar.personalFiles']`);\n private myLibraries = this.getChild(`[data-automation-id='app.navbar.libraries.files']`);\n private favoriteLibraries = this.getChild(`[data-automation-id='app.navbar.libraries.favorite']`);\n private shared = this.getChild(`[data-automation-id='app.navbar.shared']`);\n private recentFiles = this.getChild(`[data-automation-id='app.navbar.recentFiles']`);\n private favorites = this.getChild(`[data-automation-id='app.navbar.favorites']`);\n private trash = this.getChild(`[data-automation-id='app.navbar.trashcan']`);\n private sidenavToggle = this.getChild(`.aca-sidenav-header-title-logo`);\n private sidenavExpand = this.page.getByTitle('Expand navigation menu');\n public expandedSidenav = this.page.locator(`[data-automation-id='expanded']`);\n\n constructor(page: Page) {\n super(page, SidenavComponent.rootElement);\n }\n\n async isActive(name: string): Promise<boolean> {\n const cssClass = await this.getLinkLabel(name).getAttribute('class');\n return cssClass.includes('action-button--active');\n }\n\n async openPanel(name: string): Promise<void> {\n await this.getLinkLabel(name).click();\n }\n\n private getLinkLabel(name: string): Locator {\n switch (name) {\n case SIDEBAR_LABELS.PERSONAL_FILES:\n return this.personalFiles;\n case SIDEBAR_LABELS.MY_LIBRARIES:\n return this.myLibraries;\n case SIDEBAR_LABELS.FAVORITE_LIBRARIES:\n return this.favoriteLibraries;\n case SIDEBAR_LABELS.SHARED_FILES:\n return this.shared;\n case SIDEBAR_LABELS.RECENT_FILES:\n return this.recentFiles;\n case SIDEBAR_LABELS.FAVORITES:\n return this.favorites;\n case SIDEBAR_LABELS.TRASH:\n return this.trash;\n default:\n return this.personalFiles;\n }\n }\n\n async isSidenavExpanded(): Promise<boolean> {\n await this.page.waitForTimeout(timeouts.tiny);\n return this.expandedSidenav.isVisible();\n }\n\n async expandSideNav(): Promise<void> {\n const expanded = await this.isSidenavExpanded();\n if (!expanded) {\n await this.sidenavExpand.click();\n await this.expandedSidenav.waitFor({ state: 'attached' });\n }\n }\n\n async collapseSideNav(): Promise<void> {\n const expanded = await this.isSidenavExpanded();\n if (expanded) {\n await this.sidenavToggle.click();\n await this.expandedSidenav.waitFor({ state: 'detached' });\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BaseComponent } from './base.component';\n\nexport class ErrorComponent extends BaseComponent {\n private static rootElement = 'aca-page-layout';\n genericError = this.getChild('aca-generic-error');\n genericErrorTitle = this.getChild('.generic-error__title');\n\n constructor(page: Page) {\n super(page, ErrorComponent.rootElement);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './snackBar/snack-bar.component';\nexport * from './dataTable';\nexport * from './dialogs';\nexport * from './manageRules';\nexport * from './base.component';\nexport * from './spinner.component';\nexport * from './actions-dropdown.component';\nexport * from './conditions.component';\nexport * from './pagination.component';\nexport * from './adf-info-drawer.component';\nexport * from './viewer.component';\nexport * from './search/search-input.component';\nexport * from './search/search-overlay.components';\nexport * from './search/search-sorting-picker.components';\nexport * from './search/search-filters.component';\nexport * from './search/search-filters/search-filters-categories.component';\nexport * from './search/search-filters/search-filters-date.component';\nexport * from './search/search-filters/search-filters-location.component';\nexport * from './search/search-filters/search-filters-logic.component';\nexport * from './search/search-filters/search-filters-properties.component';\nexport * from './search/search-filters/search-filters-tags.component';\nexport * from './breadcrumb/breadcrumb.component';\nexport * from './sidenav.component';\nexport * from './aca-header.component';\nexport * from './error.component';\nexport * from './datetime-picker/datetime-picker.component';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { PlaywrightBase } from '../playwright-base';\nimport { SnackBarComponent, SpinnerComponent } from '../components';\n\nexport interface NavigateOptions {\n query?: string;\n waitForRequest?: boolean;\n waitUntil?: 'networkidle' | 'commit' | 'load' | 'domcontentloaded';\n remoteUrl?: string;\n}\nexport abstract class BasePage extends PlaywrightBase {\n private readonly pageUrl: string;\n private readonly urlRequest: RegExp;\n public snackBar: SnackBarComponent;\n public spinner: SpinnerComponent;\n\n protected constructor(page: Page, pageUrl: string, urlRequest?: RegExp) {\n super(page);\n this.pageUrl = pageUrl;\n this.urlRequest = urlRequest;\n this.snackBar = new SnackBarComponent(this.page);\n this.spinner = new SpinnerComponent(this.page);\n }\n\n /**\n * Method which navigate to appropriate page or remoteURL\n *\n * @param options object with configurable options\n * @property {string} query if you would like to navigate to page which support query,\n * then pass it in this option - e.g. '?appName=content'\n * @property {boolean} waitForRequest if you would like to NOT wait for request (which need to be passed\n * in the constructor of the page), then pass false. By default it'll wait for request to be fulfilled.\n * @property {'networkidle' | 'commit' | 'load' | 'domcontentloaded'} waitUntil by default will wait until 'networkidle' but you can change it if needed\n * @property {string} remoteUrl if you need to navigate to third part site, then you need to pass all of the URL in this option\n */\n async navigate(options?: Partial<NavigateOptions>): Promise<void> {\n const actualOptions: NavigateOptions = {\n query: '',\n waitForRequest: true,\n remoteUrl: '',\n waitUntil: 'load',\n ...options\n };\n\n if (actualOptions.remoteUrl) {\n await this.page.goto(actualOptions.remoteUrl, {\n waitUntil: actualOptions.waitUntil\n });\n } else if (this.urlRequest && actualOptions.waitForRequest) {\n await Promise.all([\n this.page.goto(`./#/${this.pageUrl}${actualOptions.query}`, { waitUntil: 'load' }),\n this.page.waitForResponse(this.urlRequest)\n ]);\n } else {\n await this.page.goto(`./#/${this.pageUrl}${actualOptions.query}`, {\n waitUntil: actualOptions.waitUntil,\n timeout: 60000\n });\n }\n await this.spinner.waitForReload();\n }\n\n async reload(options?: Pick<NavigateOptions, 'waitUntil'>): Promise<void> {\n const actualOptions: Pick<NavigateOptions, 'waitUntil'> = {\n waitUntil: 'networkidle',\n ...options\n };\n await this.page.reload(actualOptions);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport { UserModel } from '../../models';\n\ninterface LoginOptions {\n waitForLoading?: boolean;\n withNavigation?: boolean;\n}\nexport class LoginPage extends BasePage {\n private static pageUrl = 'login';\n\n constructor(page: Page) {\n super(page, LoginPage.pageUrl);\n }\n\n public username = this.page.locator('#username');\n public password = this.page.locator('#password');\n public submitButton = this.page.locator('#login-button');\n public userProfileButton = this.page.locator('aca-user-menu button');\n public userLogOutButton = this.page.locator('aca-logout button');\n public passwordVisibility = this.page.locator('.adf-login-password-icon');\n\n async loginUser(userData: { username: string; password: string } | UserModel, options?: LoginOptions): Promise<void> {\n if (options?.withNavigation) {\n await this.navigate();\n }\n await this.username.fill(userData.username);\n await this.password.fill(userData.password);\n await this.submitButton.click();\n\n if (options?.waitForLoading) {\n await Promise.all([this.page.waitForLoadState('domcontentloaded'), this.spinner.waitForReload()]);\n }\n }\n\n async logoutUser(): Promise<void> {\n await this.userProfileButton.click();\n await this.userLogOutButton.click();\n }\n\n async isPasswordDisplayed(): Promise<boolean> {\n const type = await this.password.getAttribute('type');\n return type === 'text';\n }\n\n async verifyUserLogin(): Promise<void> {\n if (await this.username.isVisible()) {\n await this.page.reload({ waitUntil: 'load' });\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport {\n ConditionComponent,\n ManageRules,\n ManageRulesDialogComponent,\n ToolbarComponent,\n ActionsDropdownComponent,\n ContentNodeSelectorDialog,\n LinkRulesDialog\n} from '../components';\nimport { BasePage } from './base.page';\n\nexport class NodesPage extends BasePage {\n private static pageUrl = 'nodes';\n\n constructor(page: Page) {\n super(page, NodesPage.pageUrl);\n }\n\n public toolbar = new ToolbarComponent(this.page);\n public manageRulesDialog = new ManageRulesDialogComponent(this.page);\n public actionsDropdown = new ActionsDropdownComponent(this.page);\n public conditionsDropdown = new ConditionComponent(this.page);\n public manageRules = new ManageRules(this.page);\n public contentNodeSelectorDialog = new ContentNodeSelectorDialog(this.page);\n public linkRulesDialog = new LinkRulesDialog(this.page);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport {\n AcaHeader,\n AdfFolderDialogComponent,\n ContentNodeSelectorDialog,\n CreateFromTemplateDialogComponent,\n PasswordOverlayDialogComponent,\n ViewerOverlayDialogComponent,\n Breadcrumb,\n DataTableComponent,\n MatMenuComponent,\n ViewerComponent,\n SidenavComponent,\n PaginationComponent,\n ErrorComponent,\n ShareDialogComponent,\n AdfConfirmDialogComponent,\n AdfInfoDrawerComponent,\n UploadNewVersionDialog,\n ManageVersionsDialog,\n UploadDialog,\n SnackBarComponent,\n EditDialog,\n FolderInformationDialogComponent\n} from '../components';\n\nexport class PersonalFilesPage extends BasePage {\n private static pageUrl = 'personal-files';\n\n constructor(page: Page) {\n super(page, PersonalFilesPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public contentNodeSelector = new ContentNodeSelectorDialog(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public passwordDialog = new PasswordOverlayDialogComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public sidenav = new SidenavComponent(this.page);\n public createFromTemplateDialogComponent = new CreateFromTemplateDialogComponent(this.page);\n public pagination = new PaginationComponent(this.page);\n public errorDialog = new ErrorComponent(this.page);\n public shareDialog = new ShareDialogComponent(this.page);\n public confirmDialog = new AdfConfirmDialogComponent(this.page);\n public infoDrawer = new AdfInfoDrawerComponent(this.page);\n public uploadNewVersionDialog = new UploadNewVersionDialog(this.page);\n public manageVersionsDialog = new ManageVersionsDialog(this.page);\n public uploadDialog = new UploadDialog(this.page);\n public snackBar = new SnackBarComponent(this.page);\n public editDialog = new EditDialog(this.page);\n public folderInformationDialog = new FolderInformationDialogComponent(this.page);\n\n async selectCreateFolder(): Promise<void> {\n await this.acaHeader.createButton.click();\n await this.matMenu.createFolder.click();\n }\n\n async closeMenu(): Promise<void> {\n await this.page.keyboard.press('Escape');\n }\n\n async waitForPageLoad() {\n await this.page.waitForURL(`**/${PersonalFilesPage.pageUrl}`);\n }\n\n async clickMoreActionsButton(buttonLabel: string): Promise<void> {\n await this.acaHeader.clickMoreActions();\n await this.matMenu.clickMenuItem(buttonLabel);\n }\n\n async copyOrMoveContentInDatatable(sourceFileList: string[], destinationName: string, operation = 'Copy'): Promise<void> {\n await this.page.keyboard.down('Control');\n for (const sourceName of sourceFileList) {\n await this.dataTable.selectItems(sourceName);\n }\n await this.page.keyboard.up('Control');\n await this.clickMoreActionsButton(operation);\n await this.contentNodeSelector.selectDestination(destinationName);\n await this.contentNodeSelector.actionButton.click();\n }\n\n async selectItemsAndToggleFavorite(item: string[], action: 'Favorite' | 'Remove Favorite') {\n for (const itemToSelect of item) {\n await this.dataTable.selectItems(itemToSelect);\n }\n await this.acaHeader.clickMoreActions();\n await this.matMenu.clickMenuItem(action);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport {\n AcaHeader,\n AdfInfoDrawerComponent,\n AdfLibraryDialogComponent,\n DataTableComponent,\n MatMenuComponent,\n ViewerComponent,\n ViewerOverlayDialogComponent,\n ContentNodeSelectorDialog,\n Breadcrumb,\n SidenavComponent,\n CreateFromTemplateDialogComponent,\n AdfConfirmDialogComponent,\n FolderInformationDialogComponent\n} from '../components';\n\nexport class MyLibrariesPage extends BasePage {\n private static pageUrl = 'libraries';\n\n constructor(page: Page) {\n super(page, MyLibrariesPage.pageUrl);\n }\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public libraryDialog = new AdfLibraryDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public libraryDetails = new AdfInfoDrawerComponent(this.page);\n public infoDrawer = new AdfInfoDrawerComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public copyMoveDialog = new ContentNodeSelectorDialog(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public sidenav = new SidenavComponent(this.page);\n public contentNodeSelector = new ContentNodeSelectorDialog(this.page);\n public createFromTemplateDialogComponent = new CreateFromTemplateDialogComponent(this.page);\n public confirmDialogComponent = new AdfConfirmDialogComponent(this.page);\n public folderInformationDialog = new FolderInformationDialogComponent(this.page);\n\n async selectCreateLibrary(): Promise<void> {\n await this.acaHeader.createButton.click();\n await this.matMenu.createLibrary.click();\n }\n\n async clickMoreActionsButton(buttonLabel: string): Promise<void> {\n await this.acaHeader.clickMoreActions();\n await this.matMenu.clickMenuItem(buttonLabel);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent, Breadcrumb, AdfInfoDrawerComponent } from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfFolderDialogComponent, ContentNodeSelectorDialog, ManageVersionsDialog } from '../components/dialogs';\n\nexport class RecentFilesPage extends BasePage {\n private static pageUrl = 'recent-files';\n\n constructor(page: Page) {\n super(page, RecentFilesPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public sidenav = new SidenavComponent(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public infoDrawer = new AdfInfoDrawerComponent(this.page);\n public contentNodeSelector = new ContentNodeSelectorDialog(this.page);\n public manageVersionsDialog = new ManageVersionsDialog(this.page);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent, Breadcrumb, AdfInfoDrawerComponent } from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfFolderDialogComponent, ViewerOverlayDialogComponent, ManageVersionsDialog } from '../components/dialogs';\n\nexport class SharedPage extends BasePage {\n private static pageUrl = 'shared';\n\n constructor(page: Page) {\n super(page, SharedPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public sidenav = new SidenavComponent(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public infoDrawer = new AdfInfoDrawerComponent(this.page);\n public manageVersionsDialog = new ManageVersionsDialog(this.page);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport {\n DataTableComponent,\n MatMenuComponent,\n ViewerComponent,\n SearchInputComponent,\n SearchOverlayComponent,\n SidenavComponent,\n SearchSortingPicker,\n SearchFilters,\n SearchFiltersTags,\n SearchFiltersCategories,\n SearchFiltersDate,\n SearchFiltersLocation,\n SearchFiltersLogic,\n SearchFiltersProperties,\n FolderInformationDialogComponent\n} from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfConfirmDialogComponent, AdfFolderDialogComponent, UploadNewVersionDialog, ManageVersionsDialog } from '../components/dialogs';\n\nexport type SearchType = 'files' | 'folders' | 'filesAndFolders' | 'libraries';\n\nexport class SearchPage extends BasePage {\n private static pageUrl = 'search';\n\n constructor(page: Page) {\n super(page, SearchPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public searchInput = new SearchInputComponent(this.page);\n public searchOverlay = new SearchOverlayComponent(this.page);\n public searchSortingPicker = new SearchSortingPicker(this.page);\n public searchFilters = new SearchFilters(this.page);\n public searchFiltersTags = new SearchFiltersTags(this.page);\n public searchFiltersCategories = new SearchFiltersCategories(this.page);\n public searchFiltersDate = new SearchFiltersDate(this.page);\n public searchFiltersLocation = new SearchFiltersLocation(this.page);\n public searchFiltersProperties = new SearchFiltersProperties(this.page);\n public searchFiltersLogic = new SearchFiltersLogic(this.page);\n public sidenav = new SidenavComponent(this.page);\n public confirmDialogComponent = new AdfConfirmDialogComponent(this.page);\n public uploadNewVersionDialog = new UploadNewVersionDialog(this.page);\n public manageVersionsDialog = new ManageVersionsDialog(this.page);\n public folderInformationDialog = new FolderInformationDialogComponent(this.page);\n\n async searchWithin(searchText: string, searchType?: SearchType): Promise<void> {\n await this.acaHeader.searchButton.click();\n await this.clickSearchButton();\n switch (searchType) {\n case 'files':\n await this.searchOverlay.checkOnlyFiles();\n break;\n case 'folders':\n await this.searchOverlay.checkOnlyFolders();\n break;\n case 'filesAndFolders':\n await this.searchOverlay.checkFilesAndFolders();\n break;\n case 'libraries':\n await this.searchOverlay.checkLibraries();\n break;\n default:\n break;\n }\n await this.searchOverlay.searchFor(searchText);\n await this.dataTable.progressBarWaitForReload();\n }\n\n async clickSearchButton() {\n await this.searchInput.searchButton.click({ force: true });\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport {\n DataTableComponent,\n MatMenuComponent,\n ViewerComponent,\n SidenavComponent,\n PaginationComponent,\n Breadcrumb,\n AdfInfoDrawerComponent\n} from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfFolderDialogComponent, ViewerOverlayDialogComponent, ManageVersionsDialog } from '../components/dialogs';\n\nexport class FavoritesPage extends BasePage {\n private static pageUrl = 'favorites';\n\n constructor(page: Page) {\n super(page, FavoritesPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public sidenav = new SidenavComponent(this.page);\n public pagination = new PaginationComponent(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public infoDrawer = new AdfInfoDrawerComponent(this.page);\n public manageVersionsDialog = new ManageVersionsDialog(this.page);\n\n async waitForPageLoad() {\n await this.page.waitForURL(`**/${FavoritesPage.pageUrl}`);\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent, Breadcrumb, PaginationComponent } from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfFolderDialogComponent, ViewerOverlayDialogComponent, AdfDeleteTrashComponent } from '../components/dialogs';\n\nexport class TrashPage extends BasePage {\n private static pageUrl = 'trashcan';\n\n constructor(page: Page) {\n super(page, TrashPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public sidenav = new SidenavComponent(this.page);\n public breadcrumb = new Breadcrumb(this.page);\n public pagination = new PaginationComponent(this.page);\n public deleteDialog = new AdfDeleteTrashComponent(this.page);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Page } from '@playwright/test';\nimport { BasePage } from './base.page';\nimport { DataTableComponent, MatMenuComponent, SidenavComponent, ViewerComponent } from '../components';\nimport { AcaHeader } from '../components/aca-header.component';\nimport { AdfConfirmDialogComponent, AdfFolderDialogComponent, ViewerOverlayDialogComponent } from '../components/dialogs';\n\nexport class FavoritesLibrariesPage extends BasePage {\n private static pageUrl = 'favorite/libraries';\n\n constructor(page: Page) {\n super(page, FavoritesLibrariesPage.pageUrl);\n }\n\n public acaHeader = new AcaHeader(this.page);\n public matMenu = new MatMenuComponent(this.page);\n public folderDialog = new AdfFolderDialogComponent(this.page);\n public dataTable = new DataTableComponent(this.page);\n public viewer = new ViewerComponent(this.page);\n public viewerDialog = new ViewerOverlayDialogComponent(this.page);\n public sidenav = new SidenavComponent(this.page);\n public confirmDialogComponent = new AdfConfirmDialogComponent(this.page);\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './base.page';\nexport * from './login.page';\nexport * from './nodes.page';\nexport * from './personal-files.page';\nexport * from './my-libraries.page';\nexport * from './recent-files.page';\nexport * from './shared.page';\nexport * from './search.page';\nexport * from './favorites.page';\nexport * from './trash.page';\nexport * from './favorites-libraries.page';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './components';\nexport * from './pages';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst env = process.env;\n\nexport const testEmailDomain = env.E2E_EMAIL_DOMAIN;\nexport const users = {\n hruser: {\n username: env.HR_USER,\n password: env.HR_USER_PASSWORD\n },\n admin: {\n username: env.ADMIN_EMAIL,\n password: env.ADMIN_PASSWORD\n }\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { chromium, FullConfig } from '@playwright/test';\nimport { LoginPage } from '../page-objects';\nimport { CustomConfig } from '../models';\nimport { users } from './global-variables';\nimport fs from 'fs';\nimport { paths } from '../utils/paths';\n\nasync function globalSetup(config: FullConfig<CustomConfig>) {\n const { use } = config.projects[0];\n\n await removeOutputFolders();\n await createOutputFolders();\n\n if (use.users) {\n for (const user of use.users) {\n if (users[user].username) {\n const browser = await chromium.launch();\n const page = await browser.newPage();\n const loginPage = new LoginPage(page);\n await page.goto(use.baseURL);\n await loginPage.loginUser(\n { username: users[user].username, password: users[user].password },\n {\n withNavigation: false,\n waitForLoading: true\n }\n );\n await page.context().storageState({ path: `${paths.userStates}/${user}UserState.json` });\n await browser.close();\n } else {\n throw new Error(`Add credentials for ${user} to you .env file!`);\n }\n }\n }\n}\n\nasync function createOutputFolders() {\n for (const path in paths) {\n if (!fs.existsSync(paths[path])) {\n fs.mkdirSync(paths[path], { recursive: true });\n }\n }\n}\n\nasync function removeOutputFolders() {\n if (fs.existsSync(paths.rootFolder)) {\n fs.rmdirSync(paths.rootFolder, { recursive: true });\n }\n}\n\nexport default globalSetup;\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ReporterDescription } from '@playwright/test';\nimport { timeouts } from '../utils';\n\nconst { env } = process;\n\nexport const getReportPortalConfig = () => {\n const attributes = [\n { key: 'Job', value: `${env.GITHUB_JOB}` },\n { key: 'Build_type', value: `${env.GITHUB_EVENT_NAME}` },\n { key: 'Repository', value: `${env.GITHUB_REPOSITORY}` },\n { key: 'Branch', value: `${env.GITHUB_HEAD_REF || env.GITHUB_REF}` }\n ];\n\n const launch = `GitHub Actions - ACA`;\n\n return {\n endpoint: env.REPORT_PORTAL_URL,\n apiKey: env.REPORT_PORTAL_TOKEN,\n project: 'alfresco-content-app',\n launch,\n includeTestSteps: true,\n restClientConfig: {\n timeout: timeouts.extendedTest\n },\n attributes,\n description: `[Run on GitHub Actions ${env.GITHUB_RUN_ID}](${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID})`\n };\n};\n\nexport const getReporter = (): ReporterDescription[] =>\n env.CI ? [['@reportportal/agent-js-playwright', getReportPortalConfig()], ['github']] : [['html']];\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { PlaywrightTestConfig, devices } from '@playwright/test';\nimport { timeouts } from '../utils';\nimport { getReporter } from './report-portal.config';\n\nrequire('@alfresco/adf-cli/tooling').dotenvConfig();\nconst { env } = process;\n\nexport const getGlobalConfig: PlaywrightTestConfig = {\n timeout: timeouts.globalTest,\n globalTimeout: timeouts.globalSpec,\n expect: {\n /**\n * Maximum time expect() should wait for the condition to be met.\n * For example in `await expect(locator).toHaveText();`\n */\n timeout: timeouts.medium\n },\n /* Run tests in files in parallel */\n fullyParallel: true,\n /* Fail the build on CI if you accidentally left test.only in the source code. */\n forbidOnly: !!env.CI,\n /* Retry on CI only */\n retries: env.CI ? 2 : 0,\n /* Opt out of parallel tests on CI. */\n workers: 3,\n /* Reporter to use. See https://playwright.dev/docs/test-reporters */\n reporter: [['list'], ...getReporter()],\n globalSetup: require.resolve('./global.setup'),\n testMatch: ['**/*.e2e.ts'],\n use: {\n /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */\n actionTimeout: 0,\n /* Base URL to use in actions like `await page.goto('/')`. */\n baseURL: env.PLAYWRIGHT_E2E_HOST,\n headless: env.PLAYWRIGHT_HEADLESS === 'true' || !!env.CI,\n ignoreHTTPSErrors: true,\n bypassCSP: true,\n /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */\n trace: 'retain-on-failure',\n video: 'retain-on-failure',\n screenshot: 'only-on-failure',\n launchOptions: {\n devtools: false,\n args: ['--no-sandbox', '--disable-site-isolation-trials']\n }\n },\n\n /* Configure projects for major browsers */\n projects: [\n {\n name: 'chromium',\n use: {\n ...devices['Desktop Chrome']\n }\n }\n ]\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './global.setup';\nexport * from './playwright.config';\nexport * from './global-variables';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport interface PersonModel {\n username?: string;\n password?: string;\n firstName?: string;\n lastName?: string;\n email?: string;\n enabled?: boolean;\n properties?: any;\n}\n\nexport class Person {\n id: string;\n password: string;\n firstName: string;\n lastName: string;\n email: string;\n enabled: boolean;\n properties: any;\n\n constructor(user: PersonModel) {\n this.id = user.username;\n this.password = user.password || user.username;\n this.firstName = user.firstName || user.username;\n this.lastName = user.lastName || user.username;\n this.email = user.email || `${user.username}@alfresco.com`;\n this.enabled = user.enabled || true;\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {\n AdminTenantsApi,\n AdminUsersApi,\n AlfrescoApi,\n ContentClient,\n GroupsApi,\n NodesApi,\n PeopleApi,\n QueriesApi,\n SearchApi,\n SecurityGroupsApi,\n SecurityMarksApi,\n SitesApi,\n UploadApi,\n SharedlinksApi,\n FavoritesApi,\n TrashcanApi,\n PersonEntry,\n CommentsApi,\n CategoriesApi,\n TagsApi\n} from '@alfresco/js-api';\nimport { users } from '../base-config';\nimport { Person, PersonModel } from './people-api-models';\n\nexport interface AcaBackend {\n sites: SitesApi;\n upload: UploadApi;\n nodes: NodesApi;\n share: SharedlinksApi;\n favorites: FavoritesApi;\n trashCan: TrashcanApi;\n\n tearDown(): Promise<any>;\n}\n\nconst { BASE_URL } = process.env;\n\nconst config = {\n authType: 'BASIC',\n hostBpm: BASE_URL,\n hostEcm: BASE_URL,\n provider: 'ECM',\n contextRoot: 'alfresco'\n};\n\nexport class ApiClientFactory {\n public alfrescoApi: AlfrescoApi;\n public sites: SitesApi;\n public upload: UploadApi;\n public nodes: NodesApi;\n public people: PeopleApi;\n public adminUsers: AdminUsersApi;\n public adminTenant: AdminTenantsApi;\n public groups: GroupsApi;\n public queries: QueriesApi;\n public search: SearchApi;\n public securityGroupsApi: SecurityGroupsApi;\n public securityMarksApi: SecurityMarksApi;\n public contentClient: ContentClient;\n public share: SharedlinksApi;\n public favorites: FavoritesApi;\n public trashCan: TrashcanApi;\n public commentsApi: CommentsApi;\n public queriesApi: QueriesApi;\n public categoriesApi: CategoriesApi;\n public tagsApi: TagsApi;\n constructor() {\n this.alfrescoApi = new AlfrescoApi(config);\n }\n\n public async setUpAcaBackend(userName: string, password?: string): Promise<AcaBackend> {\n await this.login(userName, password);\n\n this.sites = new SitesApi(this.alfrescoApi);\n this.upload = new UploadApi(this.alfrescoApi);\n this.nodes = new NodesApi(this.alfrescoApi);\n this.people = new PeopleApi(this.alfrescoApi);\n this.adminUsers = new AdminUsersApi(this.alfrescoApi);\n this.adminTenant = new AdminTenantsApi(this.alfrescoApi);\n this.groups = new GroupsApi(this.alfrescoApi);\n this.queries = new QueriesApi(this.alfrescoApi);\n this.search = new SearchApi(this.alfrescoApi);\n this.securityGroupsApi = new SecurityGroupsApi(this.alfrescoApi);\n this.securityMarksApi = new SecurityMarksApi(this.alfrescoApi);\n this.share = new SharedlinksApi(this.alfrescoApi);\n this.favorites = new FavoritesApi(this.alfrescoApi);\n this.trashCan = new TrashcanApi(this.alfrescoApi);\n this.commentsApi = new CommentsApi(this.alfrescoApi);\n this.queriesApi = new QueriesApi(this.alfrescoApi);\n this.categoriesApi = new CategoriesApi(this.alfrescoApi);\n this.tagsApi = new TagsApi(this.alfrescoApi);\n\n return this;\n }\n\n async tearDown(): Promise<ApiClientFactory> {\n await this.alfrescoApi.logout();\n return this;\n }\n\n async login(userName: string, password?: string) {\n const predefinedUserKey = Object.keys(users).find((user) => user === userName || users[user].username === userName);\n const userToLog = predefinedUserKey ? users[predefinedUserKey] : undefined;\n let e: any;\n\n const user = userToLog?.username ?? userName;\n const userPassword = userToLog?.password ?? password;\n try {\n e = await this.alfrescoApi.login(user, userPassword);\n } catch (error) {\n console.error(`[API Client Factory] Log in user ${user} failed ${e}`);\n throw error;\n }\n }\n\n async loginUser(user: PersonModel) {\n let e: any;\n try {\n e = await this.alfrescoApi.login(user.username, user.password);\n } catch (error) {\n console.error(`[API Client Factory] Log in user ${user.username} failed ${e}`);\n throw error;\n }\n }\n\n async createUser(user: PersonModel): Promise<PersonEntry> {\n const person = new Person(user);\n const peopleApi = new PeopleApi(this.alfrescoApi);\n\n try {\n return peopleApi.createPerson(person);\n } catch (error) {\n console.error('[API Client Factory] createUser failed : ', error);\n return null;\n }\n }\n\n async changePassword(username: string, newPassword: string): Promise<PersonEntry> {\n const peopleApi = new PeopleApi(this.alfrescoApi);\n\n try {\n return peopleApi.updatePerson(username, { password: newPassword });\n } catch (error) {\n console.error('[API Client Factory] changePassword failed : ', error);\n return null;\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport * as crypto from 'crypto';\n\nexport class RulesApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<RulesApi> {\n const classObj = new RulesApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n private callApi(path: string, httpMethod: string, body: object = {}): Promise<any> {\n // APIs used by this service are still private and not yet available for public use\n const params = [{}, {}, {}, {}, body, ['application/json'], ['application/json']];\n return this.apiService.alfrescoApi.contentPrivateClient.callApi(path, httpMethod, ...params);\n }\n\n async createRule(nodeId: string, rule: Partial<Rule>, ruleSetId: string = '-default-'): Promise<Rule> {\n const response = await this.callApi(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules`, 'POST', { ...rule });\n return response.entry;\n }\n\n async createRandomRule(folderId: string, ruleName: string): Promise<Rule> {\n const randomActionsIndex = crypto.randomInt(0, ActionTypes.actions.length);\n const randomAction = ActionTypes.actions[randomActionsIndex];\n return this.createRule(folderId, {\n name: ruleName,\n isEnabled: true,\n actions: [randomAction]\n });\n }\n\n async createRandomRuleWithMultipleConditions(folderId: string, ruleName: string, numOfConditions: number): Promise<Rule> {\n if (numOfConditions > ConditionsTypes.conditions.length) {\n numOfConditions = ConditionsTypes.conditions.length;\n }\n const randomActionsIndex = crypto.randomInt(0, ActionTypes.actions.length);\n const randomAction = ActionTypes.actions[randomActionsIndex];\n const conditionsArray = [];\n for (let i = 0; i < numOfConditions; i++) {\n const randomIndex = crypto.randomInt(0, ConditionsTypes.conditions.length);\n const randomCondition = ConditionsTypes.conditions[randomIndex];\n conditionsArray.push(randomCondition);\n }\n return this.createRule(folderId, {\n name: ruleName,\n isEnabled: true,\n actions: [randomAction],\n conditions: {\n inverted: false,\n booleanMode: 'and',\n compositeConditions: conditionsArray\n }\n });\n }\n\n async createRandomRuleWithMultipleActions(folderId: string, ruleName: string, numOfActions: number): Promise<Rule> {\n if (numOfActions > ActionTypes.actions.length) {\n numOfActions = ActionTypes.actions.length;\n }\n const actionsArray = [];\n for (let i = 0; i < numOfActions; i++) {\n const randomIndex = crypto.randomInt(0, ActionTypes.actions.length);\n const randomAction = ActionTypes.actions[randomIndex];\n actionsArray.push(randomAction);\n }\n return this.createRule(folderId, {\n name: ruleName,\n isEnabled: true,\n actions: actionsArray\n });\n }\n\n async createRandomComplexRule(\n folderId: string,\n ruleName: string,\n numOfConditions: number,\n numOfActions: number,\n ruleDescription?: string\n ): Promise<Rule> {\n if (numOfConditions > ConditionsTypes.conditions.length) {\n numOfConditions = ConditionsTypes.conditions.length;\n }\n const conditionsArray = [];\n for (let i = 0; i < numOfConditions; i++) {\n const randomIndex = crypto.randomInt(0, ConditionsTypes.conditions.length);\n const randomCondition = ConditionsTypes.conditions[randomIndex];\n conditionsArray.push(randomCondition);\n }\n if (numOfActions > ActionTypes.actions.length) {\n numOfActions = ActionTypes.actions.length;\n }\n const actionsArray = [];\n for (let i = 0; i < numOfActions; i++) {\n const randomIndex = crypto.randomInt(0, ActionTypes.actions.length);\n const randomAction = ActionTypes.actions[randomIndex];\n actionsArray.push(randomAction);\n }\n return this.createRule(folderId, {\n name: ruleName,\n description: ruleDescription,\n isEnabled: true,\n actions: actionsArray,\n conditions: {\n inverted: false,\n booleanMode: 'and',\n compositeConditions: conditionsArray\n }\n });\n }\n\n async createRuleWithRandomAspects(folderId: string, ruleName: string): Promise<Rule> {\n return this.createRule(folderId, {\n name: ruleName,\n isEnabled: true,\n actions: [\n {\n actionDefinitionId: 'add-features',\n params: {\n 'aspect-name': 'cm:auditable'\n }\n },\n {\n actionDefinitionId: 'add-features',\n params: {\n 'aspect-name': 'app:configurable'\n }\n },\n {\n actionDefinitionId: 'add-features',\n params: {\n 'aspect-name': 'exif:exif'\n }\n }\n ]\n });\n }\n\n async createRuleWithDestinationFolder(\n folderId: string,\n ruleName: string,\n actionType: 'move' | 'copy' | 'import',\n destinationFolderId: string\n ): Promise<Rule> {\n return this.createRule(folderId, {\n name: ruleName,\n isEnabled: true,\n actions: [\n {\n actionDefinitionId: actionType,\n params: {\n 'destination-folder': destinationFolderId\n }\n }\n ]\n });\n }\n}\n\ntype RuleTrigger = 'inbound' | 'update' | 'outbound';\n\nexport interface Rule {\n id: string;\n name: string;\n description: string;\n isEnabled: boolean;\n isInheritable: boolean;\n isAsynchronous: boolean;\n errorScript: string;\n isShared: boolean;\n triggers: RuleTrigger[];\n conditions: any;\n actions: RuleAction[];\n}\n\nexport interface RuleAction {\n actionDefinitionId: string;\n params?: { [key: string]: unknown };\n}\n\nexport class ActionTypes {\n static readonly ADDFEATURES = new ActionTypes('ADDFEATURES', {\n actionDefinitionId: 'add-features',\n params: { 'aspect-name': 'cm:thumbnailed' }\n });\n static readonly CHECKIN = new ActionTypes('CHECKIN', {\n actionDefinitionId: 'check-in',\n params: {\n description: 'test',\n minorChange: true\n }\n });\n static readonly SPECIALISETYPE = new ActionTypes('SPECIALISETYPE', {\n actionDefinitionId: 'specialise-type',\n params: { 'type-name': 'sys:base' }\n });\n static readonly SETPROPERTYVALUE = new ActionTypes('SETPROPERTYVALUE', {\n actionDefinitionId: 'set-property-value',\n params: { property: 'dl:ganttPercentComplete', value: 'test' }\n });\n static readonly actions = [\n ActionTypes.ADDFEATURES.value,\n ActionTypes.CHECKIN.value,\n ActionTypes.SPECIALISETYPE.value,\n ActionTypes.SETPROPERTYVALUE.value\n ];\n constructor(\n public key: string,\n public value: RuleAction\n ) {}\n}\n\nexport class ConditionsTypes {\n static readonly MIMETYPE = new ConditionsTypes('MIMETYPE', {\n inverted: false,\n booleanMode: 'and',\n simpleConditions: [\n {\n field: 'mimetype',\n comparator: 'equals',\n parameter: 'video/3gpp'\n }\n ]\n });\n static readonly CMNAME = new ConditionsTypes('CM:NAME', {\n inverted: false,\n booleanMode: 'and',\n simpleConditions: [\n {\n field: 'cm:name',\n comparator: 'equals',\n parameter: 'testname'\n }\n ]\n });\n static readonly SIZE = new ConditionsTypes('SIZE', {\n inverted: false,\n booleanMode: 'and',\n simpleConditions: [\n {\n field: 'size',\n comparator: 'equals',\n parameter: '345'\n }\n ]\n });\n static readonly TAG = new ConditionsTypes('TAG', {\n inverted: false,\n booleanMode: 'and',\n simpleConditions: [\n {\n field: 'tag',\n comparator: 'equals',\n parameter: 'testtag'\n }\n ]\n });\n static readonly conditions = [ConditionsTypes.MIMETYPE.value, ConditionsTypes.CMNAME.value, ConditionsTypes.SIZE.value, ConditionsTypes.TAG.value];\n constructor(\n public key: string,\n public value: any\n ) {}\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport * as fs from 'fs';\nimport { ApiClientFactory } from './api-client-factory';\nimport { Utils, waitForApi } from '../utils';\nimport { NodeBodyCreate, NodeEntry, ResultSetPaging, SearchRequest } from '@alfresco/js-api';\n\nexport class FileActionsApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<FileActionsApi> {\n const classObj = new FileActionsApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async uploadFile(fileLocation: string, fileName: string, parentFolderId: string): Promise<NodeEntry> {\n const file = fs.createReadStream(fileLocation);\n return this.apiService.upload.uploadFile(file, '', parentFolderId, null, {\n name: fileName,\n nodeType: 'cm:content',\n renditions: 'doclib'\n });\n }\n\n async uploadFileWithRename(\n fileLocation: string,\n newName: string,\n parentId: string = '-my-',\n title: string = '',\n description: string = ''\n ): Promise<NodeEntry> {\n const file = fs.createReadStream(fileLocation);\n const nodeProps = {\n properties: {\n 'cm:title': title,\n 'cm:description': description\n }\n } as NodeBodyCreate;\n\n const opts = {\n name: newName,\n nodeType: 'cm:content'\n };\n\n try {\n return this.apiService.upload.uploadFile(file, '', parentId, nodeProps, opts);\n } catch (error) {\n return Promise.reject(error);\n }\n }\n\n async lockNodes(nodeIds: string[], lockType: string = 'ALLOW_OWNER_CHANGES'): Promise<void> {\n try {\n for (const nodeId of nodeIds) {\n await this.apiService.nodes.lockNode(nodeId, { type: lockType });\n }\n } catch {}\n }\n\n async getNodeById(id: string): Promise<NodeEntry | null> {\n try {\n return this.apiService.nodes.getNode(id);\n } catch {\n return null;\n }\n }\n\n async getNodeProperty(nodeId: string, property: string): Promise<string> {\n try {\n const node = await this.getNodeById(nodeId);\n return node.entry.properties?.[property] || '';\n } catch {\n return '';\n }\n }\n\n private async getLockType(nodeId: string): Promise<string> {\n try {\n const lockType = await this.getNodeProperty(nodeId, 'cm:lockType');\n return lockType || '';\n } catch {\n return '';\n }\n }\n\n async isFileLockedWriteWithRetry(nodeId: string, expect: boolean): Promise<boolean> {\n const data = {\n expect: expect,\n retry: 5\n };\n let isLocked = false;\n try {\n const locked = async () => {\n isLocked = (await this.getLockType(nodeId)) === 'WRITE_LOCK';\n if (isLocked !== data.expect) {\n return Promise.reject(isLocked);\n } else {\n return Promise.resolve(isLocked);\n }\n };\n return await Utils.retryCall(locked, data.retry);\n } catch {}\n return isLocked;\n }\n\n private async queryNodesNames(searchTerm: string): Promise<ResultSetPaging> {\n const data = {\n query: {\n query: `cm:name:\\\"${searchTerm}*\\\"`,\n language: 'afts'\n },\n filterQueries: [{ query: `+TYPE:'cm:folder' OR +TYPE:'cm:content'` }]\n };\n\n try {\n return this.apiService.search.search(data);\n } catch {\n return new ResultSetPaging();\n }\n }\n\n async waitForNodes(searchTerm: string, data: { expect: number }): Promise<void> {\n const predicate = (totalItems: number) => totalItems === data.expect;\n\n const apiCall = async () => {\n try {\n return (await this.queryNodesNames(searchTerm)).list.pagination.totalItems;\n } catch (error) {\n return 0;\n }\n };\n\n try {\n await waitForApi(apiCall, predicate, 30, 2500);\n console.log(`waitForNodes: Found ${data.expect} nodes with search term \"${searchTerm}\"`);\n } catch (error) {\n console.error(`Error: ${error}`);\n }\n }\n\n private async queryNodesSearchHighlight(searchTerm: string): Promise<ResultSetPaging> {\n const data: SearchRequest = {\n query: {\n query: `cm:name:\"${searchTerm}*\"`,\n language: 'afts'\n },\n filterQueries: [{ query: `+TYPE:'cm:folder' OR +TYPE:'cm:content'` }],\n highlight: {\n prefix: \"<span class='aca-highlight'>\",\n postfix: '</span>',\n fields: [\n {\n field: 'cm:title'\n },\n {\n field: 'cm:name'\n },\n {\n field: 'cm:description',\n snippetCount: 1\n },\n {\n field: 'cm:content',\n snippetCount: 1\n }\n ]\n }\n };\n\n try {\n return this.apiService.search.search(data);\n } catch {\n return new ResultSetPaging();\n }\n }\n\n async waitForNodesSearchHighlight(searchTerm: string, data: { expect: number }): Promise<void> {\n const predicate = (totalItems: number): boolean => totalItems === data.expect;\n\n const apiCall = async (): Promise<number> => {\n try {\n return (await this.queryNodesSearchHighlight(searchTerm)).list.pagination.totalItems;\n } catch (error) {\n console.warn(`queryNodesSearchHighlight failed for \"${searchTerm}\":`, error);\n return 0;\n }\n };\n\n try {\n await waitForApi(apiCall, predicate, 30, 2500);\n console.log(`waitForNodesSearchHighlight: Found ${data.expect} nodes with search term \"${searchTerm}\"`);\n } catch (error) {\n console.error(`Error: ${error}`);\n }\n }\n\n async updateNodeContent(nodeId: string, content: string, majorVersion: boolean = true, comment?: string, newName?: string): Promise<NodeEntry> {\n try {\n const opts: { [key: string]: string | boolean } = {\n majorVersion: majorVersion,\n comment: comment,\n name: newName\n };\n return this.apiService.nodes.updateNodeContent(nodeId, content, opts);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.updateNodeContent.name}`, error);\n return Promise.reject(error);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport { SharedLinkEntry, SharedLinkPaging } from '@alfresco/js-api';\nimport { Utils } from '../utils';\n\nexport class SharedLinksApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n static async initialize(userName: string, password?: string): Promise<SharedLinksApi> {\n const classObj = new SharedLinksApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async shareFileById(id: string, expireDate?: Date): Promise<SharedLinkEntry | null> {\n try {\n const data = {\n nodeId: id,\n expiresAt: expireDate\n };\n return this.apiService.share.createSharedLink(data);\n } catch (error) {\n return null;\n }\n }\n\n async shareFilesByIds(ids: string[], expireDate?: Date): Promise<SharedLinkEntry[]> {\n const sharedLinks: SharedLinkEntry[] = [];\n try {\n if (ids && ids.length > 0) {\n for (const id of ids) {\n const sharedLink = await this.shareFileById(id, expireDate);\n sharedLinks.push(sharedLink);\n }\n }\n } catch (error) {\n console.error(`SharedLinksApi shareFilesByIds : catch : `, error);\n }\n return sharedLinks;\n }\n\n private async getSharedLinks(maxItems: number = 250): Promise<SharedLinkPaging> {\n try {\n const opts = {\n maxItems\n };\n return this.apiService.share.listSharedLinks(opts);\n } catch (error) {\n console.error(`SharedLinksApi getSharedLinks : catch : `, error);\n return new SharedLinkPaging();\n }\n }\n\n async waitForFilesToBeShared(filesIds: string[]): Promise<void> {\n try {\n const sharedFile = async () => {\n const sharedFiles = (await this.getSharedLinks()).list.entries.map((link) => link.entry.nodeId);\n const foundItems = filesIds.every((id) => sharedFiles.includes(id));\n if (foundItems) {\n return Promise.resolve(foundItems);\n } else {\n return Promise.reject(foundItems);\n }\n };\n\n return await Utils.retryCall(sharedFile);\n } catch (error) {\n console.error(`SharedLinksApi waitForFilesToBeShared : catch : ${error}`);\n console.error(`\\tWait timeout reached waiting for files to be shared`);\n }\n }\n\n private async getSharedIdOfNode(fileId: string): Promise<string> {\n try {\n const sharedLinksEntries = (await this.getSharedLinks())?.list.entries;\n const found = sharedLinksEntries.find((sharedLink) => sharedLink.entry.nodeId === fileId);\n return found?.entry.id;\n } catch (error) {\n console.error(`SharedLinksApi getSharedIdOfNode : catch : `, error);\n return null;\n }\n }\n\n async unshareFileById(fileId: string): Promise<void> {\n try {\n const sharedId = await this.getSharedIdOfNode(fileId);\n return this.apiService.share.deleteSharedLink(sharedId);\n } catch (error) {\n console.error(`SharedLinksApi unshareFileById : catch : `, error);\n }\n }\n\n async waitForFilesToNotBeShared(filesIds: string[]): Promise<any> {\n try {\n const sharedFile = async () => {\n const sharedFiles = (await this.getSharedLinks()).list.entries.map((link) => link.entry.nodeId);\n\n const foundItems = filesIds.some((id) => {\n return sharedFiles.includes(id);\n });\n\n if (foundItems) {\n return Promise.reject(foundItems);\n } else {\n return Promise.resolve(foundItems);\n }\n };\n\n return await Utils.retryCall(sharedFile);\n } catch (error) {\n console.error(`SharedLinksApi waitForFilesToNotBeShared : catch : ${error}`);\n console.error(`\\tWait timeout reached waiting for files to no longer be shared`);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport { FavoriteEntry, FavoritePaging } from '@alfresco/js-api';\nimport { Utils } from '../utils';\n\nexport class FavoritesPageApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n static async initialize(userName: string, password?: string): Promise<FavoritesPageApi> {\n const classObj = new FavoritesPageApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n async addFavoriteById(nodeType: 'file' | 'folder' | 'site', id: string): Promise<FavoriteEntry> {\n const guid = nodeType === 'site' ? (await this.apiService.sites.getSite(id)).entry.guid : id;\n const data = {\n target: {\n [nodeType]: {\n guid: guid\n }\n }\n };\n return this.apiService.favorites.createFavorite('-me-', data);\n }\n\n async addFavoritesByIds(nodeType: 'file' | 'folder' | 'site', ids: string[]): Promise<FavoriteEntry[]> {\n const favorites: FavoriteEntry[] = [];\n try {\n if (ids && ids.length > 0) {\n for (const id of ids) {\n const favorite = await this.addFavoriteById(nodeType, id);\n favorites.push(favorite);\n }\n }\n } catch {}\n return favorites;\n }\n\n private async getFavorites(username: string): Promise<FavoritePaging> {\n try {\n return this.apiService.favorites.listFavorites(username);\n } catch {\n return new FavoritePaging();\n }\n }\n\n async isFavorite(username: string, nodeId: string): Promise<boolean> {\n try {\n return JSON.stringify((await this.getFavorites(username)).list.entries).includes(nodeId);\n } catch {\n return false;\n }\n }\n\n async isFavoriteWithRetry(username: string, nodeId: string, data: { expect: boolean }): Promise<boolean> {\n let isFavorite = false;\n try {\n const favorite = async () => {\n isFavorite = await this.isFavorite(username, nodeId);\n if (isFavorite !== data.expect) {\n return Promise.reject(isFavorite);\n } else {\n return Promise.resolve(isFavorite);\n }\n };\n return await Utils.retryCall(favorite);\n } catch (error) {}\n return isFavorite;\n }\n\n async getFavoritesTotalItems(username: string): Promise<number> {\n try {\n return (await this.apiService.favorites.listFavorites(username)).list.pagination.totalItems;\n } catch {\n return -1;\n }\n }\n\n async waitForApi(username: string, data: { expect: number }) {\n try {\n const favoriteFiles = async () => {\n const totalItems = await this.getFavoritesTotalItems(username);\n if (totalItems !== data.expect) {\n return Promise.reject(totalItems);\n } else {\n return Promise.resolve(totalItems);\n }\n };\n return await Utils.retryCall(favoriteFiles);\n } catch {}\n }\n\n async removeFavoritesByIds(username: string, ids: string[]): Promise<void> {\n try {\n if (ids && ids.length > 0) {\n for (const id of ids) {\n await this.apiService.favorites.deleteFavorite(username, id);\n }\n }\n } catch (error) {\n console.error('FavoritesApi: removeFavoritesByIds failed ', error);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { NodeBodyCreate } from '@alfresco/js-api';\n\nconst NODE_TYPE_FILE = 'cm:content';\nconst NODE_TYPE_FOLDER = 'cm:folder';\nconst NODE_TITLE = 'cm:title';\nconst NODE_DESCRIPTION = 'cm:description';\n\nexport interface NodeContentTree {\n name?: string;\n files?: string[];\n folders?: (string | NodeContentTree)[];\n title?: string;\n description?: string;\n}\n\nexport function flattenNodeContentTree(content: NodeContentTree, relativePath: string = '/'): NodeBodyCreate[] {\n const { name, files, folders, title, description } = content;\n const aspectNames: string[] = ['cm:versionable'];\n let data: NodeBodyCreate[] = [];\n\n const properties = {\n [NODE_TITLE]: title,\n [NODE_DESCRIPTION]: description\n };\n\n if (name) {\n data = data.concat([\n {\n nodeType: NODE_TYPE_FOLDER,\n name,\n relativePath,\n properties\n }\n ]);\n\n relativePath = relativePath === '/' ? `/${name}` : `${relativePath}/${name}`;\n }\n\n if (folders) {\n const foldersData: NodeBodyCreate[] = folders\n .map((folder: string | NodeContentTree): NodeBodyCreate[] => {\n const folderData: NodeContentTree = typeof folder === 'string' ? { name: folder } : folder;\n\n return flattenNodeContentTree(folderData, relativePath);\n })\n .reduce((nodesData: NodeBodyCreate[], folderData: NodeBodyCreate[]) => nodesData.concat(folderData), []);\n\n data = data.concat(foldersData);\n }\n\n if (files) {\n const filesData: NodeBodyCreate[] = files.map(\n (filename: string): NodeBodyCreate => ({\n nodeType: NODE_TYPE_FILE,\n name: filename,\n relativePath,\n aspectNames\n })\n );\n\n data = data.concat(filesData);\n }\n\n return data;\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport { NodeChildAssociationPaging, NodeEntry, NodePaging, NodesIncludeQuery, NodeBodyUpdate } from '@alfresco/js-api';\nimport { NodeContentTree, flattenNodeContentTree } from './node-content-tree';\n\nexport class NodesApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<NodesApi> {\n const classObj = new NodesApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async createFolder(\n name: string,\n parentId: string = '-my-',\n title: string = '',\n description: string = '',\n author: string = '',\n aspectNames: string[] = null\n ): Promise<NodeEntry | null> {\n try {\n return await this.createNode('cm:folder', name, parentId, title, description, null, author, null, aspectNames);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFolder.name}`, error);\n return null;\n }\n }\n\n async createFile(\n name: string,\n parentId: string = '-my-',\n title: string = '',\n description: string = '',\n author: string = '',\n majorVersion: boolean = true,\n aspectNames: string[] = null\n ): Promise<NodeEntry> {\n try {\n return await this.createNode('cm:content', name, parentId, title, description, null, author, majorVersion, aspectNames);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFile.name}`, error);\n return null;\n }\n }\n\n async createFiles(names: string[], relativePath = '/'): Promise<NodePaging> {\n try {\n return await this.createContent({ files: names }, relativePath);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFiles.name}: ${error}`);\n return null;\n }\n }\n\n async createFolders(names: string[], relativePath = '/'): Promise<NodePaging> {\n try {\n return await this.createContent({ folders: names }, relativePath);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFolders.name}: ${error}`);\n return null;\n }\n }\n\n async deleteDeletedNode(name: string): Promise<void> {\n try {\n await this.apiService.trashCan.deleteDeletedNode(name);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteDeletedNode.name}: ${error}`);\n }\n }\n\n private async createNode(\n nodeType: string,\n name: string,\n parentId: string = '-my-',\n title: string = '',\n description: string = '',\n imageProps: any = null,\n author: string = '',\n majorVersion: boolean = true,\n aspectNames: string[] = null\n ): Promise<NodeEntry | null> {\n if (!aspectNames) {\n aspectNames = ['cm:versionable']; // workaround for REPO-4772\n }\n const nodeBody = {\n name,\n nodeType,\n relativePath: '/',\n properties: {\n 'cm:title': title,\n 'cm:description': description,\n 'cm:author': author\n },\n aspectNames\n };\n if (imageProps) {\n nodeBody.properties = Object.assign(nodeBody.properties, imageProps);\n }\n\n try {\n return this.apiService.nodes.createNode(parentId, nodeBody, {\n majorVersion\n });\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createNode.name}`, error);\n return null;\n }\n }\n\n async renameNode(nodeId: string, newName: string): Promise<NodeEntry | null> {\n try {\n return this.apiService.nodes.updateNode(nodeId, { name: newName });\n } catch (error) {\n console.error(`${this.constructor.name} ${this.renameNode.name}`, error);\n return null;\n }\n }\n\n /**\n * Delete multiple nodes.\n * @param nodeIds The list of node IDs to delete.\n * @param permanent Delete permanently, without moving to the trashcan? (default: true)\n */\n async deleteNodes(nodeIds: string[], permanent: boolean = true): Promise<any> {\n try {\n await this.apiService.nodes.deleteNodes(nodeIds, { permanent });\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteNodes.name}`, error);\n }\n }\n\n async updateNode(nodeId: string, nodeBodyUpdate: NodeBodyUpdate, opts?: NodesIncludeQuery): Promise<NodeEntry | null> {\n try {\n return await this.apiService.nodes.updateNode(nodeId, nodeBodyUpdate, opts);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.updateNode.name}`, error);\n return null;\n }\n }\n\n /**\n * Delete all nodes of the currently logged in user\n * @param userNodeId The id of User node, all child nodes of \"userNodeId\" will be gathered as a list and deleted ( e.g.: \"-my-\" - User Homes folder)\n */\n async deleteCurrentUserNodes(): Promise<void> {\n try {\n const userNodes = (await this.getNodeChildren('-my-')).list.entries;\n const userNodesIds = userNodes.map((nodeChild) => nodeChild.entry.id);\n await this.deleteNodes(userNodesIds);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteCurrentUserNodes.name}`, error);\n }\n }\n\n async lockNodes(nodeIds: string[], lockType: string = 'ALLOW_OWNER_CHANGES') {\n try {\n for (const nodeId of nodeIds) {\n await this.apiService.nodes.lockNode(nodeId, { type: lockType });\n }\n } catch (error) {\n console.error(`${this.constructor.name} ${this.lockNodes.name}`, error);\n }\n }\n\n async unlockNodes(nodeIds: string[]) {\n try {\n for (const nodeId of nodeIds) {\n await this.apiService.nodes.unlockNode(nodeId);\n }\n } catch (error) {\n console.error(`${this.constructor.name} ${this.unlockNodes.name}`, error);\n }\n }\n\n async createContent(content: NodeContentTree, relativePath: string = '/'): Promise<NodePaging> {\n try {\n return this.apiService.nodes.createNode('-my-', flattenNodeContentTree(content, relativePath) as any);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createContent.name}`, error);\n return null;\n }\n }\n\n async getNodeById(id: string): Promise<NodeEntry | null> {\n try {\n return this.apiService.nodes.getNode(id);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.getNodeById.name}`, error);\n return null;\n }\n }\n\n async getNodeIdFromParent(name: string, parentId: string): Promise<string> {\n try {\n const children = (await this.getNodeChildren(parentId)).list.entries;\n return children.find((elem) => elem.entry.name === name).entry.id || '';\n } catch (error) {\n console.error(`${this.constructor.name} ${this.getNodeIdFromParent.name}`, error);\n return '';\n }\n }\n\n private async getNodeChildren(nodeId: string): Promise<NodeChildAssociationPaging | null> {\n try {\n const opts = {\n include: ['properties']\n };\n return this.apiService.nodes.listNodeChildren(nodeId, opts);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.getNodeChildren.name}`, error);\n return null;\n }\n }\n\n async deleteNodeById(id: string, permanent: boolean = true): Promise<void> {\n try {\n await this.apiService.nodes.deleteNode(id, { permanent });\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteNodeById.name}`, error);\n }\n }\n\n async cleanupNodeTemplatesItems(nodeNames: string[]): Promise<void> {\n try {\n const templatesFolderId = await this.getNodeTemplatesFolderId();\n for (const nodeName of nodeNames) {\n const nodeId = await this.getNodeIdFromParent(nodeName, templatesFolderId);\n await this.deleteNodeById(nodeId);\n }\n } catch (error) {\n console.error('Admin Actions - cleanupNodeTemplatesItems failed : ', error);\n }\n }\n\n async cleanupSpaceTemplatesItems(nodeNames: string[]): Promise<void> {\n try {\n const spaceTemplatesNodeId = await this.getSpaceTemplatesFolderId();\n for (const nodeName of nodeNames) {\n const nodeId = await this.getNodeIdFromParent(nodeName, spaceTemplatesNodeId);\n await this.deleteNodeById(nodeId);\n }\n } catch (error) {\n console.error('Admin Actions - cleanupSpaceTemplatesFolder failed : ', error);\n }\n }\n\n async getNodeTemplatesFolderId(): Promise<string> {\n try {\n return this.getNodeIdFromParent('Node Templates', await this.getDataDictionaryId());\n } catch (error) {\n console.error('Admin Actions - getNodeTemplatesFolderId failed : ', error);\n return '';\n }\n }\n\n async getSpaceTemplatesFolderId(): Promise<string> {\n try {\n return this.getNodeIdFromParent('Space Templates', await this.getDataDictionaryId());\n } catch (error) {\n console.error('Admin Actions - getSpaceTemplatesFolderId failed : ', error);\n return '';\n }\n }\n\n private async getDataDictionaryId(): Promise<string> {\n return this.getNodeIdFromParent('Data Dictionary', '-root-').catch((error) => {\n console.error('Admin Actions - getDataDictionaryId failed : ', error);\n return '';\n });\n }\n\n async setGranularPermission(nodeId: string, username: string, role: string, inheritPermissions = false): Promise<NodeEntry | null> {\n const data = {\n permissions: {\n isInheritanceEnabled: inheritPermissions,\n locallySet: [\n {\n authorityId: username,\n name: role\n }\n ]\n }\n };\n\n try {\n return this.apiService.nodes.updateNode(nodeId, data);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.setGranularPermission.name}`, error);\n return null;\n }\n }\n\n async removeUserAccessOnNodeTemplate(nodeName: string): Promise<NodeEntry> {\n try {\n const templatesRootFolderId = await this.getNodeTemplatesFolderId();\n const nodeId: string = await this.getNodeIdFromParent(nodeName, templatesRootFolderId);\n\n return this.setInheritPermissions(nodeId, false);\n } catch (error) {\n console.error('Admin Actions - removeUserAccessOnNodeTemplate failed : ', error);\n return null;\n }\n }\n\n async removeUserAccessOnSpaceTemplate(nodeName: string): Promise<NodeEntry> {\n try {\n const templatesRootFolderId = await this.getSpaceTemplatesFolderId();\n const nodeId: string = await this.getNodeIdFromParent(nodeName, templatesRootFolderId);\n\n return this.setInheritPermissions(nodeId, false);\n } catch (error) {\n console.error('Admin Actions - removeUserAccessOnSpaceTemplate failed : ', error);\n return null;\n }\n }\n\n async setInheritPermissions(nodeId: string, inheritPermissions: boolean): Promise<NodeEntry | null> {\n const data = {\n permissions: {\n isInheritanceEnabled: inheritPermissions\n }\n };\n\n try {\n return this.apiService.nodes.updateNode(nodeId, data);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.setInheritPermissions.name}`, error);\n return null;\n }\n }\n\n private async addAspects(nodeId: string, aspectNames: string[]): Promise<NodeEntry> {\n try {\n return this.apiService.nodes.updateNode(nodeId, { aspectNames });\n } catch (error) {\n console.error(`${this.constructor.name} ${this.addAspects.name}`, error);\n return null;\n }\n }\n\n async createFileLink(originalNodeId: string, destinationId: string): Promise<NodeEntry | null> {\n const name = (await this.getNodeById(originalNodeId)).entry.name;\n const nodeBody = {\n name: `Link to ${name}.url`,\n nodeType: 'app:filelink',\n properties: {\n 'cm:destination': originalNodeId\n }\n };\n\n try {\n const link = await this.apiService.nodes.createNode(destinationId, nodeBody);\n await this.addAspects(originalNodeId, ['app:linked']);\n return link;\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFileLink.name}`, error);\n return null;\n }\n }\n\n async createFolderLink(originalNodeId: string, destinationId: string): Promise<NodeEntry | null> {\n const name = (await this.getNodeById(originalNodeId)).entry.name;\n const nodeBody = {\n name: `Link to ${name}.url`,\n nodeType: 'app:folderlink',\n properties: {\n 'cm:title': `Link to ${name}.url`,\n 'cm:destination': originalNodeId,\n 'cm:description': `Link to ${name}.url`,\n 'app:icon': 'space-icon-link'\n }\n };\n\n try {\n const link = await this.apiService.nodes.createNode(destinationId, nodeBody);\n await this.addAspects(originalNodeId, ['app:linked']);\n return link;\n } catch (error) {\n console.error(`${this.constructor.name} ${this.createFolderLink.name}`, error);\n return null;\n }\n }\n\n async createLinkToFileName(originalFileName: string, originalFileParentId: string, destinationParentId?: string): Promise<NodeEntry> {\n destinationParentId ??= originalFileParentId;\n\n try {\n const nodeId = await this.getNodeIdFromParent(originalFileName, originalFileParentId);\n\n return this.createFileLink(nodeId, destinationParentId);\n } catch (error) {\n console.error('Admin Actions - createLinkToFileName failed : ', error);\n return null;\n }\n }\n\n async createLinkToFolderName(originalFolderName: string, originalFolderParentId: string, destinationParentId?: string): Promise<NodeEntry> {\n destinationParentId ??= originalFolderParentId;\n\n try {\n const nodeId = await this.getNodeIdFromParent(originalFolderName, originalFolderParentId);\n return this.createFolderLink(nodeId, destinationParentId);\n } catch (error) {\n console.error('Admin Actions - createLinkToFolderName failed : ', error);\n return null;\n }\n }\n\n async getNodeProperty(nodeId: string, property: string): Promise<string> {\n try {\n const node = await this.getNodeById(nodeId);\n return node.entry.properties?.[property] || '';\n } catch (error) {\n console.error(`${this.constructor.name} ${this.getNodeProperty.name}`, error);\n return '';\n }\n }\n\n async isFileShared(nodeId: string): Promise<boolean> {\n try {\n const sharedId = await this.getNodeProperty(nodeId, 'qshare:sharedId');\n return sharedId !== '';\n } catch (error) {\n console.error(`${this.constructor.name} ${this.isFileShared.name}`, error);\n return null;\n }\n }\n\n private async getLockType(nodeId: string): Promise<string> {\n try {\n const lockType = await this.getNodeProperty(nodeId, 'cm:lockType');\n return lockType || '';\n } catch (error) {\n console.error(`${this.constructor.name} ${this.getLockType.name}`, error);\n return '';\n }\n }\n\n async isFileLockedWrite(nodeId: string): Promise<boolean> {\n try {\n return (await this.getLockType(nodeId)) === 'WRITE_LOCK';\n } catch (error) {\n console.error(`${this.constructor.name} ${this.isFileLockedWrite.name}`, error);\n return null;\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport {\n Site,\n SiteBodyCreate,\n SiteEntry,\n SiteMemberEntry,\n SiteMembershipBodyCreate,\n SiteMembershipBodyUpdate,\n SiteMembershipRequestBodyCreate,\n SiteMembershipRequestEntry\n} from '@alfresco/js-api';\n\nexport class SitesApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n static async initialize(userName: string, password?: string): Promise<SitesApi> {\n const classObj = new SitesApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async createSite(title: string, visibility?: string, description?: string, siteId?: string): Promise<SiteEntry | null> {\n const site = {\n title,\n visibility: visibility || Site.VisibilityEnum.PUBLIC,\n description: description,\n id: siteId || title\n } as SiteBodyCreate;\n\n try {\n return this.apiService.sites.createSite(site);\n } catch (error) {\n console.error(`SitesApi createSite : catch : `, error);\n return null;\n }\n }\n\n async getDocLibId(siteId: string): Promise<string> {\n try {\n return (await this.apiService.sites.listSiteContainers(siteId)).list.entries[0].entry.id;\n } catch (error) {\n console.error(`SitesApi getDocLibId : catch : `, error);\n return null;\n }\n }\n\n /**\n * Delete multiple sites/libraries.\n * @param siteIds The list of the site/library IDs to delete.\n * @param permanent Delete permanently, without moving to the trashcan? (default: true)\n */\n async deleteSites(siteIds: string[], permanent: boolean = true) {\n try {\n if (siteIds && siteIds.length > 0) {\n for (const siteId of siteIds) {\n await this.apiService.sites.deleteSite(siteId, { permanent });\n }\n }\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteSites.name}`, error);\n }\n }\n\n async updateSiteMember(siteId: string, userId: string, role: string): Promise<SiteMemberEntry> {\n const siteRole = {\n role: role\n } as SiteMembershipBodyUpdate;\n\n try {\n return this.apiService.sites.updateSiteMembership(siteId, userId, siteRole);\n } catch (error) {\n console.error(`SitesApi updateSiteMember : catch : `, error);\n return new SiteMemberEntry();\n }\n }\n\n async addSiteMember(siteId: string, userId: string, role: string): Promise<SiteMemberEntry> {\n const memberBody = {\n id: userId,\n role: role\n } as SiteMembershipBodyCreate;\n\n try {\n return this.apiService.sites.createSiteMembership(siteId, memberBody);\n } catch (error) {\n if (error.status === 409) {\n return this.updateSiteMember(siteId, userId, role);\n } else {\n console.error(`SitesApi addSiteMember : catch : `, error);\n return new SiteMemberEntry();\n }\n }\n }\n\n async createSiteMembershipRequestForPerson(personId: string, siteId: string): Promise<SiteMembershipRequestEntry> {\n const body = {\n id: siteId\n } as SiteMembershipRequestBodyCreate;\n\n try {\n return this.apiService.sites.createSiteMembershipRequestForPerson(personId, body);\n } catch (error) {\n console.error(`SitesApi createSiteMembershipRequestForPerson : catch : `, error);\n return null;\n }\n }\n\n async approveSiteMembershipRequest(siteId: string, inviteeId: string): Promise<SiteMemberEntry> {\n try {\n return this.apiService.sites.approveSiteMembershipRequest(siteId, inviteeId);\n } catch (error) {\n console.error(`SitesApi approveSiteMembershipRequest : catch : `, error);\n return null;\n }\n }\n\n async hasMembershipRequest(personId: string, siteId: string): Promise<boolean> {\n try {\n const requests = (await this.apiService.sites.listSiteMembershipRequestsForPerson(personId)).list.entries.map((e) => e.entry.id);\n return requests.includes(siteId);\n } catch (error) {\n console.error(`SitesApi hasMembershipRequest : catch : `, error);\n return null;\n }\n }\n\n async deleteSiteMember(siteId: string, userId: string) {\n try {\n return this.apiService.sites.deleteSiteMembership(siteId, userId);\n } catch (error) {\n console.error(`SitesApi deleteSiteMember : catch : `, error);\n }\n }\n\n async getSite(siteId: string): Promise<SiteEntry> {\n try {\n return this.apiService.sites.getSite(siteId);\n } catch (error) {\n console.error(`SitesApi getSite : catch : `, error);\n return null;\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport { Utils } from '../utils';\nimport { ResultSetPaging } from '@alfresco/js-api';\n\nexport class SearchPageApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n static async initialize(userName: string, password?: string): Promise<SearchPageApi> {\n const classObj = new SearchPageApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n private async querySearchFiles(username: string): Promise<ResultSetPaging> {\n const data = {\n query: {\n query: '*',\n language: 'afts'\n },\n filterQueries: [\n { query: `cm:modified:[NOW/DAY-30DAYS TO NOW/DAY+1DAY]` },\n { query: `cm:modifier:${username} OR cm:creator:${username}` },\n { query: `TYPE:\"content\" AND -TYPE:\"app:filelink\" AND -TYPE:\"fm:post\"` }\n ]\n };\n\n try {\n return this.apiService.search.search(data);\n } catch {\n return new ResultSetPaging();\n }\n }\n\n async getTotalItems(username: string): Promise<number> {\n return (await this.querySearchFiles(username)).list.pagination.totalItems;\n }\n\n async waitForApi(username: string, data: { expect: number }) {\n try {\n const searchFiles = async () => {\n const totalItems = await this.getTotalItems(username);\n if (totalItems !== data.expect) {\n return Promise.reject(totalItems);\n } else {\n return Promise.resolve(totalItems);\n }\n };\n\n return await Utils.retryCall(searchFiles);\n } catch {}\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\n\nexport class TrashcanApi {\n private apiService = new ApiClientFactory();\n\n static async initialize(userName: string, password?: string): Promise<TrashcanApi> {\n const classObj = new TrashcanApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n /**\n * Empties the trashcan. Uses multiple batches 1000 nodes each.\n */\n async emptyTrashcan(): Promise<void> {\n try {\n const nodes = await this.apiService.trashCan.listDeletedNodes({\n maxItems: 1000\n });\n\n if (nodes?.list?.entries?.length > 0) {\n const ids = nodes.list.entries.map((entries) => entries.entry.id);\n\n for (const nodeId of ids) {\n await this.apiService.trashCan.deleteDeletedNode(nodeId);\n }\n }\n } catch (error) {\n console.error('User Actions - emptyTrashcan failed : ', error);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { FindQuery } from '@alfresco/js-api';\nimport { Utils } from '../utils';\nimport { ApiClientFactory } from './api-client-factory';\n\nexport class QueriesApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<QueriesApi> {\n const classObj = new QueriesApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async waitForSites(searchTerm: string, data: { expect: number }): Promise<number> {\n try {\n const sites = async () => {\n const totalItems = await this.findSitesTotalItems(searchTerm);\n if (totalItems !== data.expect) {\n return Promise.reject(totalItems);\n } else {\n return Promise.resolve(totalItems);\n }\n };\n\n return await Utils.retryCall(sites);\n } catch (error) {\n console.error(`QueriesApi waitForSites : catch : `);\n console.error(`\\tExpected: ${data.expect} items, but found ${error}`);\n return null;\n }\n }\n\n private async findSitesTotalItems(searchTerm: string): Promise<number> {\n try {\n const opts: FindQuery = {\n term: searchTerm,\n fields: ['title']\n };\n\n const sites = await this.apiService.queries.findSites(searchTerm, opts);\n return sites.list.pagination.totalItems;\n } catch (error) {\n console.error(`QueriesApi findSitesTotalItems : catch :`, error);\n return null;\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { ApiClientFactory } from './api-client-factory';\nimport { CategoryEntry, CategoryBody, CategoryQuery, CategoryPaging, CategoryLinkBody } from '@alfresco/js-api';\n\nexport class CategoriesApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<CategoriesApi> {\n const classObj = new CategoriesApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async createCategory(categoryId: string, categoryBodyCreate: CategoryBody[], opts?: CategoryQuery): Promise<CategoryPaging | CategoryEntry> {\n try {\n return this.apiService.categoriesApi.createSubcategories(categoryId, categoryBodyCreate, opts);\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n async deleteCategory(categoryId: string): Promise<void> {\n if (categoryId === null) {\n console.error('categoryId is null, skipping deletion');\n return;\n }\n\n try {\n await this.apiService.categoriesApi.deleteCategory(categoryId);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.deleteCategory.name}: ${error}`);\n }\n }\n\n async linkNodeToCategory(\n nodeId: string,\n categoryLinkBodyCreate: CategoryLinkBody[],\n opts?: CategoryQuery\n ): Promise<CategoryPaging | CategoryEntry> {\n try {\n return this.apiService.categoriesApi.linkNodeToCategory(nodeId, categoryLinkBodyCreate, opts);\n } catch (error) {\n console.error(`${this.constructor.name} ${this.linkNodeToCategory.name}: ${error}`);\n return null;\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { TagBody, TagEntry, TagPaging } from '@alfresco/js-api';\nimport { ApiClientFactory } from './api-client-factory';\n\nexport class TagsApi {\n private apiService: ApiClientFactory;\n\n constructor() {\n this.apiService = new ApiClientFactory();\n }\n\n static async initialize(userName: string, password?: string): Promise<TagsApi> {\n const classObj = new TagsApi();\n await classObj.apiService.setUpAcaBackend(userName, password);\n return classObj;\n }\n\n async createTags(tags: TagBody[]): Promise<TagEntry | TagPaging> {\n try {\n return this.apiService.tagsApi.createTags(tags);\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n async assignTagToNode(nodeId: string, tag: TagBody): Promise<TagEntry> {\n try {\n return this.apiService.tagsApi.assignTagToNode(nodeId, tag);\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n async deleteTags(tagIds: string[]): Promise<void> {\n try {\n for (const tagId of tagIds) {\n await this.apiService.tagsApi.deleteTag(tagId);\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n async listTagsForNode(nodeId: string): Promise<TagPaging> {\n try {\n return this.apiService.tagsApi.listTagsForNode(nodeId);\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n async listTags(params?: { tag?: string; matching?: boolean }): Promise<TagPaging> {\n try {\n return this.apiService.tagsApi.listTags(params);\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n\n async deleteTagsByTagName(tagName: string): Promise<void> {\n try {\n const response = await this.listTags({ tag: tagName, matching: true });\n const tagIds = response.list.entries.map((entry) => entry.entry.id);\n await this.deleteTags(tagIds);\n } catch (error) {\n console.error(error);\n }\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './rules-api';\nexport * from './api-client-factory';\nexport * from './file-actions';\nexport * from './shared-links-api';\nexport * from './favorites-api';\nexport * from './people-api-models';\nexport * from './nodes-api';\nexport * from './sites-api';\nexport * from './node-content-tree';\nexport * from './search-api';\nexport * from './trashcan-api';\nexport * from './queries-api';\nexport * from './categories-api';\nexport * from './tags-api';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nconst LOWER_CASE_ALPHA = 'helloworld';\n\nfunction generateRandomCharset(length: number = 8, charSet: string): string {\n let text = '';\n\n for (let i = 0; i < length; i++) {\n text += charSet.charAt(Math.floor(Math.random() * charSet.length));\n }\n\n return text;\n}\n\nexport class UserModel {\n firstName?: string = generateRandomCharset(7, LOWER_CASE_ALPHA);\n lastName?: string = generateRandomCharset(7, LOWER_CASE_ALPHA);\n password?: string = generateRandomCharset(7, LOWER_CASE_ALPHA);\n email?: string;\n username?: string;\n idIdentityService?: string;\n type = 'enterprise';\n tenantId?: number;\n company?: string;\n id: number;\n\n constructor(details: any = {}) {\n const EMAIL_DOMAIN = 'alfresco';\n this.firstName = details.firstName ?? this.firstName;\n this.lastName = details.lastName ?? this.lastName;\n\n const USER_IDENTIFY = `${this.firstName}${this.lastName}.${generateRandomCharset(7, LOWER_CASE_ALPHA)}`;\n\n this.password = details.password ?? this.password;\n this.email = details.email ?? `${USER_IDENTIFY}@${EMAIL_DOMAIN}.com`;\n this.username = details.username ?? USER_IDENTIFY;\n this.idIdentityService = details.idIdentityService ?? this.idIdentityService;\n this.type = details.type ?? this.type;\n this.tenantId = details.tenantId ?? this.tenantId;\n this.company = details.company ?? this.company;\n this.id = details.id ?? this.id;\n }\n\n get fullName(): string {\n return `${this.firstName ?? ''} ${this.lastName ?? ''}`;\n }\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { users } from '../base-config';\n\nexport interface CustomConfig {\n users: Array<keyof typeof users>;\n}\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './user-model';\nexport * from './custom-config';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { test as base } from '@playwright/test';\nimport {\n FavoritesLibrariesPage,\n LoginPage,\n MyLibrariesPage,\n NodesPage,\n PersonalFilesPage,\n RecentFilesPage,\n SharedPage,\n SearchPage,\n FavoritesPage,\n TrashPage\n} from '../page-objects';\nimport { FileActionsApi, SharedLinksApi, FavoritesPageApi, NodesApi, SitesApi } from '../api';\nimport { users } from '../base-config';\n\ninterface Pages {\n personalFiles: PersonalFilesPage;\n nodesPage: NodesPage;\n myLibrariesPage: MyLibrariesPage;\n recentFilesPage: RecentFilesPage;\n sharedPage: SharedPage;\n searchPage: SearchPage;\n favoritePage: FavoritesPage;\n favoritesLibrariesPage: FavoritesLibrariesPage;\n trashPage: TrashPage;\n loginPage: LoginPage;\n favoriteLibrariesPage: FavoritesLibrariesPage;\n}\n\ninterface Api {\n fileAction: FileActionsApi;\n shareAction: SharedLinksApi;\n favoritesPageAction: FavoritesPageApi;\n nodesApiAction: NodesApi;\n sitesApiAction: SitesApi;\n}\n\nexport const test = base.extend<Pages & Api>({\n personalFiles: async ({ page }, use) => {\n await use(new PersonalFilesPage(page));\n },\n nodesPage: async ({ page }, use) => {\n await use(new NodesPage(page));\n },\n recentFilesPage: async ({ page }, use) => {\n await use(new RecentFilesPage(page));\n },\n sharedPage: async ({ page }, use) => {\n await use(new SharedPage(page));\n },\n searchPage: async ({ page }, use) => {\n await use(new SearchPage(page));\n },\n favoritePage: async ({ page }, use) => {\n await use(new FavoritesPage(page));\n },\n favoritesLibrariesPage: async ({ page }, use) => {\n await use(new FavoritesLibrariesPage(page));\n },\n trashPage: async ({ page }, use) => {\n await use(new TrashPage(page));\n },\n loginPage: async ({ page }, use) => {\n await use(new LoginPage(page));\n },\n // eslint-disable-next-line no-empty-pattern\n fileAction: async ({}, use) => {\n await use(await FileActionsApi.initialize(users.hruser.username));\n },\n // eslint-disable-next-line no-empty-pattern\n shareAction: async ({}, use) => {\n await use(await SharedLinksApi.initialize(users.hruser.username));\n },\n // eslint-disable-next-line no-empty-pattern\n favoritesPageAction: async ({}, use) => {\n await use(await FavoritesPageApi.initialize(users.hruser.username));\n },\n // eslint-disable-next-line no-empty-pattern\n nodesApiAction: async ({}, use) => {\n await use(await NodesApi.initialize(users.admin.username, users.admin.password));\n },\n // eslint-disable-next-line no-empty-pattern\n sitesApiAction: async ({}, use) => {\n await use(await SitesApi.initialize(users.hruser.username));\n },\n myLibrariesPage: async ({ page }, use) => {\n await use(new MyLibrariesPage(page));\n },\n favoriteLibrariesPage: async ({ page }, use) => {\n await use(new FavoritesLibrariesPage(page));\n }\n});\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './page-initialization';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Utils } from '../../utils';\n\nexport const random = Utils.random();\n\n// ----- files -----\n\nconst consumerContextMenu = ['Share', 'Download', 'View', 'Favorite', 'Copy', 'Manage Versions'];\nconst consumerFavContextMenu = ['Share', 'Download', 'View', 'Remove Favorite', 'Copy', 'Manage Versions'];\nconst consumerSharedContextMenu = ['Shared Link Settings', 'Download', 'View', 'Favorite', 'Copy', 'Manage Versions'];\nconst consumerSharedFavContextMenu = ['Shared Link Settings', 'Download', 'View', 'Remove Favorite', 'Copy', 'Manage Versions'];\n\nconst consumerToolbarPrimary = ['Share', 'Download', 'View', 'View Details', 'More Actions'];\nconst consumerSharedToolbarPrimary = ['Shared Link Settings', 'Download', 'View', 'View Details', 'More Actions'];\n\nconst searchConsumerToolbarPrimary = ['Share', 'Download', 'View', 'View Details', 'More Actions'];\nconst searchConsumerSharedToolbarPrimary = ['Shared Link Settings', 'Download', 'View', 'View Details', 'More Actions'];\n\nconst consumerToolbarMore = ['Favorite', 'Copy', 'Manage Versions'];\nconst consumerFavToolbarMore = ['Remove Favorite', 'Copy', 'Manage Versions'];\n\nexport const collaboratorToolbarPrimary = ['Shared Link Settings', 'Download', 'View', 'View Details', 'More Actions'];\nexport const collaboratorEditRowToolbarMore = [\n 'Edit Offline',\n 'Upload New Version',\n 'Remove Favorite',\n 'Copy',\n 'Manage Versions',\n 'Edit Aspects',\n 'Permissions'\n];\nexport const favoritesCollaboratorToolbarMore = ['Upload New Version', 'Remove Favorite', 'Move', 'Copy', 'Delete', 'Manage Versions'];\nexport const collaboratorSharedToolbarPrimary = [\n 'Activate full-screen mode',\n 'Shared Link Settings',\n 'Download',\n 'Print',\n 'View Details',\n 'More Actions'\n];\nexport const collaboratorDocToolbarMore = [\n 'Edit in Microsoft Office™',\n 'Edit Offline',\n 'Upload New Version',\n 'Remove Favorite',\n 'Copy',\n 'Manage Versions',\n 'Edit Aspects',\n 'Permissions'\n];\nexport const collaboratorLockCurrentUserToolbarMore = ['Cancel Editing', 'Upload New Version', 'Remove Favorite', 'Copy', 'Manage Versions'];\nexport const collaboratorLockOtherUserToolbarMore = ['Cancel Editing', 'Remove Favorite', 'Move', 'Copy', 'Delete', 'Manage Versions', 'Permissions'];\nexport const collaboratorLockOtherUserSearchToolbarMore = ['Cancel Editing', 'Remove Favorite', 'Copy', 'Manage Versions', 'Permissions'];\n\n// ---- VIEWER ----\n\nconst consumerViewerSharedToolbarPrimary = ['Activate full-screen mode', 'Shared Link Settings', 'Download', 'Print', 'View Details', 'More Actions'];\nconst consumerViewerToolbarPrimary = ['Activate full-screen mode', 'Share', 'Download', 'Print', 'View Details', 'More Actions'];\nconst consumerViewerFavToolbarMore = ['Remove Favorite', 'Copy', 'Manage Versions'];\nconst consumerViewerToolbarMore = ['Favorite', 'Copy', 'Manage Versions'];\n\n// ---- FAVORITES workarounds ----\n\nconst favoritesConsumerToolbarMore = ['Upload New Version', 'Remove Favorite', 'Move', 'Copy', 'Delete', 'Manage Versions'];\n\nconst favoritesConsumerContextMenu = [\n 'Share',\n 'Download',\n 'View',\n 'Upload New Version',\n 'Remove Favorite',\n 'Move',\n 'Copy',\n 'Delete',\n 'Manage Versions'\n];\n\nconst favoritesConsumerSharedContextMenu = [\n 'Shared Link Settings',\n 'Download',\n 'View',\n 'Upload New Version',\n 'Remove Favorite',\n 'Move',\n 'Copy',\n 'Delete',\n 'Manage Versions'\n];\n\n// ---- SHARED FILES workaround ----\n\nconst sharedConsumerToolbarMore = ['Upload New Version', 'Favorite', 'Copy', 'Manage Versions'];\nconst sharedConsumerLockedToolbarMore = ['Cancel Editing', 'Upload New Version', 'Favorite', 'Copy', 'Manage Versions'];\nconst sharedConsumerFavToolbarMore = ['Upload New Version', 'Remove Favorite', 'Copy', 'Manage Versions'];\nconst sharedConsumerFavLockedToolbarMore = ['Cancel Editing', 'Upload New Version', 'Remove Favorite', 'Copy', 'Manage Versions'];\nconst sharedConsumerContextMenu = ['Shared Link Settings', 'Download', 'View', 'Upload New Version', 'Favorite', 'Copy', 'Manage Versions'];\nconst sharedConsumerLockedContextMenu = [\n 'Shared Link Settings',\n 'Download',\n 'View',\n 'Cancel Editing',\n 'Upload New Version',\n 'Favorite',\n 'Copy',\n 'Manage Versions'\n];\n\nconst sharedConsumerFavContextMenu = ['Shared Link Settings', 'Download', 'View', 'Upload New Version', 'Remove Favorite', 'Copy', 'Manage Versions'];\n\nconst sharedConsumerFavLockedContextMenu = [\n 'Shared Link Settings',\n 'Download',\n 'View',\n 'Cancel Editing',\n 'Upload New Version',\n 'Remove Favorite',\n 'Copy',\n 'Manage Versions'\n];\n\nexport const fileDocx = {\n name: `file-${random}-docx.docx`,\n description: 'file not shared, not fav, office, not locked',\n\n contextMenu: consumerContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const fileDocxFav = {\n name: `file-${random}-docx-fav.docx`,\n description: 'file not shared, fav, office, not locked',\n\n contextMenu: consumerFavContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerContextMenu,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const file = {\n name: `file-${random}.txt`,\n description: 'file not shared, not fav, not office, not locked',\n\n contextMenu: consumerContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const fileFav = {\n name: `file-${random}-fav.txt`,\n description: 'file not shared, fav, not office, not locked',\n\n contextMenu: consumerFavContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerContextMenu,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const fileDocxShared = {\n name: `file-${random}-docx-shared.docx`,\n description: 'file shared, not fav, office, not locked',\n\n contextMenu: consumerSharedContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n sharedToolbarMore: sharedConsumerToolbarMore,\n sharedContextMenu: sharedConsumerContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileDocxSharedFav = {\n name: `file-${random}-docx-shared-fav.docx`,\n description: 'file shared, fav, office, not locked',\n\n contextMenu: consumerSharedFavContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerSharedContextMenu,\n\n sharedToolbarMore: sharedConsumerFavToolbarMore,\n sharedContextMenu: sharedConsumerFavContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileShared = {\n name: `file-${random}-shared.txt`,\n description: 'file shared, not fav, not office, not locked',\n\n contextMenu: consumerSharedContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n sharedToolbarMore: sharedConsumerToolbarMore,\n sharedContextMenu: sharedConsumerContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileSharedFav = {\n name: `file-${random}-shared-fav.txt`,\n description: 'file shared, fav, not office, not locked',\n\n contextMenu: consumerSharedFavContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerSharedContextMenu,\n\n sharedToolbarMore: sharedConsumerFavToolbarMore,\n sharedContextMenu: sharedConsumerFavContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileLocked = {\n name: `file-${random}-locked.txt`,\n description: 'file not shared, not fav, not office, locked',\n\n contextMenu: consumerContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const fileFavLocked = {\n name: `file-${random}-fav-locked.txt`,\n description: 'file not shared, fav, not office, locked',\n\n contextMenu: consumerFavContextMenu,\n toolbarPrimary: consumerToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerContextMenu,\n\n searchToolbarPrimary: searchConsumerToolbarPrimary\n};\n\nexport const fileSharedLocked = {\n name: `file-${random}-shared-locked.txt`,\n description: 'file shared, not fav, not office, locked',\n\n contextMenu: consumerSharedContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerToolbarMore,\n\n sharedToolbarMore: sharedConsumerLockedToolbarMore,\n sharedContextMenu: sharedConsumerLockedContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileSharedFavLocked = {\n name: `file-${random}-shared-fav-locked.txt`,\n description: 'file shared, fav, not office, locked',\n\n contextMenu: consumerSharedFavContextMenu,\n toolbarPrimary: consumerSharedToolbarPrimary,\n toolbarMore: consumerFavToolbarMore,\n viewerToolbarPrimary: consumerViewerSharedToolbarPrimary,\n viewerToolbarMore: consumerViewerFavToolbarMore,\n\n favoritesToolbarMore: favoritesConsumerToolbarMore,\n favoritesContextMenu: favoritesConsumerSharedContextMenu,\n\n sharedToolbarMore: sharedConsumerFavLockedToolbarMore,\n sharedContextMenu: sharedConsumerFavLockedContextMenu,\n\n searchToolbarPrimary: searchConsumerSharedToolbarPrimary\n};\n\nexport const fileGranularPermission = `file-${random}-granular.txt`;\nexport const fileLockedByUser = `file-${random}-my-locked.txt`;\n\n// ---- folders ---\n\nconst consumerFolderContextMenu = ['Download', 'Favorite', 'Copy'];\nconst consumerFolderToolbarPrimary = ['Download', 'View Details', 'More Actions'];\nconst consumerFolderToolbarMore = ['Favorite', 'Copy'];\nconst searchConsumerFolderToolbarPrimary = ['Download', 'View Details', 'More Actions'];\nconst consumerFolderFavContextMenu = ['Download', 'Remove Favorite', 'Copy'];\nconst consumerFolderFavToolbarMore = ['Remove Favorite', 'Copy'];\n\n// ---- FAVORITES workarounds ----\n\nconst favoritesConsumerFolderContextMenu = ['Download', 'Edit', 'Remove Favorite', 'Move', 'Copy', 'Delete'];\n\nconst favoritesConsumerFolderToolbarMore = ['Edit', 'Remove Favorite', 'Move', 'Copy', 'Delete'];\n\nexport const folder = {\n name: `folder-${random}`,\n description: 'folder not favorite',\n contextMenu: consumerFolderContextMenu,\n toolbarPrimary: consumerFolderToolbarPrimary,\n toolbarMore: consumerFolderToolbarMore,\n\n searchToolbarPrimary: searchConsumerFolderToolbarPrimary\n};\n\nexport const folderFav = {\n name: `folder-fav-${random}`,\n description: 'folder favorite',\n contextMenu: consumerFolderFavContextMenu,\n toolbarPrimary: consumerFolderToolbarPrimary,\n toolbarMore: consumerFolderFavToolbarMore,\n\n favoritesContextMenu: favoritesConsumerFolderContextMenu,\n favoritesToolbarMore: favoritesConsumerFolderToolbarMore,\n\n searchToolbarPrimary: searchConsumerFolderToolbarPrimary\n};\n\nexport const folderFav2 = {\n name: `folder-fav-2-${random}`,\n description: 'folder 2 favorite'\n};\n\n// ---- multiple selection ---\n\nconst multipleSelContextMenu = ['Download', 'Favorite', 'Copy'];\nconst multipleSelAllFavContextMenu = ['Download', 'Remove Favorite', 'Copy'];\nconst multipleSelToolbarPrimary = ['Download', 'View Details', 'More Actions'];\nconst multipleSelToolbarMore = ['Favorite', 'Copy'];\nconst multipleSelAllFavToolbarMore = ['Remove Favorite', 'Copy'];\nconst searchMultipleSelToolbarPrimary = ['Download', 'View Details', 'More Actions'];\n\n// ---- FAVORITES workarounds ----\n\nconst favoritesMultipleSelContextMenu = ['Download', 'Favorite', 'Move', 'Copy', 'Delete'];\nconst favoritesMultipleSelToolbarMore = ['Favorite', 'Move', 'Copy', 'Delete'];\nconst favoritesMultipleSelAllFavContextMenu = ['Download', 'Remove Favorite', 'Move', 'Copy', 'Delete'];\nconst favoritesMultipleSelAllFavToolbarMore = ['Remove Favorite', 'Move', 'Copy', 'Delete'];\n\nexport const multipleSel = {\n contextMenu: multipleSelContextMenu,\n toolbarPrimary: multipleSelToolbarPrimary,\n toolbarMore: multipleSelToolbarMore,\n\n favoritesContextMenu: favoritesMultipleSelContextMenu,\n favoritesToolbarMore: favoritesMultipleSelToolbarMore,\n\n searchToolbarPrimary: searchMultipleSelToolbarPrimary\n};\n\nexport const multipleSelAllFav = {\n contextMenu: multipleSelAllFavContextMenu,\n toolbarPrimary: multipleSelToolbarPrimary,\n toolbarMore: multipleSelAllFavToolbarMore,\n\n favoritesContextMenu: favoritesMultipleSelAllFavContextMenu,\n favoritesToolbarMore: favoritesMultipleSelAllFavToolbarMore,\n\n searchToolbarPrimary: searchMultipleSelToolbarPrimary\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { Utils } from '../../utils';\n\nconst random = Utils.random();\nconst multipleSelToolbarPrimary = ['Download', 'View Details', 'More Actions'];\n\n// ---- folders ---\n\nconst folderContextMenu = ['Download', 'Edit', 'Favorite', 'Move', 'Copy', 'Delete', 'Edit Aspects', 'Permissions', 'Manage Rules'];\nconst folderFavContextMenu = ['Download', 'Edit', 'Remove Favorite', 'Move', 'Copy', 'Delete', 'Edit Aspects', 'Permissions', 'Manage Rules'];\nconst folderToolbarMore = ['Edit', 'Favorite', 'Move', 'Copy', 'Delete', 'Edit Aspects', 'Permissions', 'Manage Rules'];\nconst folderFavToolbarMore = ['Edit', 'Remove Favorite', 'Move', 'Copy', 'Delete', 'Edit Aspects', 'Permissions', 'Manage Rules'];\n\nexport const folderFile = {\n name: `folderActions-${random}`,\n description: 'folder not favorite',\n contextMenu: folderContextMenu,\n toolbarPrimary: multipleSelToolbarPrimary,\n toolbarMore: folderToolbarMore\n};\n\nexport const folderFavFile = {\n name: `folderActions-fav-${random}`,\n contextMenu: folderFavContextMenu,\n toolbarPrimary: multipleSelToolbarPrimary,\n toolbarMore: folderFavToolbarMore\n};\n\n// ---- multiple selection ---\n\nconst multipleSelContextMenu = ['Download', 'Favorite', 'Move', 'Copy', 'Delete'];\nconst multipleSelToolbarMore = ['Favorite', 'Move', 'Copy', 'Delete'];\n\nexport const multipleSelFile = {\n contextMenu: multipleSelContextMenu,\n toolbarPrimary: multipleSelToolbarPrimary,\n toolbarMore: multipleSelToolbarMore\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './test-data-permissions';\nexport * from './test-data-files-folders';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport { resolve } from 'path';\n\nexport const TEST_FILES = {\n DOCX: {\n path: resolve(__dirname, 'file-docx.docx'),\n name: 'file-docx',\n data: 'Lorem ipsum dolor sit amet'\n },\n DOCX2: {\n path: resolve(__dirname, 'file2-docx.docx'),\n name: 'file2-docx',\n data: 'Lorem ipsum dolor sit amet'\n },\n PDF: {\n path: resolve(__dirname, 'file-pdf.pdf'),\n name: 'file-pdf',\n extension: 'pdf',\n data: 'Lorem ipsum dolor sit amet'\n },\n FILE_UNSUPPORTED: {\n path: resolve(__dirname, 'file_unsupported.3DS'),\n name: 'file_unsupported.3DS',\n data: 'Lorem ipsum dolor sit amet'\n },\n PDF_PROTECTED: {\n path: resolve(__dirname, 'file-pdf-protected.pdf'),\n name: 'file-pdf-protected',\n data: 'Lorem ipsum dolor sit amet',\n password: '0000'\n },\n XLSX: {\n path: resolve(__dirname, 'file-xlsx.xlsx'),\n name: 'file-xlsx',\n data: 'Lorem ipsum dolor sit amet'\n },\n XLSX2: {\n path: resolve(__dirname, 'file2-xlsx.xlsx'),\n name: 'file2-xlsx',\n data: 'Lorem ipsum dolor sit amet'\n },\n JPG_FILE: {\n path: resolve(__dirname, 'file-jpg.jpg'),\n name: 'file-jpg'\n },\n JPG_FILE_1MB: {\n path: resolve(__dirname, 'file-jpg-1mb.jpg'),\n name: 'file-jpg-1mb'\n },\n PNG_FILE: {\n path: resolve(__dirname, 'file-png.png'),\n name: 'file-png'\n },\n GIF_FILE: {\n path: resolve(__dirname, 'file-gif.gif'),\n name: 'file-gif'\n },\n PPTX_FILE: {\n path: resolve(__dirname, 'file-pptx.pptx'),\n name: 'file-pptx'\n },\n MP3_FILE: {\n path: resolve(__dirname, 'file-mp3.mp3'),\n name: 'file-mp3'\n },\n MP4_FILE: {\n path: resolve(__dirname, 'file-mp4.mp4'),\n name: 'file-mp4'\n },\n WEBM_FILE: {\n path: resolve(__dirname, 'file-webm.webm'),\n name: 'file-webm'\n },\n PDF_PROTECTED2: {\n path: resolve(__dirname, 'protected.pdf'),\n name: 'file-protected',\n data: 'Lorem ipsum dolor sit amet',\n password: '0000'\n }\n};\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './test-data';\nexport * from './test-files';\n","/*!\n * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.\n *\n * Alfresco Example Content Application\n *\n * This file is part of the Alfresco Example Content Application.\n * If the software was purchased under a paid Alfresco license, the terms of\n * the paid license agreement will prevail. Otherwise, the software is\n * provided under the following open source license terms:\n *\n * The Alfresco Example Content Application is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * The Alfresco Example Content Application is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.\n */\n\nexport * from './api';\nexport * from './base-config';\nexport * from './models';\nexport * from './page-objects';\nexport * from './fixtures';\nexport * from './utils';\nexport * from './resources';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["env","fs","SitesApi","NodesApi","QueriesApi","TrashcanApi","CategoriesApi","TagsApi","crypto","base","random","multipleSelContextMenu","multipleSelToolbarPrimary","multipleSelToolbarMore"],"mappings":"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"}