diff --git a/demo-shell/src/app/components/app-layout/cloud/cloud-settings.component.html b/demo-shell/src/app/components/app-layout/cloud/cloud-settings.component.html index a52dc0782f..3621839066 100644 --- a/demo-shell/src/app/components/app-layout/cloud/cloud-settings.component.html +++ b/demo-shell/src/app/components/app-layout/cloud/cloud-settings.component.html @@ -8,7 +8,7 @@ {{ 'SETTINGS_CLOUD.TASK_DETAILS_REDIRECTION' | translate }} - + {{ 'SETTINGS_CLOUD.SELECTION_MODE' | translate }} diff --git a/e2e/actions/APS-cloud/tasks.ts b/e2e/actions/APS-cloud/tasks.ts index d92052c255..b22bf3e6e2 100644 --- a/e2e/actions/APS-cloud/tasks.ts +++ b/e2e/actions/APS-cloud/tasks.ts @@ -89,11 +89,11 @@ export class Tasks { return data; } - async createStandaloneSubtask(taskId, appName, name) { - const path = '/' + appName + '-rb/v1/tasks/' + taskId + '/subtask'; + async createStandaloneSubtask(parentTaskId, appName, name) { + const path = '/' + appName + '-rb/v1/tasks'; const method = 'POST'; - const queryParams = {}, postBody = {'name': name, 'payloadType': 'CreateTaskPayload'}; + const queryParams = {}, postBody = {'name': name, 'parentTaskId': parentTaskId, 'payloadType': 'CreateTaskPayload'}; const data = await this.api.performBpmOperation(path, method, queryParams, postBody); return data; diff --git a/e2e/pages/adf/configEditorPage.ts b/e2e/pages/adf/configEditorPage.ts index ce6b349b3b..932d93711f 100644 --- a/e2e/pages/adf/configEditorPage.ts +++ b/e2e/pages/adf/configEditorPage.ts @@ -76,4 +76,18 @@ export class ConfigEditorPage { Util.waitUntilElementIsClickable(button); return button.click(); } + + clickEditTaskConfiguration() { + let button = element(by.id('adf-edit-task-filter-conf')); + Util.waitUntilElementIsVisible(button); + Util.waitUntilElementIsClickable(button); + return button.click(); + } + + clickTaskListCloudConfiguration() { + let button = element(by.id('adf-task-list-cloud-conf')); + Util.waitUntilElementIsVisible(button); + Util.waitUntilElementIsClickable(button); + return button.click(); + } } diff --git a/e2e/pages/adf/contentServicesPage.ts b/e2e/pages/adf/contentServicesPage.ts index 60f8b86664..367745aa4d 100644 --- a/e2e/pages/adf/contentServicesPage.ts +++ b/e2e/pages/adf/contentServicesPage.ts @@ -66,7 +66,7 @@ export class ContentServicesPage { copyButton = element(by.css('button[data-automation-id="content-node-selector-actions-choose"]')); searchInputElement = element(by.css('input[data-automation-id="content-node-selector-search-input"]')); shareNodeButton = element(by.cssContainingText('mat-icon', ' share ')); - siteListDropdown = element(by.css(`mat-select[data-automation-id='site-my-files-select']`)); + siteListDropdown = element(by.css(`mat-select[data-automation-id='site-my-files-option']`)); getUploadAreaDocumentList() { return new ContentListPage(element(by.css('adf-upload-drag-area'))); diff --git a/e2e/pages/adf/dataTablePage.ts b/e2e/pages/adf/dataTablePage.ts index 9057415c00..3fbe9ae800 100644 --- a/e2e/pages/adf/dataTablePage.ts +++ b/e2e/pages/adf/dataTablePage.ts @@ -29,7 +29,7 @@ export class DataTablePage { selectionDropDown = element(by.css(`div[class*='ng-trigger-transformPanel']`)); allSelectedRows = element.all(by.css(`div[class*='is-selected']`)); selectedRowNumber = element(by.css(`div[class*='is-selected'] div[data-automation-id*='text_']`)); - selectAll = element(by.css(`div[class*='header'] label`)); + selectAll = element(by.css(`div[class*='header'] mat-checkbox`)); addRowElement = element(by.xpath(`//span[contains(text(),'Add row')]/..`)); replaceRowsElement = element(by.xpath(`//span[contains(text(),'Replace rows')]/..`)); reset = element(by.xpath(`//span[contains(text(),'Reset to default')]/..`)); @@ -89,6 +89,24 @@ export class DataTablePage { checkbox.click(); } + clickCheckboxByName(rowName) { + let checkbox = this.getRowsName(rowName).element(by.xpath(`ancestor::div[contains(@class, 'adf-datatable-row')]//mat-checkbox/label`)); + Util.waitUntilElementIsVisible(checkbox); + checkbox.click(); + } + + getRowCheckboxByName(rowName) { + return this.getRowsName(rowName).element(by.xpath(`ancestor::div/div/mat-checkbox[contains(@class, 'mat-checkbox-checked')]`)); + } + + checkRowIsNotCheckedByName(rowName) { + Util.waitUntilElementIsNotOnPage(this.getRowCheckboxByName(rowName)); + } + + checkRowIsCheckedByName(rowName) { + Util.waitUntilElementIsVisible(this.getRowCheckboxByName(rowName)); + } + selectRow(rowNumber) { return this.getRowByRowNumber(rowNumber).click(); } @@ -105,6 +123,30 @@ export class DataTablePage { selectMode.click(); } + selectRowByRowName(rowName) { + let row = element(by.cssContainingText(`[data-automation-id*="${rowName}"]`, rowName)); + Util.waitUntilElementIsVisible(row); + Util.waitUntilElementIsClickable(row); + return row.click(); + } + + checkRowIsSelectedByName(rowName) { + let row = element(by.cssContainingText(`[data-automation-id*="${rowName}"]`, rowName)); + let isRowSelected = row.element(by.xpath(`ancestor::div[contains(@class, 'is-selected')]`)); + Util.waitUntilElementIsVisible(isRowSelected); + } + + checkRowIsNotSelectedByName(rowName) { + let row = element(by.cssContainingText(`[data-automation-id*="${rowName}"]`, rowName)); + let isRowSelected = row.element(by.xpath(`ancestor::div[contains(@class, 'is-selected')]`)); + Util.waitUntilElementIsNotOnPage(isRowSelected); + } + + selectRowByNameWithKeyboard(rowName) { + let row = element(by.cssContainingText(`[data-automation-id*="${rowName}"]`, rowName)); + browser.actions().sendKeys(protractor.Key.COMMAND).click(row).perform(); + } + checkRowIsSelected(rowNumber) { let isRowSelected = this.getRowByRowNumber(rowNumber).element(by.xpath(`ancestor::div[contains(@class, 'is-selected')]`)); Util.waitUntilElementIsVisible(isRowSelected); @@ -120,8 +162,15 @@ export class DataTablePage { Util.waitUntilElementIsNotOnPage(this.selectedRowNumber); } + checkAllRowsButtonIsDisplayed() { + Util.waitUntilElementIsVisible(this.selectAll); + Util.waitUntilElementIsVisible(this.selectAll); + return this; + } + checkAllRows() { Util.waitUntilElementIsVisible(this.selectAll); + Util.waitUntilElementIsClickable(this.selectAll); this.selectAll.click(); } @@ -265,6 +314,12 @@ export class DataTablePage { return element.all(by.css(`div[title='Name'][filename="${filename}"]`)).count(); } + getNumberOfRowsDisplayedByName(filename) { + let rowLocator = by.cssContainingText(`[data-automation-id*="${filename}"]`, filename); + Util.waitUntilElementIsVisible(element(rowLocator)); + return element.all(by.css(`div[title='Name'] div[data-automation-id*="${filename}"]`)).count(); + } + checkColumnIsDisplayed(column) { Util.waitUntilElementIsVisible(element(by.css(`div[data-automation-id="auto_id_entry.${column}"]`))); return this; diff --git a/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts index 7c41ec05ba..31c213cfdf 100644 --- a/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts @@ -20,6 +20,8 @@ import { Util } from '../../../../util/util'; import { TaskFiltersCloudComponent } from '../../process-cloud/taskFiltersCloudComponent'; import { TaskListCloudComponent } from '../../process-cloud/taskListCloudComponent'; import { EditTaskFilterCloudComponent } from '../../process-cloud/editTaskFilterCloudComponent'; +import { FormControllersPage } from '../../material/formControllersPage'; + import { element, by } from 'protractor'; export class TasksCloudDemoPage { @@ -30,10 +32,29 @@ export class TasksCloudDemoPage { taskFilters = element(by.css("mat-expansion-panel[data-automation-id='Task Filters']")); defaultActiveFilter = element.all(by.css('.adf-filters__entry')).first(); - editTaskFilterCloud = new EditTaskFilterCloudComponent(); createButton = element(by.css('button[data-automation-id="create-button"')); newTaskButton = element(by.css('button[data-automation-id="btn-start-task"]')); + settingsButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'Settings')).first(); + appButton = element.all(by.cssContainingText('div[class*="mat-tab-label"] .mat-tab-labels div', 'App')).first(); + modeDropDownArrow = element(by.css('mat-form-field[data-automation-id="selectionMode"] div[class*="arrow-wrapper"]')); + modeSelector = element(by.css("div[class*='mat-select-panel']")); + displayTaskDetailsToggle = element(by.css('mat-slide-toggle[data-automation-id="taskDetailsRedirection"]')); + multiSelectionToggle = element(by.css('mat-slide-toggle[data-automation-id="multiSelection"]')); + + formControllersPage = new FormControllersPage(); + + editTaskFilterCloud = new EditTaskFilterCloudComponent(); + + disableDisplayTaskDetails() { + this.formControllersPage.disableToggle(this.displayTaskDetailsToggle); + return this; + } + + enableMultiSelection() { + this.formControllersPage.enableToggle(this.multiSelectionToggle); + return this; + } taskFiltersCloudComponent(filter) { return new TaskFiltersCloudComponent(filter); @@ -68,6 +89,10 @@ export class TasksCloudDemoPage { return new TaskListCloudComponent().getAllRowsByColumn('Id'); } + getAllRowsByProcessDefIdColumn() { + return new TaskListCloudComponent().getAllRowsByColumn('Process Definition Id'); + } + clickOnTaskFilters() { Util.waitUntilElementIsVisible(this.taskFilters); return this.taskFilters.click(); @@ -101,4 +126,35 @@ export class TasksCloudDemoPage { return this.defaultActiveFilter.getAttribute('class').then((value) => value.includes('adf-active')); } + clickSettingsButton() { + this.settingsButton.click(); + browser.driver.sleep(400); + Util.waitUntilElementIsVisible(this.multiSelectionToggle); + Util.waitUntilElementIsVisible(this.modeDropDownArrow); + Util.waitUntilElementIsClickable(this.modeDropDownArrow); + return this; + } + + clickAppButton() { + this.appButton.click(); + this.createButtonIsDisplayed(); + return this; + } + + selectSelectionMode(mode) { + this.clickOnSelectionModeDropDownArrow(); + + let modeElement = element.all(by.cssContainingText('mat-option span', mode)).first(); + Util.waitUntilElementIsClickable(modeElement); + Util.waitUntilElementIsVisible(modeElement); + modeElement.click(); + return this; + } + + clickOnSelectionModeDropDownArrow() { + Util.waitUntilElementIsVisible(this.modeDropDownArrow); + Util.waitUntilElementIsClickable(this.modeDropDownArrow); + this.modeDropDownArrow.click(); + Util.waitUntilElementIsVisible(this.modeSelector); + } } diff --git a/e2e/pages/adf/process-cloud/editTaskFilterCloudComponent.ts b/e2e/pages/adf/process-cloud/editTaskFilterCloudComponent.ts index 11de3de411..75326cec82 100644 --- a/e2e/pages/adf/process-cloud/editTaskFilterCloudComponent.ts +++ b/e2e/pages/adf/process-cloud/editTaskFilterCloudComponent.ts @@ -24,6 +24,14 @@ export class EditTaskFilterCloudComponent { customiseFilter = element(by.id('adf-edit-task-filter-title-id')); selectedOption = element(by.css('mat-option[class*="mat-selected"]')); assignment = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-assignment"]')); + priority = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-priority"]')); + taskName = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-taskName"]')); + processDefinitionId = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-processDefinitionId"]')); + processInstanceId = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-processInstanceId"]')); + lastModifiedFrom = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-lastModifiedFrom"]')); + lastModifiedTo = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-lastModifiedTo"]')); + parentTaskId = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-parentTaskId"]')); + owner = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-owner"]')); saveButton = element(by.css('button[id="adf-save-id"]')); saveAsButton = element(by.css('button[id="adf-save-as-id"]')); deleteButton = element(by.css('button[id="adf-delete-id"]')); @@ -92,17 +100,55 @@ export class EditTaskFilterCloudComponent { } setAssignment(option) { - Util.waitUntilElementIsVisible(this.assignment); - this.assignment.clear(); - this.assignment.sendKeys(option); - this.assignment.sendKeys(protractor.Key.ENTER); - return this; + return this.setProperty('assignment', option); } getAssignment() { return this.assignment.getText(); } + setPriority(option) { + return this.setProperty('priority', option); + } + + getPriority() { + return this.priority.getText(); + } + + setParentTaskId(option) { + return this.setProperty('parentTaskId', option); + } + + getParentTaskId() { + return this.parentTaskId.getText(); + } + + setOwner(option) { + return this.setProperty('owner', option); + } + + getOwner() { + return this.owner.getText(); + } + + setLastModifiedFrom(option) { + this.clearField(this.lastModifiedFrom); + return this.setProperty('lastModifiedFrom', option); + } + + getLastModifiedFrom() { + return this.lastModifiedFrom.getText(); + } + + setLastModifiedTo(option) { + this.clearField(this.lastModifiedTo); + return this.setProperty('lastModifiedTo', option); + } + + getLastModifiedTo() { + return this.lastModifiedTo.getText(); + } + checkSaveButtonIsDisplayed() { Util.waitUntilElementIsVisible(this.saveButton); return this; @@ -166,4 +212,53 @@ export class EditTaskFilterCloudComponent { }); } + setAppNameDropDown(option) { + this.clickOnDropDownArrow('appName'); + + let appNameElement = element.all(by.cssContainingText('mat-option span', option)).first(); + Util.waitUntilElementIsClickable(appNameElement); + Util.waitUntilElementIsVisible(appNameElement); + appNameElement.click(); + return this; + } + + getAppNameDropDownValue() { + let locator = element(by.css("mat-select[data-automation-id='adf-cloud-edit-task-property-appName'] span")); + Util.waitUntilElementIsVisible(locator); + return locator.getText(); + } + + setTaskName(option) { + return this.setProperty('taskName', option); + } + + getTaskName() { + return this.taskName.getAttribute('value'); + } + + setProcessDefinitionId(option) { + return this.setProperty('processDefinitionId', option); + } + + getProcessDefinitionId() { + return this.processDefinitionId.getAttribute('value'); + } + + setProcessInstanceId(option) { + return this.setProperty('processInstanceId', option); + } + + setProperty(property, option) { + let locator = element(by.css('input[data-automation-id="adf-cloud-edit-task-property-' + property + '"]')); + Util.waitUntilElementIsVisible(locator); + locator.clear(); + locator.sendKeys(option); + locator.sendKeys(protractor.Key.ENTER); + return this; + } + + getProcessInstanceId() { + return this.processInstanceId.getAttribute('value'); + } + } diff --git a/e2e/process-services-cloud/task-list-properties.e2e.ts b/e2e/process-services-cloud/task-list-properties.e2e.ts new file mode 100644 index 0000000000..fdef8b916e --- /dev/null +++ b/e2e/process-services-cloud/task-list-properties.e2e.ts @@ -0,0 +1,315 @@ +/*! + * @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 TestConfig = require('../test.config'); + +import { LoginSSOPage } from '../pages/adf/loginSSOPage'; +import { SettingsPage } from '../pages/adf/settingsPage'; +import { NavigationBarPage } from '../pages/adf/navigationBarPage'; +import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; +import { AppListCloudComponent } from '../pages/adf/process-cloud/appListCloudComponent'; +import { ConfigEditorPage } from '../pages/adf/configEditorPage'; +import { TaskListCloudConfiguration } from './taskListCloud.config'; + +import { Util } from '../util/util'; +import moment = require('moment'); +import { DateUtil } from '../util/dateUtil'; + +import { Tasks } from '../actions/APS-cloud/tasks'; +import { ProcessDefinitions } from '../actions/APS-cloud/process-definitions'; +import { ProcessInstances } from '../actions/APS-cloud/process-instances'; +import { NotificationPage } from '../pages/adf/notificationPage'; + +describe('Edit task filters and task list properties', () => { + + describe('Edit task filters and task list properties', () => { + const configEditorPage = new ConfigEditorPage(); + const settingsPage = new SettingsPage(); + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + let appListCloudComponent = new AppListCloudComponent(); + let tasksCloudDemoPage = new TasksCloudDemoPage(); + + const tasksService: Tasks = new Tasks(); + const processDefinitionService: ProcessDefinitions = new ProcessDefinitions(); + const processInstancesService: ProcessInstances = new ProcessInstances(); + let notificationPage = new NotificationPage(); + + let silentLogin; + const simpleApp = 'simple-app'; + const candidateUserApp = 'candidateuserapp'; + let noTasksFoundMessage = 'No Tasks Found'; + const user = TestConfig.adf.adminEmail, password = TestConfig.adf.adminPassword; + let createdTask, notAssigned, notDisplayedTask, processDefinition, processInstance, priorityTask, subTask; + let priority = 30; + + let beforeDate = moment().add(-1, 'days').format('DD/MM/YYYY'); + let currentDate = DateUtil.formatDate('DD/MM/YYYY'); + let afterDate = moment().add(1, 'days').format('DD/MM/YYYY'); + + beforeAll(async (done) => { + silentLogin = false; + let jsonFile = new TaskListCloudConfiguration().getConfiguration(); + settingsPage.setProviderBpmSso(TestConfig.adf.hostBPM, TestConfig.adf.hostSso, TestConfig.adf.hostIdentity, silentLogin); + loginSSOPage.clickOnSSOButton(); + loginSSOPage.loginAPS(user, password); + + navigationBarPage.clickConfigEditorButton(); + + configEditorPage.clickTaskListCloudConfiguration(); + configEditorPage.clickClearButton(); + configEditorPage.enterBigConfigurationText(JSON.stringify(jsonFile)).clickSaveButton(); + notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Save'); + notificationPage.checkNotificationSnackBarIsNotDisplayed(); + + configEditorPage.clickEditTaskConfiguration(); + configEditorPage.clickClearButton(); + browser.driver.sleep(5000); + configEditorPage.enterConfiguration('{' + + '"properties": [' + + '"appName",' + '"state",' + '"assignment",' + + '"taskName",' + '"parentTaskId",' + '"priority",' + + '"standAlone",' + '"owner",' + '"processDefinitionId",' + '"processInstanceId",' + + '"lastModifiedFrom",' + '"lastModifiedTo",' + '"sort",' + '"order"' + + ']' + + '}'); + configEditorPage.clickSaveButton(); + + await tasksService.init(user, password); + createdTask = await tasksService.createStandaloneTask(Util.generateRandomString(), simpleApp); + await tasksService.claimTask(createdTask.entry.id, simpleApp); + notAssigned = await tasksService.createStandaloneTask(Util.generateRandomString(), simpleApp); + priorityTask = await tasksService.createStandaloneTask(Util.generateRandomString(), simpleApp, {priority: priority}); + await tasksService.claimTask(priorityTask.entry.id, simpleApp); + notDisplayedTask = await tasksService.createStandaloneTask(Util.generateRandomString(), candidateUserApp); + await tasksService.claimTask(notDisplayedTask.entry.id, candidateUserApp); + + await processDefinitionService.init(user, password); + processDefinition = await processDefinitionService.getProcessDefinitions(simpleApp); + await processInstancesService.init(user, password); + processInstance = await processInstancesService.createProcessInstance(processDefinition.list.entries[0].entry.key, simpleApp); + + subTask = await tasksService.createStandaloneSubtask(createdTask.entry.id, simpleApp, Util.generateRandomString()); + await tasksService.claimTask(subTask.entry.id, simpleApp); + + done(); + }); + + beforeEach((done) => { + navigationBarPage.navigateToProcessServicesCloudPage(); + appListCloudComponent.checkApsContainer(); + appListCloudComponent.goToApp(simpleApp); + tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader(); + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + done(); + }); + + it('[C292004] Filter by appName', () => { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getAppNameDropDownValue()).toEqual(simpleApp); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(createdTask.entry.name); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(notDisplayedTask.entry.name); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setAppNameDropDown(candidateUserApp); + expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getAppNameDropDownValue()).toEqual(candidateUserApp); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(notDisplayedTask.entry.name); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(createdTask.entry.name); + }); + + it('[C297476] Filter by taskName', () => { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName(createdTask.entry.name); + expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getTaskName()).toEqual(createdTask.entry.name); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(createdTask.entry.name); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfRowsDisplayedByName(createdTask.entry.name)).toEqual(1); + }); + + it('[C297613] Should be able to see No tasks found when typing a task name that does not exist', () => { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setTaskName('invalidName'); + expect(tasksCloudDemoPage.editTaskFilterCloudComponent().getTaskName()).toEqual('invalidName'); + + expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + }); + + it('[C297480] Should be able to see only tasks that are part of a specific process when processInstanceId is set', () => { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setProcessInstanceId(processInstance.entry.id) + .setStateFilterDropDown('ALL').clearAssignment(); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); + + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().getAllDisplayedRows()).toBe(1); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(processInstance.entry.id); + }); + + it('[C297684] Should be able to see No tasks found when typing an invalid processInstanceId', () => { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setProcessInstanceId('invalidTaskId'); + + expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + }); + + it('[C297478] Should be able to see only tasks that are assigned to a specific user when assignee is set', () => { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setAssignment('admin.adf'); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(createdTask.entry.name); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(notAssigned.entry.name); + }); + + it('[C297686] Should be able to see No tasks found when typing an invalid user to assignee field', () => { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setAssignment('invalid'); + + expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + }); + + it('[C297482] Should be able to see only tasks with specific priority when priority is set', () => { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setPriority(priority); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(priorityTask.entry.name); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(createdTask.entry.name); + }); + + it('[C297687] Should be able to see No tasks found when typing unused value for priority field', () => { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setPriority('70'); + + expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + }); + + it('[C297481] Should be able to see only tasks with specific parentTaskId when parentTaskId is set', () => { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setParentTaskId(subTask.entry.parentTaskId); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(subTask.entry.name); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(createdTask.entry.name); + }); + + it('[C297486] Filter by Owner', () => { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setStateFilterDropDown('ALL').clearAssignment().setOwner('admin.adf'); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(notAssigned.entry.name); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(createdTask.entry.name); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setOwner('invalid'); + + expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + }); + + it('[C297484] Task is displayed when typing into lastModifiedFrom field a date before the task created date', function () { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(createdTask.entry.name); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(afterDate); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(createdTask.entry.name); + }); + + it('[C297689] Task is not displayed when typing into lastModifiedFrom field the same date as tasks created date', function () { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(currentDate); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(createdTask.entry.name); + }); + + it('[C297485] Task is displayed when typing into lastModifiedTo field a date after the task created date', function () { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(createdTask.entry.name); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(beforeDate); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(createdTask.entry.name); + }); + + it('[C297690] Task is not displayed when typing into lastModifiedTo field the same date as tasks created date', function () { + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(currentDate); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(createdTask.entry.name); + }); + + it('[C297691] Task is not displayed when typing into lastModifiedFrom field a date before the task due date ' + + 'and into lastModifiedTo a date before task due date', function () { + + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(beforeDate); + expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + }); + + it('[C297692] Task is displayed when typing into lastModifiedFrom field a date before the tasks due date ' + + 'and into lastModifiedTo a date after', function () { + + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(beforeDate); + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(createdTask.entry.name); + }); + + it('[C297693] Task is not displayed when typing into lastModifiedFrom field a date after the tasks due date ' + + 'and into lastModifiedTo a date after', function () { + + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedFrom(afterDate); + tasksCloudDemoPage.editTaskFilterCloudComponent().setLastModifiedTo(afterDate); + expect(tasksCloudDemoPage.taskListCloudComponent().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage); + }); + + }); + +}); diff --git a/e2e/process-services-cloud/task-list-selection.e2e.ts b/e2e/process-services-cloud/task-list-selection.e2e.ts new file mode 100644 index 0000000000..7a0c62b317 --- /dev/null +++ b/e2e/process-services-cloud/task-list-selection.e2e.ts @@ -0,0 +1,128 @@ +/*! + * @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 TestConfig = require('../test.config'); + +import { LoginSSOPage } from '../pages/adf/loginSSOPage'; +import { SettingsPage } from '../pages/adf/settingsPage'; +import { NavigationBarPage } from '../pages/adf/navigationBarPage'; +import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; +import { AppListCloudComponent } from '../pages/adf/process-cloud/appListCloudComponent'; +import { TaskListCloudConfiguration } from './taskListCloud.config'; + +import { Util } from '../util/util'; +import moment = require('moment'); + +import { Tasks } from '../actions/APS-cloud/tasks'; +describe('Task list cloud - selection', () => { + + describe('Task list cloud - selection', () => { + const settingsPage = new SettingsPage(); + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + let appListCloudComponent = new AppListCloudComponent(); + let tasksCloudDemoPage = new TasksCloudDemoPage(); + + const tasksService: Tasks = new Tasks(); + + let silentLogin; + const simpleApp = 'simple-app'; + const user = TestConfig.adf.adminEmail, password = TestConfig.adf.adminPassword; + let noOfTasks = 3, response; + let tasks = []; + + beforeAll(async (done) => { + silentLogin = false; + settingsPage.setProviderBpmSso(TestConfig.adf.hostBPM, TestConfig.adf.hostSso, TestConfig.adf.hostIdentity, silentLogin); + loginSSOPage.clickOnSSOButton(); + loginSSOPage.loginAPS(user, password); + + await tasksService.init(user, password); + for (let i = 0; i < noOfTasks; i++) { + response = await tasksService.createStandaloneTask(Util.generateRandomString(), simpleApp); + await tasksService.claimTask(response.entry.id, simpleApp); + tasks.push(response.entry.name); + } + + navigationBarPage.navigateToProcessServicesCloudPage(); + appListCloudComponent.checkApsContainer(); + appListCloudComponent.goToApp(simpleApp); + tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + tasksCloudDemoPage.clickSettingsButton().disableDisplayTaskDetails(); + tasksCloudDemoPage.clickAppButton(); + done(); + }); + + it('[C291914] Should not be able to select any row when selection mode is set to None', () => { + tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('None'); + tasksCloudDemoPage.clickAppButton(); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().selectRowByRowName(tasks[0]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkNoRowIsSelected(); + }); + + it('[C291918] Should be able to select only one row when selection mode is set to Single', () => { + tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('Single'); + tasksCloudDemoPage.clickAppButton(); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().selectRowByRowName(tasks[0]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsSelectedByName(tasks[0]); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().selectRowByRowName(tasks[1]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsSelectedByName(tasks[1]); + expect(tasksCloudDemoPage.taskListCloudComponent().getDataTable().getNumberOfSelectedRows()).toEqual(1); + }); + + it('[C291919] Should be able to select only one row when selection mode is set to Multiple', () => { + tasksCloudDemoPage.clickSettingsButton().selectSelectionMode('Multiple'); + tasksCloudDemoPage.clickAppButton(); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().selectRowByRowName(tasks[0]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsSelectedByName(tasks[0]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().selectRowByNameWithKeyboard(tasks[1]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsSelectedByName(tasks[0]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsSelectedByName(tasks[1]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsNotSelectedByName(tasks[2]); + }); + + it('[C291916] Should be able to select multiple row when multiselect is true', () => { + tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); + tasksCloudDemoPage.clickAppButton(); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().clickCheckboxByName(tasks[0]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsCheckedByName(tasks[0]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().clickCheckboxByName(tasks[1]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsCheckedByName(tasks[1]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsNotCheckedByName(tasks[2]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().clickCheckboxByName(tasks[1]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsNotCheckedByName(tasks[1]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsCheckedByName(tasks[0]); + }); + + it('[C291915] Should be possible select all the rows when multiselect is true', () => { + tasksCloudDemoPage.clickSettingsButton().enableMultiSelection(); + tasksCloudDemoPage.clickAppButton(); + + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkAllRowsButtonIsDisplayed().checkAllRows(); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsCheckedByName(tasks[0]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().clickCheckboxByName(tasks[1]); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkRowIsCheckedByName(tasks[2]); + }); + + }); + +}); diff --git a/e2e/process-services-cloud/taskListCloud.config.ts b/e2e/process-services-cloud/taskListCloud.config.ts new file mode 100644 index 0000000000..3df314de53 --- /dev/null +++ b/e2e/process-services-cloud/taskListCloud.config.ts @@ -0,0 +1,84 @@ +/*! + * @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. + */ + +export class TaskListCloudConfiguration { + + constructor() { + } + + getConfiguration() { + return { + 'presets': { + 'default': [ + { + 'key': 'entry.id', + 'type': 'text', + 'title': 'ADF_CLOUD_TASK_LIST.PROPERTIES.ID', + 'sortable': true + }, + { + 'key': 'entry.name', + 'type': 'text', + 'title': 'ADF_CLOUD_TASK_LIST.PROPERTIES.NAME', + 'sortable': true, + 'cssClass': 'full-width name-column ellipsis-cell' + }, + { + 'key': 'entry.processDefinitionId', + 'type': 'text', + 'title': 'ADF_CLOUD_EDIT_TASK_FILTER.LABEL.PROCESS_DEF_ID', + 'sortable': true, + 'cssClass': 'full-width name-column ellipsis-cell' + }, + { + 'key': 'entry.processInstanceId', + 'type': 'text', + 'title': 'ADF_CLOUD_EDIT_TASK_FILTER.LABEL.PROCESS_INSTANCE_ID', + 'sortable': true, + 'cssClass': 'full-width name-column ellipsis-cell' + }, + { + 'key': 'entry.status', + 'type': 'text', + 'title': 'ADF_CLOUD_TASK_LIST.PROPERTIES.STATUS', + 'sortable': true + }, + { + 'key': 'entry.priority', + 'type': 'text', + 'title': 'ADF_CLOUD_TASK_LIST.PROPERTIES.PRIORITY', + 'sortable': true + }, + { + 'key': 'entry.createdDate', + 'type': 'date', + 'title': 'ADF_CLOUD_TASK_LIST.PROPERTIES.CREATED_DATE', + 'sortable': true, + 'format': 'timeAgo' + }, + { + 'key': 'entry.lastModified', + 'type': 'date', + 'title': 'ADF_CLOUD_TASK_LIST.PROPERTIES.LAST_MODIFIED', + 'sortable': true, + 'format': 'timeAgo' + } + ] + } + }; + } +} diff --git a/e2e/process-services-cloud/tasks-custom-filters.e2e.ts b/e2e/process-services-cloud/tasks-custom-filters.e2e.ts index 4cc97626b0..acd543d49e 100644 --- a/e2e/process-services-cloud/tasks-custom-filters.e2e.ts +++ b/e2e/process-services-cloud/tasks-custom-filters.e2e.ts @@ -16,16 +16,13 @@ */ import TestConfig = require('../test.config'); -import resources = require('../util/resources'); import { LoginSSOPage } from '../pages/adf/loginSSOPage'; import { SettingsPage } from '../pages/adf/settingsPage'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; -import { TasksListPage } from '../pages/adf/process_services/tasksListPage'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; import { AppListCloudComponent } from '../pages/adf/process-cloud/appListCloudComponent'; -import AlfrescoApi = require('alfresco-js-api-node'); import { Tasks } from '../actions/APS-cloud/tasks'; import { ProcessDefinitions } from '../actions/APS-cloud/process-definitions'; import { ProcessInstances } from '../actions/APS-cloud/process-instances'; @@ -69,8 +66,8 @@ describe('Task filters cloud', () => { completedTask = await tasksService.createAndCompleteTask(completedTaskName, simpleApp); deletedTask = await tasksService.createStandaloneTask(deletedTaskName, simpleApp); await tasksService.deleteTask(deletedTask.entry.id, simpleApp); - for ( let i = 0; i < nrOfTasks; i++ ) { - await tasksService.createStandaloneTask(orderByNameAndPriority[i], simpleApp, {priority: priority}); + for (let i = 0; i < nrOfTasks; i++) { + await tasksService.createStandaloneTask(orderByNameAndPriority[i], simpleApp, { priority: priority }); priority = priority + 20; } @@ -115,19 +112,36 @@ describe('Task filters cloud', () => { it('[C290139] Should display only tasks with all states when All is selected from state dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignment() .setStateFilterDropDown('ALL'); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(deletedTaskName); tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(assignedTaskName); tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(createdTaskName); tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(completedTaskName); }); + it('[C290154] Should display only tasks with suspended states when Suspended is selected from state dropdown', () => { + tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignment() + .setStateFilterDropDown('SUSPENDED'); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(suspendedTasks.list.entries[0].entry.id); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(deletedTaskName); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(createdTaskName); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(completedTaskName); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(assignedTaskName); + }); + + it('[C290060] Should display only tasks with Created state when Created is selected from state dropdown', () => { + tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().clearAssignment().setStateFilterDropDown('CREATED'); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(createdTaskName); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(assignedTaskName); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(completedTaskName); + tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(deletedTaskName); + }); + it('[C290069] Should display tasks ordered by name when Name is selected from sort dropdown', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setStateFilterDropDown('ASSIGNED') .setSortFilterDropDown('NAME').setOrderFilterDropDown('ASC'); tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().getAllRowsNameColumn().then( (list) => { + tasksCloudDemoPage.taskListCloudComponent().getDataTable().getAllRowsNameColumn().then((list) => { let initialList = list.slice(0); list.sort(function (firstStr, secondStr) { return firstStr.localeCompare(secondStr); @@ -138,7 +152,7 @@ describe('Task filters cloud', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.taskListCloudComponent().getDataTable().getAllRowsNameColumn().then( (list) => { + tasksCloudDemoPage.taskListCloudComponent().getDataTable().getAllRowsNameColumn().then((list) => { let initialList = list.slice(0); list.sort(function (firstStr, secondStr) { return firstStr.localeCompare(secondStr); @@ -154,7 +168,7 @@ describe('Task filters cloud', () => { tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.getAllRowsByIdColumn().then( (list) => { + tasksCloudDemoPage.getAllRowsByIdColumn().then((list) => { let initialList = list.slice(0); list.sort(function (firstStr, secondStr) { return firstStr.localeCompare(secondStr); @@ -165,7 +179,7 @@ describe('Task filters cloud', () => { tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed(); tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed(); - tasksCloudDemoPage.getAllRowsByIdColumn().then( (list) => { + tasksCloudDemoPage.getAllRowsByIdColumn().then((list) => { let initialList = list.slice(0); list.sort(function (firstStr, secondStr) { return firstStr.localeCompare(secondStr); @@ -174,7 +188,5 @@ describe('Task filters cloud', () => { expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true); }); }); - }); - });