[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:
Adam Świderski
2026-09-04 14:11:11 +02:00
committed by GitHub
parent 8134f59d80
commit ec82e76753
22 changed files with 148 additions and 87 deletions
@@ -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')]);
+24 -8
View File
@@ -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();
});
});