From 80e0a966ad03a06117209f1d656228ceaf8b3719 Mon Sep 17 00:00:00 2001 From: cristinaj Date: Fri, 28 Sep 2018 12:29:33 +0300 Subject: [PATCH] [ADF-3596]Create automated tests for start process (#3834) * Add automated tests for Start a process * Deleted a shadow variable. * Fixing a test * Modified the testrail ID of two tests. * Resolve lint errors. --- .../adf/process_services/startProcessPage.js | 50 +++++++- .../start_process_component.e2e.ts | 121 +++++++++++++++--- e2e/util/resources.js | 1 + .../components/start-process.component.html | 2 + 4 files changed, 154 insertions(+), 20 deletions(-) diff --git a/e2e/pages/adf/process_services/startProcessPage.js b/e2e/pages/adf/process_services/startProcessPage.js index 667fee8489..af8e7781a5 100644 --- a/e2e/pages/adf/process_services/startProcessPage.js +++ b/e2e/pages/adf/process_services/startProcessPage.js @@ -26,10 +26,21 @@ var StartProcessPage = function () { var formStartProcessButton = element(by.css('button[data-automation-id="adf-form-start process"]')); var startProcessButton = element(by.css("button[data-automation-id='btn-start']")); var noProcess = element(by.id('no-process-message')); + var processDefinition = element(by.css("input[id='processDefinitionName']")); + var processDefinitionOptionsPanel = element(by.css("div[class*='processDefinitionOptions']")); this.checkNoProcessMessage = function () { Util.waitUntilElementIsVisible(noProcess); - } + }; + + this.pressDownArrowAndEnter = function () { + processDefinition.sendKeys(protractor.Key.ARROW_DOWN); + return browser.actions().sendKeys(protractor.Key.ENTER).perform(); + }; + + this.checkNoProcessDefinitionOptionIsDisplayed = function () { + Util.waitUntilElementIsNotOnPage(processDefinitionOptionsPanel); + }; this.getDefaultName = function () { Util.waitUntilElementIsVisible(defaultProcessName); @@ -52,9 +63,30 @@ var StartProcessPage = function () { }; this.selectFromProcessDropdown = function (name) { + this.clickProcessDropdownArrow(); + return this.selectOption(name); + }; + + this.clickProcessDropdownArrow = function() { Util.waitUntilElementIsVisible(selectProcessDropdownArrow); Util.waitUntilElementIsClickable(selectProcessDropdownArrow) selectProcessDropdownArrow.click(); + }; + + this.checkOptionIsDisplayed = function (name) { + var selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); + Util.waitUntilElementIsVisible(selectProcessDropdown); + Util.waitUntilElementIsClickable(selectProcessDropdown); + return this; + }; + + this.checkOptionIsNotDisplayed = function (name) { + var selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); + Util.waitUntilElementIsNotOnPage(selectProcessDropdown); + return this; + }; + + this.selectOption = function (name) { var selectProcessDropdown = element(by.cssContainingText('.mat-option-text', name)); Util.waitUntilElementIsVisible(selectProcessDropdown); Util.waitUntilElementIsClickable(selectProcessDropdown); @@ -62,6 +94,18 @@ var StartProcessPage = function () { return this; }; + this.typeProcessDefinition = function (name) { + Util.waitUntilElementIsVisible(processDefinition); + Util.waitUntilElementIsClickable(processDefinition); + processDefinition.sendKeys(name); + return this; + }; + + this.getProcessDefinitionValue = function () { + Util.waitUntilElementIsVisible(processDefinition); + return processDefinition.getAttribute('value'); + }; + this.clickCancelProcessButton = function () { Util.waitUntilElementIsVisible(cancelProcessButton); cancelProcessButton.click(); @@ -81,6 +125,10 @@ var StartProcessPage = function () { expect(startProcessButton.isEnabled()).toBe(false); }; + this.clickStartProcessButton = function () { + return startProcessButton.click(); + }; + }; module.exports = StartProcessPage; diff --git a/e2e/process-services/start_process_component.e2e.ts b/e2e/process-services/start_process_component.e2e.ts index a65fb8735b..7817660431 100644 --- a/e2e/process-services/start_process_component.e2e.ts +++ b/e2e/process-services/start_process_component.e2e.ts @@ -27,6 +27,7 @@ import ProcessFiltersPage = require('../pages/adf/process_services/processFilter import AppNavigationBarPage = require('../pages/adf/process_services/appNavigationBarPage'); import ProcessDetailsPage = require('../pages/adf/process_services/processDetailsPage'); import { AttachmentListPage } from '../pages/adf/process_services/attachmentListPage'; +import { AppsActions } from '../actions/APS/apps.actions'; import User = require('../models/APS/User'); import AppPublish = require('../models/APS/AppPublish'); @@ -49,8 +50,11 @@ describe('Start Process Component', () => { let appNavigationBarPage = new AppNavigationBarPage(); let processDetailsPage = new ProcessDetailsPage(); let attachmentListPage = new AttachmentListPage(); + const apps = new AppsActions(); let app = resources.Files.APP_WITH_PROCESSES; - let appId, procUserModel, secondProcUserModel, tenantId; + let simpleApp = resources.Files.WIDGETS_SMOKE_TEST; + let appId, procUserModel, secondProcUserModel, tenantId, simpleAppCreated; + let processModelWithSe = 'process_with_se', processModelWithoutSe = 'process_without_se'; let auditLogFile = path.join('../e2e/download/', 'Audit.pdf'); @@ -83,17 +87,12 @@ describe('Start Process Component', () => { await this.alfrescoJsApiUserTwo.login(secondProcUserModel.email, secondProcUserModel.password); - let pathFile = path.join(TestConfig.main.rootPath + app.file_location); - let file = fs.createReadStream(pathFile); + let appCreated = await apps.importPublishDeployApp(this.alfrescoJsApiUserTwo, app.file_location); - let appCreated = await this.alfrescoJsApiUserTwo.activiti.appsApi.importAppDefinition(file); + simpleAppCreated = await apps.importPublishDeployApp(this.alfrescoJsApiUserTwo, simpleApp.file_location); appId = appCreated.id; - let publishApp = await this.alfrescoJsApiUserTwo.activiti.appsApi.publishAppDefinition(appId, new AppPublish()); - - await this.alfrescoJsApiUserTwo.activiti.appsApi.deployAppDefinitions({ appDefinitions: [{ id: publishApp.appDefinition.id }] }); - done(); }); @@ -101,6 +100,8 @@ describe('Start Process Component', () => { afterAll(async (done) => { await this.alfrescoJsApiUserTwo.activiti.modelsApi.deleteModel(appId); + await this.alfrescoJsApiUserTwo.activiti.modelsApi.deleteModel(simpleAppCreated.id); + // await this.alfrescoJsApiUserTwo.activiti.modelsApi.deleteModel(secondModelId); // // await this.alfrescoJsApiUserTwo.activiti.modelsApi.deleteModel(modelId); @@ -159,7 +160,7 @@ describe('Start Process Component', () => { appNavigationBarPage.clickProcessButton(); processFiltersPage.clickCreateProcessButton(); processFiltersPage.clickNewProcessDropdown(); - startProcessPage.selectFromProcessDropdown('process_without_se'); + startProcessPage.selectFromProcessDropdown(processModelWithoutSe); startProcessPage.deleteDefaultName('My Default Name'); startProcessPage.checkStartProcessButtonIsDisabled(); }); @@ -169,7 +170,7 @@ describe('Start Process Component', () => { appNavigationBarPage.clickProcessButton(); processFiltersPage.clickCreateProcessButton(); processFiltersPage.clickNewProcessDropdown(); - startProcessPage.selectFromProcessDropdown('process_without_se'); + startProcessPage.selectFromProcessDropdown(processModelWithoutSe); expect(startProcessPage.getDefaultName()).toEqual('My Default Name'); startProcessPage.checkStartProcessButtonIsEnabled(); }); @@ -180,7 +181,7 @@ describe('Start Process Component', () => { processFiltersPage.clickCreateProcessButton(); processFiltersPage.clickNewProcessDropdown(); startProcessPage.enterProcessName('Test'); - startProcessPage.selectFromProcessDropdown('process_with_se'); + startProcessPage.selectFromProcessDropdown(processModelWithSe); startProcessPage.clickFormStartProcessButton() .then(() => { processDetailsPage.getId() @@ -201,13 +202,95 @@ describe('Start Process Component', () => { }); }); + it('[C286503] No options are displayed when typing a process that does not exist', () => { + processServicesPage.goToApp(app.title); + appNavigationBarPage.clickProcessButton(); + processFiltersPage.clickCreateProcessButton(); + processFiltersPage.clickNewProcessDropdown(); + startProcessPage.typeProcessDefinition('nonexistent'); + startProcessPage.checkNoProcessDefinitionOptionIsDisplayed(); + startProcessPage.checkStartProcessButtonIsDisabled(); + }); + + it('[C286504] Proper options are displayed when typing a part of existent process definitions', () => { + processServicesPage.goToApp(app.title); + appNavigationBarPage.clickProcessButton(); + processFiltersPage.clickCreateProcessButton(); + processFiltersPage.clickNewProcessDropdown(); + startProcessPage.typeProcessDefinition('process'); + startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); + startProcessPage.checkOptionIsDisplayed(processModelWithSe); + startProcessPage.selectOption(processModelWithoutSe); + startProcessPage.checkStartProcessButtonIsEnabled(); + }); + + it('[C286508] Only one option is displayed when typing an existent process definition', () => { + processServicesPage.goToApp(app.title); + appNavigationBarPage.clickProcessButton(); + processFiltersPage.clickCreateProcessButton(); + processFiltersPage.clickNewProcessDropdown(); + startProcessPage.typeProcessDefinition(processModelWithoutSe); + startProcessPage.checkOptionIsDisplayed(processModelWithoutSe); + startProcessPage.checkOptionIsNotDisplayed(processModelWithSe); + startProcessPage.selectOption(processModelWithoutSe); + startProcessPage.checkStartProcessButtonIsEnabled(); + }); + + it('[C286509] Should select automatically the processDefinition when the app contains only one', () => { + processServicesPage.goToApp(simpleApp.title); + appNavigationBarPage.clickProcessButton(); + processFiltersPage.clickCreateProcessButton(); + processFiltersPage.clickNewProcessDropdown(); + expect(startProcessPage.getProcessDefinitionValue()).toBe(simpleApp.title); + startProcessPage.checkStartProcessButtonIsEnabled(); + }); + + it('[C286511] Should be able to type the process definition and start a process', () => { + processServicesPage.goToApp(app.title); + appNavigationBarPage.clickProcessButton(); + processFiltersPage.clickCreateProcessButton(); + processFiltersPage.clickNewProcessDropdown(); + startProcessPage.enterProcessName('Type'); + startProcessPage.typeProcessDefinition(processModelWithoutSe); + startProcessPage.selectOption(processModelWithoutSe); + startProcessPage.checkStartProcessButtonIsEnabled(); + expect(startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + startProcessPage.clickStartProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processFiltersPage.selectFromProcessList('Type'); + }); + + it('[C286513] Should be able to use down arrow key when navigating throw suggestions', () => { + processServicesPage.goToApp(app.title); + appNavigationBarPage.clickProcessButton(); + processFiltersPage.clickCreateProcessButton(); + processFiltersPage.clickNewProcessDropdown(); + startProcessPage.typeProcessDefinition('process'); + + startProcessPage.pressDownArrowAndEnter(); + expect(startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + }); + + it('[C286514] Should the process definition input be cleared when clicking on options drop down ', () => { + processServicesPage.goToApp(app.title); + appNavigationBarPage.clickProcessButton(); + processFiltersPage.clickCreateProcessButton(); + processFiltersPage.clickNewProcessDropdown(); + startProcessPage.typeProcessDefinition('process'); + startProcessPage.selectOption(processModelWithoutSe); + expect(startProcessPage.getProcessDefinitionValue()).toBe(processModelWithoutSe); + startProcessPage.clickProcessDropdownArrow(); + + expect(startProcessPage.getProcessDefinitionValue()).toBe(''); + }); + it('[C260453] Add a comment on an active process', () => { processServicesPage.goToApp(app.title); appNavigationBarPage.clickProcessButton(); processFiltersPage.clickCreateProcessButton(); processFiltersPage.clickNewProcessDropdown(); startProcessPage.enterProcessName('Comment Process'); - startProcessPage.selectFromProcessDropdown('process_with_se'); + startProcessPage.selectFromProcessDropdown(processModelWithSe); startProcessPage.clickFormStartProcessButton(); processFiltersPage.clickRunningFilterButton(); processFiltersPage.selectFromProcessList('Comment Process'); @@ -221,7 +304,7 @@ describe('Start Process Component', () => { processFiltersPage.clickCreateProcessButton(); processFiltersPage.clickNewProcessDropdown(); startProcessPage.enterProcessName('Audit Log'); - startProcessPage.selectFromProcessDropdown('process_with_se'); + startProcessPage.selectFromProcessDropdown(processModelWithSe); startProcessPage.clickFormStartProcessButton(); processFiltersPage.clickRunningFilterButton(); processFiltersPage.selectFromProcessList('Audit Log'); @@ -239,7 +322,7 @@ describe('Start Process Component', () => { processFiltersPage.clickNewProcessDropdown(); startProcessPage.enterProcessName('Attach File'); - startProcessPage.selectFromProcessDropdown('process_with_se'); + startProcessPage.selectFromProcessDropdown(processModelWithSe); startProcessPage.clickFormStartProcessButton(); processFiltersPage.clickRunningFilterButton(); @@ -258,7 +341,7 @@ describe('Start Process Component', () => { processFiltersPage.clickNewProcessDropdown(); startProcessPage.enterProcessName('Show Diagram'); - startProcessPage.selectFromProcessDropdown('process_with_se'); + startProcessPage.selectFromProcessDropdown(processModelWithSe); startProcessPage.clickFormStartProcessButton(); processFiltersPage.clickRunningFilterButton(); @@ -273,7 +356,7 @@ describe('Start Process Component', () => { processFiltersPage.clickCreateProcessButton(); processFiltersPage.clickNewProcessDropdown(); startProcessPage.enterProcessName('Active Task'); - startProcessPage.selectFromProcessDropdown('process_with_se'); + startProcessPage.selectFromProcessDropdown(processModelWithSe); startProcessPage.clickFormStartProcessButton(); processFiltersPage.clickRunningFilterButton(); processFiltersPage.selectFromProcessList('Active Task'); @@ -290,7 +373,7 @@ describe('Start Process Component', () => { processFiltersPage.clickCreateProcessButton(); processFiltersPage.clickNewProcessDropdown(); startProcessPage.enterProcessName('Cancel Process'); - startProcessPage.selectFromProcessDropdown('process_with_se'); + startProcessPage.selectFromProcessDropdown(processModelWithSe); startProcessPage.clickFormStartProcessButton(); processFiltersPage.clickRunningFilterButton(); processFiltersPage.selectFromProcessList('Cancel Process'); @@ -306,7 +389,7 @@ describe('Start Process Component', () => { processFiltersPage.clickCreateProcessButton(); processFiltersPage.clickNewProcessDropdown(); startProcessPage.enterProcessName('Comment Process 2'); - startProcessPage.selectFromProcessDropdown('process_with_se'); + startProcessPage.selectFromProcessDropdown(processModelWithSe); startProcessPage.clickFormStartProcessButton(); processFiltersPage.clickRunningFilterButton(); processFiltersPage.selectFromProcessList('Comment Process 2'); @@ -323,7 +406,7 @@ describe('Start Process Component', () => { processFiltersPage.clickCreateProcessButton(); processFiltersPage.clickNewProcessDropdown(); startProcessPage.enterProcessName('File'); - startProcessPage.selectFromProcessDropdown('process_with_se'); + startProcessPage.selectFromProcessDropdown(processModelWithSe); startProcessPage.clickFormStartProcessButton(); processFiltersPage.clickRunningFilterButton(); processFiltersPage.selectFromProcessList('File'); diff --git a/e2e/util/resources.js b/e2e/util/resources.js index 4094c215ae..85dd901a38 100644 --- a/e2e/util/resources.js +++ b/e2e/util/resources.js @@ -71,6 +71,7 @@ exports.Files = { WIDGETS_SMOKE_TEST: { file_location: "/resources/apps/Widgets smoke test.zip", formName: "Widgets smoke test", + title: "Widgets smoke test", form_fields: { text_id: "text", header_id: "header", diff --git a/lib/process-services/process-list/components/start-process.component.html b/lib/process-services/process-list/components/start-process.component.html index 0c13f95b60..df6e72c47a 100644 --- a/lib/process-services/process-list/components/start-process.component.html +++ b/lib/process-services/process-list/components/start-process.component.html @@ -20,10 +20,12 @@ matInput [formControl]="processDefinitionInput" [matAutocomplete]="auto" + id="processDefinitionName" #inputAutocomplete>
{{ processDef.name }}