[ADF-3780]Implement task list cloud component tests (#4111)

This commit is contained in:
cristinaj
2019-01-14 10:53:44 +02:00
committed by Eugenio Romano
parent c17241fedc
commit aa6ba28427
9 changed files with 315 additions and 17 deletions

View File

@@ -28,13 +28,14 @@ export class Tasks {
await this.api.login(username, password);
}
async createStandaloneTask(taskName, appName) {
async createStandaloneTask(taskName, appName, options?) {
const path = '/' + appName + '-rb/v1/tasks';
const method = 'POST';
const queryParams = {}, postBody = {
'name': taskName,
'payloadType': 'CreateTaskPayload'
'payloadType': 'CreateTaskPayload',
...options
};
const data = await this.api.performBpmOperation(path, method, queryParams, postBody);
@@ -61,4 +62,21 @@ export class Tasks {
return data;
}
async deleteTask(taskId, appName) {
const path = '/' + appName + '-rb/v1/tasks/' + taskId;
const method = 'DELETE';
const queryParams = {}, postBody = {};
const data = await this.api.performBpmOperation(path, method, queryParams, postBody);
return data;
}
async createAndCompleteTask (taskName, appName) {
let task = await this.createStandaloneTask(taskName, appName);
await this.claimTask(task.entry.id, appName);
await this.completeTask(task.entry.id, appName);
return task;
}
}

View File

@@ -35,11 +35,9 @@ export class DataTablePage {
reset = element(by.xpath(`//span[contains(text(),'Reset to default')]/..`));
replaceColumnsElement = element(by.xpath(`//span[contains(text(),'Replace columns')]/..`));
createdOnColumn = element(by.css(`div[data-automation-id='auto_id_createdOn']`));
pageLoaded = element(by.css(`div[data-automation-id='auto_id_id']`));
tableBody = element.all(by.css(`div[class='adf-datatable-body']`)).first();
spinner = element(by.css('mat-progress-spinner'));
rows = by.css(`adf-datatable div[class*='adf-datatable-body'] div[class*='adf-datatable-row']`);
nameColumn = by.css(`adf-datatable div[class*='adf-datatable-body'] div[class*='adf-datatable-row'] div[title='Name'] span`);
constructor(rootElement: ElementFinder = element(by.css('adf-datatable'))) {
this.rootElement = rootElement;
@@ -55,7 +53,7 @@ export class DataTablePage {
}
async getAllRowsColumnValues(locator) {
let columnLocator = by.css("adf-datatable div[class*='adf-datatable-body'] div[class*='adf-datatable-row'] div[title='" + column + "'] span");
let columnLocator = by.css("adf-datatable div[class*='adf-datatable-body'] div[class*='adf-datatable-row'] div[title='" + locator + "'] span");
Util.waitUntilElementIsVisible(element.all(columnLocator).first());
let initialList = await element.all(columnLocator).getText();
return initialList.filter((el) => el);
@@ -243,6 +241,10 @@ export class DataTablePage {
Util.waitUntilElementIsPresent(this.spinner);
}
checkSpinnerIsNotDisplayed() {
Util.waitUntilElementIsNotOnPage(this.spinner);
}
checkRowIsDisplayedByName(filename) {
Util.waitUntilElementIsVisible(element.all(by.css(`div[filename="${filename}"]`)).first());
}

View File

@@ -65,7 +65,7 @@ export class ProcessCloudDemoPage {
return new ProcessFiltersCloudComponent(element(by.css(`span[data-automation-id="${filterName}_filter"]`)));
}
checkActiveFilterActive() {
getActiveFilterName() {
Util.waitUntilElementIsVisible(this.activeFilter);
return this.activeFilter.getText();
}

View File

@@ -19,6 +19,7 @@ import { Util } from '../../../util/util';
import { TaskFiltersCloudComponent } from '../process-cloud/taskFiltersCloudComponent';
import { TaskListCloudComponent } from '../process-cloud/taskListCloudComponent';
import { EditTaskFilterCloudComponent } from '../process-cloud/editTaskFilterCloudComponent';
import { element, by } from 'protractor';
export class TasksCloudDemoPage {
@@ -26,6 +27,9 @@ export class TasksCloudDemoPage {
myTasks = element(by.css('span[data-automation-id="my-tasks-filter"]'));
completedTasks = element(by.css('span[data-automation-id="completed-tasks-filter"]'));
activeFilter = element(by.css("mat-list-item[class*='active'] span"));
taskFilters = element(by.css("mat-expansion-panel[data-automation-id='Task Filters']"));
editTaskFilterCloud = new EditTaskFilterCloudComponent();
taskFiltersCloudComponent(filter) {
return new TaskFiltersCloudComponent(filter);
@@ -35,6 +39,10 @@ export class TasksCloudDemoPage {
return new TaskListCloudComponent();
}
editTaskFilterCloudComponent() {
return this.editTaskFilterCloud;
}
myTasksFilter() {
return new TaskFiltersCloudComponent(this.myTasks);
}
@@ -47,9 +55,17 @@ export class TasksCloudDemoPage {
return new TaskFiltersCloudComponent(element(by.css(`span[data-automation-id="${filterName}_filter"]`)));
}
checkActiveFilterActive () {
getActiveFilterName() {
Util.waitUntilElementIsVisible(this.activeFilter);
return this.activeFilter.getText();
}
getAllRowsByIdColumn() {
return new TaskListCloudComponent().getAllRowsByColumn('Id');
}
clickOnTaskFilters() {
Util.waitUntilElementIsVisible(this.taskFilters);
return this.taskFilters.click();
}
}

View File

@@ -0,0 +1,81 @@
/*!
* @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 { Util } from '../../../util/util';
import { by, element, protractor } from 'protractor';
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"]'));
statusBy = by.css('mat-select[data-automation-id="adf-cloud-edit-task-property-state"]');
sortBy = by.css('mat-select[data-automation-id="adf-cloud-edit-task-property-sort"]');
orderBy = by.css('mat-select[data-automation-id="adf-cloud-edit-task-property-order"]');
clickCustomiseFilterHeader() {
Util.waitUntilElementIsVisible(this.customiseFilter);
this.customiseFilter.click();
return this;
}
setStateFilterDropDown(option) {
this.clickOnDropDownArrow(this.statusBy);
let stateElement = element.all(by.cssContainingText('mat-option span', option)).first();
Util.waitUntilElementIsClickable(stateElement);
Util.waitUntilElementIsVisible(stateElement);
stateElement.click();
return this;
}
setSortFilterDropDown(option) {
this.clickOnDropDownArrow(this.sortBy);
let sortElement = element.all(by.cssContainingText('mat-option span', option)).first();
Util.waitUntilElementIsClickable(sortElement);
Util.waitUntilElementIsVisible(sortElement);
sortElement.click();
return this;
}
setOrderFilterDropDown(option) {
this.clickOnDropDownArrow(this.orderBy);
let orderElement = element.all(by.cssContainingText('mat-option span', option)).first();
Util.waitUntilElementIsClickable(orderElement);
Util.waitUntilElementIsVisible(orderElement);
orderElement.click();
return this;
}
clickOnDropDownArrow(option) {
let dropDownArrow = element(option);
Util.waitUntilElementIsVisible(dropDownArrow);
dropDownArrow.click();
Util.waitUntilElementIsVisible(this.selectedOption);
}
setAssignment(option) {
Util.waitUntilElementIsVisible(this.assignment);
this.assignment.clear();
this.assignment.sendKeys(option);
this.assignment.sendKeys(protractor.Key.ENTER);
return this;
}
}

View File

@@ -40,4 +40,8 @@ export class TaskListCloudComponent {
return this.noTasksFound.getText();
}
getAllRowsByColumn(column) {
return this.dataTable.getAllRowsColumnValues(column);
}
}

View File

@@ -86,34 +86,34 @@ describe('Process filters cloud', () => {
it('[C290043] Should display process in Running Processes List when process is started', () => {
processCloudDemoPage.runningProcessesFilter().clickProcessFilter();
processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed();
expect(processCloudDemoPage.checkActiveFilterActive()).toBe('Running Processes');
expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes');
processCloudDemoPage.processListCloudComponent().getDataTable().checkContentIsDisplayed(runningProcess.entry.id);
processCloudDemoPage.completedProcessesFilter().clickProcessFilter();
processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed();
expect(processCloudDemoPage.checkActiveFilterActive()).toBe('Completed Processes');
expect(processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes');
processCloudDemoPage.processListCloudComponent().getDataTable().checkContentIsNotDisplayed(runningProcess.entry.id);
processCloudDemoPage.allProcessesFilter().clickProcessFilter();
processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed();
expect(processCloudDemoPage.checkActiveFilterActive()).toBe('All Processes');
expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes');
processCloudDemoPage.processListCloudComponent().getDataTable().checkContentIsDisplayed(runningProcess.entry.id);
});
it('[C290044] Should display process in Completed Processes List when process is completed', () => {
processCloudDemoPage.runningProcessesFilter().clickProcessFilter();
processCloudDemoPage.runningProcessesFilter().checkProcessFilterIsDisplayed();
expect(processCloudDemoPage.checkActiveFilterActive()).toBe('Running Processes');
expect(processCloudDemoPage.getActiveFilterName()).toBe('Running Processes');
processCloudDemoPage.processListCloudComponent().getDataTable().checkContentIsNotDisplayed(completedProcess.entry.id);
processCloudDemoPage.completedProcessesFilter().clickProcessFilter();
processCloudDemoPage.completedProcessesFilter().checkProcessFilterIsDisplayed();
expect(processCloudDemoPage.checkActiveFilterActive()).toBe('Completed Processes');
expect(processCloudDemoPage.getActiveFilterName()).toBe('Completed Processes');
processCloudDemoPage.processListCloudComponent().getDataTable().checkContentIsDisplayed(completedProcess.entry.id);
processCloudDemoPage.allProcessesFilter().clickProcessFilter();
processCloudDemoPage.allProcessesFilter().checkProcessFilterIsDisplayed();
expect(processCloudDemoPage.checkActiveFilterActive()).toBe('All Processes');
expect(processCloudDemoPage.getActiveFilterName()).toBe('All Processes');
processCloudDemoPage.processListCloudComponent().getDataTable().checkContentIsDisplayed(completedProcess.entry.id);
});
});

View File

@@ -64,11 +64,11 @@ describe('Task filters cloud', () => {
await tasksService.claimTask(task.entry.id, simpleApp);
tasksCloudDemoPage.completedTasksFilter().clickTaskFilter();
expect(tasksCloudDemoPage.checkActiveFilterActive()).toBe('Completed Tasks');
expect(tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks');
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(newTask);
tasksCloudDemoPage.myTasksFilter().clickTaskFilter();
expect(tasksCloudDemoPage.checkActiveFilterActive()).toBe('My Tasks');
expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks');
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(newTask);
});
@@ -81,11 +81,11 @@ describe('Task filters cloud', () => {
await tasksService.completeTask(task.entry.id, simpleApp);
tasksCloudDemoPage.myTasksFilter().clickTaskFilter();
expect(tasksCloudDemoPage.checkActiveFilterActive()).toBe('My Tasks');
expect(tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks');
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(completedTask);
tasksCloudDemoPage.completedTasksFilter().clickTaskFilter();
expect(tasksCloudDemoPage.checkActiveFilterActive()).toBe('Completed Tasks');
expect(tasksCloudDemoPage.getActiveFilterName()).toBe('Completed Tasks');
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(completedTask);
});

View File

@@ -0,0 +1,177 @@
/*!
* @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 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 = require('../pages/adf/process_services/tasksListPage');
import { TasksCloudDemoPage } from '../pages/adf/demo-shell/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';
import { Query } from '../actions/APS-cloud/query';
import { Util } from '../util/util';
describe('Task filters cloud', () => {
describe('Filters', () => {
const settingsPage = new SettingsPage();
const loginSSOPage = new LoginSSOPage();
const navigationBarPage = new NavigationBarPage();
const appListCloudComponent = new AppListCloudComponent();
const tasksCloudDemoPage = new TasksCloudDemoPage();
const tasksService: Tasks = new Tasks();
const processDefinitionService: ProcessDefinitions = new ProcessDefinitions();
const processInstancesService: ProcessInstances = new ProcessInstances();
const queryService: Query = new Query();
let silentLogin;
const createdTaskName = Util.generateRandomString(), completedTaskName = Util.generateRandomString(),
assignedTaskName = Util.generateRandomString(), deletedTaskName = Util.generateRandomString();
const simpleApp = 'simple-app';
const user = TestConfig.adf.adminEmail, password = TestConfig.adf.adminPassword;
let createdTask, assignedTask, completedTask, deletedTask;
let orderByNameAndPriority = ['cCreatedTask', 'dCreatedTask', 'eCreatedTask'];
let suspendedTasks, cancelledTasks;
let priority = 30, nrOfTasks = 3;
beforeAll(async () => {
silentLogin = false;
settingsPage.setProviderBpmSso(TestConfig.adf.hostBPM, TestConfig.adf.hostSso, silentLogin);
loginSSOPage.clickOnSSOButton();
loginSSOPage.loginAPS(user, password);
await tasksService.init(user, password);
createdTask = await tasksService.createStandaloneTask(createdTaskName, simpleApp);
assignedTask = await tasksService.createStandaloneTask(assignedTaskName, simpleApp);
await tasksService.claimTask(assignedTask.entry.id, simpleApp);
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});
priority = priority + 20;
}
await processDefinitionService.init(user, password);
let processDefinition = await processDefinitionService.getProcessDefinitions(simpleApp);
await processInstancesService.init(user, password);
let processInstance = await processInstancesService.createProcessInstance(processDefinition.list.entries[0].entry.key, simpleApp);
let secondProcessInstance = await processInstancesService.createProcessInstance(processDefinition.list.entries[0].entry.key, simpleApp);
await queryService.init(user, password);
suspendedTasks = await queryService.getProcessInstanceTasks(processInstance.entry.id, simpleApp);
cancelledTasks = await queryService.getProcessInstanceTasks(secondProcessInstance.entry.id, simpleApp);
await processInstancesService.suspendProcessInstance(processInstance.entry.id, simpleApp);
await processInstancesService.deleteProcessInstance(secondProcessInstance.entry.id, simpleApp);
await queryService.getProcessInstanceTasks(processInstance.entry.id, simpleApp);
});
beforeEach(async (done) => {
await navigationBarPage.navigateToProcessServicesCloudPage();
appListCloudComponent.checkApsContainer();
await appListCloudComponent.goToApp(simpleApp);
done();
});
it('[C290045] Should display only tasks with Assigned state when Assigned is selected from state dropdown', () => {
tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setStateFilterDropDown('ASSIGNED');
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(assignedTaskName);
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(createdTaskName);
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(completedTaskName);
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(deletedTaskName);
});
it('[C290061] Should display only tasks with Completed state when Completed is selected from state dropdown', () => {
tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setStateFilterDropDown('COMPLETED');
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(completedTaskName);
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(assignedTaskName);
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(createdTaskName);
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsNotDisplayed(deletedTaskName);
});
it('[C290139] Should display only tasks with all states when All is selected from state dropdown', () => {
tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setAssignment(' ')
.setStateFilterDropDown('ALL');
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(deletedTaskName);
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(assignedTaskName);
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(createdTaskName);
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkContentIsDisplayed(completedTaskName);
});
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) => {
let initialList = list.slice(0);
list.sort();
expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true);
});
tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC');
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed();
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed();
tasksCloudDemoPage.taskListCloudComponent().getDataTable().getAllRowsNameColumn().then( (list) => {
let initialList = list.slice(0);
list.sort();
list.reverse();
expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true);
});
});
it('[C290156] Should display tasks ordered by id when Id is selected from sort dropdown', () => {
tasksCloudDemoPage.editTaskFilterCloudComponent().clickCustomiseFilterHeader().setStateFilterDropDown('ASSIGNED')
.setSortFilterDropDown('ID').setOrderFilterDropDown('ASC');
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed();
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed();
tasksCloudDemoPage.getAllRowsByIdColumn().then( (list) => {
let initialList = list.slice(0);
list.sort(function (firstStr, secondStr) {
return firstStr.localeCompare(secondStr);
});
expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true);
});
tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC');
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsDisplayed();
tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkSpinnerIsNotDisplayed();
tasksCloudDemoPage.getAllRowsByIdColumn().then( (list) => {
let initialList = list.slice(0);
list.sort(function (firstStr, secondStr) {
return firstStr.localeCompare(secondStr);
});
list.reverse();
expect(JSON.stringify(initialList) === JSON.stringify(list)).toEqual(true);
});
});
});
});