diff --git a/.gitignore b/.gitignore index 8744ee3b0..2683e54cd 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,7 @@ testem.log .protractor-fail-fast .protractor-smartrunner /protractorFailuresReport +/storage-state # System Files .DS_Store diff --git a/e2e/playwright/shared/fixtures/page-initialization.ts b/e2e/playwright/shared/fixtures/page-initialization.ts new file mode 100644 index 000000000..f8aa98bf0 --- /dev/null +++ b/e2e/playwright/shared/fixtures/page-initialization.ts @@ -0,0 +1,47 @@ +/*! + * Copyright © 2005-2023 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 { PersonalFilesPage } from '../page-objects'; +import { test as base } from '@playwright/test'; +import { ApiClientFactory } from '@alfresco/playwright-shared'; + +interface Pages { + personalFiles: PersonalFilesPage; +} + +interface Api { + apiClient: ApiClientFactory; +} + +export const test = base.extend({ + personalFiles: async ({ page }, use) => { + await use(new PersonalFilesPage(page)); + }, + // eslint-disable-next-line no-empty-pattern + apiClient: async ({}, use) => { + const apiClient = new ApiClientFactory(); + await apiClient.setUpAcaBackend('admin'); + await use(apiClient); + } +}); diff --git a/e2e/playwright/shared/page-objects/components/aca-page-layout-header.component.ts b/e2e/playwright/shared/page-objects/components/aca-page-layout-header.component.ts new file mode 100644 index 000000000..6af77531c --- /dev/null +++ b/e2e/playwright/shared/page-objects/components/aca-page-layout-header.component.ts @@ -0,0 +1,35 @@ +/*! + * Copyright © 2005-2023 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 { BaseComponent } from './base.component'; +import { Page } from '@playwright/test'; + +export class AcaPageLayoutHeader extends BaseComponent { + private static rootElement = 'adf-toolbar'; + public createButton = this.getChild('[id="app.toolbar.create"]'); + + constructor(page: Page) { + super(page, AcaPageLayoutHeader.rootElement); + } +} diff --git a/e2e/playwright/shared/page-objects/components/adf-folder-dialog.component.ts b/e2e/playwright/shared/page-objects/components/adf-folder-dialog.component.ts new file mode 100644 index 000000000..5a50d0ff0 --- /dev/null +++ b/e2e/playwright/shared/page-objects/components/adf-folder-dialog.component.ts @@ -0,0 +1,37 @@ +/*! + * Copyright © 2005-2023 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 { BaseComponent } from './base.component'; +import { Page } from '@playwright/test'; + +export class AdfFolderDialogComponent extends BaseComponent { + private static rootElement = 'adf-folder-dialog'; + + public folderNameInputLocator = this.getChild('[id="adf-folder-name-input"]'); + public createButton = this.getChild('[id="adf-folder-create-button"]'); + + constructor(page: Page) { + super(page, AdfFolderDialogComponent.rootElement); + } +} diff --git a/e2e/playwright/shared/page-objects/components/mat-menu.component.ts b/e2e/playwright/shared/page-objects/components/mat-menu.component.ts index f25c0a7ad..f79ca4027 100644 --- a/e2e/playwright/shared/page-objects/components/mat-menu.component.ts +++ b/e2e/playwright/shared/page-objects/components/mat-menu.component.ts @@ -36,4 +36,5 @@ export class MatMenuComponent extends BaseComponent { public getMenuItemTextLocator = this.getChild('[data-automation-id="menu-item-title"]'); public getButtonByText = (text: string) => this.getChild('button', { hasText: text }); + public createFolder = this.getChild('[id="app.create.folder"]'); } diff --git a/e2e/playwright/shared/page-objects/index.ts b/e2e/playwright/shared/page-objects/index.ts index 7d4708465..a54a1d387 100644 --- a/e2e/playwright/shared/page-objects/index.ts +++ b/e2e/playwright/shared/page-objects/index.ts @@ -27,3 +27,4 @@ export * from './playwright-base'; export * from './components'; export * from './components/dataTable'; export * from './pages'; +export * from './pages/personal-files.page'; diff --git a/e2e/playwright/shared/page-objects/pages/personal-files.page.ts b/e2e/playwright/shared/page-objects/pages/personal-files.page.ts new file mode 100644 index 000000000..f8d9edeb3 --- /dev/null +++ b/e2e/playwright/shared/page-objects/pages/personal-files.page.ts @@ -0,0 +1,45 @@ +/*! + * Copyright © 2005-2023 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 { BasePage, DataTableComponent } from '@alfresco/playwright-shared'; +import { Page } from '@playwright/test'; +import { AcaPageLayoutHeader } from '../components/aca-page-layout-header.component'; +import { MatMenuComponent } from '../components/mat-menu.component'; +import { AdfFolderDialogComponent } from '../components/adf-folder-dialog.component'; + +export class PersonalFilesPage extends BasePage { + private static pageUrl = 'personal-files'; + + constructor(page: Page) { + super(page, PersonalFilesPage.pageUrl); + } + + public acaHeader = new AcaPageLayoutHeader(this.page); + + public matMenu = new MatMenuComponent(this.page); + + public folderDialog = new AdfFolderDialogComponent(this.page); + + public dataTable = new DataTableComponent(this.page); +} diff --git a/e2e/playwright/tests/actions/create/create-folder.spec.ts b/e2e/playwright/tests/actions/create/create-folder.spec.ts new file mode 100644 index 000000000..2ef412d5d --- /dev/null +++ b/e2e/playwright/tests/actions/create/create-folder.spec.ts @@ -0,0 +1,43 @@ +/*! + * Copyright © 2005-2023 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 { test } from '../../../shared/fixtures/page-initialization'; +import { expect } from '@playwright/test'; + +test.describe('Create actions', () => { + const randomFolderName = `playwright-folder-${(Math.random() + 1).toString(36).substring(6)}`; + + test.beforeEach(async ({ personalFiles }) => { + await personalFiles.navigate({ waitUntil: 'domcontentloaded' }); + }); + + test('Create a folder with name only', async ({ personalFiles }) => { + await personalFiles.acaHeader.createButton.click(); + await personalFiles.matMenu.createFolder.click(); + await personalFiles.folderDialog.folderNameInputLocator.type(randomFolderName, { delay: 50 }); + await personalFiles.folderDialog.createButton.click(); + + await expect(personalFiles.dataTable.getRowByName(randomFolderName)).toBeVisible(); + }); +});