diff --git a/e2e/pages/adf/process_services/widgets/DynamicTable.js b/e2e/pages/adf/process_services/widgets/DynamicTable.js index adede7648e..51f618ba59 100644 --- a/e2e/pages/adf/process_services/widgets/DynamicTable.js +++ b/e2e/pages/adf/process_services/widgets/DynamicTable.js @@ -16,6 +16,8 @@ */ var FormFields = require('../formFields'); +var Util = require('../../../../util/util'); + var DynamicTable = function () { @@ -23,6 +25,16 @@ var DynamicTable = function () { var labelLocator = by.css("dynamic-table-widget div div"); var columnNameLocator = by.css("table[id*='dynamic-table'] th"); + var addButton = element(by.id("label-add-row")); + var columnDateTime = element(by.id("columnDateTime")); + var columnDate = element(by.id("columnDate")); + var calendarHeader = element(by.css("div[class='mat-datetimepicker-calendar-header-date-time']")); + var calendarContent = element(by.css("div[class='mat-datetimepicker-calendar-content']")); + var saveButton = element(by.cssContainingText('button span', 'Save')); + var errorMessage = element(by.css('div[class="adf-error-text"]')); + var dateWidget = element(by.css('button[aria-label="Open calendar"]')); + var calendarNumber = element.all(by.css('td div')); + var tableRow = element.all(by.css('tbody tr')); this.getFieldLabel = function (fieldId) { return formFields.getFieldLabel(fieldId, labelLocator); @@ -32,6 +44,60 @@ var DynamicTable = function () { return formFields.getFieldText(fieldId, columnNameLocator); }; + this.clickAddButton = function () { + Util.waitUntilElementIsVisible(addButton); + return addButton.click(); + }; + + this.clickColumnDateTime = function () { + Util.waitUntilElementIsVisible(columnDateTime); + columnDateTime.click(); + Util.waitUntilElementIsVisible(calendarHeader); + Util.waitUntilElementIsVisible(calendarContent); + browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + }; + + this.addRandomStringOnDateTime = function (randomText) { + Util.waitUntilElementIsVisible(columnDateTime); + columnDateTime.click(); + browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + columnDateTime.sendKeys(randomText); + columnDateTime.sendKeys(protractor.Key.ENTER); + return columnDateTime.getAttribute('value'); + }; + + this.addRandomStringOnDate = function(randomText) { + Util.waitUntilElementIsVisible(columnDate); + columnDate.click(); + return columnDate.sendKeys(randomText); + }; + + this.clickSaveButton = function () { + Util.waitUntilElementIsVisible(saveButton); + return saveButton.click(); + }; + + this.checkErrorMessage = function () { + Util.waitUntilElementIsVisible(errorMessage); + return errorMessage.getText(); + }; + + this.clickDateWidget = function () { + Util.waitUntilElementIsVisible(dateWidget); + return dateWidget.click(); + }; + + this.getDateCalendarNumber = function (date) { + return calendarNumber.get(date).click(); + }; + + this.getTableRow = function (rowNumber) { + return Util.waitUntilElementIsVisible(tableRow.get(rowNumber)); + }; + + this.waitForCalendarToDisappear = function () { + Util.waitUntilElementIsNotVisible(calendarNumber); + }; }; module.exports = DynamicTable; diff --git a/e2e/process-services/dynamic_table_date_picker.e2e.ts b/e2e/process-services/dynamic_table_date_picker.e2e.ts new file mode 100644 index 0000000000..63405c879b --- /dev/null +++ b/e2e/process-services/dynamic_table_date_picker.e2e.ts @@ -0,0 +1,125 @@ +/*! + * @license + * Copyright 2016 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 LoginPage = require('../pages/adf/loginPage'); +import ProcessServicesPage = require('../pages/adf/process_services/processServicesPage'); +import ProcessFiltersPage = require('../pages/adf/process_services/processFiltersPage.js'); +import AppNavigationBarPage = require('../pages/adf/process_services/appNavigationBarPage'); +import DynamicTable = require('../pages/adf/process_services/widgets/DynamicTable'); + +import TestConfig = require('../test.config'); +import resources = require('../util/resources'); + +import AlfrescoApi = require('alfresco-js-api-node'); +import { AppsActions } from '../actions/APS/apps.actions'; +import { UsersActions } from '../actions/users.actions'; + +describe('Dynamic Table - Date Picker', () => { + + let loginPage = new LoginPage(); + let processServicesPage = new ProcessServicesPage(); + let processFiltersPage = new ProcessFiltersPage(); + let appNavigationBarPage = new AppNavigationBarPage(); + let dynamicTable = new DynamicTable(); + + let app = resources.Files.DYNAMIC_TABLE_APP; + let user, tenantId, appId; + + let randomText = { + date: 'HELLO WORLD', + dateTime: 'Test', + error: `Field 'columnDate' is required.` + }; + + let datePosition = 15; + let rowPosition = 0; + + beforeAll(async(done) => { + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'BPM', + hostBpm: TestConfig.adf.url + }); + + let apps = new AppsActions(); + let users = new UsersActions(); + + await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); + + user = await users.createTenantAndUser(this.alfrescoJsApi); + + tenantId = user.tenantId; + + await this.alfrescoJsApi.login(user.email, user.password); + + let importedApp = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); + appId = importedApp.id; + + await loginPage.loginToProcessServicesUsingUserModel(user); + + done(); + }); + + afterAll(async(done) => { + await this.alfrescoJsApi.login(user.email, user.password); + + await this.alfrescoJsApi.activiti.modelsApi.deleteModel(appId); + + await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); + + await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(tenantId); + + done(); + }); + + it('[C286277] Should have a datepicker and a mask for DateTime field', () => { + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + + appNavigationBarPage.clickProcessButton(); + + processFiltersPage.clickCreateProcessButton(); + processFiltersPage.clickNewProcessDropdown(); + + dynamicTable.clickAddButton(); + dynamicTable.clickColumnDateTime(); + + expect(dynamicTable.addRandomStringOnDateTime(randomText.dateTime)).toBe(''); + }); + + it('[C286279] Should be able to save row with Date field', () => { + loginPage.loginToProcessServicesUsingUserModel(user); + + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + + appNavigationBarPage.clickProcessButton(); + + processFiltersPage.clickCreateProcessButton(); + processFiltersPage.clickNewProcessDropdown(); + + dynamicTable.clickAddButton(); + dynamicTable.addRandomStringOnDate(randomText.date); + dynamicTable.clickSaveButton(); + + expect(dynamicTable.checkErrorMessage()).toBe(randomText.error); + + dynamicTable.clickDateWidget(); + dynamicTable.getDateCalendarNumber(datePosition); + dynamicTable.waitForCalendarToDisappear(); + dynamicTable.clickSaveButton(); + dynamicTable.getTableRow(rowPosition); + }); + +}); diff --git a/e2e/util/resources.js b/e2e/util/resources.js index b9533ec1a9..3763e8155d 100644 --- a/e2e/util/resources.js +++ b/e2e/util/resources.js @@ -95,6 +95,13 @@ exports.Files = { } }, + DYNAMIC_TABLE_APP: { + file_location: "/resources/apps/Dynamic Table App.zip", + title: "Dynamic Table App", + formName: "Dynamic Table App", + process_se_name: "DynamicTableProcess" + }, + ADF_DOCUMENTS: { PDF: { file_location: "/resources/adf/allFileTypes/a_file_supported.pdf",