diff --git a/e2e/content-services/notifications-component.e2e.ts b/e2e/content-services/notifications-component.e2e.ts index e4336f0e05..f6ae716c93 100644 --- a/e2e/content-services/notifications-component.e2e.ts +++ b/e2e/content-services/notifications-component.e2e.ts @@ -18,14 +18,14 @@ import { LoginPage } from '@alfresco/adf-testing'; import { AcsUserModel } from '../models/ACS/acs-user.model'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -import { NotificationPage } from '../pages/adf/notification.page'; +import { NotificationDemoPage } from '../pages/adf/demo-shell/notification.page'; import { browser } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; describe('Notifications Component', () => { const loginPage = new LoginPage(); - const notificationPage = new NotificationPage(); + const notificationPage = new NotificationDemoPage(); const navigationBarPage = new NavigationBarPage(); const acsUser = new AcsUserModel(); @@ -55,53 +55,55 @@ describe('Notifications Component', () => { }); afterEach(async () => { + await notificationPage.waitForSnackBarToClose(); await browser.executeScript(`document.querySelector('button[data-automation-id="notification-custom-dismiss-button"]').click();`); await notificationPage.enterDurationField(3000); }); - it('[C279977] Should show notification when the message is not empty and button is clicked', async () => { - await notificationPage.enterMessageField('Notification test'); - await notificationPage.clickNotificationButton(); - await notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); - }); - it('[C279979] Should not show notification when the message is empty and button is clicked', async () => { await notificationPage.clearMessage(); await notificationPage.clickNotificationButton(); - await notificationPage.checkNotificationSnackBarIsNotDisplayed(); + await expect(await notificationPage.isNotificationSnackBarDisplayed()).toEqual(false); + }); + + it('[C279977] Should show notification when the message is not empty and button is clicked', async () => { + await notificationPage.enterMessageField('test'); + await notificationPage.clickNotificationButton(); + await expect(await notificationPage.getSnackBarMessage()).toEqual('test'); }); it('[C279978] Should show notification with action when the message is not empty and button is clicked', async () => { - await notificationPage.enterMessageField('Notification test'); + await notificationPage.enterMessageField('test'); await notificationPage.clickActionToggle(); await notificationPage.clickNotificationButton(); - await notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); + await expect(await notificationPage.getSnackBarMessage()).toEqual('test'); await notificationPage.clickActionButton(); await notificationPage.checkActionEvent(); await notificationPage.clickActionToggle(); }); it('[C279981] Should show notification with action when the message is not empty and custom configuration button is clicked', async () => { - await notificationPage.enterMessageField('Notification test'); + await notificationPage.enterMessageField('test'); await notificationPage.clickNotificationButton(); - await notificationPage.checkNotificationSnackBarIsDisplayed(); + await expect(await notificationPage.isNotificationSnackBarDisplayed()).toEqual(true); }); it('[C279987] Should show custom notification during a limited time when a duration is added', async () => { - await notificationPage.enterMessageField('Notification test'); + await notificationPage.enterMessageField('test'); await notificationPage.enterDurationField(1000); await notificationPage.clickNotificationButton(); - await notificationPage.checkNotificationSnackBarIsDisplayed(); + await expect(await notificationPage.isNotificationSnackBarDisplayed()).toEqual(true); await browser.sleep(2000); - await notificationPage.checkNotificationSnackBarIsNotDisplayed(); + await expect(await notificationPage.isNotificationSnackBarDisplayed()).toEqual(false); }); it('[C280000] Should show notification with action when the message is not empty and custom button is clicked', async () => { - await notificationPage.enterMessageField('Notification test'); + await notificationPage.enterMessageField('test'); await notificationPage.clickActionToggle(); await notificationPage.clickNotificationButton(); - await notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); - await notificationPage.checkNotificationSnackBarIsNotDisplayed(); + await expect(await notificationPage.isNotificationSnackBarDisplayed()).toEqual(true); + await expect(await notificationPage.getSnackBarMessage()).toEqual('test'); + await notificationPage.waitForSnackBarToClose(); await notificationPage.clickNotificationButton(); await notificationPage.clickActionButton(); await notificationPage.checkActionEvent(); @@ -109,7 +111,7 @@ describe('Notifications Component', () => { }); it('[C280001] Should meet configuration when a custom notification is set', async () => { - await notificationPage.enterMessageField('Notification test'); + await notificationPage.enterMessageField('test'); await notificationPage.enterDurationField(1000); await notificationPage.selectHorizontalPosition('Right'); await notificationPage.selectVerticalPosition('Top'); diff --git a/e2e/pages/adf/notification.page.ts b/e2e/pages/adf/demo-shell/notification.page.ts similarity index 82% rename from e2e/pages/adf/notification.page.ts rename to e2e/pages/adf/demo-shell/notification.page.ts index 68e400a92f..9d72a6b2a3 100644 --- a/e2e/pages/adf/notification.page.ts +++ b/e2e/pages/adf/demo-shell/notification.page.ts @@ -16,9 +16,11 @@ */ import { element, by, browser, ElementFinder } from 'protractor'; -import { BrowserVisibility, BrowserActions, DropdownPage } from '@alfresco/adf-testing'; +import { BrowserVisibility, BrowserActions, DropdownPage, SnackbarPage } from '@alfresco/adf-testing'; -export class NotificationPage { +export class NotificationDemoPage { + + snackbarPage = new SnackbarPage(); messageField: ElementFinder = element(by.css('input[data-automation-id="notification-message"]')); durationField: ElementFinder = element(by.css('input[data-automation-id="notification-duration"]')); @@ -44,17 +46,16 @@ export class NotificationPage { return BrowserActions.getText(this.notificationConfig); } - async checkNotificationSnackBarIsDisplayed(): Promise { - await BrowserVisibility.waitUntilElementIsVisible(this.notificationSnackBar); + async isNotificationSnackBarDisplayed(): Promise { + return this.snackbarPage.isNotificationSnackBarDisplayed(); } - async checkNotificationSnackBarIsDisplayedWithMessage(message): Promise { - const notificationSnackBarMessage: ElementFinder = element(by.cssContainingText('simple-snack-bar', message)); - await BrowserVisibility.waitUntilElementIsVisible(notificationSnackBarMessage); + async getSnackBarMessage(): Promise { + return this.snackbarPage.getSnackBarMessage(); } - async checkNotificationSnackBarIsNotDisplayed(): Promise { - await BrowserVisibility.waitUntilElementIsNotVisible(this.notificationSnackBar); + async waitForSnackBarToClose(): Promise { + await this.snackbarPage.waitForSnackBarToClose(); } async enterMessageField(text): Promise { @@ -95,6 +96,7 @@ export class NotificationPage { } async clearMessage(): Promise { - await BrowserActions.clearSendKeys(this.messageField, ''); + await BrowserActions.click(this.messageField); + await BrowserActions.clearWithBackSpace(this.messageField); } } diff --git a/lib/testing/src/lib/core/pages/public-api.ts b/lib/testing/src/lib/core/pages/public-api.ts index bd629964b5..2e44ef88ed 100644 --- a/lib/testing/src/lib/core/pages/public-api.ts +++ b/lib/testing/src/lib/core/pages/public-api.ts @@ -30,3 +30,4 @@ export * from './card-view/public-api'; export * from './viewer.page'; export * from './config-editor-page'; export * from './about.page'; +export * from './snackbar.page'; diff --git a/lib/testing/src/lib/core/pages/snackbar.page.ts b/lib/testing/src/lib/core/pages/snackbar.page.ts new file mode 100644 index 0000000000..ca05a0c96c --- /dev/null +++ b/lib/testing/src/lib/core/pages/snackbar.page.ts @@ -0,0 +1,51 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { element, by, ElementFinder } from 'protractor'; +import { BrowserVisibility } from '../utils/browser-visibility'; +import { Logger } from '../utils/logger'; + +export class SnackbarPage { + + notificationSnackBar: ElementFinder = element(by.css('simple-snack-bar span')); + snackBarContainerCss = by.css('.mat-snack-bar-container'); + + async waitForSnackBarToAppear() { + return BrowserVisibility.waitUntilElementIsVisible(element(this.snackBarContainerCss), 20000, + 'snackbar did not appear' + ); + } + + async waitForSnackBarToClose() { + return BrowserVisibility.waitUntilElementIsNotVisible(element(this.snackBarContainerCss), 20000); + } + + async getSnackBarMessage(): Promise { + await this.waitForSnackBarToAppear(); + return this.notificationSnackBar.getText(); + } + + async isNotificationSnackBarDisplayed(): Promise { + try { + await BrowserVisibility.waitUntilElementIsVisible(this.notificationSnackBar); + return true; + } catch { + Logger.error(`Snackbar is not displayed `); + return false; + } + } +}