[ACS-12333][ACS-12335][ACS-12334] Add Checkout / Check-in Support (#5360)

Co-authored-by: Adam Świderski <adam.tomasz.swiderski@gmail.com>
This commit is contained in:
Mykyta Maliarchuk
2026-09-08 10:57:16 +02:00
committed by GitHub
co-authored by Adam Świderski
parent ff7560b7fc
commit c4f3e988c8
40 changed files with 1271 additions and 311 deletions
@@ -1,6 +1,17 @@
{
"all": {
"XAT-4845": "https://hyland.atlassian.net/browse/ACS-12214",
"XAT-4835": "https://hyland.atlassian.net/browse/ACS-12214"
"XAT-4835": "https://hyland.atlassian.net/browse/ACS-12214",
"XAT-4843": "https://hyland.atlassian.net/browse/ACS-12752",
"XAT-4859": "https://hyland.atlassian.net/browse/ACS-12752",
"XAT-4860": "https://hyland.atlassian.net/browse/ACS-12752",
"XAT-4846": "https://hyland.atlassian.net/browse/ACS-12752",
"XAT-4861": "https://hyland.atlassian.net/browse/ACS-12752",
"XAT-4862": "https://hyland.atlassian.net/browse/ACS-12752",
"XAT-4863": "https://hyland.atlassian.net/browse/ACS-12752",
"XAT-4864": "https://hyland.atlassian.net/browse/ACS-12752",
"XAT-4865": "https://hyland.atlassian.net/browse/ACS-12752",
"XAT-4866": "https://hyland.atlassian.net/browse/ACS-12752",
"XAT-4867": "https://hyland.atlassian.net/browse/ACS-12752"
}
}
@@ -156,9 +156,9 @@ export function filesLockedByCurrentUser(userDemoted: string, siteName?: string)
await myLibrariesPage.dataTable.performClickFolderOrFileToOpen(siteName);
await checkActionsAvailable(
myLibrariesPage,
testData.fileLockedByUser,
testData.collaboratorToolbarPrimary,
testData.collaboratorLockCurrentUserToolbarMore
testData.fileLockedByUserWorkingCopyName,
testData.collaboratorWorkingCopyToolbarPrimary,
testData.collaboratorLockWorkingCopyToolbarMore
);
});
@@ -167,8 +167,8 @@ export function filesLockedByCurrentUser(userDemoted: string, siteName?: string)
await checkActionsAvailable(
myLibrariesPage,
testData.fileLockedByUser,
testData.collaboratorToolbarPrimary,
testData.collaboratorLockCurrentUserToolbarMore
testData.collaboratorLockedToolbarPrimary,
testData.collaboratorLockedSharedViewerToolbarMore
);
});
@@ -177,18 +177,18 @@ export function filesLockedByCurrentUser(userDemoted: string, siteName?: string)
await checkActionsAvailable(
myLibrariesPage,
testData.fileLockedByUser,
testData.collaboratorToolbarPrimary,
testData.favoritesCollaboratorToolbarMore
testData.collaboratorLockedToolbarPrimary,
testData.favoritesCheckedOutCollaboratorToolbarMore
);
});
test('[XAT-4855] Toolbar - Correct actions appear for file - on Search Results - Locked File', async ({ searchPage, myLibrariesPage }) => {
await searchPage.searchWithin(testData.fileLockedByUser, 'filesAndFolders');
await searchPage.searchWithin(testData.fileLockedByUserWorkingCopyName, 'filesAndFolders');
await checkActionsAvailable(
myLibrariesPage,
testData.fileLockedByUser,
testData.collaboratorToolbarPrimary,
testData.collaboratorLockCurrentUserToolbarMore
testData.fileLockedByUserWorkingCopyName,
testData.collaboratorWorkingCopyToolbarPrimary,
testData.lockedWorkingCopyToolbarMore
);
});
});
@@ -199,9 +199,9 @@ export function filesLockedByCurrentUser(userDemoted: string, siteName?: string)
await myLibrariesPage.dataTable.performClickFolderOrFileToOpen(siteName);
await checkActionsViewerAvailable(
myLibrariesPage,
testData.fileLockedByUser,
testData.collaboratorSharedToolbarPrimary,
testData.collaboratorLockCurrentUserToolbarMore
testData.fileLockedByUserWorkingCopyName,
testData.collaboratorSharedWorkingCopyToolbarPrimary,
testData.collaboratorLockWorkingCopyToolbarMore
);
});
@@ -210,8 +210,8 @@ export function filesLockedByCurrentUser(userDemoted: string, siteName?: string)
await checkActionsViewerAvailable(
myLibrariesPage,
testData.fileLockedByUser,
testData.collaboratorSharedToolbarPrimary,
testData.collaboratorLockCurrentUserToolbarMore
testData.collaboratorLockedOriginalSharedViewerToolbarPrimary,
testData.collaboratorLockedSharedViewerToolbarMore
);
});
@@ -220,16 +220,16 @@ export function filesLockedByCurrentUser(userDemoted: string, siteName?: string)
await checkActionsViewerAvailable(
myLibrariesPage,
testData.fileLockedByUser,
testData.collaboratorSharedToolbarPrimary,
testData.collaboratorLockCurrentUserToolbarMore
testData.collaboratorLockedOriginalSharedViewerToolbarPrimary,
testData.collaboratorLockedSharedViewerToolbarMore
);
});
test('[XAT-4859] Correct actions appear for file opened from Search Results - Locked File', async ({ searchPage, myLibrariesPage }) => {
await searchPage.searchWithin(testData.fileLockedByUser, 'filesAndFolders');
await searchPage.searchWithin(testData.fileLockedByUserWorkingCopyName, 'filesAndFolders');
await checkActionsViewerAvailable(
myLibrariesPage,
testData.fileLockedByUser,
testData.fileLockedByUserWorkingCopyName,
testData.collaboratorSharedToolbarPrimary,
testData.collaboratorLockCurrentUserToolbarMore
);
@@ -68,7 +68,6 @@ test.describe('Special permissions : ', () => {
let folderFav2Id: string;
let managerNodeActions: NodesApi;
let demotedUserActions: NodesApi;
let consumerFavoritesActions: FavoritesPageApi;
let managerFavoritesActions: FavoritesPageApi;
let collaboratorFavoritesActions: FavoritesPageApi;
@@ -78,6 +77,7 @@ test.describe('Special permissions : ', () => {
let consumerShareActions: SharedLinksApi;
let managerSiteActions: SitesApi;
let managerFileActions: FileActionsApi;
let demotedUserFileActions: FileActionsApi;
let managerSearchActions: SearchApi;
test.beforeAll(async () => {
@@ -89,7 +89,6 @@ test.describe('Special permissions : ', () => {
await apiClientFactory.createUser({ username: userDemoted });
managerNodeActions = await NodesApi.initialize(userManager, userManager);
demotedUserActions = await NodesApi.initialize(userDemoted, userDemoted);
consumerFavoritesActions = await FavoritesPageApi.initialize(userConsumer, userConsumer);
collaboratorFavoritesActions = await FavoritesPageApi.initialize(userCollaborator, userCollaborator);
demotedUserFavoritesActions = await FavoritesPageApi.initialize(userDemoted, userDemoted);
@@ -97,6 +96,7 @@ test.describe('Special permissions : ', () => {
managerSearchActions = await SearchApi.initialize(userManager, userManager);
managerSiteActions = await SitesApi.initialize(userManager, userManager);
managerFileActions = await FileActionsApi.initialize(userManager, userManager);
demotedUserFileActions = await FileActionsApi.initialize(userDemoted, userDemoted);
managerUserShareActions = await SharedLinksApi.initialize(userManager, userManager);
demotedUserShareActions = await SharedLinksApi.initialize(userDemoted, userDemoted);
consumerShareActions = await SharedLinksApi.initialize(userConsumer, userConsumer);
@@ -132,7 +132,7 @@ test.describe('Special permissions : ', () => {
.entry.id;
fileLockedByUserId = (await managerNodeActions.createFile(testData.fileLockedByUser, docLibId, '', '', '', true, ['cm:versionable'])).entry.id;
await demotedUserActions.lockNodes([fileLockedByUserId]);
await demotedUserFileActions.checkoutNode(fileLockedByUserId);
await demotedUserFavoritesActions.addFavoriteById('file', fileLockedByUserId);
await demotedUserShareActions.shareFileById(fileLockedByUserId);
await managerSiteActions.updateSiteMember(sitePrivate, userDemoted, Site.RoleEnum.SiteConsumer);
@@ -164,7 +164,12 @@ test.describe('Special permissions : ', () => {
fileGranularPermissionId
]);
await managerNodeActions.lockNodes([fileLockedId, fileFavLockedId, fileSharedLockedId, fileSharedFavLockedId]);
await Promise.all([
managerFileActions.checkoutNode(fileLockedId),
managerFileActions.checkoutNode(fileFavLockedId),
managerFileActions.checkoutNode(fileSharedLockedId),
managerFileActions.checkoutNode(fileSharedFavLockedId)
]);
await managerNodeActions.setGranularPermission(fileGranularPermissionId, userConsumer, Site.RoleEnum.SiteManager, false);
@@ -137,7 +137,7 @@ export function viewerTests(userConsumer: string, siteName: string) {
await checkViewerActions(
loginPage,
myLibrariesPage,
testData.fileLocked.name,
testData.fileLocked.workingCopyName,
testData.fileLocked.viewerToolbarPrimary,
testData.fileLocked.viewerToolbarMore
);
@@ -147,9 +147,9 @@ export function viewerTests(userConsumer: string, siteName: string) {
await checkViewerActions(
loginPage,
myLibrariesPage,
testData.fileFavLocked.name,
testData.fileFavLocked.workingCopyName,
testData.fileFavLocked.viewerToolbarPrimary,
testData.fileFavLocked.viewerToolbarMore
testData.fileFavLocked.workingCopyViewerToolbarMore
);
});
@@ -157,7 +157,7 @@ export function viewerTests(userConsumer: string, siteName: string) {
await checkViewerActions(
loginPage,
myLibrariesPage,
testData.fileSharedLocked.name,
testData.fileSharedLocked.workingCopyName,
testData.fileSharedLocked.viewerToolbarPrimary,
testData.fileSharedLocked.viewerToolbarMore
);
@@ -167,9 +167,9 @@ export function viewerTests(userConsumer: string, siteName: string) {
await checkViewerActions(
loginPage,
myLibrariesPage,
testData.fileSharedFavLocked.name,
testData.fileSharedFavLocked.workingCopyName,
testData.fileSharedFavLocked.viewerToolbarPrimary,
testData.fileSharedFavLocked.viewerToolbarMore
testData.fileSharedFavLocked.workingCopyViewerToolbarMore
);
});
});
@@ -443,7 +443,7 @@ export function viewerTests(userConsumer: string, siteName: string) {
await checkViewerActions(
loginPage,
searchPage,
testData.fileLocked.name,
testData.fileLocked.workingCopyName,
testData.fileLocked.viewerToolbarPrimary,
testData.fileLocked.viewerToolbarMore
);
@@ -453,9 +453,9 @@ export function viewerTests(userConsumer: string, siteName: string) {
await checkViewerActions(
loginPage,
searchPage,
testData.fileFavLocked.name,
testData.fileFavLocked.workingCopyName,
testData.fileFavLocked.viewerToolbarPrimary,
testData.fileFavLocked.viewerToolbarMore
testData.fileFavLocked.workingCopyViewerToolbarMore
);
});
@@ -463,7 +463,7 @@ export function viewerTests(userConsumer: string, siteName: string) {
await checkViewerActions(
loginPage,
searchPage,
testData.fileSharedLocked.name,
testData.fileSharedLocked.workingCopyName,
testData.fileSharedLocked.viewerToolbarPrimary,
testData.fileSharedLocked.viewerToolbarMore
);
@@ -473,7 +473,7 @@ export function viewerTests(userConsumer: string, siteName: string) {
await checkViewerActions(
loginPage,
searchPage,
testData.fileSharedFavLocked.name,
testData.fileSharedFavLocked.workingCopyName,
testData.fileSharedFavLocked.viewerToolbarPrimary,
testData.fileSharedFavLocked.viewerToolbarMore
);
@@ -224,9 +224,8 @@ test.describe('viewer action file', () => {
test('[XAT-5423] Viewer - Edit Offline action - Personal Files', async ({ personalFiles }) => {
await openFileInViewer(personalFiles, fileForEditOffline);
await personalFiles.viewer.toolbar.clickMoreActions();
await personalFiles.matMenu.clickMenuItem('Edit Offline');
const downloadPromise = personalFiles.page.waitForEvent('download');
await personalFiles.viewer.toolbar.downloadButton.click();
await personalFiles.matMenu.clickMenuItem('Edit Offline');
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);
@@ -239,6 +238,7 @@ test.describe('viewer action file', () => {
const username = `user-${Utils.random()}`;
const fileForCancelEditing = `playwright-file2-${Utils.random()}.docx`;
let folderIdCancelEdit: string;
let workingCopyName: string;
let nodesApi: NodesApi;
let trashcanApi: TrashcanApi;
@@ -251,8 +251,9 @@ test.describe('viewer action file', () => {
const { fileActionsApi } = apis;
folderIdCancelEdit = (await nodesApi.createFolder(`viewer-action-5424-${Utils.random()}`)).entry.id;
const fileForCancelEditingId = (await fileActionsApi.uploadFile(TEST_FILES.DOCX.path, fileForCancelEditing, folderIdCancelEdit)).entry.id;
await fileActionsApi.lockNodes([fileForCancelEditingId]);
await fileActionsApi.isFileLockedWriteWithRetry(fileForCancelEditingId, true);
const workingCopy = await fileActionsApi.checkoutNode(fileForCancelEditingId);
workingCopyName = workingCopy.entry.name;
await fileActionsApi.isFileCheckedOutWithRetry(fileForCancelEditingId, true);
} catch (error) {
console.error(`beforeAll failed: ${error}`);
throw error;
@@ -269,9 +270,10 @@ test.describe('viewer action file', () => {
});
test('[XAT-5424] Viewer - Cancel Editing action - Personal Files', async ({ personalFiles }) => {
await openFileInViewer(personalFiles, fileForCancelEditing);
await openFileInViewer(personalFiles, workingCopyName);
await personalFiles.viewer.toolbar.clickMoreActions();
await personalFiles.matMenu.clickMenuItem('Cancel Editing');
await personalFiles.viewer.waitForViewerToOpen();
await personalFiles.viewer.toolbar.clickMoreActions();
expect(await personalFiles.matMenu.isMenuItemVisible('Edit Offline'), 'Edit offline menu should be visible').toBe(true);
});