diff --git a/e2e/playwright/list-views/src/tests/sort-list.e2e.ts b/e2e/playwright/list-views/src/tests/sort-list.e2e.ts index 494c81029..3331eaca7 100644 --- a/e2e/playwright/list-views/src/tests/sort-list.e2e.ts +++ b/e2e/playwright/list-views/src/tests/sort-list.e2e.ts @@ -139,7 +139,7 @@ test.describe('Remember sorting', () => { test('[XAT-4526] Size sort order is retained after viewing a file and closing the viewer', async ({ personalFiles }) => { await personalFiles.dataTable.performClickFolderOrFileToOpen(initialSortState.firstElement); - await personalFiles.viewer.closeButtonLocator.click(); + await personalFiles.viewer.closeButton.click(); await personalFiles.waitForPageLoad(); const firstExpectedSortState = await getSortState(personalFiles); expect(firstExpectedSortState).toEqual(initialSortState); @@ -149,7 +149,7 @@ test.describe('Remember sorting', () => { await personalFiles.page.waitForTimeout(1000); const secondExpectedSortData = await getSortState(personalFiles); await personalFiles.dataTable.performClickFolderOrFileToOpen(secondExpectedSortData.firstElement); - await personalFiles.viewer.closeButtonLocator.click(); + await personalFiles.viewer.closeButton.click(); await personalFiles.waitForPageLoad(); const actualSortData = await getSortState(personalFiles); expect(actualSortData).toEqual(secondExpectedSortData); diff --git a/e2e/playwright/share-action/src/tests/share/unshare-file-search-results.e2e.ts b/e2e/playwright/share-action/src/tests/share/unshare-file-search-results.e2e.ts index 6a8210cde..8be0e8f93 100755 --- a/e2e/playwright/share-action/src/tests/share/unshare-file-search-results.e2e.ts +++ b/e2e/playwright/share-action/src/tests/share/unshare-file-search-results.e2e.ts @@ -143,7 +143,7 @@ test.describe('Unshare a file from Search Results', () => { await page.goto(url); await personalFiles.viewer.waitForViewerToOpen(); - await expect(personalFiles.viewer.fileTitleButtonLocator).not.toHaveText(file2); + await expect(personalFiles.viewer.fileTitleButton).not.toHaveText(file2); expect(await nodesApiAction.isFileShared(file2Id)).toBe(false); }); @@ -174,7 +174,7 @@ test.describe('Unshare a file from Search Results', () => { await page.goto(url); await personalFiles.viewer.waitForViewerToOpen(); - expect(personalFiles.viewer.fileTitleButtonLocator.textContent()).not.toEqual(file4); + expect(personalFiles.viewer.fileTitleButton.textContent()).not.toEqual(file4); expect(await nodesApiAction.isFileShared(file4Id)).toBe(false); }); diff --git a/e2e/playwright/smoke-test/src/tests/viewer/viewer.e2e.ts b/e2e/playwright/smoke-test/src/tests/viewer/viewer.e2e.ts index fb99c24c4..ff199b045 100644 --- a/e2e/playwright/smoke-test/src/tests/viewer/viewer.e2e.ts +++ b/e2e/playwright/smoke-test/src/tests/viewer/viewer.e2e.ts @@ -97,7 +97,7 @@ test.describe('viewer file', () => { await personalFiles.dataTable.performClickFolderOrFileToOpen(randomDocxName); expect(await personalFiles.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); expect(await personalFiles.viewer.getCloseButtonTooltip()).toEqual('Close'); - await personalFiles.viewer.closeButtonLocator.click(); + await personalFiles.viewer.closeButton.click(); await expect(personalFiles.dataTable.getCellLinkByName(randomDocxName), 'Viewer did not close').toBeVisible(); }); @@ -105,6 +105,6 @@ test.describe('viewer file', () => { const previewURL = `#/personal-files/${folderId}/(viewer:view/${fileDocxId})`; await personalFiles.navigate({ remoteUrl: previewURL }); await personalFiles.viewer.waitForViewerLoaderToFinish(); - await expect(personalFiles.viewer.fileTitleButtonLocator).toHaveText(randomDocxName); + await expect(personalFiles.viewer.fileTitleButton).toHaveText(randomDocxName); }); }); diff --git a/e2e/playwright/special-permissions-actions-available/src/tests/other-permissions.ts b/e2e/playwright/special-permissions-actions-available/src/tests/other-permissions.ts index c5618ebdd..f68236859 100644 --- a/e2e/playwright/special-permissions-actions-available/src/tests/other-permissions.ts +++ b/e2e/playwright/special-permissions-actions-available/src/tests/other-permissions.ts @@ -47,7 +47,7 @@ async function checkActionsViewerAvailable( await myLibrariesPage.dataTable.performClickFolderOrFileToOpen(item); expect(await myLibrariesPage.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); await myLibrariesPage.viewer.verifyViewerPrimaryActions(expectedToolbarPrimary); - await myLibrariesPage.acaHeader.clickViewerMoreActions(); + await myLibrariesPage.viewer.toolbar.clickMoreActions(); await myLibrariesPage.matMenu.verifyActualMoreActions(expectedToolbarMore); } diff --git a/e2e/playwright/special-permissions-actions-available/src/tests/viewer.ts b/e2e/playwright/special-permissions-actions-available/src/tests/viewer.ts index dd2e8ad3f..49004ee32 100644 --- a/e2e/playwright/special-permissions-actions-available/src/tests/viewer.ts +++ b/e2e/playwright/special-permissions-actions-available/src/tests/viewer.ts @@ -43,7 +43,7 @@ export function viewerTests(userConsumer: string, siteName: string) { await myLibrariesPage.dataTable.performClickFolderOrFileToOpen(item); expect(await myLibrariesPage.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); await myLibrariesPage.viewer.verifyViewerPrimaryActions(expectedToolbarPrimary); - await myLibrariesPage.acaHeader.clickViewerMoreActions(); + await myLibrariesPage.viewer.toolbar.clickMoreActions(); await myLibrariesPage.matMenu.verifyActualMoreActions(expectedToolbarMore); } @@ -188,7 +188,7 @@ export function viewerTests(userConsumer: string, siteName: string) { await favoritePage.dataTable.performClickFolderOrFileToOpen(item); expect(await favoritePage.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); await favoritePage.viewer.verifyViewerPrimaryActions(expectedToolbarPrimary); - await favoritePage.acaHeader.clickViewerMoreActions(); + await favoritePage.viewer.toolbar.clickMoreActions(); await favoritePage.matMenu.verifyActualMoreActions(expectedToolbarMore); } @@ -267,7 +267,7 @@ export function viewerTests(userConsumer: string, siteName: string) { await sharedPage.dataTable.performClickFolderOrFileToOpen(item); expect(await sharedPage.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); await sharedPage.viewer.verifyViewerPrimaryActions(expectedToolbarPrimary); - await sharedPage.acaHeader.clickViewerMoreActions(); + await sharedPage.viewer.toolbar.clickMoreActions(); await sharedPage.matMenu.verifyActualMoreActions(expectedToolbarMore); } @@ -346,7 +346,7 @@ export function viewerTests(userConsumer: string, siteName: string) { await searchPage.dataTable.performClickFolderOrFileToOpen(item); expect(await searchPage.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); await searchPage.viewer.verifyViewerPrimaryActions(expectedToolbarPrimary); - await searchPage.acaHeader.clickViewerMoreActions(); + await searchPage.viewer.toolbar.clickMoreActions(); await searchPage.matMenu.verifyActualMoreActions(expectedToolbarMore); } diff --git a/e2e/playwright/upload-download-actions/src/tests/upload-new-version.e2e.ts b/e2e/playwright/upload-download-actions/src/tests/upload-new-version.e2e.ts index b12167a6d..997cec57f 100755 --- a/e2e/playwright/upload-download-actions/src/tests/upload-new-version.e2e.ts +++ b/e2e/playwright/upload-download-actions/src/tests/upload-new-version.e2e.ts @@ -79,7 +79,7 @@ test.describe('Upload new version', () => { await page.dataTable.performClickFolderOrFileToOpen(unsupportedFileName); await page.viewer.checkUnknownFormatIsDisplayed(); expect(await page.viewer.getUnknownFormatMessage()).toContain(`Couldn't load preview. Unsupported file type`); - await page.viewer.closeButtonLocator.click(); + await page.viewer.closeButton.click(); } test.beforeAll(async () => { diff --git a/e2e/playwright/viewer-actions/src/tests/viewer-action.e2e.ts b/e2e/playwright/viewer-actions/src/tests/viewer-action.e2e.ts index e83c62960..91d0c0f8b 100644 --- a/e2e/playwright/viewer-actions/src/tests/viewer-action.e2e.ts +++ b/e2e/playwright/viewer-actions/src/tests/viewer-action.e2e.ts @@ -79,7 +79,7 @@ async function navigateAndOpenFile(page: PersonalFilesPage, folderId: string, fi } async function openManageVersionDialog(page: PersonalFilesPage): Promise { - await page.acaHeader.clickViewerMoreActions(); + await page.viewer.toolbar.clickMoreActions(); await page.matMenu.clickMenuItem('Manage Versions'); await page.manageVersionsDialog.waitForDialog(); } @@ -123,20 +123,20 @@ test.describe('viewer action file', () => { test('[XAT-5417] Viewer - Download action - Personal Files', async ({ personalFiles }) => { await openFileInViewer(personalFiles, randomDocxName); const downloadPromise = personalFiles.page.waitForEvent('download'); - await personalFiles.acaHeader.downloadButtonViewer.click(); + await personalFiles.viewer.toolbar.downloadButton.click(); const download = await downloadPromise; expect(download.suggestedFilename()).toContain(randomDocxName); }); test('[XAT-5415] Full screen action', async ({ personalFiles }) => { await openFileInViewer(personalFiles, randomDocxName); - await personalFiles.acaHeader.fullScreenButton.click(); + await personalFiles.viewer.toolbar.fullScreenButton.click(); expect(await personalFiles.viewer.isViewerOpened(), 'Viewer is closed after pressing Full screen').toBe(true); }); test('[XAT-5416] Pressing ESC in the viewer closes only the action dialog', async ({ personalFiles }) => { await openFileInViewer(personalFiles, randomDocxName); - await personalFiles.acaHeader.clickViewerMoreActions(); + await personalFiles.viewer.toolbar.clickMoreActions(); await personalFiles.viewerDialog.clickActionsCopy(); expect(await personalFiles.viewerDialog.isCopyDialogOpen(), 'Dialog is not open').toBe(true); await personalFiles.page.keyboard.press('Escape'); @@ -179,7 +179,7 @@ test.describe('viewer action file', () => { test('[XAT-5421] Viewer - Delete action - Personal Files', async ({ personalFiles, trashPage }) => { await openFileInViewer(personalFiles, randomDocxDelete); - await personalFiles.acaHeader.clickViewerMoreActions(); + await personalFiles.viewer.toolbar.clickMoreActions(); await personalFiles.viewerDialog.deleteMenuButton.click(); const deleteName = await personalFiles.snackBar.getSnackBarMessage(); expect(deleteName).toContain(`${randomDocxDelete} deleted`); @@ -223,14 +223,14 @@ test.describe('viewer action file', () => { test('[XAT-5423] Viewer - Edit Offline action - Personal Files', async ({ personalFiles }) => { await openFileInViewer(personalFiles, fileForEditOffline); - await personalFiles.acaHeader.clickViewerMoreActions(); + await personalFiles.viewer.toolbar.clickMoreActions(); await personalFiles.matMenu.clickMenuItem('Edit Offline'); const downloadPromise = personalFiles.page.waitForEvent('download'); - await personalFiles.acaHeader.downloadButtonViewer.click(); + await personalFiles.viewer.toolbar.downloadButton.click(); const download = await downloadPromise; expect(download.suggestedFilename(), 'File should found in download location').toBe(fileForEditOffline); expect(await personalFiles.viewer.isViewerOpened(), 'Viewer is closed after pressing Full screen').toBe(true); - await personalFiles.acaHeader.clickViewerMoreActions(); + await personalFiles.viewer.toolbar.clickMoreActions(); expect(await personalFiles.matMenu.isMenuItemVisible('Cancel Editing'), 'Cancel Editing menu should be visible').toBe(true); }); }); @@ -270,9 +270,9 @@ test.describe('viewer action file', () => { test('[XAT-5424] Viewer - Cancel Editing action - Personal Files', async ({ personalFiles }) => { await openFileInViewer(personalFiles, fileForCancelEditing); - await personalFiles.acaHeader.clickViewerMoreActions(); + await personalFiles.viewer.toolbar.clickMoreActions(); await personalFiles.matMenu.clickMenuItem('Cancel Editing'); - await personalFiles.acaHeader.clickViewerMoreActions(); + await personalFiles.viewer.toolbar.clickMoreActions(); expect(await personalFiles.matMenu.isMenuItemVisible('Edit Offline'), 'Edit offline menu should be visible').toBe(true); }); }); @@ -349,7 +349,7 @@ test.describe('viewer action file', () => { await personalFiles.uploadNewVersionDialog.uploadButton.waitFor({ state: 'detached' }); expect(await personalFiles.viewer.isViewerOpened(), 'Viewer is not open').toBe(true); expect(await personalFiles.viewer.getFileTitle()).toContain(file17781NewVersion); - await personalFiles.acaHeader.clickViewerMoreActions(); + await personalFiles.viewer.toolbar.clickMoreActions(); await expect(personalFiles.matMenu.getMenuItemFromHeaderMenu('Cancel Editing'), `'Cancel Editing' button shouldn't be shown`).toBeHidden(); await expect(personalFiles.matMenu.getMenuItemFromHeaderMenu('Edit Offline'), `'Edit Offline' should be shown`).toBeVisible(); }); @@ -437,11 +437,11 @@ test.describe('viewer action file', () => { await sharedPage.navigate({ waitUntil: 'domcontentloaded' }); await sharedPage.dataTable.performClickFolderOrFileToOpen(randomDocxNameShare); expect(await sharedPage.viewer.isViewerOpened(), 'Viewer should be opened').toBe(true); - await sharedPage.acaHeader.clickViewerMoreActions(); + await sharedPage.viewer.toolbar.clickMoreActions(); await favoritePage.viewerDialog.favoriteMenuButton.waitFor({ state: 'attached', timeout: timeouts.normal }); await sharedPage.viewerDialog.favoriteMenuButton.click(); await favoritePage.viewerDialog.favoriteMenuButton.waitFor({ state: 'detached', timeout: timeouts.normal }); - await sharedPage.acaHeader.clickViewerMoreActions(); + await sharedPage.viewer.toolbar.clickMoreActions(); await favoritePage.viewerDialog.removeFavoriteMenuButton.waitFor({ state: 'attached', timeout: timeouts.normal }); await expect(sharedPage.viewerDialog.removeFavoriteMenuButton, 'Item should be remove favorite').toBeVisible(); await sharedPage.page.keyboard.press('Escape'); @@ -486,8 +486,8 @@ test.describe('viewer action file', () => { await favoritePage.navigate({ waitUntil: 'domcontentloaded' }); await favoritePage.dataTable.performClickFolderOrFileToOpen(randomDocxNameFavorite); expect(await favoritePage.viewer.isViewerOpened(), 'Viewer should be opened').toBe(true); - await favoritePage.viewer.shareButton.waitFor({ state: 'attached', timeout: timeouts.normal }); - await favoritePage.viewer.shareButton.click(); + await favoritePage.viewer.toolbar.shareButton.waitFor({ state: 'attached', timeout: timeouts.normal }); + await favoritePage.viewer.toolbar.shareButton.click(); await favoritePage.viewerDialog.shareDialogTitle.waitFor({ state: 'attached', timeout: timeouts.normal }); await expect(favoritePage.viewerDialog.shareDialogTitle, 'Share dialog should be open').toBeVisible(); await favoritePage.viewerDialog.shareDialogClose.click(); @@ -532,14 +532,14 @@ test.describe('viewer action file', () => { await recentFilesPage.navigate(); await recentFilesPage.dataTable.performClickFolderOrFileToOpen(docxRecentFiles); expect(await recentFilesPage.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); - await recentFilesPage.acaHeader.clickViewerMoreActions(); + await recentFilesPage.viewer.toolbar.clickMoreActions(); await recentFilesPage.matMenu.clickMenuItem('Copy'); await expect(recentFilesPage.contentNodeSelector.actionButton, 'Dialog is not open').toBeVisible(); await recentFilesPage.contentNodeSelector.selectLocation('Personal Files'); await recentFilesPage.contentNodeSelector.selectDestination(destination); await recentFilesPage.contentNodeSelector.actionButton.click(); expect(await recentFilesPage.snackBar.message.innerText()).toContain('Copied 1 item'); - await recentFilesPage.viewer.closeButtonLocator.click(); + await recentFilesPage.viewer.closeButton.click(); await personalFiles.navigate({ remoteUrl: `#/personal-files/${destinationId}` }); expect(await personalFiles.dataTable.isItemPresent(docxRecentFiles), 'Item is not present in destination').toBe(true); }); diff --git a/e2e/playwright/viewer/src/tests/viewer-protected.e2e.ts b/e2e/playwright/viewer/src/tests/viewer-protected.e2e.ts index 1b91f1f81..f261008a7 100644 --- a/e2e/playwright/viewer/src/tests/viewer-protected.e2e.ts +++ b/e2e/playwright/viewer/src/tests/viewer-protected.e2e.ts @@ -81,7 +81,7 @@ test.describe('viewer file', () => { }); test('[XAT-5470] Refresh the page while Password dialog is open', async ({ personalFiles }) => { - await personalFiles.viewer.viewerLocator.waitFor({ state: 'visible' }); + await personalFiles.viewer.viewerRender.waitFor({ state: 'visible' }); await personalFiles.passwordDialog.enterPassword(TEST_FILES.PDF_PROTECTED.password); await personalFiles.page.waitForLoadState('networkidle'); diff --git a/e2e/playwright/viewer/src/tests/viewer-useraction.e2e.ts b/e2e/playwright/viewer/src/tests/viewer-useraction.e2e.ts index e465fc3d4..e0815338d 100644 --- a/e2e/playwright/viewer/src/tests/viewer-useraction.e2e.ts +++ b/e2e/playwright/viewer/src/tests/viewer-useraction.e2e.ts @@ -68,7 +68,7 @@ test.describe('from File Libraries', () => { await myLibrariesPage.dataTable.performClickFolderOrFileToOpen(xlsxLibraries); expect(await myLibrariesPage.viewer.isViewerOpened(), 'Viewer should be opened').toBe(true); - await myLibrariesPage.acaHeader.clickViewerMoreActions(); + await myLibrariesPage.viewer.toolbar.clickMoreActions(); await myLibrariesPage.matMenu.clickMenuItem('Move'); expect(await myLibrariesPage.viewerDialog.isCopyDialogOpen(), 'Dialog is not open').toBe(true); @@ -77,7 +77,7 @@ test.describe('from File Libraries', () => { await myLibrariesPage.copyMoveDialog.actionButton.click(); expect(await myLibrariesPage.snackBar.getSnackBarMessage()).toContain('Moved 1 item'); - await myLibrariesPage.viewer.closeButtonLocator.click(); + await myLibrariesPage.viewer.closeButton.click(); await myLibrariesPage.dataTable.getRowByName(xlsxLibraries).waitFor({ state: 'detached' }); await expect(myLibrariesPage.dataTable.getRowByName(xlsxLibraries), 'Item was not moved').toBeHidden(); await personalFiles.navigate({ remoteUrl: `#/personal-files/${destinationId}` }); diff --git a/e2e/playwright/viewer/src/tests/viewer-version-actions.e2e.ts b/e2e/playwright/viewer/src/tests/viewer-version-actions.e2e.ts index 3f367c5b3..1618c6028 100644 --- a/e2e/playwright/viewer/src/tests/viewer-version-actions.e2e.ts +++ b/e2e/playwright/viewer/src/tests/viewer-version-actions.e2e.ts @@ -71,7 +71,7 @@ test.describe('Version actions', () => { async function downloadFromViewer(page: PageWithViewer): Promise { const downloadPromise = page.page.waitForEvent('download'); - await page.viewer.downloadButton.click(); + await page.viewer.toolbar.downloadButton.click(); return downloadPromise; } @@ -135,7 +135,7 @@ test.describe('Version actions', () => { await personalFiles.viewer.waitForViewerToOpen(); await personalFiles.viewer.waitForViewerContentToRender('document'); - await personalFiles.viewer.toolbar.clickViewerMoreActions(); + await personalFiles.viewer.toolbar.clickMoreActions(); await personalFiles.matMenu.clickMenuItem('Manage Versions'); await personalFiles.manageVersionsDialog.clickListActionButtonForVersion('2.0'); await Promise.all([Utils.waitForApiResponse(personalFiles, '2.0', 200), personalFiles.matMenu.clickMenuItem('View')]); diff --git a/e2e/playwright/viewer/src/tests/viewer.e2e.ts b/e2e/playwright/viewer/src/tests/viewer.e2e.ts index d347a313d..7675b4a20 100644 --- a/e2e/playwright/viewer/src/tests/viewer.e2e.ts +++ b/e2e/playwright/viewer/src/tests/viewer.e2e.ts @@ -47,10 +47,13 @@ async function initializeApis(username: string): Promise<{ nodesApi: NodesApi; t return { nodesApi, trashcanApi, fileActionsApi }; } +let file19936Name: string; + test.describe('viewer file', () => { test.describe('Open viewer from Personal Files', () => { const username = `user-${Utils.random()}`; const randomDocxName = `${TEST_FILES.DOCX.name}-${Utils.random()}`; + file19936Name = `file19936-${Utils.random()}`; let folderViewerId: string; let nodesApiViewer: NodesApi; let trashcanApiViewer: TrashcanApi; @@ -63,7 +66,9 @@ test.describe('viewer file', () => { const { fileActionsApi } = apis; folderViewerId = (await nodesApiViewer.createFolder(`viewer-${Utils.random()}`)).entry.id; await fileActionsApi.uploadFile(TEST_FILES.DOCX.path, randomDocxName, folderViewerId); + await fileActionsApi.uploadFile(TEST_FILES.JPG_FILE.path, file19936Name, folderViewerId); await fileActionsApi.waitForNodes(randomDocxName, { expect: 1 }); + await fileActionsApi.waitForNodes(file19936Name, { expect: 1 }); } catch (error) { console.error(`beforeAll failed: ${error}`); throw error; @@ -103,9 +108,20 @@ test.describe('viewer file', () => { await personalFiles.dataTable.performClickFolderOrFileToOpen(randomDocxName); expect(await personalFiles.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); expect(await personalFiles.viewer.getCloseButtonTooltip()).toEqual('Close'); - await personalFiles.viewer.closeButtonLocator.click(); + await personalFiles.viewer.closeButton.click(); await expect(personalFiles.dataTable.getCellLinkByName(randomDocxName), 'Viewer did not close').toBeVisible(); }); + + test('[XAT-19936] Filename in the viewer updates whenever the user changes the filename in the infodrawer', async ({ personalFiles }) => { + const file19936NameAfter = `updated-${file19936Name}`; + await personalFiles.dataTable.performClickFolderOrFileToOpen(file19936Name); + expect(await personalFiles.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); + await personalFiles.viewer.toolbar.viewDetailsButton.click(); + await personalFiles.infoDrawer.viewer.generalInfoEditButton.click(); + await personalFiles.infoDrawer.viewer.generalInfoNameField.fill(file19936NameAfter); + await personalFiles.infoDrawer.viewer.generalInfoSaveButton.click(); + await expect(personalFiles.viewer.fileTitleButton).toContainText(file19936NameAfter); + }); }); test.describe('Navigate between files', () => { @@ -148,13 +164,13 @@ test.describe('viewer file', () => { await personalFiles.navigate({ remoteUrl: `#/personal-files/${folder2Id}` }); await personalFiles.dataTable.performClickFolderOrFileToOpen(file1); expect(await personalFiles.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); - expect(await personalFiles.viewer.fileTitleButtonLocator.textContent()).toContain(file1); + expect(await personalFiles.viewer.fileTitleButton.textContent()).toContain(file1); await personalFiles.viewer.nextFileButton.or(personalFiles.viewer.previousFileButton).first().click(); await personalFiles.viewer.waitForViewerLoaderToFinish(); - expect(await personalFiles.viewer.fileTitleButtonLocator.textContent()).not.toContain(file1); + expect(await personalFiles.viewer.fileTitleButton.textContent()).not.toContain(file1); await personalFiles.viewer.nextFileButton.or(personalFiles.viewer.previousFileButton).first().click(); await personalFiles.viewer.waitForViewerLoaderToFinish(); - expect(await personalFiles.viewer.fileTitleButtonLocator.textContent()).toContain(file1); + expect(await personalFiles.viewer.fileTitleButton.textContent()).toContain(file1); }); test('[XAT-5409] Previous File button is not displayed when file is first in the list', async ({ personalFiles }) => { @@ -185,7 +201,7 @@ test.describe('viewer file', () => { await personalFiles.navigate({ remoteUrl: `#/personal-files/${folder3Id}` }); await personalFiles.dataTable.performClickFolderOrFileToOpen(file3); expect(await personalFiles.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); - await expect(personalFiles.viewer.fileTitleButtonLocator).toBeVisible(); + await expect(personalFiles.viewer.fileTitleButton).toBeVisible(); await expect(personalFiles.viewer.previousFileButton).toBeHidden(); await expect(personalFiles.viewer.nextFileButton).toBeHidden(); }); @@ -240,7 +256,7 @@ test.describe('viewer file', () => { await personalFiles.navigate({ remoteUrl: `#/libraries/${folderId}` }); await personalFiles.dataTable.performClickFolderOrFileToOpen(file2); expect(await personalFiles.viewer.isViewerOpened(), 'Viewer is not opened').toBe(true); - await expect(personalFiles.viewer.fileTitleButtonLocator).toBeVisible(); + await expect(personalFiles.viewer.fileTitleButton).toBeVisible(); await expect(personalFiles.viewer.previousFileButton.or(personalFiles.viewer.nextFileButton).first()).toBeVisible(); await sitesApi1.deleteSiteMember(site1Id, user2Id); await personalFiles.viewer.previousFileButton.or(personalFiles.viewer.nextFileButton).first().click(); @@ -282,7 +298,7 @@ test.describe('viewer file', () => { const previewURL = `#/personal-files/${folderId}/(viewer:view/${fileJpgId})`; await personalFiles.navigate({ remoteUrl: previewURL }); await personalFiles.viewer.waitForViewerLoaderToFinish(); - await expect(personalFiles.viewer.fileTitleButtonLocator).toContainText(randomJpgName); + await expect(personalFiles.viewer.fileTitleButton).toContainText(randomJpgName); }); }); @@ -492,7 +508,7 @@ test.describe('viewer file', () => { test('[XAT-5477] Viewer does not open when accessing the preview URL for a file without permissions', async ({ personalFiles }) => { const previewURL = `#/libraries/${docLibId}/(viewer:view/${fileAdminId})`; await personalFiles.navigate({ remoteUrl: `${previewURL}` }); - await expect(personalFiles.viewer.viewerLocator, 'Viewer should not be opened!').toBeHidden(); + await expect(personalFiles.viewer.viewerRender, 'Viewer should not be opened!').toBeHidden(); }); }); diff --git a/nx.json b/nx.json index be6236dd7..a1674458d 100644 --- a/nx.json +++ b/nx.json @@ -38,5 +38,6 @@ }, "cacheDirectory": "nxcache", "useInferencePlugins": false, - "useLegacyCache": true + "useLegacyCache": true, + "analytics": false } diff --git a/projects/aca-playwright-shared/src/page-objects/components/aca-header.component.ts b/projects/aca-playwright-shared/src/page-objects/components/aca-header.component.ts index 14e713ae0..d485d57de 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/aca-header.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/aca-header.component.ts @@ -28,17 +28,13 @@ import { BaseComponent } from './base.component'; export class AcaHeader extends BaseComponent { private static readonly rootElement = 'aca-toolbar'; - private readonly moreActionsButton = this.getChild('button[id="app.viewer.toolbar.more"]'); private readonly toolbarMoreActions = this.getChild('button[id="app.toolbar.more"]'); public createButton = this.getChild('[id="app.toolbar.create"]'); public viewDetails = this.getChild('[title="View Details"]'); public viewButton = this.getChild('button[title="View"]'); public searchButton = this.getChild('button[id="app.toolbar.search"]'); - public fullScreenButton = this.getChild('button[id="app.viewer.fullscreen"]'); public shareButton = this.getChild('button[id="share-action-button"]'); - public downloadButtonViewer = this.getChild('button[id="app.viewer.download"]'); public downloadButton = this.getChild('button[id="app.toolbar.download"]'); - public sharedDownloadButton = this.getChild('button[id="app.viewer.shared.download"]'); public uploadButton = this.getChild('button[id="app.toolbar.upload"]'); public uploadFileButton = this.page.locator('button[id="app.create.uploadFile"]'); public uploadNewVersionButton = this.page.locator('#app-upload-file-version'); @@ -50,11 +46,6 @@ export class AcaHeader extends BaseComponent { } public matMenu = new MatMenuComponent(this.page); - async clickViewerMoreActions(): Promise { - await this.moreActionsButton.waitFor({ state: 'attached' }); - await this.moreActionsButton.click(); - } - async clickMoreActions(): Promise { await this.toolbarMoreActions.waitFor({ state: 'attached' }); await this.toolbarMoreActions.click(); diff --git a/projects/aca-playwright-shared/src/page-objects/components/index.ts b/projects/aca-playwright-shared/src/page-objects/components/index.ts index 480c32cc7..ecd2315f3 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/index.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/index.ts @@ -30,7 +30,7 @@ export * from './base.component'; export * from './actions-dropdown.component'; export * from './conditions.component'; export * from './pagination.component'; -export * from './adf-info-drawer.component'; +export * from './info-drawer.component'; export * from './viewer.component'; export * from './search'; export * from './breadcrumb/breadcrumb.component'; @@ -39,3 +39,4 @@ export * from './aca-header.component'; export * from './error.component'; export * from './datetime-picker/datetime-picker.component'; export * from './edit-mode.component'; +export * from './viewer-toolbar.component'; diff --git a/projects/aca-playwright-shared/src/page-objects/components/adf-info-drawer.component.ts b/projects/aca-playwright-shared/src/page-objects/components/info-drawer.component.ts similarity index 94% rename from projects/aca-playwright-shared/src/page-objects/components/adf-info-drawer.component.ts rename to projects/aca-playwright-shared/src/page-objects/components/info-drawer.component.ts index dcb4b48d2..dab527964 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/adf-info-drawer.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/info-drawer.component.ts @@ -25,11 +25,18 @@ import { BaseComponent } from './base.component'; import { Locator, Page } from '@playwright/test'; -export class AdfInfoDrawerComponent extends BaseComponent { +export class InfoDrawerComponent extends BaseComponent { private static readonly rootElement = 'adf-info-drawer'; - constructor(page: Page) { - super(page, AdfInfoDrawerComponent.rootElement); + private viewerScoped?: InfoDrawerComponent; + + constructor(page: Page, rootElement: string = InfoDrawerComponent.rootElement) { + super(page, rootElement); + } + + get viewer(): InfoDrawerComponent { + this.viewerScoped ??= new InfoDrawerComponent(this.page, `adf-viewer ${InfoDrawerComponent.rootElement}`); + return this.viewerScoped; } private readonly categoriesManagement = this.getChild('adf-categories-management'); @@ -51,7 +58,7 @@ export class AdfInfoDrawerComponent extends BaseComponent { public commentUsername = this.getChild('.adf-comment-user-name'); public commentTextContent = this.getChild('.adf-comment-message'); public commentTimestamp = this.getChild('.adf-comment-message-time'); - public infoDrawerPanel = this.page.locator(AdfInfoDrawerComponent.rootElement); + public infoDrawerPanel = this.page.locator(InfoDrawerComponent.rootElement); public headerTitle = this.getChild('.adf-info-drawer-layout-header-title').getByRole('heading'); public editButton = this.page.getByRole('button', { name: 'Edit' }); public cancelButton = this.page.getByRole('button', { name: 'Cancel' }); diff --git a/projects/aca-playwright-shared/src/page-objects/components/viewer-toolbar.component.ts b/projects/aca-playwright-shared/src/page-objects/components/viewer-toolbar.component.ts new file mode 100644 index 000000000..b96b08c35 --- /dev/null +++ b/projects/aca-playwright-shared/src/page-objects/components/viewer-toolbar.component.ts @@ -0,0 +1,46 @@ +/*! + * Copyright © 2005-2026 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Alfresco Example Content Application + * + * This file is part of the Alfresco Example Content Application. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * The Alfresco Example Content Application is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * The Alfresco Example Content Application is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * from Hyland Software. If not, see . + */ + +import { Page } from '@playwright/test'; +import { BaseComponent } from './base.component'; + +export class ViewerToolbarComponent extends BaseComponent { + private static readonly rootElement = 'adf-viewer'; + + private readonly moreActionsButton = this.getChild('button[id="app.viewer.toolbar.more"]'); + public viewDetailsButton = this.getChild('[title="View Details"]'); + public fullScreenButton = this.getChild('button[id="app.viewer.fullscreen"]'); + public shareButton = this.getChild('button[id="share-action-button"]'); + public downloadButton = this.getChild('button[id="app.viewer.download"]'); + public sharedDownloadButton = this.getChild('button[id="app.viewer.shared.download"]'); + + constructor(page: Page) { + super(page, ViewerToolbarComponent.rootElement); + } + + async clickMoreActions(): Promise { + await this.moreActionsButton.waitFor({ state: 'attached' }); + await this.moreActionsButton.click(); + } +} diff --git a/projects/aca-playwright-shared/src/page-objects/components/viewer.component.ts b/projects/aca-playwright-shared/src/page-objects/components/viewer.component.ts index 3bae0e7a4..737c473be 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/viewer.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/viewer.component.ts @@ -24,21 +24,19 @@ import { Page, expect } from '@playwright/test'; import { BaseComponent } from './base.component'; -import { AcaHeader } from './aca-header.component'; +import { ViewerToolbarComponent } from './viewer-toolbar.component'; import { timeouts } from '../../utils'; export class ViewerComponent extends BaseComponent { private static readonly rootElement = 'adf-viewer'; - public viewerLocator = this.getChild('adf-viewer-render'); - public closeButtonLocator = this.getChild('.adf-viewer-close-button'); - public fileTitleButtonLocator = this.getChild('#adf-viewer-display-name'); + public viewerRender = this.getChild('adf-viewer-render'); + public closeButton = this.getChild('.adf-viewer-close-button'); + public fileTitleButton = this.getChild('#adf-viewer-display-name'); public pdfViewerContentPages = this.getChild('.adf-pdf-viewer__content .page'); - public shareButton = this.getChild('button[id="share-action-button"]'); - public downloadButton = this.getChild('button[id="app.viewer.download"]'); public unknownFormat = this.getChild(`adf-viewer-unknown-format .adf-viewer__unknown-format-view`); - public viewerImage = this.viewerLocator.locator('#viewer-image'); - public viewerDocument = this.viewerLocator.locator('.adf-pdf-viewer__content [role="document"]'); + public viewerImage = this.viewerRender.locator('#viewer-image'); + public viewerDocument = this.viewerRender.locator('.adf-pdf-viewer__content [role="document"]'); public documentThumbnailButton = this.getChild('[data-automation-id="adf-thumbnails-button"]'); public thumbnailsPages = this.getChild('[data-automation-id="adf-thumbnails-content"] adf-pdf-thumb'); public thumbnailsCloseButton = this.getChild('[data-automation-id="adf-thumbnails-close"]'); @@ -54,7 +52,7 @@ export class ViewerComponent extends BaseComponent { public previousFileButton = this.getChild('[data-automation-id="adf-toolbar-pref-file"]'); public noPermissionsView = this.getChild('aca-generic-error'); - toolbar = new AcaHeader(this.page); + public toolbar = new ViewerToolbarComponent(this.page); constructor(page: Page) { super(page, ViewerComponent.rootElement); @@ -67,12 +65,12 @@ export class ViewerComponent extends BaseComponent { async isViewerOpened(): Promise { await this.waitForViewerToOpen(); - return this.viewerLocator.isVisible(); + return this.viewerRender.isVisible(); } async waitForViewerToOpen(): Promise { await this.waitForViewerLoaderToFinish(); - await this.viewerLocator.waitFor({ state: 'visible', timeout: timeouts.large }); + await this.viewerRender.waitFor({ state: 'visible', timeout: timeouts.large }); } async waitForViewerLoaderToFinish(): Promise { @@ -101,13 +99,13 @@ export class ViewerComponent extends BaseComponent { } async isCloseButtonDisplayed(): Promise { - await this.closeButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal }); - return this.closeButtonLocator.isEnabled({ timeout: timeouts.normal }); + await this.closeButton.waitFor({ state: 'visible', timeout: timeouts.normal }); + return this.closeButton.isEnabled({ timeout: timeouts.normal }); } async isFileTitleDisplayed(): Promise { - await this.fileTitleButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal }); - return this.fileTitleButtonLocator.isVisible(); + await this.fileTitleButton.waitFor({ state: 'visible', timeout: timeouts.normal }); + return this.fileTitleButton.isVisible(); } async waitForZoomPercentageToDisplay(): Promise { @@ -129,8 +127,8 @@ export class ViewerComponent extends BaseComponent { } async getFileTitle(): Promise { - await this.fileTitleButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal }); - const title = await this.fileTitleButtonLocator.textContent(); + await this.fileTitleButton.waitFor({ state: 'visible', timeout: timeouts.normal }); + const title = await this.fileTitleButton.textContent(); if (!title) { const errorMessage = 'File title is not displayed in the viewer'; this.logger.error(errorMessage); @@ -140,8 +138,8 @@ export class ViewerComponent extends BaseComponent { } async getCloseButtonTooltip(): Promise { - await this.closeButtonLocator.waitFor({ state: 'visible', timeout: timeouts.normal }); - const tooltip = await this.closeButtonLocator.getAttribute('title'); + await this.closeButton.waitFor({ state: 'visible', timeout: timeouts.normal }); + const tooltip = await this.closeButton.getAttribute('title'); if (!tooltip) { const errorMessage = 'Close button tooltip is not available'; this.logger.error(errorMessage); diff --git a/projects/aca-playwright-shared/src/page-objects/pages/favorites.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/favorites.page.ts index 1e8325ed3..1edfeffee 100644 --- a/projects/aca-playwright-shared/src/page-objects/pages/favorites.page.ts +++ b/projects/aca-playwright-shared/src/page-objects/pages/favorites.page.ts @@ -31,7 +31,7 @@ import { SidenavComponent, PaginationComponent, Breadcrumb, - AdfInfoDrawerComponent + InfoDrawerComponent } from '../components'; import { AcaHeader } from '../components/aca-header.component'; import { AdfFolderDialogComponent, ViewerOverlayDialogComponent, ManageVersionsDialog } from '../components/dialogs'; @@ -52,7 +52,7 @@ export class FavoritesPage extends BasePage { public sidenav = new SidenavComponent(this.page); public pagination = new PaginationComponent(this.page); public breadcrumb = new Breadcrumb(this.page); - public infoDrawer = new AdfInfoDrawerComponent(this.page); + public infoDrawer = new InfoDrawerComponent(this.page); public manageVersionsDialog = new ManageVersionsDialog(this.page); async waitForPageLoad() { diff --git a/projects/aca-playwright-shared/src/page-objects/pages/my-libraries.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/my-libraries.page.ts index b439535ac..2fcd4287a 100644 --- a/projects/aca-playwright-shared/src/page-objects/pages/my-libraries.page.ts +++ b/projects/aca-playwright-shared/src/page-objects/pages/my-libraries.page.ts @@ -26,7 +26,7 @@ import { Page } from '@playwright/test'; import { BasePage } from './base.page'; import { AcaHeader, - AdfInfoDrawerComponent, + InfoDrawerComponent, AdfLibraryDialogComponent, DataTableComponent, MatMenuComponent, @@ -50,8 +50,8 @@ export class MyLibrariesPage extends BasePage { public matMenu = new MatMenuComponent(this.page); public libraryDialog = new AdfLibraryDialogComponent(this.page); public dataTable = new DataTableComponent(this.page); - public libraryDetails = new AdfInfoDrawerComponent(this.page); - public infoDrawer = new AdfInfoDrawerComponent(this.page); + public libraryDetails = new InfoDrawerComponent(this.page); + public infoDrawer = new InfoDrawerComponent(this.page); public viewer = new ViewerComponent(this.page); public viewerDialog = new ViewerOverlayDialogComponent(this.page); public copyMoveDialog = new ContentNodeSelectorDialog(this.page); diff --git a/projects/aca-playwright-shared/src/page-objects/pages/personal-files.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/personal-files.page.ts index ecb4d0924..2c8907145 100644 --- a/projects/aca-playwright-shared/src/page-objects/pages/personal-files.page.ts +++ b/projects/aca-playwright-shared/src/page-objects/pages/personal-files.page.ts @@ -40,7 +40,7 @@ import { ErrorComponent, ShareDialogComponent, AdfConfirmDialogComponent, - AdfInfoDrawerComponent, + InfoDrawerComponent, UploadNewVersionDialog, ManageVersionsDialog, UploadDialog, @@ -63,6 +63,7 @@ export class PersonalFilesPage extends BasePage { public contentNodeSelector = new ContentNodeSelectorDialog(this.page); public dataTable = new DataTableComponent(this.page); public viewer = new ViewerComponent(this.page); + public passwordDialog = new PasswordOverlayDialogComponent(this.page); public viewerDialog = new ViewerOverlayDialogComponent(this.page); public breadcrumb = new Breadcrumb(this.page); @@ -72,7 +73,7 @@ export class PersonalFilesPage extends BasePage { public errorDialog = new ErrorComponent(this.page); public shareDialog = new ShareDialogComponent(this.page); public confirmDialog = new AdfConfirmDialogComponent(this.page); - public infoDrawer = new AdfInfoDrawerComponent(this.page); + public infoDrawer = new InfoDrawerComponent(this.page); public nodeInfoEditMode = new EditModeComponent(this.page); public uploadNewVersionDialog = new UploadNewVersionDialog(this.page); public manageVersionsDialog = new ManageVersionsDialog(this.page); diff --git a/projects/aca-playwright-shared/src/page-objects/pages/recent-files.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/recent-files.page.ts index 51f2b3584..95172e9af 100644 --- a/projects/aca-playwright-shared/src/page-objects/pages/recent-files.page.ts +++ b/projects/aca-playwright-shared/src/page-objects/pages/recent-files.page.ts @@ -24,7 +24,7 @@ import { Page } from '@playwright/test'; import { BasePage } from './base.page'; -import { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent, Breadcrumb, AdfInfoDrawerComponent } from '../components'; +import { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent, Breadcrumb, InfoDrawerComponent } from '../components'; import { AcaHeader } from '../components/aca-header.component'; import { AdfFolderDialogComponent, ContentNodeSelectorDialog, ManageVersionsDialog } from '../components/dialogs'; @@ -42,7 +42,7 @@ export class RecentFilesPage extends BasePage { public viewer = new ViewerComponent(this.page); public sidenav = new SidenavComponent(this.page); public breadcrumb = new Breadcrumb(this.page); - public infoDrawer = new AdfInfoDrawerComponent(this.page); + public infoDrawer = new InfoDrawerComponent(this.page); public contentNodeSelector = new ContentNodeSelectorDialog(this.page); public manageVersionsDialog = new ManageVersionsDialog(this.page); } diff --git a/projects/aca-playwright-shared/src/page-objects/pages/shared.page.ts b/projects/aca-playwright-shared/src/page-objects/pages/shared.page.ts index 12d2f0c72..aac769da5 100644 --- a/projects/aca-playwright-shared/src/page-objects/pages/shared.page.ts +++ b/projects/aca-playwright-shared/src/page-objects/pages/shared.page.ts @@ -24,7 +24,7 @@ import { Page } from '@playwright/test'; import { BasePage } from './base.page'; -import { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent, Breadcrumb, AdfInfoDrawerComponent } from '../components'; +import { DataTableComponent, MatMenuComponent, ViewerComponent, SidenavComponent, Breadcrumb, InfoDrawerComponent } from '../components'; import { AcaHeader } from '../components/aca-header.component'; import { AdfFolderDialogComponent, ViewerOverlayDialogComponent, ManageVersionsDialog } from '../components/dialogs'; @@ -43,6 +43,6 @@ export class SharedPage extends BasePage { public viewerDialog = new ViewerOverlayDialogComponent(this.page); public sidenav = new SidenavComponent(this.page); public breadcrumb = new Breadcrumb(this.page); - public infoDrawer = new AdfInfoDrawerComponent(this.page); + public infoDrawer = new InfoDrawerComponent(this.page); public manageVersionsDialog = new ManageVersionsDialog(this.page); }