[ADF-3335] Task filter e2e tests (#3614)

* [ADF-3335] Automation Tests for Tasks Filter component

* [ADF-3335] Changed " for \'

* [ADF-3335] Solved style issues

* Update task_filters_component.e2e.ts

* [ADF-3335] Added missing parentheses

* [ADF-3335] Added missing bracket

* [ADF-3335] Improved data automation selectors
This commit is contained in:
davidcanonieto 2018-08-08 17:22:38 +02:00 committed by Eugenio Romano
parent 7172d5b631
commit 6cf6c9c0e4
8 changed files with 356 additions and 7 deletions

View File

@ -62,7 +62,7 @@
#taskListPagination>
</adf-pagination>
</div>
<div class="adf-grid-item adf-tasks-details" *ngIf="!isStartTaskMode()" fxFlex.gt-md="1 1 auto">
<div class="adf-grid-item adf-tasks-details" *ngIf="!isStartTaskMode()" fxFlex.gt-md="1 1 auto" data-automation-id="adf-tasks-details">
<adf-task-details #activitidetails
[debugMode]="true"
[taskId]="currentTaskId"

View File

@ -41,6 +41,9 @@ var TaskDetailsPage = function () {
var editActionInvolvedUser = by.xpath("following-sibling::div[@class='people-edit-label ng-star-inserted']");
var involvedUserPic = by.xpath("ancestor::div/ancestor::div/preceding-sibling::div//div[@class='adf-people-search-people-pic ng-star-inserted']");
var infoDrawer = element(by.css("adf-info-drawer"));
var taskDetailsSection = element(by.css("div[data-automation-id='adf-tasks-details']"));
var taskDetailsEmptySection = element(by.css("div[data-automation-id='adf-tasks-details--empty']"));
var completeTask = element(by.css("button[id='adf-no-form-complete-button']"));
var auditLogButton = element(by.css("button[adf-task-audit]"));
var noPeopleInvolved = element(by.id('no-people-label'));
@ -263,6 +266,38 @@ var TaskDetailsPage = function () {
var pic = this.getRowsUser(user).element(involvedUserPic);
Util.waitUntilElementIsVisible(pic);
return pic.getText();
}
this.checkTaskDetails = function () {
Util.waitUntilElementIsVisible(taskDetailsSection);
return taskDetailsSection.getText();
};
this.checkTaskDetailsEmpty = function () {
Util.waitUntilElementIsVisible(taskDetailsEmptySection);
return taskDetailsEmptySection.getText();
};
this.checkTaskDetailsDisplayed = function () {
Util.waitUntilElementIsVisible(taskDetailsSection);
Util.waitUntilElementIsVisible(formNameField);
Util.waitUntilElementIsVisible(assigneeField);
Util.waitUntilElementIsVisible(statusField);
Util.waitUntilElementIsVisible(categoryField);
Util.waitUntilElementIsVisible(parentNameField);
Util.waitUntilElementIsVisible(createdField);
Util.waitUntilElementIsVisible(idField);
Util.waitUntilElementIsVisible(descriptionField);
Util.waitUntilElementIsVisible(dueDateField);
Util.waitUntilElementIsVisible(dueDateField);
Util.waitUntilElementIsVisible(activitiesTitle);
return taskDetailsSection.getText();
};
this.clickCompleteTask = function () {
Util.waitUntilElementIsVisible(completeTask);
return completeTask.click();
};
};

View File

@ -0,0 +1,115 @@
/*!
* @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.
*/
var Util = require('../../../util/util');
var TaskFiltersPage = function () {
var myTasks = element(by.css("span[data-automation-id='My Tasks_filter']"));
var queuedTask = element(by.css("span[data-automation-id='Queued Tasks_filter']"));
var completedTask = element(by.css("span[data-automation-id='Completed Tasks_filter']"));
var involvedTask = element(by.css("span[data-automation-id='Involved Tasks_filter']"));
var tasksAccordionButton = element(by.css("div[data-automation-id='adf-panel-heading']"));
var tasksAccordionExpanded = element(by.xpath("mat-expansion-panel[contains(@class, 'mat-expanded')]"));
var startTaskButton = element(by.css("button[id='button-start']"));
var newTaskButton = element(by.css("button[data-automation-id='btn-start-task']"));
var activeFilter = element(by.xpath("mat-list-item[contains(@class, 'active')]"));
var emptyTaskDetails = element(by.css("adf-task-details > div > div"));
var emptyTaskList = element(by.css("p[class='adf-empty-content__title']"));
this.checkMyTasksItem = function() {
Util.waitUntilElementIsVisible(myTasks);
return myTasks;
};
this.checkQueuedTaskItem = function() {
Util.waitUntilElementIsVisible(queuedTask);
return queuedTask;
};
this.clickMyTaskTaskItem = function() {
Util.waitUntilElementIsVisible(myTasks);
return myTasks.click();
};
this.clickCompletedTaskItem = function() {
Util.waitUntilElementIsVisible(completedTask);
return completedTask.click();
};
this.checkCompletedTaskItem = function() {
Util.waitUntilElementIsVisible(completedTask);
return completedTask;
};
this.clickQueuedTaskItem = function() {
Util.waitUntilElementIsVisible(queuedTask);
return queuedTask.click();
};
this.clickInvolvedTaskItem = function() {
Util.waitUntilElementIsVisible(involvedTask);
return involvedTask.click();
};
this.checkInvolvedTaskItem = function() {
Util.waitUntilElementIsVisible(involvedTask);
return involvedTask;
};
this.clickTasksAccordionButton = function() {
Util.waitUntilElementIsVisible(tasksAccordionButton);
return tasksAccordionButton.click();
};
this.checkTasksAccordionExtended = function() {
Util.waitUntilElementIsVisible(tasksAccordionExpanded);
return tasksAccordionExpanded;
};
this.checkTasksAccordionClosed = function() {
Util.waitUntilElementIsNotVisible(tasksAccordionExpanded);
return tasksAccordionExpanded;
};
this.clickStartTaskButton = function() {
Util.waitUntilElementIsVisible(startTaskButton);
startTaskButton.click();
};
this.clickNewTaskButton = function() {
Util.waitUntilElementIsVisible(newTaskButton);
newTaskButton.click();
};
this.checkActiveFilterActive = function() {
Util.waitUntilElementIsVisible(activeFilter);
return activeFilter.getText();
}
this.checkEmptyTaskList = function() {
Util.waitUntilElementIsVisible(emptyTaskList);
return emptyTaskList.getText();
};
this.checkEmptyTaskDetails = function() {
Util.waitUntilElementIsVisible(emptyTaskDetails);
return emptyTaskDetails.getText();
}
};
module.exports = TaskFiltersPage;

View File

@ -21,8 +21,21 @@ var TasksListPage = function () {
var taskList = element(by.css("adf-tasklist"));
var tableBody = element.all(by.css("adf-datatable div[class='adf-datatable-body']")).first();
var sortByName = element(by.css('div[data-automation-id="auto_id_name"]'));
var firstTaskOnTaskList = element.all(by.css('div[class="adf-datatable-body"] span')).first();
var spinner = element(by.css('mat-progress-spinner'));
this.clickSortByName = function () {
Util.waitUntilElementIsVisible(sortByName);
return sortByName.click();
};
this.checkHighlightedTaskInTasksList = function(taskName) {
var row = by.cssContainingText('div[class="adf-datatable-row is-selected ng-star-inserted"] span', taskName);
Util.waitUntilElementIsVisible(taskList.element(row));
return this;
};
this.checkTaskIsDisplayedInTasksList = function(taskName) {
var row = by.cssContainingText("span", taskName);
Util.waitUntilElementIsVisible(taskList.element(row));
@ -51,12 +64,14 @@ var TasksListPage = function () {
Util.waitUntilElementIsVisible(tableBody);
};
this.firstTaskOnTaskList = function (){
Util.waitUntilElementIsVisible(firstTaskOnTaskList);
return firstTaskOnTaskList.getText();
};
this.checkSpinnerIsDisplayed = function () {
Util.waitUntilElementIsPresent(spinner);
};
};
module.exports = TasksListPage;

View File

@ -25,7 +25,7 @@ var TasksListPage = require('./tasksListPage');
var TasksPage = function () {
var createButton = element(by.css("button[data-automation-id='create-button']"));
var createButton = element(by.css("button[data-automation-id='create-button'"));
var newTaskButton = element(by.css("button[data-automation-id='btn-start-task']"));
var addChecklistButton = element(by.css("button[class*='adf-add-to-checklist-button']"));
var rowByRowName = by.xpath("ancestor::mat-chip");
@ -45,6 +45,12 @@ var TasksPage = function () {
return new StartTaskDialog();
};
this.clickOnNewTaskButton = function() {
Util.waitUntilElementIsClickable(newTaskButton);
newTaskButton.click();
return this;
};
this.createButtonIsDisplayed = function() {
Util.waitUntilElementIsVisible(createButton);
return this;

View File

@ -0,0 +1,178 @@
/*!
* @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 LoginPage = require('./pages/adf/loginPage');
import NavigationBarPage = require('./pages/adf/navigationBarPage');
import ProcessServicesPage = require('./pages/adf/process_services/processServicesPage');
import TasksPage = require('./pages/adf/process_services/tasksPage');
import TasksListPage = require('./pages/adf/process_services/tasksListPage');
import TaskFiltersPage = require('./pages/adf/process_services/taskFiltersPage');
import TaskDetailsPage = require('./pages/adf/process_services/taskDetailsPage');
import AlfrescoApi = require('alfresco-js-api-node');
import { AppsActions } from './actions/APS/apps.actions';
import { UsersActions } from './actions/users.actions';
describe('Task Filters Test', () => {
let loginPage = new LoginPage();
let navigationBarPage = new NavigationBarPage();
let processServicesPage = new ProcessServicesPage();
let tasksPage = new TasksPage();
let tasksListPage = new TasksListPage();
let taskFiltersPage = new TaskFiltersPage();
let taskDetailsPage = new TaskDetailsPage();
let app = resources.Files.APP_WITH_DATE_FIELD_FORM;
beforeAll(async (done) => {
let apps = new AppsActions();
let users = new UsersActions();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'BPM',
hostBpm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
let user = await users.createTenantAndUser(this.alfrescoJsApi);
await this.alfrescoJsApi.login(user.email, user.password);
await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location);
await loginPage.loginToProcessServicesUsingUserModel(user);
done();
});
beforeEach(async (done) => {
navigationBarPage.clickProcessServicesButton();
processServicesPage.checkApsContainer();
processServicesPage.goToApp(app.title);
done();
});
it('[C260330] Should display task list when app is in task section', () => {
tasksPage.clickOnCreateButton();
taskFiltersPage.clickNewTaskButton();
tasksPage.createNewTask().addName('Test').clickStartButton();
taskFiltersPage.clickMyTaskTaskItem();
tasksListPage.checkTaskIsDisplayedInTasksList('Test');
expect(taskFiltersPage.checkActiveFilterActive()).toBe('My Tasks');
expect(taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined();
taskFiltersPage.clickQueuedTaskItem();
expect(taskFiltersPage.checkActiveFilterActive()).toBe('Queued Tasks');
tasksListPage.checkTaskIsNotDisplayedInTasksList('Test');
expect(taskDetailsPage.checkTaskDetailsEmpty()).toBeDefined();
taskFiltersPage.clickInvolvedTaskItem();
expect(taskFiltersPage.checkActiveFilterActive()).toBe('Involved Tasks');
tasksListPage.checkTaskIsDisplayedInTasksList('Test');
expect( taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined();
taskFiltersPage.clickCompletedTaskItem();
expect(taskFiltersPage.checkActiveFilterActive()).toBe('Completed Tasks');
tasksListPage.checkTaskIsNotDisplayedInTasksList('Test');
expect(taskDetailsPage.checkTaskDetailsEmpty()).toBeDefined();
});
it('[C260348] Should display task list when app is in task section', () => {
expect(taskFiltersPage.checkMyTasksItem()).toBeDefined();
expect(taskFiltersPage.checkQueuedTaskItem()).toBeDefined();
expect(taskFiltersPage.checkInvolvedTaskItem()).toBeDefined();
expect(taskFiltersPage.checkCompletedTaskItem()).toBeDefined();
expect(taskFiltersPage.checkTasksAccordionExtended()).toBeDefined();
taskFiltersPage.clickTasksAccordionButton();
expect(taskFiltersPage.checkTasksAccordionClosed()).toBeDefined();
taskFiltersPage.clickTasksAccordionButton();
expect(taskFiltersPage.checkMyTasksItem()).toBeDefined();
expect(taskFiltersPage.checkQueuedTaskItem()).toBeDefined();
expect(taskFiltersPage.checkInvolvedTaskItem()).toBeDefined();
expect(taskFiltersPage.checkCompletedTaskItem()).toBeDefined();
tasksPage.clickOnCreateButton();
taskFiltersPage.clickNewTaskButton();
tasksPage.createNewTask().addName('Test').clickStartButton();
taskFiltersPage.clickMyTaskTaskItem();
tasksListPage.checkTaskIsDisplayedInTasksList('Test');
expect(taskFiltersPage.checkActiveFilterActive()).toBe('My Tasks');
expect(taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined();
taskFiltersPage.clickQueuedTaskItem();
expect(taskFiltersPage.checkActiveFilterActive()).toBe('Queued Tasks');
expect(taskFiltersPage.checkEmptyTaskList()).toBe('No Tasks Found');
expect(taskFiltersPage.checkEmptyTaskDetails()).toBe('No task details found');
taskFiltersPage.clickInvolvedTaskItem();
expect(taskFiltersPage.checkActiveFilterActive()).toBe('Involved Tasks');
tasksListPage.checkTaskIsDisplayedInTasksList('Test');
expect(taskDetailsPage.checkTaskDetailsDisplayed()).toBeDefined();
taskFiltersPage.clickCompletedTaskItem();
expect(taskFiltersPage.checkActiveFilterActive()).toBe('Completed Tasks');
expect(taskFiltersPage.checkEmptyTaskList()).toBe('No Tasks Found');
expect(taskFiltersPage.checkEmptyTaskDetails()).toBe('No task details found');
});
it('[C260349] Should display task list when app is in task section', () => {
tasksPage.clickOnCreateButton();
taskFiltersPage.clickNewTaskButton();
tasksPage.createNewTask().addName('Test1').clickStartButton();
taskDetailsPage.clickCompleteTask();
tasksPage.clickOnCreateButton();
taskFiltersPage.clickNewTaskButton();
tasksPage.createNewTask().addName('Test2').clickStartButton();
taskDetailsPage.clickCompleteTask();
tasksPage.clickOnCreateButton();
taskFiltersPage.clickNewTaskButton();
tasksPage.createNewTask().addName('Test3').clickStartButton();
tasksPage.clickOnCreateButton();
taskFiltersPage.clickNewTaskButton();
tasksPage.createNewTask().addName('Test4').clickStartButton();
tasksListPage.checkTaskIsDisplayedInTasksList('Test4');
tasksListPage.checkHighlightedTaskInTasksList('Test4');
tasksListPage.checkTaskIsDisplayedInTasksList('Test3');
taskDetailsPage.checkTaskDetailsDisplayed();
tasksListPage.clickSortByName();
expect(tasksListPage.firstTaskOnTaskList()).toBe('Test3');
tasksListPage.clickSortByName();
expect(tasksListPage.firstTaskOnTaskList()).toBe('Test4');
taskFiltersPage.clickCompletedTaskItem();
tasksListPage.checkTaskIsDisplayedInTasksList('Test1');
tasksListPage.checkTaskIsDisplayedInTasksList('Test2');
expect(tasksListPage.firstTaskOnTaskList()).toBe('Test2');
tasksListPage.clickSortByName();
expect(tasksListPage.firstTaskOnTaskList()).toBe('Test1');
taskFiltersPage.clickInvolvedTaskItem();
tasksListPage.checkTaskIsDisplayedInTasksList('Test3');
tasksListPage.checkTaskIsDisplayedInTasksList('Test4');
});
});

View File

@ -7,7 +7,7 @@
[hideToggle]="!hasAccordionIcon">
<mat-expansion-panel-header>
<mat-panel-title>
<div class="adf-panel-heading" [ngClass]="{'adf-panel-heading-selected': isSelected}">
<div class="adf-panel-heading" data-automation-id="adf-panel-heading" [ngClass]="{'adf-panel-heading-selected': isSelected}">
<div id="heading-icon" *ngIf="hasHeadingIcon()" class="adf-panel-heading-icon">
<mat-icon class="material-icons"
[matTooltip]="headingIconTooltip"

View File

@ -1,4 +1,4 @@
<div *ngIf="!taskDetails">
<div *ngIf="!taskDetails" data-automation-id="adf-tasks-details--empty">
<ng-template *ngIf="noTaskDetailsTemplateComponent" ngFor [ngForOf]="[data]"
[ngForTemplate]="noTaskDetailsTemplateComponent">
{{ 'ADF_TASK_LIST.DETAILS.MESSAGES.NONE' | translate }}