mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2026-09-09 18:02:54 +00:00
[ACS-12629] Automate XAT-19936 + lots of viewer refactoring (#5372)
* [ACS-12629] Automated xat-19936 - pt1 * [ACS-12629] viewer refactoring * [ACS-12629] infodrawer changes * [ACS-12629] sonar fix 1
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -79,7 +79,7 @@ async function navigateAndOpenFile(page: PersonalFilesPage, folderId: string, fi
|
||||
}
|
||||
|
||||
async function openManageVersionDialog(page: PersonalFilesPage): Promise<void> {
|
||||
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);
|
||||
});
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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}` });
|
||||
|
||||
@@ -71,7 +71,7 @@ test.describe('Version actions', () => {
|
||||
|
||||
async function downloadFromViewer(page: PageWithViewer): Promise<Download> {
|
||||
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')]);
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -38,5 +38,6 @@
|
||||
},
|
||||
"cacheDirectory": "nxcache",
|
||||
"useInferencePlugins": false,
|
||||
"useLegacyCache": true
|
||||
"useLegacyCache": true,
|
||||
"analytics": false
|
||||
}
|
||||
|
||||
@@ -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<void> {
|
||||
await this.moreActionsButton.waitFor({ state: 'attached' });
|
||||
await this.moreActionsButton.click();
|
||||
}
|
||||
|
||||
async clickMoreActions(): Promise<void> {
|
||||
await this.toolbarMoreActions.waitFor({ state: 'attached' });
|
||||
await this.toolbarMoreActions.click();
|
||||
|
||||
@@ -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';
|
||||
|
||||
+11
-4
@@ -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' });
|
||||
+46
@@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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<void> {
|
||||
await this.moreActionsButton.waitFor({ state: 'attached' });
|
||||
await this.moreActionsButton.click();
|
||||
}
|
||||
}
|
||||
@@ -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<boolean> {
|
||||
await this.waitForViewerToOpen();
|
||||
return this.viewerLocator.isVisible();
|
||||
return this.viewerRender.isVisible();
|
||||
}
|
||||
|
||||
async waitForViewerToOpen(): Promise<void> {
|
||||
await this.waitForViewerLoaderToFinish();
|
||||
await this.viewerLocator.waitFor({ state: 'visible', timeout: timeouts.large });
|
||||
await this.viewerRender.waitFor({ state: 'visible', timeout: timeouts.large });
|
||||
}
|
||||
|
||||
async waitForViewerLoaderToFinish(): Promise<void> {
|
||||
@@ -101,13 +99,13 @@ export class ViewerComponent extends BaseComponent {
|
||||
}
|
||||
|
||||
async isCloseButtonDisplayed(): Promise<boolean> {
|
||||
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<boolean> {
|
||||
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<void> {
|
||||
@@ -129,8 +127,8 @@ export class ViewerComponent extends BaseComponent {
|
||||
}
|
||||
|
||||
async getFileTitle(): Promise<string> {
|
||||
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<string> {
|
||||
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);
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user