Fix ps e2e (#5262)

* fix ps e2e

* fix upload unit report

* fix cspell

* Update cspell.json

* fix e2e

* remove extra space

* fix e2e increase resolution

* try add a sleep before to cehck sorted in order to give datable time to refresh

* log order

* fix log

* change async ins ort

* remove sort testcase
This commit is contained in:
Eugenio Romano
2019-11-21 10:12:52 +00:00
committed by Denys Vuika
parent 1ec827a90c
commit c61de922af
21 changed files with 882 additions and 566 deletions

View File

@@ -131,7 +131,14 @@
"devops",
"mouseenter",
"starteventform",
"formtotestvalidations"
"formtotestvalidations",
"requirednumbervisibility",
"numbervisibilityprocess",
"booleanvisibilityprocess",
"booleanvisibility",
"processparent",
"uploadfileform",
"processwithstarteventform"
],
"dictionaries": [
"html",

View File

@@ -100,6 +100,7 @@ export class TasksCloudDemoPage {
}
async getActiveFilterName(): Promise<string> {
await browser.sleep(500);
return BrowserActions.getText(this.activeFilter);
}

View File

@@ -30,9 +30,9 @@ export class StartProcessCloudConfiguration {
'value': 17
}
],
'variables': {
'my-key1': 'myvalue',
'my-key2': 'myvalue2'
'variable': {
'mykey1': 'myvalue',
'mykey2': 'myvalue2'
}
};
}

View File

@@ -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();
});
});

View File

@@ -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();
});
});

View File

@@ -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() => {

View File

@@ -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();
});

View File

@@ -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);
});
});
});

View File

@@ -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);
});
});
});

View File

@@ -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 ?

View File

@@ -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);
});
});
});

View File

@@ -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);
});
});
});

View File

@@ -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,6 +115,7 @@ async function saveReport(alfrescoJsApi, retryCount) {
let temporaryHtmlPath = savePath + 'html/temporaryHtml/';
let lastFileName = '';
try {
let files = fs.readdirSync(savePath);
if (files && files.length > 0) {
@@ -144,6 +145,10 @@ async function saveReport(alfrescoJsApi, retryCount) {
await uploadReport(alfrescoJsApi, filenameReport);
} catch (e) {
console.log('Not possible upload junit report');
}
rimraf(`${projectRoot}/e2e-output/screenshots/`, function () {
console.log('done delete screenshot');
});

View File

@@ -122,19 +122,24 @@ export class DataTableComponentPage {
*/
async checkListIsSorted(sortOrder: string, columnTitle: string): Promise<any> {
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();
}

View File

@@ -45,6 +45,7 @@ export class AttachFileWidgetCloud {
async clickAttachContentFile(fileId: string): Promise<void> {
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"]');
}

View File

@@ -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<string> {

View File

@@ -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<string> {

View File

@@ -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'] }
]
}
};

View File

@@ -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;

View File

@@ -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);
});

View File

@@ -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