mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-07-24 17:31:52 +00:00
ACS-5870-playwright test for application (#3398)
* ACS-5870-playwright test for application * fix for failing test * fix for failing test * fix for login secario test * fix for login test with newuser login * Update test username general.spec.ts
This commit is contained in:
2
.github/workflows/pull-request.yml
vendored
2
.github/workflows/pull-request.yml
vendored
@@ -109,7 +109,7 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
e2e-suites:
|
e2e-suites:
|
||||||
- name: "listViews,navigation,application"
|
- name: "listViews,navigation"
|
||||||
id: 1
|
id: 1
|
||||||
- name: "search"
|
- name: "search"
|
||||||
id: 2
|
id: 2
|
||||||
|
61
e2e/playwright/authentication/src/tests/general.spec.ts
Normal file
61
e2e/playwright/authentication/src/tests/general.spec.ts
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/*!
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { expect } from '@playwright/test';
|
||||||
|
import { ApiClientFactory, Utils, test } from '@alfresco/playwright-shared';
|
||||||
|
|
||||||
|
test.describe('Create folders', () => {
|
||||||
|
const apiClientFactory = new ApiClientFactory();
|
||||||
|
let randomFolderName: string;
|
||||||
|
const sessionTestUser = {
|
||||||
|
username: `user-${Utils.random()}`,
|
||||||
|
password: 'user password'
|
||||||
|
};
|
||||||
|
|
||||||
|
test.beforeAll(async () => {
|
||||||
|
await apiClientFactory.setUpAcaBackend('admin');
|
||||||
|
await apiClientFactory.createUser(sessionTestUser);
|
||||||
|
});
|
||||||
|
|
||||||
|
test.beforeEach(async () => {
|
||||||
|
randomFolderName = `playwright-folder-${Utils.random()}`;
|
||||||
|
await apiClientFactory.loginUser(sessionTestUser);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('[C286473] should close opened dialogs on session expire', async ({ loginPage, personalFiles }) => {
|
||||||
|
await loginPage.navigate();
|
||||||
|
await loginPage.loginUser({ username: sessionTestUser.username, password: sessionTestUser.password });
|
||||||
|
const folderDialog = personalFiles.folderDialog;
|
||||||
|
await personalFiles.selectCreateFolder();
|
||||||
|
await apiClientFactory.tearDown();
|
||||||
|
await folderDialog.folderNameInputLocator.fill(randomFolderName);
|
||||||
|
await folderDialog.createButton.click();
|
||||||
|
await personalFiles.page.keyboard.press('Escape');
|
||||||
|
await personalFiles.snackBar.message.waitFor({ state: 'attached' });
|
||||||
|
expect(await personalFiles.snackBar.message.innerText()).toEqual('The action was unsuccessful. Try again or contact your IT Team.');
|
||||||
|
expect(await personalFiles.page.title()).toContain('Sign in');
|
||||||
|
await personalFiles.snackBar.message.waitFor({ state: 'detached' });
|
||||||
|
expect(await personalFiles.snackBar.message.isVisible(), 'dialog should not be visible').toBe(false);
|
||||||
|
});
|
||||||
|
});
|
@@ -1,68 +0,0 @@
|
|||||||
/*!
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { browser } from 'protractor';
|
|
||||||
import { BrowserActions } from '@alfresco/adf-testing';
|
|
||||||
import { BrowsingPage, LoginPage, CreateOrEditFolderDialog, Utils, AdminActions } from '@alfresco/aca-testing-shared';
|
|
||||||
|
|
||||||
describe('General', () => {
|
|
||||||
const loginPage = new LoginPage();
|
|
||||||
const page = new BrowsingPage();
|
|
||||||
const createDialog = new CreateOrEditFolderDialog();
|
|
||||||
|
|
||||||
const adminActions = new AdminActions();
|
|
||||||
|
|
||||||
const folder = `folder-${Utils.random()}`;
|
|
||||||
let folderId: string;
|
|
||||||
|
|
||||||
describe('on session expire', () => {
|
|
||||||
beforeAll(async () => {
|
|
||||||
await adminActions.login();
|
|
||||||
folderId = (await adminActions.nodes.createFolder(folder)).entry.id;
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async () => {
|
|
||||||
await adminActions.deleteNodes([folderId]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C286473] should close opened dialogs', async () => {
|
|
||||||
await loginPage.loginWithAdmin();
|
|
||||||
|
|
||||||
await page.sidenav.openCreateFolderDialog();
|
|
||||||
await createDialog.waitForDialogToOpen();
|
|
||||||
await createDialog.enterName(folder);
|
|
||||||
|
|
||||||
await adminActions.logout();
|
|
||||||
|
|
||||||
await BrowserActions.click(createDialog.createButton);
|
|
||||||
|
|
||||||
expect(await page.getSnackBarMessage()).toEqual('The action was unsuccessful. Try again or contact your IT Team.');
|
|
||||||
|
|
||||||
expect(await browser.getTitle()).toContain('Sign in');
|
|
||||||
|
|
||||||
await createDialog.waitForDialogToClose();
|
|
||||||
expect(await createDialog.isDialogOpen()).not.toBe(true, 'dialog is present');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@@ -1,134 +0,0 @@
|
|||||||
/*!
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { browser } from 'protractor';
|
|
||||||
import { LoginPage, BrowsingPage, RepoClient, Utils, AdminActions } from '@alfresco/aca-testing-shared';
|
|
||||||
|
|
||||||
const PAGE_TITLES = {
|
|
||||||
PERSONAL_FILES: 'Personal Files',
|
|
||||||
MY_LIBRARIES: 'My Libraries',
|
|
||||||
FAVORITE_LIBRARIES: 'Favorite Libraries',
|
|
||||||
SHARED_FILES: 'Shared',
|
|
||||||
RECENT_FILES: 'Recent Files',
|
|
||||||
FAVORITES: 'Favorites',
|
|
||||||
TRASH: 'Trash',
|
|
||||||
VIEWER: 'Preview',
|
|
||||||
SEARCH: 'Search Results'
|
|
||||||
};
|
|
||||||
|
|
||||||
describe('Page titles', () => {
|
|
||||||
const loginPage = new LoginPage();
|
|
||||||
const page = new BrowsingPage();
|
|
||||||
const { toolbar } = page;
|
|
||||||
const username = `user-${Utils.random()}`;
|
|
||||||
const apis = new RepoClient(username, username);
|
|
||||||
const adminApiActions = new AdminActions();
|
|
||||||
const file = `file-${Utils.random()}.txt`;
|
|
||||||
let fileId: string;
|
|
||||||
const { searchInput } = page.pageLayoutHeader;
|
|
||||||
|
|
||||||
beforeAll(async () => {
|
|
||||||
await adminApiActions.createUser({ username });
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('on Login / Logout pages', () => {
|
|
||||||
it('[C217155] on Login page', async () => {
|
|
||||||
await loginPage.load();
|
|
||||||
expect(await browser.getTitle()).toContain('Sign in');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C217156] after logout', async () => {
|
|
||||||
await loginPage.loginWith(username);
|
|
||||||
await page.signOut();
|
|
||||||
expect(await browser.getTitle()).toContain('Sign in');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C280414] when pressing Back after Logout', async () => {
|
|
||||||
await loginPage.loginWith(username);
|
|
||||||
await page.signOut();
|
|
||||||
await browser.navigate().back();
|
|
||||||
expect(await browser.getTitle()).toContain('Sign in');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('on app pages', () => {
|
|
||||||
beforeAll(async () => {
|
|
||||||
await loginPage.loginWith(username);
|
|
||||||
fileId = (await apis.nodes.createFile(file)).entry.id;
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async () => {
|
|
||||||
await apis.nodes.deleteNodeById(fileId);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C217157] Personal Files page', async () => {
|
|
||||||
await page.clickPersonalFiles();
|
|
||||||
expect(await browser.getTitle()).toContain(PAGE_TITLES.PERSONAL_FILES);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C217158] My Libraries page', async () => {
|
|
||||||
await page.goToMyLibraries();
|
|
||||||
expect(await browser.getTitle()).toContain(PAGE_TITLES.MY_LIBRARIES);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C289907] Favorite Libraries page', async () => {
|
|
||||||
await page.goToFavoriteLibraries();
|
|
||||||
expect(await browser.getTitle()).toContain(PAGE_TITLES.FAVORITE_LIBRARIES);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C217159] Shared Files page', async () => {
|
|
||||||
await page.clickSharedFiles();
|
|
||||||
expect(await browser.getTitle()).toContain(PAGE_TITLES.SHARED_FILES);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C217160] Recent Files page', async () => {
|
|
||||||
await page.clickRecentFiles();
|
|
||||||
expect(await browser.getTitle()).toContain(PAGE_TITLES.RECENT_FILES);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C217161] Favorites page', async () => {
|
|
||||||
await page.clickFavorites();
|
|
||||||
expect(await browser.getTitle()).toContain(PAGE_TITLES.FAVORITES);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C217162] Trash page', async () => {
|
|
||||||
await page.clickTrash();
|
|
||||||
expect(await browser.getTitle()).toContain(PAGE_TITLES.TRASH);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C280415] File Preview page', async () => {
|
|
||||||
await page.clickPersonalFilesAndWait();
|
|
||||||
await page.dataTable.doubleClickOnRowByName(file);
|
|
||||||
expect(await browser.getTitle()).toContain(PAGE_TITLES.VIEWER);
|
|
||||||
await Utils.pressEscape();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('[C280413] Search Results page', async () => {
|
|
||||||
await toolbar.clickSearchIconButton();
|
|
||||||
await searchInput.clickSearchButton();
|
|
||||||
await searchInput.searchFor(file);
|
|
||||||
expect(await browser.getTitle()).toContain(PAGE_TITLES.SEARCH);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@@ -152,6 +152,16 @@ export class ApiClientFactory {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async loginUser(user: PersonModel) {
|
||||||
|
let e: any;
|
||||||
|
try {
|
||||||
|
e = await this.alfrescoApi.login(user.username, user.password);
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(`[API Client Factory] Log in user ${user.username} failed ${e}`);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async createUser(user: PersonModel): Promise<PersonEntry> {
|
async createUser(user: PersonModel): Promise<PersonEntry> {
|
||||||
const person = new Person(user);
|
const person = new Person(user);
|
||||||
const peopleApi = new PeopleApi(this.alfrescoApi);
|
const peopleApi = new PeopleApi(this.alfrescoApi);
|
||||||
|
Reference in New Issue
Block a user