diff --git a/cspell.json b/cspell.json index 205a5645a9..d36373c840 100644 --- a/cspell.json +++ b/cspell.json @@ -131,7 +131,14 @@ "devops", "mouseenter", "starteventform", - "formtotestvalidations" + "formtotestvalidations", + "requirednumbervisibility", + "numbervisibilityprocess", + "booleanvisibilityprocess", + "booleanvisibility", + "processparent", + "uploadfileform", + "processwithstarteventform" ], "dictionaries": [ "html", diff --git a/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts index afe049d316..f65134ef54 100644 --- a/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/tasksCloudDemoPage.ts @@ -100,6 +100,7 @@ export class TasksCloudDemoPage { } async getActiveFilterName(): Promise { + await browser.sleep(500); return BrowserActions.getText(this.activeFilter); } diff --git a/e2e/process-services-cloud/config/start-process-cloud.config.ts b/e2e/process-services-cloud/config/start-process-cloud.config.ts index 488adcf93c..d68a38773e 100644 --- a/e2e/process-services-cloud/config/start-process-cloud.config.ts +++ b/e2e/process-services-cloud/config/start-process-cloud.config.ts @@ -30,9 +30,9 @@ export class StartProcessCloudConfiguration { 'value': 17 } ], - 'variables': { - 'my-key1': 'myvalue', - 'my-key2': 'myvalue2' + 'variable': { + 'mykey1': 'myvalue', + 'mykey2': 'myvalue2' } }; } diff --git a/e2e/process-services-cloud/form-field/task-visibility-condition.e2e.ts b/e2e/process-services-cloud/form-field/task-visibility-condition.e2e.ts new file mode 100644 index 0000000000..7afd65a035 --- /dev/null +++ b/e2e/process-services-cloud/form-field/task-visibility-condition.e2e.ts @@ -0,0 +1,167 @@ +/*! + * @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 { LoginSSOPage, AppListCloudPage, IdentityService, GroupIdentityService, ApiService, StringUtil, StartTasksCloudPage, TaskFormCloudComponent } from '@alfresco/adf-testing'; +import { browser, by } from 'protractor'; + +import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; +import { TasksCloudDemoPage } from '../../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; +import { StartProcessPage } from '../../pages/adf/process-services/startProcessPage'; +import { ProcessCloudDemoPage } from '../../pages/adf/demo-shell/process-services/processCloudDemoPage'; +import { ProcessDetailsCloudDemoPage } from '../../pages/adf/demo-shell/process-services-cloud/processDetailsCloudDemoPage'; + +describe('Task cloud visibility', async () => { + + const navigationBarPage = new NavigationBarPage(); + const appListCloudComponent = new AppListCloudPage(); + const tasksCloudDemoPage = new TasksCloudDemoPage(); + const startTask = new StartTasksCloudPage(); + const taskFormCloudComponent = new TaskFormCloudComponent(); + const startProcessPage = new StartProcessPage(); + const processCloudDemoPage = new ProcessCloudDemoPage(); + const processDetailsCloudDemoPage = new ProcessDetailsCloudDemoPage(); + const loginSSOPage = new LoginSSOPage(); + + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const standaloneTaskName = StringUtil.generateRandomString(5); + const processName = StringUtil.generateRandomString(5); + let identityService: IdentityService; + let groupIdentityService: GroupIdentityService; + let testUser, groupInfo; + const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); + + beforeAll(async () => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + identityService = new IdentityService(apiService); + groupIdentityService = new GroupIdentityService(apiService); + testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); + groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); + await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); + + await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + }); + + afterAll(async () => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + await identityService.deleteIdentityUser(testUser.idIdentityService); + }); + + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); + }); + + it('[C315170] Should be able to complete a task with a form with required number widgets', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(standaloneTaskName); + await startTask.selectFormDefinition(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.forms.requirednumbervisibility.name); + + await startTask.clickStartButton(); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); + + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number1'); + await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); + await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + + await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 5); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number2'); + await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + + await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 123); + await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); + }); + + it('[C315169] Should be able to start a process with visibility condition for number widgets', async () => { + + await processCloudDemoPage.openNewProcessForm(); + await startProcessPage.clearField(startProcessPage.processNameInput); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.numbervisibilityprocess); + + await startProcessPage.enterProcessName(processName); + await startProcessPage.clickStartProcessButton(); + + await processDetailsCloudDemoPage.selectProcessTaskByName(processName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow('number_visibility_task'); + await taskFormCloudComponent.clickClaimButton(); + + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number1'); + await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); + await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + + await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 5); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number2'); + await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + + await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 123); + await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); + + await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 4); + await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + await taskFormCloudComponent.clickCompleteButton(); + }); + + it('[C315232] Should be able to complete a process with visibility condition for boolean widgets', async () => { + + await processCloudDemoPage.openNewProcessForm(); + await startProcessPage.clearField(startProcessPage.processNameInput); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.booleanvisibilityprocess); + await startProcessPage.enterProcessName(processName); + await startProcessPage.clickStartProcessButton(); + + await processDetailsCloudDemoPage.selectProcessTaskByName(processName); + await tasksCloudDemoPage.taskListCloudComponent().selectRow('boolean_visibility_task'); + await taskFormCloudComponent.clickClaimButton(); + + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Checkbox2'); + await taskFormCloudComponent.formFields().checkWidgetIsHidden('Checkbox3'); + await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + + await taskFormCloudComponent.formFields().clickField(by.id, 'Checkbox1'); + await taskFormCloudComponent.formFields().clickField(by.id, 'Checkbox2'); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Checkbox3'); + await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + + await taskFormCloudComponent.clickCompleteButton(); + }); + + it('[C315208] Should be able to complete a task with Checkbox widgets', async () => { + await tasksCloudDemoPage.openNewTaskForm(); + await startTask.checkFormIsDisplayed(); + await startTask.addName(standaloneTaskName); + await startTask.selectFormDefinition(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.forms.booleanvisibility.name); + + await startTask.clickStartButton(); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); + + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Checkbox2'); + await taskFormCloudComponent.formFields().checkWidgetIsHidden('Checkbox3'); + await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); + + await taskFormCloudComponent.formFields().clickField(by.id, 'Checkbox1'); + await taskFormCloudComponent.formFields().clickField(by.id, 'Checkbox2'); + await taskFormCloudComponent.formFields().checkWidgetIsVisible('Checkbox3'); + await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); + + await taskFormCloudComponent.clickCompleteButton(); + }); + +}); diff --git a/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts b/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts index ff0f3fb130..89a6d8a195 100644 --- a/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts +++ b/e2e/process-services-cloud/form-field/visibility-condition.e2e.ts @@ -15,18 +15,14 @@ * limitations under the License. */ -import { LoginSSOPage, Widget, AppListCloudPage, IdentityService, GroupIdentityService, ApiService, StringUtil, StartTasksCloudPage, TaskFormCloudComponent } from '@alfresco/adf-testing'; -import { browser, by } from 'protractor'; +import { LoginSSOPage, Widget } from '@alfresco/adf-testing'; +import { browser } from 'protractor'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { FormCloudDemoPage } from '../../pages/adf/demo-shell/process-services-cloud/cloudFormDemoPage'; import { checkboxVisibilityFormJson, multipleCheckboxVisibilityFormJson } from '../../resources/forms/checkbox-visibility-condition'; import { multipleVisibilityFormJson } from '../../resources/forms/multiple-visibility-conditions'; -import { TasksCloudDemoPage } from '../../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; -import { StartProcessPage } from '../../pages/adf/process-services/startProcessPage'; -import { ProcessCloudDemoPage } from '../../pages/adf/demo-shell/process-services/processCloudDemoPage'; -import { ProcessDetailsCloudDemoPage } from '../../pages/adf/demo-shell/process-services-cloud/processDetailsCloudDemoPage'; describe('Visibility conditions - cloud', () => { @@ -247,144 +243,3 @@ describe('Visibility conditions - cloud', () => { await widget.textWidget().isWidgetVisible(widgets.textOneId); }); }); - -describe('Task cloud visibility', async () => { - - const loginSSOPage = new LoginSSOPage(); - const navigationBarPage = new NavigationBarPage(); - const appListCloudComponent = new AppListCloudPage(); - const tasksCloudDemoPage = new TasksCloudDemoPage(); - const startTask = new StartTasksCloudPage(); - const taskFormCloudComponent = new TaskFormCloudComponent(); - const startProcessPage = new StartProcessPage(); - const processCloudDemoPage = new ProcessCloudDemoPage(); - const processDetailsCloudDemoPage = new ProcessDetailsCloudDemoPage(); - - const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; - const standaloneTaskName = StringUtil.generateRandomString(5); - const processName = StringUtil.generateRandomString(5); - let identityService: IdentityService; - let groupIdentityService: GroupIdentityService; - let testUser, groupInfo; - const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, 'BPM'); - - beforeAll(async () => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - identityService = new IdentityService(apiService); - groupIdentityService = new GroupIdentityService(apiService); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); - groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); - await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); - - await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - - }); - - afterAll(async () => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); - await identityService.deleteIdentityUser(testUser.idIdentityService); - - }); - - beforeEach(async () => { - await navigationBarPage.navigateToProcessServicesCloudPage(); - await appListCloudComponent.checkApsContainer(); - await appListCloudComponent.goToApp(simpleApp); - await tasksCloudDemoPage.taskListCloudComponent().checkTaskListIsLoaded(); - }); - - it('[C315170] Should be able to complete a task with a form with required number widgets', async () => { - await tasksCloudDemoPage.openNewTaskForm(); - await startTask.checkFormIsDisplayed(); - await startTask.addName(standaloneTaskName); - await startTask.selectFormDefinition('requirednumbervisibility'); - await startTask.clickStartButton(); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); - - await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number1'); - await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); - await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - - await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 5); - await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number2'); - await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); - - await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 123); - await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); - }); - - it('[C315169] Should be able to start a process with visibility condition for number widgets', async () => { - - await processCloudDemoPage.openNewProcessForm(); - await startProcessPage.clearField(startProcessPage.processNameInput); - await startProcessPage.selectFromProcessDropdown('numbervisibilityprocess'); - await startProcessPage.enterProcessName(processName); - await startProcessPage.clickStartProcessButton(); - - await processDetailsCloudDemoPage.selectProcessTaskByName(processName); - await tasksCloudDemoPage.taskListCloudComponent().selectRow('number_visibility_task'); - await taskFormCloudComponent.clickClaimButton(); - - await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number1'); - await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); - await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - - await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 5); - await taskFormCloudComponent.formFields().checkWidgetIsVisible('Number2'); - await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); - - await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 123); - await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - await taskFormCloudComponent.formFields().checkWidgetIsHidden('Number2'); - - await taskFormCloudComponent.formFields().setFieldValue(by.id, 'Number1', 4); - await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); - await taskFormCloudComponent.clickCompleteButton(); - }); - - it('[C315232] Should be able to complete a process with visibility condition for boolean widgets', async () => { - - await processCloudDemoPage.openNewProcessForm(); - await startProcessPage.clearField(startProcessPage.processNameInput); - await startProcessPage.selectFromProcessDropdown('booleanvisibilityprocess'); - await startProcessPage.enterProcessName(processName); - await startProcessPage.clickStartProcessButton(); - - await processDetailsCloudDemoPage.selectProcessTaskByName(processName); - await tasksCloudDemoPage.taskListCloudComponent().selectRow('boolean_visibility_task'); - await taskFormCloudComponent.clickClaimButton(); - - await taskFormCloudComponent.formFields().checkWidgetIsVisible('Checkbox2'); - await taskFormCloudComponent.formFields().checkWidgetIsHidden('Checkbox3'); - await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - - await taskFormCloudComponent.formFields().clickField(by.id, 'Checkbox1'); - await taskFormCloudComponent.formFields().clickField(by.id, 'Checkbox2'); - await taskFormCloudComponent.formFields().checkWidgetIsVisible('Checkbox3'); - await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); - - await taskFormCloudComponent.clickCompleteButton(); - }); - - it('[C315208] Should be able to complete a task with Checkbox widgets', async () => { - await tasksCloudDemoPage.openNewTaskForm(); - await startTask.checkFormIsDisplayed(); - await startTask.addName(standaloneTaskName); - await startTask.selectFormDefinition('booleanvisibility'); - await startTask.clickStartButton(); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(standaloneTaskName); - - await taskFormCloudComponent.formFields().checkWidgetIsVisible('Checkbox2'); - await taskFormCloudComponent.formFields().checkWidgetIsHidden('Checkbox3'); - await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeTruthy(); - - await taskFormCloudComponent.formFields().clickField(by.id, 'Checkbox1'); - await taskFormCloudComponent.formFields().clickField(by.id, 'Checkbox2'); - await taskFormCloudComponent.formFields().checkWidgetIsVisible('Checkbox3'); - await expect(await taskFormCloudComponent.formFields().isCompleteFormButtonDisabled()).toBeFalsy(); - - await taskFormCloudComponent.clickCompleteButton(); - }); - -}); diff --git a/e2e/process-services-cloud/process-header-cloud.e2e.ts b/e2e/process-services-cloud/process-header-cloud.e2e.ts index e8a23df7a7..880ac02f56 100644 --- a/e2e/process-services-cloud/process-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/process-header-cloud.e2e.ts @@ -53,7 +53,6 @@ describe('Process Header cloud component', () => { let runningProcess, runningCreatedDate, parentCompleteProcess, childCompleteProcess, completedCreatedDate; beforeAll(async () => { - await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -63,27 +62,31 @@ describe('Process Header cloud component', () => { await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); await apiService.login(testUser.email, testUser.password); - processDefinitionService = new ProcessDefinitionsService(apiService); - const processDefinition = await processDefinitionService.getProcessDefinitions(simpleApp); - const childProcessDefinition = await processDefinitionService.getProcessDefinitions(subProcessApp); + processDefinitionService = new ProcessDefinitionsService(apiService); + const dropdownRestProcess = await processDefinitionService.getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.dropdownrestprocess, simpleApp); + + const processparent = await processDefinitionService.getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SUB_PROCESS_APP.processes.processparent, subProcessApp); processInstancesService = new ProcessInstancesService(apiService); - runningProcess = await processInstancesService.createProcessInstance(processDefinition.list.entries[0].entry.key, + runningProcess = await processInstancesService.createProcessInstance(dropdownRestProcess.entry.key, simpleApp, { name: StringUtil.generateRandomString(), businessKey: 'test' }); + runningCreatedDate = moment(runningProcess.entry.startDate).format(formatDate); - parentCompleteProcess = await processInstancesService.createProcessInstance(childProcessDefinition.list.entries[0].entry.key, + + parentCompleteProcess = await processInstancesService.createProcessInstance(processparent.entry.key, subProcessApp); queryService = new QueryService(apiService); const parentProcessInstance = await queryService.getProcessInstanceSubProcesses(parentCompleteProcess.entry.id, subProcessApp); + childCompleteProcess = parentProcessInstance.list.entries[0]; + completedCreatedDate = moment(childCompleteProcess.entry.startDate).format(formatDate); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - }); afterAll(async() => { diff --git a/e2e/process-services-cloud/start-task-form-cloud.e2e.ts b/e2e/process-services-cloud/start-task-form-cloud.e2e.ts index 5a27aaa1cc..728fd212ec 100644 --- a/e2e/process-services-cloud/start-task-form-cloud.e2e.ts +++ b/e2e/process-services-cloud/start-task-form-cloud.e2e.ts @@ -161,7 +161,10 @@ describe('Start Task Form', () => { browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.identityHost, - browser.params.config.oauth2.clientId); + browser.params.config.oauth2.clientId, + false); + await loginSSOPage.clickOnSSOButton(); + await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); await LocalStorageUtil.setConfigField('adf-cloud-start-process', JSON.stringify(startProcessCloudConfig)); }); @@ -223,7 +226,7 @@ describe('Start Task Form', () => { it('[C311428] Should display the Standalone forms based on the flag set', async () => { await tasksCloudDemoPage.openNewTaskForm(); await startTask.checkFormIsDisplayed(); - await startTask.checkFormDefinitionIsNotDisplayed('uploadfileform'); + await startTask.checkFormDefinitionIsNotDisplayed(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.forms.uploadfileform); await startTask.checkFormDefinitionIsDisplayed(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.forms.starteventform); await startTask.checkFormDefinitionIsDisplayed(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.forms.formtotestvalidations); }); @@ -240,7 +243,8 @@ describe('Start Task Form', () => { await processCloudDemoPage.openNewProcessForm(); await startProcessPage.clearField(startProcessPage.processNameInput); await startProcessPage.enterProcessName(startEventFormProcess); - await startProcessPage.selectFromProcessDropdown('processwithstarteventform'); + await startProcessPage.selectFromProcessDropdown(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.processes.processwithstarteventform); + await startProcessPage.formFields().checkFormIsDisplayed(); }); diff --git a/e2e/process-services-cloud/task-form-cloud-component-tab.e2e.ts b/e2e/process-services-cloud/task-form-cloud-component-tab.e2e.ts new file mode 100644 index 0000000000..f4ba084ea0 --- /dev/null +++ b/e2e/process-services-cloud/task-form-cloud-component-tab.e2e.ts @@ -0,0 +1,348 @@ +/*! + * @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 { browser } from 'protractor'; +import { + AppListCloudPage, + StringUtil, + ApiService, + LoginSSOPage, + TasksService, + ProcessDefinitionsService, + ProcessInstancesService, + TaskHeaderCloudPage, + TaskFormCloudComponent, + Widget, IdentityService, GroupIdentityService +} from '@alfresco/adf-testing'; +import { NavigationBarPage } from '../pages/adf/navigationBarPage'; +import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; +import { FormCloudService } from '../../lib/testing/src/lib/form-cloud/actions/form-cloud.service'; + +describe('Task form cloud component', () => { + + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + const appListCloudComponent = new AppListCloudPage(); + const tasksCloudDemoPage = new TasksCloudDemoPage(); + const taskHeaderCloudPage = new TaskHeaderCloudPage(); + const taskFormCloudComponent = new TaskFormCloudComponent(); + const widget = new Widget(); + + let processDefinitionService: ProcessDefinitionsService; + let processInstancesService: ProcessInstancesService; + let identityService: IdentityService; + + let completedTask, assigneeTask, toBeCompletedTask, formValidationsTask, testUser; + const candidateBaseApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name; + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const completedTaskName = StringUtil.generateRandomString(), assignedTaskName = StringUtil.generateRandomString(); + const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); + const apiServiceHrUser = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); + + const visibilityConditionTasks = []; + + const tab = { + tabWithFields: 'tabWithFields', + tabFieldValue: 'tabBasicFieldValue', + tabVarValue: 'tabBasicVarValue', + tabVarField: 'tabBasicVarField', + tabFieldField: 'tabBasicFieldField', + tabVarVar: 'tabBasicVarVar', + tabFieldVar: 'tabBasicFieldVar', + tabNextOperators: 'tabNextOperators' + }; + + const widgets = { + textOneId: 'TextOne', + textTwoId: 'TextTwo', + textThreeId: 'TextThree', + textFourId: 'TextFour', + numberOneId: 'NumberOne' + }; + + const value = { + displayTab: 'showTab', + notDisplayTab: 'anythingElse' + }; + + beforeAll(async () => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + + identityService = new IdentityService(apiService); + const groupIdentityService = new GroupIdentityService(apiService); + + testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); + + const groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); + await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); + + await apiServiceHrUser.login(testUser.email, testUser.password); + const tasksService = new TasksService(apiServiceHrUser); + + assigneeTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); + await tasksService.claimTask(assigneeTask.entry.id, candidateBaseApp); + + const formCloudService = new FormCloudService(apiServiceHrUser); + + const tabVisibilityFieldsId = await formCloudService.getIdByFormName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name, browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.forms.tabVisibilityFields.name); + + const tabVisibilityVarsId = await formCloudService.getIdByFormName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name, browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.forms.tabVisibilityVars.name); + + for (let i = 0; i < 3; i++) { + visibilityConditionTasks[i] = await tasksService.createStandaloneTaskWithForm(StringUtil.generateRandomString(), + simpleApp, tabVisibilityFieldsId); + await tasksService.claimTask(visibilityConditionTasks[i].entry.id, simpleApp); + } + + for (let i = 3; i < 6; i++) { + visibilityConditionTasks[i] = await tasksService.createStandaloneTaskWithForm(StringUtil.generateRandomString(), + simpleApp, tabVisibilityVarsId); + await tasksService.claimTask(visibilityConditionTasks[i].entry.id, simpleApp); + } + + const formToTestValidationsKey = await formCloudService.getIdByFormName(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name, + browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.forms.formtotestvalidations); + + formValidationsTask = await tasksService.createStandaloneTaskWithForm(StringUtil.generateRandomString(), candidateBaseApp, formToTestValidationsKey); + await tasksService.claimTask(formValidationsTask.entry.id, candidateBaseApp); + + toBeCompletedTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); + await tasksService.claimTask(toBeCompletedTask.entry.id, candidateBaseApp); + + completedTask = await tasksService.createStandaloneTask(assignedTaskName, candidateBaseApp); + await tasksService.claimTask(completedTask.entry.id, candidateBaseApp); + await tasksService.createAndCompleteTask(completedTaskName, candidateBaseApp); + + processDefinitionService = new ProcessDefinitionsService(apiServiceHrUser); + + const processDefinition = await processDefinitionService + .getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.processes.candidateUserProcess, candidateBaseApp); + + processInstancesService = new ProcessInstancesService(apiServiceHrUser); + await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp); + + await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + + }, 5 * 60 * 1000); + + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + }); + + afterAll(async () => { + try { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + await identityService.deleteIdentityUser(testUser.idIdentityService); + } catch (error) { + } + await browser.executeScript('window.sessionStorage.clear();'); + await browser.executeScript('window.localStorage.clear();'); + }); + + describe('Complete task with form - cloud directive', () => { + + it('[C315174] Should be able to complete a standalone task with visible tab with empty value for field', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[0].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[0].entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldValue); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldValue); + + await taskFormCloudComponent.clickCompleteButton(); + await browser.sleep(1000); + await browser.refresh(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[0].entry.name); + + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[0].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[0].entry.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldValue); + }); + + it('[C315177] Should be able to complete a standalone task with invisible tab with invalid value for field', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[1].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[1].entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.textWidget().setValue(widgets.textThreeId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); + await widget.tab().clickTabByLabel(tab.tabFieldField); + await widget.textWidget().isWidgetVisible(widgets.numberOneId); + await widget.textWidget().setValue(widgets.numberOneId, value.displayTab); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldField); + + await taskFormCloudComponent.clickCompleteButton(); + await browser.sleep(1000); + await browser.refresh(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[1].entry.name); + + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[1].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[1].entry.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldField); + }); + + it('[C315178] Should be able to complete a standalone task with invisible tab with valid value', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[2].entry.name); + + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[2].entry.name); + + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldVar); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.textFourId); + + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldVar); + await widget.tab().clickTabByLabel(tab.tabFieldVar); + await widget.textWidget().isWidgetVisible(widgets.textFourId); + await widget.textWidget().setValue(widgets.textFourId, value.displayTab); + + await widget.tab().clickTabByLabel(tab.tabWithFields); + await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldVar); + await taskFormCloudComponent.clickCompleteButton(); + await browser.sleep(1000); + await browser.refresh(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[2].entry.name); + + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[2].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[2].entry.name); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldVar); + }); + + it('[C315175] Should be able to complete a standalone task with invisible tab with empty value for field', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[3].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[3].entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarValue); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); + + await taskFormCloudComponent.clickCompleteButton(); + await browser.sleep(1000); + await browser.refresh(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[3].entry.name); + + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[3].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[3].entry.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarValue); + }); + + it('[C315176] Should not be able to complete a standalone task with visible tab with invalid value for field', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[4].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[4].entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarField); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + await widget.textWidget().isWidgetNotVisible(widgets.numberOneId); + + await widget.textWidget().setValue(widgets.textOneId, value.displayTab); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarField); + + await widget.tab().clickTabByLabel(tab.tabVarField); + await widget.textWidget().setValue(widgets.numberOneId, value.displayTab); + + await expect(await taskFormCloudComponent.isCompleteButtonEnabled()).toEqual(false); + }); + + it('[C315179] Should be able to complete a standalone task with visible tab with valid value for field', async () => { + await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[5].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[5].entry.name); + await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); + + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarVar); + await widget.textWidget().isWidgetVisible(widgets.textOneId); + + await widget.tab().clickTabByLabel(tab.tabVarVar); + await widget.textWidget().setValue(widgets.textThreeId, value.displayTab); + + await taskFormCloudComponent.clickCompleteButton(); + await browser.sleep(1000); + await browser.refresh(); + + await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[5].entry.name); + + await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); + await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[5].entry.name); + await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[5].entry.name); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); + await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarVar); + }); + + }); + +}); diff --git a/e2e/process-services-cloud/task-form-cloud-component.e2e.ts b/e2e/process-services-cloud/task-form-cloud-component.e2e.ts index ef5422c82b..fcb5a6ea3e 100644 --- a/e2e/process-services-cloud/task-form-cloud-component.e2e.ts +++ b/e2e/process-services-cloud/task-form-cloud-component.e2e.ts @@ -41,9 +41,7 @@ describe('Task form cloud component', () => { const taskHeaderCloudPage = new TaskHeaderCloudPage(); const taskFormCloudComponent = new TaskFormCloudComponent(); const widget = new Widget(); - const formToTestValidationsKey = 'form-49904910-603c-48e9-8c8c-1d442c0fa524'; - let tasksService: TasksService; let processDefinitionService: ProcessDefinitionsService; let processInstancesService: ProcessInstancesService; let identityService: IdentityService; @@ -55,69 +53,29 @@ describe('Task form cloud component', () => { const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); const apiServiceHrUser = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); - const visibilityConditionTasks = []; - - const tab = { - tabWithFields: 'tabWithFields', - tabFieldValue: 'tabBasicFieldValue', - tabVarValue: 'tabBasicVarValue', - tabVarField: 'tabBasicVarField', - tabFieldField: 'tabBasicFieldField', - tabVarVar: 'tabBasicVarVar', - tabFieldVar: 'tabBasicFieldVar', - tabNextOperators: 'tabNextOperators' - }; - - const widgets = { - textOneId: 'TextOne', - textTwoId: 'TextTwo', - textThreeId: 'TextThree', - textFourId: 'TextFour', - numberOneId: 'NumberOne' - }; - - const value = { - displayTab: 'showTab', - notDisplayTab: 'anythingElse' - }; - beforeAll(async () => { await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); const groupIdentityService = new GroupIdentityService(apiService); - await apiServiceHrUser.login(browser.params.testConfig.hrUser.email, browser.params.testConfig.hrUser.password); - const formCloudService = new FormCloudService(apiServiceHrUser); - testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); const groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); - await apiService.login(testUser.email, testUser.password); - tasksService = new TasksService(apiServiceHrUser); + await apiServiceHrUser.login(testUser.email, testUser.password); + const tasksService = new TasksService(apiServiceHrUser); const queryService = new QueryService(apiServiceHrUser); createdTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); assigneeTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); await tasksService.claimTask(assigneeTask.entry.id, candidateBaseApp); - const tabVisibilityFieldsId = await formCloudService.getIdByFormName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name, browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.forms.tabVisibilityFields.name); + const formCloudService = new FormCloudService(apiServiceHrUser); - const tabVisibilityVarsId = await formCloudService.getIdByFormName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name, browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.forms.tabVisibilityVars.name); - - for (let i = 0; i < 3; i++) { - visibilityConditionTasks[i] = await tasksService.createStandaloneTaskWithForm(StringUtil.generateRandomString(), - simpleApp, tabVisibilityFieldsId); - await tasksService.claimTask(visibilityConditionTasks[i].entry.id, simpleApp); - } - - for (let i = 3; i < 6; i++) { - visibilityConditionTasks[i] = await tasksService.createStandaloneTaskWithForm(StringUtil.generateRandomString(), - simpleApp, tabVisibilityVarsId); - await tasksService.claimTask(visibilityConditionTasks[i].entry.id, simpleApp); - } + const formToTestValidationsKey = await formCloudService.getIdByFormName(browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name, + browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.forms.formtotestvalidations); formValidationsTask = await tasksService.createStandaloneTaskWithForm(StringUtil.generateRandomString(), candidateBaseApp, formToTestValidationsKey); await tasksService.claimTask(formValidationsTask.entry.id, candidateBaseApp); @@ -137,9 +95,13 @@ describe('Task form cloud component', () => { processInstancesService = new ProcessInstancesService(apiServiceHrUser); await processInstancesService.createProcessInstance(processDefinition.entry.key, candidateBaseApp); - processDefinition = await processDefinitionService.getProcessDefinitionByName('dropdownrestprocess', simpleApp); + processDefinition = await processDefinitionService + .getProcessDefinitionByName(browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.processes.dropdownrestprocess, simpleApp); + const formProcess = await processInstancesService.createProcessInstance(processDefinition.entry.key, simpleApp); + const formTasks = await queryService.getProcessInstanceTasks(formProcess.entry.id, simpleApp); + formTaskId = formTasks.list.entries[0].entry.id; await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); @@ -328,186 +290,4 @@ describe('Task form cloud component', () => { }); }); - describe('Complete task with form - cloud directive', () => { - - beforeEach(async () => { - await navigationBarPage.navigateToProcessServicesCloudPage(); - await appListCloudComponent.checkApsContainer(); - await appListCloudComponent.goToApp(simpleApp); - }); - - it('[C315174] Should be able to complete a standalone task with visible tab with empty value for field', async () => { - await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[0].entry.name); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[0].entry.name); - await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldValue); - await widget.textWidget().isWidgetVisible(widgets.textOneId); - await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); - await widget.textWidget().setValue(widgets.textOneId, value.displayTab); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldValue); - - await taskFormCloudComponent.clickCompleteButton(); - await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[0].entry.name); - - await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[0].entry.name); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[0].entry.name); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldValue); - }); - - it('[C315177] Should be able to complete a standalone task with invisible tab with invalid value for field', async () => { - await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[1].entry.name); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[1].entry.name); - await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); - await widget.textWidget().isWidgetVisible(widgets.textOneId); - - await widget.textWidget().setValue(widgets.textOneId, value.displayTab); - await widget.textWidget().setValue(widgets.textThreeId, value.displayTab); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldField); - await widget.tab().clickTabByLabel(tab.tabFieldField); - await widget.textWidget().isWidgetVisible(widgets.numberOneId); - await widget.textWidget().setValue(widgets.numberOneId, value.displayTab); - - await widget.tab().clickTabByLabel(tab.tabWithFields); - await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); - await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldField); - - await taskFormCloudComponent.clickCompleteButton(); - await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[1].entry.name); - - await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[1].entry.name); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[1].entry.name); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldField); - }); - - it('[C315178] Should be able to complete a standalone task with invisible tab with valid value', async () => { - await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[2].entry.name); - - await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[2].entry.name); - - await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldVar); - await widget.textWidget().isWidgetVisible(widgets.textOneId); - await widget.textWidget().isWidgetNotVisible(widgets.textFourId); - - await widget.textWidget().setValue(widgets.textOneId, value.displayTab); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldVar); - await widget.tab().clickTabByLabel(tab.tabFieldVar); - await widget.textWidget().isWidgetVisible(widgets.textFourId); - await widget.textWidget().setValue(widgets.textFourId, value.displayTab); - - await widget.tab().clickTabByLabel(tab.tabWithFields); - await widget.textWidget().setValue(widgets.textOneId, value.notDisplayTab); - await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldVar); - await taskFormCloudComponent.clickCompleteButton(); - - await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[2].entry.name); - - await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[2].entry.name); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[2].entry.name); - - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabFieldVar); - }); - - it('[C315175] Should be able to complete a standalone task with invisible tab with empty value for field', async () => { - await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[3].entry.name); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[3].entry.name); - await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarValue); - await widget.textWidget().isWidgetVisible(widgets.textOneId); - await widget.textWidget().isWidgetNotVisible(widgets.textTwoId); - - await taskFormCloudComponent.clickCompleteButton(); - await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[3].entry.name); - - await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[3].entry.name); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[3].entry.name); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarValue); - }); - - it('[C315176] Should not be able to complete a standalone task with visible tab with invalid value for field', async () => { - await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[4].entry.name); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[4].entry.name); - await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsNotDisplayedByLabel(tab.tabVarField); - await widget.textWidget().isWidgetVisible(widgets.textOneId); - await widget.textWidget().isWidgetNotVisible(widgets.numberOneId); - - await widget.textWidget().setValue(widgets.textOneId, value.displayTab); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarField); - - await widget.tab().clickTabByLabel(tab.tabVarField); - await widget.textWidget().setValue(widgets.numberOneId, value.displayTab); - - await expect(await taskFormCloudComponent.isCompleteButtonEnabled()).toEqual(false); - }); - - it('[C315179] Should be able to complete a standalone task with visible tab with valid value for field', async () => { - await tasksCloudDemoPage.myTasksFilter().clickTaskFilter(); - await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[5].entry.name); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[5].entry.name); - await taskHeaderCloudPage.checkTaskPropertyListIsDisplayed(); - - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarVar); - await widget.textWidget().isWidgetVisible(widgets.textOneId); - - await widget.tab().clickTabByLabel(tab.tabVarVar); - await widget.textWidget().setValue(widgets.textThreeId, value.displayTab); - - await taskFormCloudComponent.clickCompleteButton(); - await expect(await tasksCloudDemoPage.getActiveFilterName()).toBe('My Tasks'); - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsNotDisplayedByName(visibilityConditionTasks[5].entry.name); - - await tasksCloudDemoPage.completedTasksFilter().clickTaskFilter(); - await tasksCloudDemoPage.taskListCloudComponent().checkContentIsDisplayedByName(visibilityConditionTasks[5].entry.name); - await tasksCloudDemoPage.taskListCloudComponent().selectRow(visibilityConditionTasks[5].entry.name); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields); - await widget.tab().checkTabIsDisplayedByLabel(tab.tabVarVar); - }); - - }); - }); diff --git a/e2e/process-services-cloud/task-header-cloud.e2e.ts b/e2e/process-services-cloud/task-header-cloud.e2e.ts index a84e98b246..0267f923d3 100644 --- a/e2e/process-services-cloud/task-header-cloud.e2e.ts +++ b/e2e/process-services-cloud/task-header-cloud.e2e.ts @@ -16,7 +16,17 @@ */ import CONSTANTS = require('../util/constants'); -import { ApiService, AppListCloudPage, GroupIdentityService, IdentityService, LocalStorageUtil, LoginSSOPage, StringUtil, TaskHeaderCloudPage, TasksService } from '@alfresco/adf-testing'; +import { + ApiService, + AppListCloudPage, + GroupIdentityService, + IdentityService, + LocalStorageUtil, + LoginSSOPage, + StringUtil, + TaskHeaderCloudPage, + TasksService +} from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; import { NavigationBarPage } from '../pages/adf/navigationBarPage'; @@ -55,6 +65,7 @@ describe('Task Header cloud component', () => { let groupIdentityService: GroupIdentityService; beforeAll(async () => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); identityService = new IdentityService(apiService); groupIdentityService = new GroupIdentityService(apiService); @@ -67,12 +78,15 @@ describe('Task Header cloud component', () => { tasksService = new TasksService(apiService); const createdTaskId = await tasksService.createStandaloneTask(basicCreatedTaskName, simpleApp); + await tasksService.claimTask(createdTaskId.entry.id, simpleApp); + basicCreatedTask = await tasksService.getTask(createdTaskId.entry.id, simpleApp); + basicCreatedDate = moment(basicCreatedTask.entry.createdDate).format(formatDate); const completedTaskId = await tasksService.createStandaloneTask(completedTaskName, - simpleApp, {priority: priority, description: description, dueDate: basicCreatedTask.entry.createdDate}); + simpleApp, { priority: priority, description: description, dueDate: basicCreatedTask.entry.createdDate }); await tasksService.claimTask(completedTaskId.entry.id, simpleApp); await tasksService.completeTask(completedTaskId.entry.id, simpleApp); completedTask = await tasksService.getTask(completedTaskId.entry.id, simpleApp); @@ -87,7 +101,6 @@ describe('Task Header cloud component', () => { subTaskCreatedDate = moment(subTask.entry.createdDate).format(formatDate); await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); - }); afterAll(async () => { @@ -109,7 +122,7 @@ describe('Task Header cloud component', () => { await expect(await taskHeaderCloudPage.getDescription()) .toEqual(basicCreatedTask.entry.description === null ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : basicCreatedTask.entry.description); await expect(await taskHeaderCloudPage.getStatus()).toEqual(basicCreatedTask.entry.status); - await expect(await taskHeaderCloudPage.getPriority()).toEqual(basicCreatedTask.entry.priority === 0 ? '' : basicCreatedTask.entry.priority.toString()); + await expect(await taskHeaderCloudPage.getPriority()).toEqual(basicCreatedTask.entry.priority.toString()); await expect(await taskHeaderCloudPage.getCategory()).toEqual(!basicCreatedTask.entry.category ? CONSTANTS.TASK_DETAILS.NO_CATEGORY : basicCreatedTask.entry.category); await expect(await taskHeaderCloudPage.getDueDate()).toEqual(basicCreatedTask.entry.dueDate === null ? @@ -129,7 +142,7 @@ describe('Task Header cloud component', () => { await expect(await taskHeaderCloudPage.getDescription()) .toEqual(completedTask.entry.description === null ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : completedTask.entry.description); await expect(await taskHeaderCloudPage.getStatus()).toEqual(completedTask.entry.status); - await expect(await taskHeaderCloudPage.getPriority()).toEqual(completedTask.entry.priority === '0' ? '' : completedTask.entry.priority.toString()); + await expect(await taskHeaderCloudPage.getPriority()).toEqual(completedTask.entry.priority.toString()); await expect(await taskHeaderCloudPage.getCategory()).toEqual(!completedTask.entry.category ? CONSTANTS.TASK_DETAILS.NO_CATEGORY : completedTask.entry.category); await expect(await taskHeaderCloudPage.getDueDate()).toEqual(completedTask.entry.dueDate === null ? @@ -148,7 +161,7 @@ describe('Task Header cloud component', () => { await expect(await taskHeaderCloudPage.getDescription()) .toEqual(subTask.entry.description === null ? CONSTANTS.TASK_DETAILS.NO_DESCRIPTION : subTask.entry.description); await expect(await taskHeaderCloudPage.getStatus()).toEqual(subTask.entry.status); - await expect(await taskHeaderCloudPage.getPriority()).toEqual(subTask.entry.priority === 0 ? '' : subTask.entry.priority.toString()); + await expect(await taskHeaderCloudPage.getPriority()).toEqual(subTask.entry.priority.toString()); await expect(await taskHeaderCloudPage.getCategory()).toEqual(!subTask.entry.category ? CONSTANTS.TASK_DETAILS.NO_CATEGORY : subTask.entry.category); await expect(await taskHeaderCloudPage.getDueDate()).toEqual(subTask.entry.dueDate === null ? diff --git a/e2e/process-services-cloud/task-list-properties-sort.e2e.ts b/e2e/process-services-cloud/task-list-properties-sort.e2e.ts new file mode 100644 index 0000000000..2af12f1e06 --- /dev/null +++ b/e2e/process-services-cloud/task-list-properties-sort.e2e.ts @@ -0,0 +1,230 @@ +/*! + * @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 { browser } from 'protractor'; +import { + StringUtil, TasksService, + LoginSSOPage, ApiService, + AppListCloudPage, LocalStorageUtil, IdentityService, GroupIdentityService +} from '@alfresco/adf-testing'; +import { NavigationBarPage } from '../pages/adf/navigationBarPage'; +import { TasksCloudDemoPage } from '../pages/adf/demo-shell/process-services/tasksCloudDemoPage'; +import { TaskListCloudConfiguration } from './config/task-list-cloud.config'; + +describe('Edit task filters and task list properties', () => { + + const loginSSOPage = new LoginSSOPage(); + const navigationBarPage = new NavigationBarPage(); + + const appListCloudComponent = new AppListCloudPage(); + const tasksCloudDemoPage = new TasksCloudDemoPage(); + + let tasksService: TasksService; + let identityService: IdentityService; + let groupIdentityService: GroupIdentityService; + const apiService = new ApiService(browser.params.config.oauth2.clientId, browser.params.config.bpmHost, browser.params.config.oauth2.host, browser.params.config.providers); + + const simpleApp = browser.params.resources.ACTIVITI_CLOUD_APPS.SIMPLE_APP.name; + const candidateBaseApp = browser.params.resources.ACTIVITI_CLOUD_APPS.CANDIDATE_BASE_APP.name; + let createdTask, notDisplayedTask, priorityTask, subTask, + otherOwnerTask, testUser, groupInfo; + const priority = 30; + + beforeAll(async () => { + + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + identityService = new IdentityService(apiService); + groupIdentityService = new GroupIdentityService(apiService); + tasksService = new TasksService(apiService); + + testUser = await identityService.createIdentityUserWithRole(apiService, [identityService.ROLES.ACTIVITI_USER]); + + groupInfo = await groupIdentityService.getGroupInfoByGroupName('hr'); + await identityService.addUserToGroup(testUser.idIdentityService, groupInfo.id); + + await apiService.login(testUser.email, testUser.password); + + otherOwnerTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp); + await tasksService.claimTask(otherOwnerTask.entry.id, simpleApp); + + createdTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp); + await tasksService.claimTask(createdTask.entry.id, simpleApp); + + priorityTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp, { priority: priority }); + await tasksService.claimTask(priorityTask.entry.id, simpleApp); + + notDisplayedTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), candidateBaseApp); + await tasksService.claimTask(notDisplayedTask.entry.id, candidateBaseApp); + + subTask = await tasksService.createStandaloneTask(StringUtil.generateRandomString(), simpleApp, { 'parentTaskId': createdTask.entry.id }); + await tasksService.claimTask(subTask.entry.id, simpleApp); + + const jsonFile = new TaskListCloudConfiguration().getConfiguration(); + + await loginSSOPage.loginSSOIdentityService(testUser.email, testUser.password); + await LocalStorageUtil.setConfigField('adf-cloud-task-list', JSON.stringify(jsonFile)); + await LocalStorageUtil.setConfigField('adf-edit-task-filter', JSON.stringify({ + 'filterProperties': [ + 'taskId', + 'appName', + 'status', + 'assignee', + 'taskName', + 'parentTaskId', + 'priority', + 'standalone', + 'owner', + 'processDefinitionId', + 'processInstanceId', + 'lastModified', + 'sort', + 'order' + ], + 'sortProperties': [ + 'id', + 'name', + 'createdDate', + 'priority', + 'processDefinitionId', + 'processInstanceId', + 'parentTaskId', + 'priority', + 'standalone', + 'owner', + 'assignee' + ], + 'actions': [ + 'save', + 'saveAs', + 'delete' + ] + })); + }, 5 * 60 * 1000); + + afterAll(async (done) => { + await apiService.login(browser.params.identityAdmin.email, browser.params.identityAdmin.password); + await identityService.deleteIdentityUser(testUser.idIdentityService); + done(); + }); + + describe('Edit task filters and task list properties - sort properties', () => { + + beforeEach(async () => { + await navigationBarPage.navigateToProcessServicesCloudPage(); + await appListCloudComponent.checkApsContainer(); + await appListCloudComponent.goToApp(simpleApp); + await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); + await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); + + }); + + it('[C306901] Should display tasks sorted by task name when taskName is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Name'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); + + }); + + it('[C290156] Should display tasks ordered by id when Id is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Id'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); + + }); + + it('[C306903] Should display tasks sorted by processDefinitionId when processDefinitionId is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ProcessDefinitionId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessDefinitionId')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessDefinitionId')).toBe(true); + }); + + it('[C306905] Should display tasks sorted by processInstanceId when processInstanceId is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ProcessInstanceId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessInstanceId')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessInstanceId')).toBe(true); + }); + + it('[C306907] Should display tasks sorted by assignee when assignee is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Assignee'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Assignee')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Assignee')).toBe(true); + }); + + it('[C306911] Should display tasks sorted by parentTaskId when parentTaskId is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ParentTaskId'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ParentTaskId')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ParentTaskId')).toBe(true); + }); + + it('[C290087] Should display tasks ordered by priority when Priority is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Priority'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Priority')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Priority')).toBe(true); + + }); + + it('[C307115] Should display tasks sorted by owner when owner is selected from sort dropdown', async () => { + await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Owner'); + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); + + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Owner')).toBe(true); + + await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); + await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Owner')).toBe(true); + }); + }); + +}); diff --git a/e2e/process-services-cloud/task-list-properties.e2e.ts b/e2e/process-services-cloud/task-list-properties.e2e.ts index 8a299597b9..26b1b07dab 100644 --- a/e2e/process-services-cloud/task-list-properties.e2e.ts +++ b/e2e/process-services-cloud/task-list-properties.e2e.ts @@ -366,123 +366,4 @@ describe('Edit task filters and task list properties', () => { }); }); - - describe('Edit task filters and task list properties - sort properties', () => { - - beforeEach(async () => { - await navigationBarPage.navigateToProcessServicesCloudPage(); - await appListCloudComponent.checkApsContainer(); - await appListCloudComponent.goToApp(simpleApp); - await tasksCloudDemoPage.editTaskFilterCloudComponent().openFilter(); - await tasksCloudDemoPage.myTasksFilter().checkTaskFilterIsDisplayed(); - - }); - - it('[C306901] Should display tasks sorted by task name when taskName is selected from sort dropdown', async () => { - await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Name'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Name')).toBe(true); - - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Name')).toBe(true); - - }); - - it('[C290156] Should display tasks ordered by id when Id is selected from sort dropdown', async () => { - await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Id'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Id')).toBe(true); - - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Id')).toBe(true); - - }); - - it('[C306903] Should display tasks sorted by processDefinitionId when processDefinitionId is selected from sort dropdown', async () => { - await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ProcessDefinitionId'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessDefinitionId')).toBe(true); - - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessDefinitionId')).toBe(true); - }); - - it('[C306905] Should display tasks sorted by processInstanceId when processInstanceId is selected from sort dropdown', async () => { - await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ASSIGNED'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ProcessInstanceId'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ProcessInstanceId')).toBe(true); - - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ProcessInstanceId')).toBe(true); - }); - - it('[C306907] Should display tasks sorted by assignee when assignee is selected from sort dropdown', async () => { - await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Assignee'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Assignee')).toBe(true); - - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Assignee')).toBe(true); - }); - - it('[C306911] Should display tasks sorted by parentTaskId when parentTaskId is selected from sort dropdown', async () => { - await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('ParentTaskId'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'ParentTaskId')).toBe(true); - - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'ParentTaskId')).toBe(true); - }); - - it('[C290087] Should display tasks ordered by priority when Priority is selected from sort dropdown', async () => { - await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Priority'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Priority')).toBe(true); - - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Priority')).toBe(true); - - }); - - it('[C307114] Should display tasks sorted by standalone when standalone is selected from sort dropdown', async () => { - await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Standalone'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Standalone')).toBe(true); - - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Standalone')).toBe(true); - }); - - it('[C307115] Should display tasks sorted by owner when owner is selected from sort dropdown', async () => { - await tasksCloudDemoPage.editTaskFilterCloudComponent().clearAssignee(); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setStatusFilterDropDown('ALL'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setSortFilterDropDown('Owner'); - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('ASC'); - - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('ASC', 'Owner')).toBe(true); - - await tasksCloudDemoPage.editTaskFilterCloudComponent().setOrderFilterDropDown('DESC'); - await expect(await tasksCloudDemoPage.taskListCloudComponent().getDataTable().checkListIsSorted('DESC', 'Owner')).toBe(true); - }); - }); - }); diff --git a/e2e/protractor/save-remote.js b/e2e/protractor/save-remote.js index 377ab0070b..d901a60c0b 100644 --- a/e2e/protractor/save-remote.js +++ b/e2e/protractor/save-remote.js @@ -2,7 +2,7 @@ const htmlReporter = require('protractor-html-reporter-2'); const fs = require('fs'); const rimraf = require('rimraf'); const path = require('path'); -const projectRoot = path.resolve(__dirname,'../../'); +const projectRoot = path.resolve(__dirname, '../../'); let FOLDER = process.env.FOLDER || ''; @@ -115,35 +115,40 @@ async function saveReport(alfrescoJsApi, retryCount) { let temporaryHtmlPath = savePath + 'html/temporaryHtml/'; let lastFileName = ''; - let files = fs.readdirSync(savePath); + try { + let files = fs.readdirSync(savePath); - if (files && files.length > 0) { - for (const fileName of files) { - const testConfigReport = { - reportTitle: 'Protractor Test Execution Report', - outputPath: temporaryHtmlPath, - outputFilename: Math.random().toString(36).substr(2, 5) + filenameReport, - }; + if (files && files.length > 0) { + for (const fileName of files) { + const testConfigReport = { + reportTitle: 'Protractor Test Execution Report', + outputPath: temporaryHtmlPath, + outputFilename: Math.random().toString(36).substr(2, 5) + filenameReport, + }; - let filePath = `${projectRoot}/e2e-output/junit-report/` + fileName; + let filePath = `${projectRoot}/e2e-output/junit-report/` + fileName; - new htmlReporter().from(filePath, testConfigReport); - lastFileName = testConfigReport.outputFilename; + new htmlReporter().from(filePath, testConfigReport); + lastFileName = testConfigReport.outputFilename; + } } + + let lastHtmlFile = temporaryHtmlPath + lastFileName + '.html'; + + if (!(fs.lstatSync(lastHtmlFile).isDirectory())) { + output = output + fs.readFileSync(lastHtmlFile); + } + + let fileName = savePath + 'html/' + filenameReport + '.html'; + + fs.writeFileSync(fileName, output, 'utf8'); + + await uploadReport(alfrescoJsApi, filenameReport); + + } catch (e) { + console.log('Not possible upload junit report'); } - let lastHtmlFile = temporaryHtmlPath + lastFileName + '.html'; - - if (!(fs.lstatSync(lastHtmlFile).isDirectory())) { - output = output + fs.readFileSync(lastHtmlFile); - } - - let fileName = savePath + 'html/' + filenameReport + '.html'; - - fs.writeFileSync(fileName, output, 'utf8'); - - await uploadReport(alfrescoJsApi, filenameReport); - rimraf(`${projectRoot}/e2e-output/screenshots/`, function () { console.log('done delete screenshot'); }); diff --git a/lib/testing/src/lib/core/pages/data-table-component.page.ts b/lib/testing/src/lib/core/pages/data-table-component.page.ts index b4346ef13e..31bccbd144 100644 --- a/lib/testing/src/lib/core/pages/data-table-component.page.ts +++ b/lib/testing/src/lib/core/pages/data-table-component.page.ts @@ -122,19 +122,24 @@ export class DataTableComponentPage { */ async checkListIsSorted(sortOrder: string, columnTitle: string): Promise { const column = element.all(by.css(`div.adf-datatable-cell[title='${columnTitle}'] span`)); - // await BrowserVisibility.waitUntilElementIsVisible(column.first()); + await BrowserVisibility.waitUntilElementIsVisible(column.first()); const initialList = []; - await column.each(async (currentElement) => { - const text = await BrowserActions.getText(currentElement); + + const length = await column.count(); + + for (let i = 0; i < length; i++) { + const text = await BrowserActions.getText(column.get(i)); if (text.length !== 0) { initialList.push(text.toLowerCase()); } - }); + } + let sortedList = [...initialList]; sortedList = sortedList.sort(); if (sortOrder.toLocaleLowerCase() === 'desc') { sortedList = sortedList.reverse(); } + return initialList.toString() === sortedList.toString(); } diff --git a/lib/testing/src/lib/core/pages/form/widgets/attachFileWidgetCloud.ts b/lib/testing/src/lib/core/pages/form/widgets/attachFileWidgetCloud.ts index aad2d71f64..c4b327f98d 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/attachFileWidgetCloud.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/attachFileWidgetCloud.ts @@ -45,6 +45,7 @@ export class AttachFileWidgetCloud { async clickAttachContentFile(fileId: string): Promise { const uploadButton = this.widget.element(by.css(`button[id=${fileId}]`)); await BrowserActions.click(uploadButton); + await browser.sleep(1000); await BrowserActions.clickExecuteScript('button[id="attach-Alfresco Content"]'); } diff --git a/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts index 00bb2b306c..809f4eacb4 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/edit-process-filter-cloud-component.page.ts @@ -78,7 +78,7 @@ export class EditProcessFilterCloudComponentPage { const orderElement = element.all(by.cssContainingText('mat-option span', option)).first(); await BrowserActions.click(orderElement); - await browser.sleep(1000); + await browser.sleep(1500); } async getOrderFilterDropDownValue(): Promise { diff --git a/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts b/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts index 4404203d75..97a59df08c 100644 --- a/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts +++ b/lib/testing/src/lib/process-services-cloud/pages/edit-task-filter-cloud-component.page.ts @@ -82,7 +82,7 @@ export class EditTaskFilterCloudComponentPage { const orderElement = element.all(by.cssContainingText('mat-option span', option)).first(); await BrowserActions.click(orderElement); - await browser.sleep(1000); + await browser.sleep(1500); } getOrderFilterDropDownValue(): Promise { diff --git a/lib/testing/src/lib/process-services-cloud/resources/resources.ts b/lib/testing/src/lib/process-services-cloud/resources/resources.ts index 507557a3bb..be8932b4a6 100644 --- a/lib/testing/src/lib/process-services-cloud/resources/resources.ts +++ b/lib/testing/src/lib/process-services-cloud/resources/resources.ts @@ -24,17 +24,19 @@ export const ACTIVITI_CLOUD_APPS: any = { candidateUserProcess: 'candidateuserprocess', candidateGroupProcess: 'candidategroupprocess', anotherCandidateGroupProcess: 'anothercandidategroup', - uploadFileProcess: 'uploadfileprocess' + uploadFileProcess: 'uploadfileprocess', + processwithstarteventform: 'processwithstarteventform' }, forms: { starteventform: 'starteventform', - formtotestvalidations: 'formtotestvalidations' + formtotestvalidations: 'formtotestvalidations', + uploadfileform: 'uploadfileform' }, security: [ - {'role': 'ACTIVITI_ADMIN', 'groups': [], 'users': ['superadminuser']}, - {'role': 'ACTIVITI_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser', 'salesuser'] }, - {'role': 'APS_ADMIN', 'groups': [], 'users': ['superadminuser']}, - {'role': 'APS_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser', 'salesuser'] } + { 'role': 'ACTIVITI_ADMIN', 'groups': [], 'users': ['superadminuser'] }, + { 'role': 'ACTIVITI_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser', 'salesuser'] }, + { 'role': 'APS_ADMIN', 'groups': [], 'users': ['superadminuser'] }, + { 'role': 'APS_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser', 'salesuser'] } ] }, SIMPLE_APP: { @@ -73,7 +75,9 @@ export const ACTIVITI_CLOUD_APPS: any = { multiinstancedmnsequence: 'multiinstance-dmnsequence', multiinstancemanualtask: 'multiinstance-manualtask', multiinstancesubprocess: 'multiinstance-subprocess', - calledprocess: 'calledprocess' + calledprocess: 'calledprocess', + booleanvisibilityprocess: 'booleanvisibilityprocess', + numbervisibilityprocess: 'numbervisibilityprocess' }, forms: { tabVisibilityFields: { @@ -105,23 +109,33 @@ export const ACTIVITI_CLOUD_APPS: any = { }, uploadlocalfileform: { name: 'upload-localfile-form' + }, + booleanvisibility: { + name: 'booleanvisibility' + }, + requirednumbervisibility: { + name: 'requirednumbervisibility' } }, security: [ - {'role': 'ACTIVITI_ADMIN', 'groups': [], 'users': ['superadminuser']}, - {'role': 'ACTIVITI_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser']}, - {'role': 'APS_ADMIN', 'groups': [], 'users': ['superadminuser']}, - {'role': 'APS_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser'] } + { 'role': 'ACTIVITI_ADMIN', 'groups': [], 'users': ['superadminuser'] }, + { 'role': 'ACTIVITI_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser'] }, + { 'role': 'APS_ADMIN', 'groups': [], 'users': ['superadminuser'] }, + { 'role': 'APS_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser'] } ] }, SUB_PROCESS_APP: { name: 'subprocessapp', file_location: 'https://github.com/Alfresco/alfresco-ng2-components/blob/development/e2e/resources/activiti7/subprocessapp.zip?raw=true', + processes: { + processchild: 'processchild', + processparent: 'processparent' + }, security: [ - {'role': 'ACTIVITI_ADMIN', 'groups': [], 'users': ['superadminuser']}, - {'role': 'ACTIVITI_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser']}, - {'role': 'APS_ADMIN', 'groups': [], 'users': ['superadminuser']}, - {'role': 'APS_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser'] } + { 'role': 'ACTIVITI_ADMIN', 'groups': [], 'users': ['superadminuser'] }, + { 'role': 'ACTIVITI_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser'] }, + { 'role': 'APS_ADMIN', 'groups': [], 'users': ['superadminuser'] }, + { 'role': 'APS_USER', 'groups': ['hr', 'testgroup'], 'users': ['hruser'] } ] } }; diff --git a/protractor.conf.ts b/protractor.conf.ts index 7c3b2308e8..e5693f7471 100644 --- a/protractor.conf.ts +++ b/protractor.conf.ts @@ -17,7 +17,7 @@ const { uploadScreenshot, saveReport, cleanReportFolder } = require('./e2e/protr const argv = require('yargs').argv; const projectRoot = path.resolve(__dirname); -const width = 1366, height = 768; +const width = 1657, height = 1657; let ENV_FILE = process.env.ENV_FILE; let GROUP_SUFFIX = process.env.PREFIX; diff --git a/scripts/app-config-replace.js b/scripts/app-config-replace.js index 48b1ab0d32..f78f017960 100644 --- a/scripts/app-config-replace.js +++ b/scripts/app-config-replace.js @@ -1,7 +1,7 @@ // Protractor configuration file, see link for more information // https://github.com/angular/protractor/blob/master/lib/config.ts -require('dotenv').config({ path: process.env.ENV_FILE }); +require('dotenv').config({path: process.env.ENV_FILE}); const fs = require('fs'); const configPath = './demo-shell/dist/app.config.json'; @@ -10,13 +10,15 @@ fs.readFile(configPath, (err, appConfigString) => { if (err) throw err; let appConfig = JSON.parse(appConfigString); appConfig.providers = process.env.PROVIDERS; - appConfig.bpmHost = process.env.PROXY_HOST_ADF; - appConfig.ecmHost = process.env.PROXY_HOST_ADF; + appConfig.bpmHost = (process.env.PROXY_HOST_ADF || process.env.URL_HOST_BPM_ADF || process.env.URL_HOST_ADF); + appConfig.ecmHost = (process.env.PROXY_HOST_ADF || process.env.URL_HOST_ADF); appConfig.identityHost = process.env.URL_HOST_IDENTITY; appConfig.oauth2.host = process.env.URL_HOST_SSO_ADF; appConfig.notificationDefaultDuration = process.env.NOTIFICATION_LAST || 8000; appConfig.authType = process.env.AUTH_TYPE || 'BASIC'; let appConfigReplacedJson = JSON.stringify(appConfig); + + fs.writeFileSync(configPath, appConfigReplacedJson); }); diff --git a/scripts/travis/e2e/process-services-cloud-e2e.sh b/scripts/travis/e2e/process-services-cloud-e2e.sh index 4e2b6bc4c5..8f3b3acc36 100755 --- a/scripts/travis/e2e/process-services-cloud-e2e.sh +++ b/scripts/travis/e2e/process-services-cloud-e2e.sh @@ -13,7 +13,7 @@ export AUTH_TYPE="OAUTH" AFFECTED_LIBS="$(./scripts/affected-libs.sh -gnu -b $TRAVIS_BRANCH)"; AFFECTED_E2E="$(./scripts/git-util/affected-folder.sh -b $TRAVIS_BRANCH -f "e2e/$CONTEXT_ENV")"; -RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST_BPM" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" -host_sso "$E2E_HOST_SSO" -host_bpm "$E2E_HOST_BPM" -host_identity "$E2E_HOST_IDENTITY" -identity_admin_email "$E2E_ADMIN_EMAIL_IDENTITY" -identity_admin_password "$E2E_ADMIN_PASSWORD_IDENTITY" -prefix $TRAVIS_BUILD_NUMBER --use-dist ) +RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST_BPM" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" -host_sso "$E2E_HOST_SSO" -host_bpm "$E2E_HOST_BPM" -host_identity "$E2E_HOST_IDENTITY" -identity_admin_email "$E2E_ADMIN_EMAIL_IDENTITY" -identity_admin_password "$E2E_ADMIN_PASSWORD_IDENTITY" -prefix $TRAVIS_BUILD_NUMBER -b --use-dist ) ./node_modules/@alfresco/adf-cli/bin/adf-cli init-aae-env --host "$E2E_HOST_BPM" --oauth "$E2E_HOST_SSO" --username "$E2E_USERNAME" --password "$E2E_PASSWORD" --clientId 'activiti' || exit 1 node ./scripts/check-env/check-cs-env.js --host "$E2E_HOST_BPM" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1