From 6db04f18879077343022a40600693925359888b0 Mon Sep 17 00:00:00 2001 From: Eugenio Romano Date: Thu, 5 Mar 2020 17:37:34 +0000 Subject: [PATCH] AAE-1951 - added extra test cases for start task and assignee (#5534) * AAE-1951 - added extra test cases for start task and assignee * AAE-1951 - fixed license --- .../process-services/tasks-cloud-demo.page.ts | 8 +++ .../task-header-cloud.e2e.ts | 58 ++++++++++++++++++- .../card-view/card-view-text-item.page.ts | 18 +++++- .../pages/people-cloud-component.page.ts | 16 +++++ .../pages/start-tasks-cloud-component.page.ts | 6 ++ .../pages/task-header-cloud-component.page.ts | 1 - 6 files changed, 104 insertions(+), 3 deletions(-) diff --git a/e2e/pages/adf/demo-shell/process-services/tasks-cloud-demo.page.ts b/e2e/pages/adf/demo-shell/process-services/tasks-cloud-demo.page.ts index e06b48e0f4..5508a49282 100644 --- a/e2e/pages/adf/demo-shell/process-services/tasks-cloud-demo.page.ts +++ b/e2e/pages/adf/demo-shell/process-services/tasks-cloud-demo.page.ts @@ -160,4 +160,12 @@ export class TasksCloudDemoPage { await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText(`span`, 'Task ID: ' + taskId))); await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText(`span`, 'Action Type: ' + action))); } + + async clickStartNewTaskButton() { + await BrowserVisibility.waitUntilElementIsClickable(this.createButton); + await BrowserActions.click(this.createButton); + await BrowserVisibility.waitUntilElementIsClickable(this.newTaskButton); + await BrowserActions.click(this.newTaskButton); + } + } diff --git a/e2e/process-services-cloud/task-header-cloud.e2e.ts b/e2e/process-services-cloud/task-header-cloud.e2e.ts index 3277f008fa..370c902f5f 100644 --- a/e2e/process-services-cloud/task-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/task-header-cloud.e2e.ts @@ -25,7 +25,9 @@ import { LoginSSOPage, StringUtil, TaskHeaderCloudPage, - TasksService + TasksService, + StartTasksCloudPage, + PeopleCloudComponentPage } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasks-cloud-demo.page'; @@ -35,6 +37,7 @@ import moment = require('moment'); describe('Task Header cloud component', () => { const basicCreatedTaskName = StringUtil.generateRandomString(); const completedTaskName = StringUtil.generateRandomString(); + const unclaimedTaskName = StringUtil.generateRandomString(); let basicCreatedTask: any; let basicCreatedDate: any; let completedTask: any; @@ -46,6 +49,7 @@ describe('Task Header cloud component', () => { let defaultDate: string; let groupInfo: any; let testUser: any; + let unclaimedTask: any; const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; const priority = 30; const description = 'descriptionTask'; @@ -59,6 +63,8 @@ describe('Task Header cloud component', () => { const navigationBarPage = new NavigationBarPage(); const appListCloudComponent = new AppListCloudPage(); const tasksCloudDemoPage = new TasksCloudDemoPage(); + const startTaskCloudPage = new StartTasksCloudPage(); + const peopleCloudComponentPage = new PeopleCloudComponentPage(); const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); let tasksService: TasksService; let identityService: IdentityService; @@ -78,6 +84,7 @@ describe('Task Header cloud component', () => { tasksService = new TasksService(apiService); const createdTaskId = await tasksService.createStandaloneTask(basicCreatedTaskName, simpleApp); + unclaimedTask = await tasksService.createStandaloneTask(unclaimedTaskName, simpleApp); await tasksService.claimTask(createdTaskId.entry.id, simpleApp); @@ -173,6 +180,55 @@ describe('Task Header cloud component', () => { .toEqual(subTask.entry.parentTaskId === null ? '' : subTask.entry.parentTaskId); }); + it('[C309698] - Should validate the Priority field', async () => { + const myTaskName = `Test_C309698_${StringUtil.generateRandomString()}`; + await tasksCloudDemoPage.clickStartNewTaskButton(); + await startTaskCloudPage.addName(myTaskName); + await startTaskCloudPage.typePriorityOf('50'); + await startTaskCloudPage.clickStartButton(); + await tasksCloudDemoPage.taskFilterCloudComponent.clickMyTasksFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(myTaskName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(myTaskName); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await taskHeaderCloudPage.priorityCardTextItem.clickOnEditButton(); + await taskHeaderCloudPage.priorityCardTextItem.enterTextField('$$%£W21'); + await taskHeaderCloudPage.priorityCardTextItem.clickOnSaveButton(); + const errorMessage = await taskHeaderCloudPage.priorityCardTextItem.getErrorMessage(); + await expect(errorMessage).toBe('Enter a different value'); + + await taskHeaderCloudPage.priorityCardTextItem.enterTextField('600'); + await taskHeaderCloudPage.priorityCardTextItem.clickOnSaveButton(); + const currentValue = await taskHeaderCloudPage.priorityCardTextItem.getFieldValue(); + await expect(currentValue).toBe('600'); + }); + + it('[C309698] - Should validate the Priority field', async () => { + await tasksCloudDemoPage.editTaskFilterCloud.openFilter(); + await tasksCloudDemoPage.editTaskFilterCloud.setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloud.clearAssignee(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(unclaimedTask.entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(unclaimedTask.entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + const currentAssignee = await taskHeaderCloudPage.assigneeCardTextItem.getFieldValue(); + await expect(currentAssignee).toBe('No assignee'); + await taskHeaderCloudPage.priorityCardTextItem.checkElementIsReadonly(); + await taskHeaderCloudPage.statusCardTextItem.checkElementIsReadonly(); + }); + + it('[C291991] - Should be able to assign a task only to the users that have access to the selected app', async () => { + await tasksCloudDemoPage.clickStartNewTaskButton(); + const currentAssignee = await peopleCloudComponentPage.getChipAssignee(); + await expect(currentAssignee).toContain(testUser.firstName, 'Invalid Assignee first name set for the new task'); + await expect(currentAssignee).toContain(testUser.lastName, 'Invalid Assignee last name set for the new task'); + await peopleCloudComponentPage.searchAssignee('hrUser'); + await peopleCloudComponentPage.checkUserIsDisplayed('HR User'); + await peopleCloudComponentPage.searchAssignee('processAdmin'); + await peopleCloudComponentPage.checkUserIsDisplayed('Process Admin User'); + await peopleCloudComponentPage.searchAssignee('modeler'); + await peopleCloudComponentPage.checkOptionIsNotDisplayed(); + }); + describe('Default Date format', () => { beforeEach(async () => { await LocalStorageUtil.setConfigField('dateValues', '{' + diff --git a/lib/testing/src/lib/core/pages/card-view/card-view-text-item.page.ts b/lib/testing/src/lib/core/pages/card-view/card-view-text-item.page.ts index 126539854f..18e6b0eadd 100644 --- a/lib/testing/src/lib/core/pages/card-view/card-view-text-item.page.ts +++ b/lib/testing/src/lib/core/pages/card-view/card-view-text-item.page.ts @@ -17,7 +17,6 @@ import { element, by, ElementFinder, Locator } from 'protractor'; import { BrowserActions, BrowserVisibility } from '../../utils/public-api'; - export class CardTextItemPage { rootElement: ElementFinder; @@ -27,6 +26,9 @@ export class CardTextItemPage { field: Locator = by.css('span[data-automation-id*="card-textitem-value"] span'); labelLocator: Locator = by.css('div[data-automation-id*="card-textitem-label"]'); toggle: Locator = by.css('div[data-automation-id*="card-textitem-toggle"]'); + editButton: Locator = by.css('button.adf-textitem-action[title*=Edit]'); + errorMessage: Locator = by.css('.adf-textitem-editable-error'); + clickableElement: Locator = by.css('.adf-textitem-clickable'); constructor(label: string = 'assignee') { this.rootElement = element(by.xpath(`//div[contains(@data-automation-id, "label-${label}")]/ancestor::adf-card-view-textitem`)); @@ -59,4 +61,18 @@ export class CardTextItemPage { async clickOnClearButton(): Promise { await BrowserActions.click(this.rootElement.element(this.clearButton)); } + + async clickOnEditButton(): Promise { + await BrowserActions.click(this.rootElement.element(this.editButton)); + } + + async getErrorMessage(): Promise { + const errorField = this.rootElement.element(this.errorMessage); + return BrowserActions.getText(errorField); + } + + async checkElementIsReadonly(): Promise { + await BrowserVisibility.waitUntilElementIsNotVisible(this.rootElement.element(this.clickableElement)); + await BrowserVisibility.waitUntilElementIsNotVisible(this.rootElement.element(this.editButton)); + } } diff --git a/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts index 505e5b5c01..ce4b8eda52 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/people-cloud-component.page.ts @@ -27,6 +27,7 @@ export class PeopleCloudComponentPage { formFields: FormFields = new FormFields(); labelLocator: Locator = by.css("label[class*='adf-label']"); inputLocator: Locator = by.css('input'); + assigneeChipList: ElementFinder = element(by.css('mat-chip-list[data-automation-id="adf-cloud-people-chip-list"]')); async clearAssignee(): Promise { await BrowserActions.clearSendKeys(this.peopleCloudSearch, ' '); @@ -62,6 +63,11 @@ export class PeopleCloudComponentPage { return this.peopleCloudSearch.getAttribute('value'); } + async getChipAssignee(): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.assigneeChipList); + return this.assigneeChipList.all(by.css('mat-chip')).first().getText(); + } + async checkUserIsDisplayed(name: string): Promise { const assigneeRow = element(by.cssContainingText('mat-option span.adf-people-label-name', name)); await BrowserVisibility.waitUntilElementIsVisible(assigneeRow); @@ -72,6 +78,16 @@ export class PeopleCloudComponentPage { await BrowserVisibility.waitUntilElementIsNotVisible(assigneeRow); } + async checkOptionIsDisplayed(): Promise { + const optionList = element(by.css('.adf-people-cloud-list')); + await BrowserVisibility.waitUntilElementIsVisible(optionList); + } + + async checkOptionIsNotDisplayed(): Promise { + const optionList = element(by.css('.adf-people-cloud-list')); + await BrowserVisibility.waitUntilElementIsNotVisible(optionList); + } + async checkSelectedPeople(person: string): Promise { await BrowserVisibility.waitUntilElementIsVisible(element(by.cssContainingText('mat-chip-list mat-chip', person))); } diff --git a/lib/testing/src/lib/process-services-cloud/pages/start-tasks-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/start-tasks-cloud-component.page.ts index 853455c0ce..111b798df8 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/start-tasks-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/start-tasks-cloud-component.page.ts @@ -30,6 +30,7 @@ export class StartTasksCloudPage { cancelButton: ElementFinder = element(by.css('button[id="button-cancel"]')); form: ElementFinder = element.all(by.css('adf-cloud-start-task form')).first(); formDefinitionSelector: ElementFinder = element(by.css('.adf-form-definition-selector')); + priorityStartTaskField: ElementFinder = element(by.css('input[formControlName="priority"]')); async checkFormIsDisplayed(): Promise { await BrowserVisibility.waitUntilElementIsVisible(this.form); @@ -105,4 +106,9 @@ export class StartTasksCloudPage { await BrowserVisibility.waitUntilElementIsNotVisible(row); await BrowserActions.closeMenuAndDialogs(); } + + async typePriorityOf(priorityValue: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.priorityStartTaskField); + await BrowserActions.clearSendKeys(this.priorityStartTaskField, priorityValue); + } } diff --git a/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts index b81e58023c..17ad59f342 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/task-header-cloud-component.page.ts @@ -86,5 +86,4 @@ export class TaskHeaderCloudPage { async checkTaskPropertyListIsDisplayed(): Promise { await BrowserVisibility.waitUntilElementIsVisible(this.taskPropertyList); } - }