Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ACA-1517] add tests for create library #799

Merged
merged 1 commit into from
Nov 13, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
173 changes: 173 additions & 0 deletions e2e/components/dialog/create-library-dialog.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
/*!
* @license
* Alfresco Example Content Application
*
* Copyright (C) 2005 - 2018 Alfresco Software Limited
*
* 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
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/

import { ElementFinder, by, browser, protractor, ExpectedConditions as EC } from 'protractor';
import { BROWSER_WAIT_TIMEOUT } from '../../configs';
import { Component } from '../component';
import { Utils } from '../../utilities/utils';

export class CreateLibraryDialog extends Component {
private static selectors = {
root: 'app-library-dialog',

title: '.mat-dialog-title',
nameInput: 'input[placeholder="Name" i]',
libraryIdInput: 'input[placeholder="Library ID" i]',
descriptionTextArea: 'textarea[placeholder="Description" i]',
button: '.mat-dialog-actions button',
radioButton: '.mat-radio-label',
radioChecked: 'mat-radio-checked',
errorMessage: '.mat-error'
};

title: ElementFinder = this.component.element(by.css(CreateLibraryDialog.selectors.title));
nameInput: ElementFinder = this.component.element(by.css(CreateLibraryDialog.selectors.nameInput));
libraryIdInput: ElementFinder = this.component.element(by.css(CreateLibraryDialog.selectors.libraryIdInput));
descriptionTextArea: ElementFinder = this.component.element(by.css(CreateLibraryDialog.selectors.descriptionTextArea));
visibilityPublic: ElementFinder = this.component.element(by.cssContainingText(CreateLibraryDialog.selectors.radioButton, 'Public'));
visibilityModerated: ElementFinder = this.component.element(by.cssContainingText(CreateLibraryDialog.selectors.radioButton, 'Moderated'));
visibilityPrivate: ElementFinder = this.component.element(by.cssContainingText(CreateLibraryDialog.selectors.radioButton, 'Private'));
createButton: ElementFinder = this.component.element(by.cssContainingText(CreateLibraryDialog.selectors.button, 'Create'));
cancelButton: ElementFinder = this.component.element(by.cssContainingText(CreateLibraryDialog.selectors.button, 'Cancel'));
errorMessage: ElementFinder = this.component.element(by.css(CreateLibraryDialog.selectors.errorMessage));

constructor(ancestor?: ElementFinder) {
super(CreateLibraryDialog.selectors.root, ancestor);
}

async waitForDialogToOpen() {
await browser.wait(EC.presenceOf(this.title), BROWSER_WAIT_TIMEOUT);
await browser.wait(EC.presenceOf(browser.element(by.css('.cdk-overlay-backdrop'))), BROWSER_WAIT_TIMEOUT);
}

async waitForDialogToClose() {
await browser.wait(EC.stalenessOf(this.title), BROWSER_WAIT_TIMEOUT);
}

async isDialogOpen() {
return await browser.isElementPresent(by.css(CreateLibraryDialog.selectors.root));
}

async getTitle() {
return await this.title.getText();
}

async isErrorMessageDisplayed() {
return await this.errorMessage.isDisplayed();
}

async getErrorMessage() {
await this.isErrorMessageDisplayed();
return await this.errorMessage.getText();
}

async isNameDisplayed() {
return await this.nameInput.isDisplayed();
}

async isLibraryIdDisplayed() {
return await this.libraryIdInput.isDisplayed();
}

async isDescriptionDisplayed() {
return await this.descriptionTextArea.isDisplayed();
}

async isPublicDisplayed() {
return await this.visibilityPublic.isDisplayed();
}

async isModeratedDisplayed() {
return await this.visibilityModerated.isDisplayed();
}

async isPrivateDisplayed() {
return await this.visibilityPrivate.isDisplayed();
}

async enterName(name: string) {
await this.nameInput.clear();
await Utils.typeInField(this.nameInput, name);
}

async enterLibraryId(id: string) {
await this.libraryIdInput.clear();
await Utils.typeInField(this.libraryIdInput, id);
}

async enterDescription(description: string) {
await this.descriptionTextArea.clear();
await Utils.typeInField(this.descriptionTextArea, description);
}

async deleteNameWithBackspace() {
await this.nameInput.clear();
await this.nameInput.sendKeys(' ', protractor.Key.CONTROL, 'a', protractor.Key.NULL, protractor.Key.BACK_SPACE);
}

async isCreateEnabled() {
return await this.createButton.isEnabled();
}

async isCancelEnabled() {
return await this.cancelButton.isEnabled();
}

async clickCreate() {
await this.createButton.click();
}

async clickCancel() {
await this.cancelButton.click();
await this.waitForDialogToClose();
}

async isPublicChecked() {
const elemClass = await this.visibilityPublic.element(by.xpath('..')).getAttribute('class');
return await elemClass.includes(CreateLibraryDialog.selectors.radioChecked);
}

async isModeratedChecked() {
const elemClass = await this.visibilityModerated.element(by.xpath('..')).getAttribute('class');
return await elemClass.includes(CreateLibraryDialog.selectors.radioChecked);
}

async isPrivateChecked() {
const elemClass = await this.visibilityPrivate.element(by.xpath('..')).getAttribute('class');
return await elemClass.includes(CreateLibraryDialog.selectors.radioChecked);
}

async selectPublic() {
await this.visibilityPublic.click();
}

async selectModerated() {
await this.visibilityModerated.click();
}

async selectPrivate() {
await this.visibilityPrivate.click();
}
}
7 changes: 6 additions & 1 deletion e2e/components/sidenav/sidenav.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,16 @@ export class Sidenav extends Component {
await menu.waitForMenuToOpen();
}

async openCreateDialog() {
async openCreateFolderDialog() {
await this.openNewMenu();
await this.menu.clickMenuItem('Create folder');
}

async openCreateLibraryDialog() {
await this.openNewMenu();
await this.menu.clickMenuItem('Create Library');
}

async isActiveByLabel(label: string) {
const className = await this.getLinkByLabel(label).getAttribute('class');
return className.includes(Sidenav.selectors.activeLink.replace('.', ''));
Expand Down
20 changes: 10 additions & 10 deletions e2e/suites/actions/create-folder.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ describe('Create folder', () => {

it('creates new folder with name - [C216341]', async () => {
await page.dataTable.doubleClickOnRowByName(parent);
await page.sidenav.openCreateDialog();
await page.sidenav.openCreateFolderDialog();
await createDialog.waitForDialogToOpen();
await createDialog.enterName(folderName1);
await createDialog.clickCreate();
Expand All @@ -104,7 +104,7 @@ describe('Create folder', () => {

it('creates new folder with name and description - [C216340]', async (done) => {
await page.dataTable.doubleClickOnRowByName(parent);
await page.sidenav.openCreateDialog();
await page.sidenav.openCreateFolderDialog();
await createDialog.waitForDialogToOpen();
await createDialog.enterName(folderName2);
await createDialog.enterDescription(folderDescription);
Expand All @@ -126,7 +126,7 @@ describe('Create folder', () => {

it('dialog UI elements - [C216345]', async () => {
await page.dataTable.doubleClickOnRowByName(parent);
await page.sidenav.openCreateDialog();
await page.sidenav.openCreateFolderDialog();
await createDialog.waitForDialogToOpen();
const dialogTitle = await createDialog.getTitle();
const isFolderNameDisplayed = await createDialog.nameInput.isDisplayed();
Expand All @@ -143,7 +143,7 @@ describe('Create folder', () => {

it('with empty folder name - [C216346]', async () => {
await page.dataTable.doubleClickOnRowByName(parent);
await page.sidenav.openCreateDialog();
await page.sidenav.openCreateFolderDialog();
await createDialog.waitForDialogToOpen();
await createDialog.deleteNameWithBackspace();
const isCreateEnabled = await createDialog.createButton.isEnabled();
Expand All @@ -155,7 +155,7 @@ describe('Create folder', () => {

it('with folder name ending with a dot "." - [C216348]', async () => {
await page.dataTable.doubleClickOnRowByName(parent);
await page.sidenav.openCreateDialog();
await page.sidenav.openCreateFolderDialog();
await createDialog.waitForDialogToOpen();
await createDialog.enterName('folder-name.');
const isCreateEnabled = await createDialog.createButton.isEnabled();
Expand All @@ -169,7 +169,7 @@ describe('Create folder', () => {
const namesWithSpecialChars = [ 'a*a', 'a"a', 'a<a', 'a>a', `a\\a`, 'a/a', 'a?a', 'a:a', 'a|a' ];

await page.dataTable.doubleClickOnRowByName(parent);
await page.sidenav.openCreateDialog();
await page.sidenav.openCreateFolderDialog();
await createDialog.waitForDialogToOpen();

for (const name of namesWithSpecialChars) {
Expand All @@ -181,7 +181,7 @@ describe('Create folder', () => {

it('with folder name containing only spaces - [C280406]', async () => {
await page.dataTable.doubleClickOnRowByName(parent);
await page.sidenav.openCreateDialog();
await page.sidenav.openCreateFolderDialog();
await createDialog.waitForDialogToOpen();
await createDialog.enterName(' ');
const isCreateEnabled = await createDialog.createButton.isEnabled();
Expand All @@ -193,7 +193,7 @@ describe('Create folder', () => {

it('cancel folder creation - [C216349]', async () => {
await page.dataTable.doubleClickOnRowByName(parent);
await page.sidenav.openCreateDialog();
await page.sidenav.openCreateFolderDialog();
await createDialog.waitForDialogToOpen();
await createDialog.enterName('test');
await createDialog.enterDescription('test description');
Expand All @@ -203,7 +203,7 @@ describe('Create folder', () => {

it('duplicate folder name - [C216350]', async () => {
await page.dataTable.doubleClickOnRowByName(parent);
await page.sidenav.openCreateDialog();
await page.sidenav.openCreateFolderDialog();
await createDialog.waitForDialogToOpen();
await createDialog.enterName(duplicateFolderName);
await createDialog.clickCreate();
Expand All @@ -214,7 +214,7 @@ describe('Create folder', () => {

it('trim ending spaces from folder name - [C216351]', async () => {
await page.dataTable.doubleClickOnRowByName(parent);
await page.sidenav.openCreateDialog();
await page.sidenav.openCreateFolderDialog();
await createDialog.waitForDialogToOpen();
await createDialog.enterName(nameWithSpaces);
await createDialog.clickCreate();
Expand Down
Loading