diff --git a/e2e/playwright/info-drawer/src/tests/file-folder-properties.e2e.ts b/e2e/playwright/info-drawer/src/tests/file-folder-properties.e2e.ts index cbd0ceb25f..31668a4db6 100755 --- a/e2e/playwright/info-drawer/src/tests/file-folder-properties.e2e.ts +++ b/e2e/playwright/info-drawer/src/tests/file-folder-properties.e2e.ts @@ -23,13 +23,49 @@ */ import { expect } from '@playwright/test'; -import { ApiClientFactory, Utils, test, TrashcanApi, NodesApi, FileActionsApi } from '@alfresco/aca-playwright-shared'; +import { + ApiClientFactory, + Utils, + test, + TrashcanApi, + NodesApi, + FileActionsApi, + TagsApi, + CategoriesApi, + PersonalFilesPage +} from '@alfresco/aca-playwright-shared'; test.describe('Info Drawer - File Folder Properties', () => { let nodesApi: NodesApi; let trashcanApi: TrashcanApi; let fileActionsApi: FileActionsApi; + let tagsApi: TagsApi; + let categoriesApi: CategoriesApi; + let responseCategoryId: string; const username = `user-e2e-${Utils.random()}`; + const tagName = 'e2etag'; + const FolderC299162 = `C299162-e2e-${Utils.random()}`; + const FolderC599174 = `C599174-e2e-${Utils.random()}`; + const Folder17238 = `xat-17238-e2e-${Utils.random()}`; + const Folder17239 = `xat-17239-e2e-${Utils.random()}`; + const Folder17240 = `xat-17240-e2e-${Utils.random()}`; + const Folder17241 = `xat-17241-e2e-${Utils.random()}`; + const Folder17242 = `xat-17242-e2e-${Utils.random()}`; + const Folder17243 = `xat-17243-e2e-${Utils.random()}`; + const Folder17244 = `xat-17244-e2e-${Utils.random()}`; + const tagBody = { tag: `tag-${Utils.random()}` }; + const categoryId2 = `-root-`; + const categoryName = Utils.random(); + + async function createCategoryGetId() { + const requestData = await categoriesApi.createCategory(categoryId2, [{ name: categoryName }]); + if ('entry' in requestData) { + return requestData.entry.id; + } else { + console.error('Unexpected response format:', requestData); + return null; + } + } test.beforeAll(async () => { try { @@ -39,6 +75,9 @@ test.describe('Info Drawer - File Folder Properties', () => { nodesApi = await NodesApi.initialize(username, username); trashcanApi = await TrashcanApi.initialize(username, username); fileActionsApi = await FileActionsApi.initialize(username, username); + tagsApi = await TagsApi.initialize('admin'); + categoriesApi = await CategoriesApi.initialize('admin'); + responseCategoryId = await createCategoryGetId(); } catch (error) { console.error(`beforeAll failed : ${error}`); } @@ -50,41 +89,139 @@ test.describe('Info Drawer - File Folder Properties', () => { test.afterAll(async () => { await Utils.deleteNodesSitesEmptyTrashcan(nodesApi, trashcanApi, 'afterAll failed'); + await categoriesApi.deleteCategory(responseCategoryId); }); - test('[C299162] View properties - Default tabs', async ({ personalFiles }) => { - const defaultTabsFolderName = `defaultTabsFolder-e2e-${Utils.random()}`; - await nodesApi.createFolder(defaultTabsFolderName); - await fileActionsApi.waitForNodes(defaultTabsFolderName, { expect: 1 }); + async function setupFolderAndNavigate(personalFiles: PersonalFilesPage, folderName: string) { + await nodesApi.createFolder(folderName); + await fileActionsApi.waitForNodes(folderName, { expect: 1 }); await personalFiles.navigate(); - await Utils.reloadPageIfRowNotVisible(personalFiles, defaultTabsFolderName); - await expect(personalFiles.dataTable.getRowByName(defaultTabsFolderName)).toBeVisible(); - await personalFiles.dataTable.getRowByName(defaultTabsFolderName).click(); + await Utils.reloadPageIfRowNotVisible(personalFiles, folderName); + await expect(personalFiles.dataTable.getRowByName(folderName)).toBeVisible(); + await personalFiles.dataTable.getRowByName(folderName).click(); await personalFiles.acaHeader.viewDetails.click(); + } - expect(await personalFiles.infoDrawer.getHeaderTitle()).toEqual(defaultTabsFolderName); + test('[C299162] View properties - Default tabs', async ({ personalFiles }) => { + await setupFolderAndNavigate(personalFiles, FolderC299162); + expect(await personalFiles.infoDrawer.getHeaderTitle()).toEqual(FolderC299162); await expect(personalFiles.infoDrawer.propertiesTab).toBeVisible(); await expect(personalFiles.infoDrawer.commentsTab).toBeVisible(); expect(await personalFiles.infoDrawer.getTabsCount()).toEqual(2); }); test('[C599174] View properties - Should be able to make the files/folders info drawer expandable as for Sites', async ({ personalFiles }) => { - const expandDetailsFolderName = `expandDetailsFolder-e2e-${Utils.random()}`; - await nodesApi.createFolder(expandDetailsFolderName); - await fileActionsApi.waitForNodes(expandDetailsFolderName, { expect: 1 }); - await personalFiles.navigate(); - await Utils.reloadPageIfRowNotVisible(personalFiles, expandDetailsFolderName); - await expect(personalFiles.dataTable.getRowByName(expandDetailsFolderName)).toBeVisible(); - await personalFiles.dataTable.getRowByName(expandDetailsFolderName).click(); - await personalFiles.acaHeader.viewDetails.click(); - + await setupFolderAndNavigate(personalFiles, FolderC599174); await personalFiles.infoDrawer.expandDetailsButton.click(); await expect(personalFiles.infoDrawer.expandedDetailsPermissionsTab).toBeVisible(); await personalFiles.navigate(); - await expect(personalFiles.dataTable.getRowByName(expandDetailsFolderName)).toBeVisible(); - await personalFiles.dataTable.getRowByName(expandDetailsFolderName).click({ button: 'right' }); + await expect(personalFiles.dataTable.getRowByName(FolderC599174)).toBeVisible(); + await personalFiles.dataTable.getRowByName(FolderC599174).click({ button: 'right' }); await personalFiles.pagination.clickMenuItem('Permissions'); await expect(personalFiles.infoDrawer.expandedDetailsPermissionsTab).toBeVisible(); }); + + test('[XAT-17238] State for no tags and categories - accordion expanded', async ({ personalFiles }) => { + await setupFolderAndNavigate(personalFiles, Folder17238); + await personalFiles.infoDrawer.tagsAccordion.click(); + await expect(personalFiles.infoDrawer.tagsAccordion).toContainText('There are currently no tags added'); + + await personalFiles.infoDrawer.categoriesAccordion.click(); + await expect(personalFiles.infoDrawer.categoriesAccordion).toContainText('There are currently no categories added'); + }); + + test('[XAT-17239] Add a new tag to a node', async ({ personalFiles }) => { + await setupFolderAndNavigate(personalFiles, Folder17239); + await personalFiles.infoDrawer.tagsAccordionPenButton.click(); + await expect(personalFiles.infoDrawer.tagsAccordionPenButton).toBeHidden(); + await expect(personalFiles.infoDrawer.tagsAccordionCancelButton).toBeEnabled(); + await expect(personalFiles.infoDrawer.tagsAccordionConfirmButton).toBeDisabled(); + await personalFiles.infoDrawer.tagsInput.fill(tagName); + await personalFiles.infoDrawer.createTagButton.click(); + await expect(personalFiles.infoDrawer.tagsChips.first()).toContainText(tagName); + await expect(personalFiles.infoDrawer.tagsChipsXButton.first()).toBeVisible(); + await personalFiles.infoDrawer.tagsAccordionConfirmButton.click(); + await expect(personalFiles.infoDrawer.tagsChipsXButton.first()).toBeHidden(); + await expect(personalFiles.infoDrawer.tagsAccordionPenButton).toBeVisible(); + }); + + test('[XAT-17240] Remove a tag from a node', async ({ personalFiles }) => { + const Folder17240Id = (await nodesApi.createFolder(Folder17240)).entry.id; + await fileActionsApi.waitForNodes(Folder17240, { expect: 1 }); + await tagsApi.createTags([tagBody]); + await tagsApi.assignTagToNode(Folder17240Id, tagBody); + await personalFiles.navigate(); + await Utils.reloadPageIfRowNotVisible(personalFiles, Folder17240); + await expect(personalFiles.dataTable.getRowByName(Folder17240)).toBeVisible(); + await personalFiles.dataTable.getRowByName(Folder17240).click(); + await personalFiles.acaHeader.viewDetails.click(); + + await personalFiles.infoDrawer.tagsAccordion.click(); + await expect(personalFiles.infoDrawer.tagsChipsXButton.first()).toBeHidden(); + await personalFiles.infoDrawer.tagsAccordionPenButton.click(); + await personalFiles.infoDrawer.tagsChipsXButton.first().click(); + await personalFiles.infoDrawer.tagsAccordionConfirmButton.click(); + await expect(personalFiles.infoDrawer.tagsChips.first()).toBeHidden(); + await expect(personalFiles.infoDrawer.tagsAccordion).toContainText('There are currently no tags added'); + }); + + test('[XAT-17243] Cancel adding a tag to a node', async ({ personalFiles }) => { + await nodesApi.createFolder(Folder17243); + await fileActionsApi.waitForNodes(Folder17243, { expect: 1 }); + await personalFiles.navigate(); + await Utils.reloadPageIfRowNotVisible(personalFiles, Folder17243); + await expect(personalFiles.dataTable.getRowByName(Folder17243)).toBeVisible(); + await personalFiles.dataTable.getRowByName(Folder17243).click(); + await personalFiles.acaHeader.viewDetails.click(); + + await personalFiles.infoDrawer.tagsAccordionPenButton.click(); + await personalFiles.infoDrawer.tagsInput.fill(tagName); + await personalFiles.infoDrawer.tagsAccordionCancelButton.click(); + await expect(personalFiles.infoDrawer.tagsAccordionPenButton).toBeVisible(); + await expect(personalFiles.infoDrawer.tagsAccordion).toContainText('There are currently no tags added'); + }); + + test('[XAT-17241] Add a new category to a node', async ({ personalFiles }) => { + await setupFolderAndNavigate(personalFiles, Folder17241); + await personalFiles.infoDrawer.categoriesAccordionPenButton.click(); + await expect(personalFiles.infoDrawer.categoriesAccordionPenButton).toBeHidden(); + await expect(personalFiles.infoDrawer.categoriesAccordionCancelButton).toBeEnabled(); + await expect(personalFiles.infoDrawer.categoriesAccordionConfirmButton).toBeDisabled(); + await personalFiles.infoDrawer.categoriesInput.fill('*'); + await personalFiles.infoDrawer.categoriesListItems.first().click(); + await expect(personalFiles.infoDrawer.categoriesItemRemoveButton.first()).toBeVisible(); + await personalFiles.infoDrawer.categoriesAccordionConfirmButton.click(); + await expect(personalFiles.infoDrawer.tagsChipsXButton.first()).toBeHidden(); + await expect(personalFiles.infoDrawer.tagsAccordionPenButton).toBeVisible(); + await expect(personalFiles.infoDrawer.categoriesAccordion).not.toContainText('There are currently no categories added'); + await expect(personalFiles.infoDrawer.categoriesCreatedList.first()).toBeVisible(); + }); + + test('[XAT-17242] Remove a category from a node', async ({ personalFiles }) => { + const Folder17242Id = (await nodesApi.createFolder(Folder17242)).entry.id; + await fileActionsApi.waitForNodes(Folder17242, { expect: 1 }); + await categoriesApi.linkNodeToCategory(Folder17242Id, [{ categoryId: responseCategoryId }]); + await personalFiles.navigate(); + await Utils.reloadPageIfRowNotVisible(personalFiles, Folder17242); + await expect(personalFiles.dataTable.getRowByName(Folder17242)).toBeVisible(); + await personalFiles.dataTable.getRowByName(Folder17242).click(); + await personalFiles.acaHeader.viewDetails.click(); + + await personalFiles.infoDrawer.categoriesAccordion.click(); + await expect(personalFiles.infoDrawer.categoriesAccordion).not.toContainText('There are currently no categories added'); + await personalFiles.infoDrawer.categoriesAccordionPenButton.click(); + await personalFiles.infoDrawer.categoriesItemRemoveButton.first().click(); + await personalFiles.infoDrawer.categoriesAccordionConfirmButton.click(); + await expect(personalFiles.infoDrawer.categoriesAccordion).toContainText('There are currently no categories added'); + }); + + test('[XAT-17243] Cancel adding a category to a node', async ({ personalFiles }) => { + await setupFolderAndNavigate(personalFiles, Folder17244); + await personalFiles.infoDrawer.categoriesAccordionPenButton.click(); + await personalFiles.infoDrawer.categoriesInput.fill('*'); + await personalFiles.infoDrawer.categoriesListItems.first().click(); + await personalFiles.infoDrawer.categoriesAccordionCancelButton.click(); + await expect(personalFiles.infoDrawer.categoriesAccordion).toContainText('There are currently no categories added'); + }); }); 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/adf-info-drawer.component.ts index 0fcdad919b..4519869f87 100644 --- a/projects/aca-playwright-shared/src/page-objects/components/adf-info-drawer.component.ts +++ b/projects/aca-playwright-shared/src/page-objects/components/adf-info-drawer.component.ts @@ -63,6 +63,24 @@ export class AdfInfoDrawerComponent extends BaseComponent { public descriptionField = this.page.locator('textarea[placeholder=Description]'); public visibilityField = this.infoDrawerPanel.getByRole('combobox'); public selectVisibility = (visibilityOption: string) => this.page.getByRole('listbox').getByRole('option', { name: visibilityOption }).click(); + public tagsAccordion = this.getChild('[data-automation-id="adf-content-metadata-tags-panel"]'); + public categoriesAccordion = this.getChild('[data-automation-id="adf-content-metadata-categories-panel"]'); + public tagsAccordionPenButton = this.tagsAccordion.locator('[data-automation-id="showing-tag-input-button"]'); + public categoriesAccordionPenButton = this.categoriesAccordion.locator('[data-automation-id="meta-data-categories-edit"]'); + private tagsCreator = this.getChild('adf-tags-creator'); + public tagsInput = this.tagsCreator.locator('input'); + public createTagButton = this.tagsCreator.locator('[role="button"]'); + public tagsChips = this.tagsCreator.locator('mat-chip'); + public tagsChipsXButton = this.tagsChips.locator('button'); + public tagsAccordionCancelButton = this.getChild('[data-automation-id="reset-tags-metadata"]'); + public tagsAccordionConfirmButton = this.getChild('[data-automation-id="save-tags-metadata"]'); + public categoriesAccordionCancelButton = this.getChild('[data-automation-id="reset-metadata"]'); + public categoriesAccordionConfirmButton = this.getChild('[data-automation-id="save-categories-metadata"]'); + private categoriesManagement = this.getChild('adf-categories-management'); + public categoriesInput = this.categoriesManagement.locator('input'); + public categoriesListItems = this.categoriesManagement.locator('mat-list-item'); + public categoriesItemRemoveButton = this.categoriesManagement.locator('[data-automation-id="categories-remove-category-button"]'); + public categoriesCreatedList = this.getChild('.adf-metadata-categories'); async checkCommentsHeaderCount(): Promise<number> { const commentsCountTextContent = await this.commentsHeader.textContent();