* fix protractor conf

* remove update env

* fix cli error script cs

* change screenshot plugin

* remove unused param

* fix

* fix

* fix

* moment comment nvm

* fix

* fix

* fix

* fix

* remove adf redirect

* fix

* fix

* save remote report

* report fix

* improve save result

* fix folder save

* fix folder save

* fix placeholder pointer , they needs refactor later

* fix

* fix lint

* fix

* remove test already covered by unit
fix the test in core needed
exclude the one impossible to make it works without APS basic support

* lint

* fix some logout missing

* fix

* Fix the custom-tasks-filters.e2e

* fix lint

* fix

* fix

* fix

* Fix wait on start process  and on process definition options

* Fix logout before login again

* fix uplaod test

* fix

* Fix infodrawer with check detail and sleep

* lint

* increase list of excluded test

* fix

* fix lint

* change wait method datatable

* fix

* fix

* revert check value

* fix

* fix

* change tag test

Co-authored-by: maurizio vitale <maurizio.vitale@alfresco.com>
This commit is contained in:
Eugenio Romano
2020-09-04 13:27:55 +01:00
committed by GitHub
parent f17270621b
commit a630cfb390
132 changed files with 1109 additions and 1850 deletions

View File

@@ -116,6 +116,7 @@ describe('Comment component for Processes', () => {
await expect(await commentsPage.getTime(0)).toMatch(/(ago|few)/);
await expect(await commentsPage.getTime(1)).toMatch(/(ago|few)/);
await navigationBarPage.clickLogoutButton();
await loginPage.login(secondUser.email, secondUser.password);
await apiService.getInstance().activiti.taskApi.addTaskComment(thirdTaskComment, newTaskId);

View File

@@ -70,7 +70,9 @@ describe('Sorting for process filters', () => {
await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password);
await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(tenantId);
});
await navigationBarPage.clickLogoutButton();
});
it('[C260476] Should be able to create a filter on APS for running processes - Oldest first and check on ADF', async () => {
await apiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter({

View File

@@ -144,7 +144,7 @@ describe('Start Task - Custom App', () => {
it('[C286367] 20 Items per page', async () => {
await taskListSinglePage.typeItemsPerPage(itemsPerPage.twentyValue);
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfTasks + ' of ' + nrOfTasks);
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks);
@@ -158,7 +158,7 @@ describe('Start Task - Custom App', () => {
it('[C286365] 5 Items per page', async () => {
await taskListSinglePage.typeItemsPerPage(itemsPerPage.fiveValue);
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks);
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue);
@@ -170,7 +170,7 @@ describe('Start Task - Custom App', () => {
await paginationPage.clickOnNextPage();
currentPage++;
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks);
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue);
@@ -181,7 +181,7 @@ describe('Start Task - Custom App', () => {
await paginationPage.clickOnNextPage();
currentPage++;
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks);
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue);
@@ -192,7 +192,7 @@ describe('Start Task - Custom App', () => {
await paginationPage.clickOnNextPage();
currentPage++;
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks);
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue);
@@ -204,7 +204,7 @@ describe('Start Task - Custom App', () => {
it('[C286364] 10 Items per page', async () => {
currentPage = 1;
await taskListSinglePage.typeItemsPerPage(itemsPerPage.tenValue);
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks);
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue);
@@ -213,7 +213,7 @@ describe('Start Task - Custom App', () => {
});
await paginationPage.clickOnNextPage();
currentPage++;
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfTasks);
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.tenValue);
@@ -225,7 +225,7 @@ describe('Start Task - Custom App', () => {
it('[C286363] 15 Items per page', async () => {
currentPage = 1;
await taskListSinglePage.typeItemsPerPage(itemsPerPage.fifteenValue);
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + nrOfTasks);
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(itemsPerPage.fifteenValue);
@@ -234,7 +234,7 @@ describe('Start Task - Custom App', () => {
});
currentPage++;
await paginationPage.clickOnNextPage();
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfTasks + ' of ' + nrOfTasks);
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(nrOfTasks - itemsPerPage.fifteenValue);
@@ -260,7 +260,7 @@ describe('Start Task - Custom App', () => {
currentPage = 1;
await taskListSinglePage.typeItemsPerPage(itemsPerPage.fiveValue);
await taskListSinglePage.typePage(currentPage);
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage);
await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages);
await paginationPage.checkPageSelectorIsDisplayed();
@@ -271,7 +271,7 @@ describe('Start Task - Custom App', () => {
currentPage++;
await taskListSinglePage.typePage(currentPage);
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage);
await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages);
await paginationPage.checkPageSelectorIsDisplayed();
@@ -282,7 +282,7 @@ describe('Start Task - Custom App', () => {
currentPage++;
await taskListSinglePage.typePage(currentPage);
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage);
await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages);
await paginationPage.checkPageSelectorIsDisplayed();
@@ -293,7 +293,7 @@ describe('Start Task - Custom App', () => {
currentPage++;
await taskListSinglePage.typePage(currentPage);
await taskListSinglePage.taskList().getDataTable().waitForTableBody();
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await paginationPage.getCurrentPage()).toEqual('Page ' + currentPage);
await expect(await paginationPage.getTotalPages()).toEqual(totalNrOfPages);
await paginationPage.checkPageSelectorIsDisplayed();
@@ -315,7 +315,7 @@ describe('Start Task - Custom App', () => {
it('[C286413] Task is displayed when typing into dueAfter field a date before the tasks due date', async () => {
await taskListSinglePage.typeDueAfter(beforeDate);
await taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]);
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1);
});
@@ -336,7 +336,7 @@ describe('Start Task - Custom App', () => {
it('[C286425] Task is displayed when typing into dueBefore field a date after the task due date', async () => {
await taskListSinglePage.typeDueBefore(afterDate);
await taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]);
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1);
});
@@ -354,7 +354,7 @@ describe('Start Task - Custom App', () => {
it('[C286427] Task is displayed when typing into dueAfter field a date before the tasks due date and into dueBefore a date after', async () => {
await taskListSinglePage.typeDueBefore(afterDate);
await taskListSinglePage.typeDueAfter(beforeDate);
await taskListSinglePage.taskList().checkContentIsDisplayed(paginationTasksName[0]);
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1);
});
@@ -362,6 +362,7 @@ describe('Start Task - Custom App', () => {
await taskListSinglePage.typeDueBefore(afterDate);
await taskListSinglePage.typeDueAfter(afterDate);
await taskListSinglePage.paginationPage().checkPaginationIsNotDisplayed();
await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage);
});
it('[C280515] Should be able to see only the tasks of a specific app when typing the apps id in the appId field', async () => {
@@ -397,6 +398,7 @@ describe('Start Task - Custom App', () => {
it('[C280629] Should be able to see only the task with specific taskId when typing it in the task Id field', async () => {
await taskListSinglePage.typeTaskId(taskWithDueDate.id);
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await taskListSinglePage.getTaskId()).toEqual(taskWithDueDate.id);
await taskListSinglePage.taskList().checkContentIsDisplayed(taskWithDueDate.name);
@@ -405,6 +407,7 @@ describe('Start Task - Custom App', () => {
it('[C280630] Should be able to see No tasks found when typing an invalid taskId', async () => {
await taskListSinglePage.typeTaskId(invalidTaskId);
await expect(await taskListSinglePage.getTaskId()).toEqual(invalidTaskId);
await expect(await taskListSinglePage.taskList().getNoTasksFoundMessage()).toEqual(noTasksFoundMessage);
@@ -412,6 +415,7 @@ describe('Start Task - Custom App', () => {
it('[C286589] Should be able to see only completed tasks when choosing Completed from state drop down', async () => {
await taskListSinglePage.selectState('Completed');
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[0].name);
await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[1].name);
@@ -421,6 +425,7 @@ describe('Start Task - Custom App', () => {
it('[C286597] Should be able to see only running tasks when choosing Active from state drop down', async () => {
await taskListSinglePage.selectState('Active');
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[0].name);
await taskListSinglePage.taskList().checkContentIsNotDisplayed(completedTasks[1].name);
@@ -433,6 +438,7 @@ describe('Start Task - Custom App', () => {
it('[C286598] Should be able to see all tasks when choosing All from state drop down', async () => {
await taskListSinglePage.selectState('All');
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[0].name);
await taskListSinglePage.taskList().checkContentIsDisplayed(completedTasks[1].name);
@@ -452,7 +458,7 @@ describe('Start Task - Custom App', () => {
await taskListSinglePage.clickResetButton();
await taskListSinglePage.typeProcessDefinitionId(processDefinitionId.processDefinitionId);
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(4);
await taskListSinglePage.getAllProcessDefinitionIds().then(async (list) => {
await expect(ArrayUtil.arrayContainsArray(list, processDefinitionIds)).toEqual(true);
@@ -475,6 +481,7 @@ describe('Start Task - Custom App', () => {
await taskListSinglePage.clickResetButton();
await taskListSinglePage.typeProcessInstanceId(processDefinitionId.id);
await taskListSinglePage.taskList().getDataTable().waitTillContentLoaded();
await expect(await taskListSinglePage.getProcessInstanceId()).toEqual(processDefinitionId.id);
await expect(await taskListSinglePage.taskList().getDataTable().numberOfRows()).toBe(1);

View File

@@ -78,6 +78,7 @@ describe('Dynamic Table', () => {
afterAll(async () => {
await apiService.getInstance().login(user.email, user.password);
await apiService.getInstance().activiti.modelsApi.deleteModel(appId);
await navigationBarPage.clickLogoutButton();
});
beforeEach(async () => {

View File

@@ -65,8 +65,10 @@ describe('Empty Process List Test', () => {
await processFiltersPage.clickCreateProcessButton();
await processFiltersPage.clickNewProcessDropdown();
await processFiltersPage.checkStartProcessIsDisplay();
await startProcessPage.selectFromProcessDropdown(appWithProcess.process_wse_name);
await startProcessPage.clickStartProcessButton();
await expect(await processFiltersPage.numberOfProcessRows()).toEqual(1);
await processDetailsPage.checkProcessDetailsCard();
@@ -78,6 +80,7 @@ describe('Empty Process List Test', () => {
await processFiltersPage.clickCreateProcessButton();
await processFiltersPage.clickNewProcessDropdown();
await processFiltersPage.checkStartProcessIsDisplay();
await startProcessPage.selectFromProcessDropdown(simpleAppWithUserForm.processName);
await startProcessPage.clickStartProcessButton();

View File

@@ -18,7 +18,6 @@
import {
ApiService,
ApplicationsUtil,
BrowserActions,
LoginPage,
ProcessUtil,
UsersActions,
@@ -44,12 +43,12 @@ describe('Form widgets', () => {
const newTask = 'First task';
let processUserModel;
let appModel;
let appModelWidget;
describe('Form widgets', () => {
const app = browser.params.resources.Files.WIDGETS_SMOKE_TEST;
const appFields = app.form_fields;
const appWidget = browser.params.resources.Files.WIDGETS_SMOKE_TEST;
const appFields = appWidget.form_fields;
beforeAll(async () => {
await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password);
@@ -58,17 +57,17 @@ describe('Form widgets', () => {
await apiService.getInstance().login(processUserModel.email, processUserModel.password);
appModel = await applicationsService.importPublishDeployApp(app.file_path);
appModelWidget = await applicationsService.importPublishDeployApp(appWidget.file_path);
await loginPage.login(processUserModel.email, processUserModel.password);
await (await new NavigationBarPage().navigateToProcessServicesPage()).goToApp(appModel.name);
await (await new NavigationBarPage().navigateToProcessServicesPage()).goToApp(appModelWidget.name);
await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS);
const task = await taskPage.createNewTask();
await task.addName(newTask);
await task.addDescription('Description');
await task.selectForm(app.formName);
await task.selectForm(appWidget.formName);
await task.clickStartButton();
await taskPage.tasksListPage().checkContentIsDisplayed(newTask);
@@ -83,9 +82,11 @@ describe('Form widgets', () => {
});
afterAll(async () => {
await new NavigationBarPage().clickLogoutButton();
await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password);
await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId);
await apiService.getInstance().logout();
});
it('[C272778] Should display text and multi-line in form', async () => {
@@ -193,8 +194,9 @@ describe('Form widgets', () => {
describe('with fields involving other people', () => {
const app = browser.params.resources.Files.FORM_ADF;
let deployedApp, process;
let process;
const appFields = app.form_fields;
let appModel;
beforeAll(async () => {
await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password);
@@ -204,18 +206,14 @@ describe('Form widgets', () => {
await apiService.getInstance().login(processUserModel.email, processUserModel.password);
appModel = await applicationsService.importPublishDeployApp(app.file_path);
const appDefinitions = await apiService.getInstance().activiti.appsApi.getAppDefinitions();
deployedApp = appDefinitions.data.find((currentApp) => {
return currentApp.modelId === appModel.id;
});
const processUtil = new ProcessUtil(apiService);
process = await processUtil.startProcessOfApp(appModel.name);
await loginPage.login(processUserModel.email, processUserModel.password);
});
beforeEach(async () => {
const urlToNavigateTo = `${browser.baseUrl}/activiti/apps/${deployedApp.id}/tasks/`;
await BrowserActions.getUrl(urlToNavigateTo);
await (await new NavigationBarPage().navigateToProcessServicesPage()).goToApp(appModel.name);
await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS);
await taskPage.formFields().checkFormIsDisplayed();
});

View File

@@ -39,7 +39,6 @@ import moment = require('moment');
describe('Info Drawer', () => {
const app = browser.params.resources.Files.SIMPLE_APP_WITH_USER_FORM;
const loginPage = new LoginPage();
const navigationBarPage = new NavigationBarPage();
const taskPage = new TasksPage();
@@ -138,8 +137,12 @@ describe('Info Drawer', () => {
await taskPage.checkTaskTitle(name);
await expect(await taskPage.taskDetails().getPriority()).toEqual(taskDetails.priority);
await taskPage.taskDetails().updatePriority('40');
await taskPage.taskDetails().checkTaskDetailsDisplayed();
await browser.sleep(2000);
await expect(await taskPage.taskDetails().getPriority()).toEqual('40');
await taskPage.taskDetails().updatePriority();
await taskPage.taskDetails().checkTaskDetailsDisplayed();
await browser.sleep(2000);
await expect(await taskPage.taskDetails().getPriority()).toEqual('0');
await taskPage.taskDetails().clickCompleteFormTask();
@@ -254,10 +257,12 @@ describe('Info Drawer', () => {
await taskPage.tasksListPage().checkTaskListIsLoaded();
await taskPage.tasksListPage().getDataTable().waitForTableBody();
await taskPage.tasksListPage().checkContentIsNotDisplayed(app.taskName);
await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS);
await taskPage.tasksListPage().checkTaskListIsLoaded();
await taskPage.tasksListPage().getDataTable().waitForTableBody();
await taskPage.taskDetails().checkTaskDetailsDisplayed();
await browser.sleep(2000);
await shouldHaveInfoDrawerDetails({
...taskDetails,
dueDate: date.header,
@@ -277,10 +282,13 @@ describe('Info Drawer', () => {
await taskPage.tasksListPage().checkTaskListIsLoaded();
await taskPage.tasksListPage().getDataTable().waitForTableBody();
await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS);
await taskPage.tasksListPage().checkContentIsDisplayed(app.taskName);
await taskPage.tasksListPage().selectRow(app.taskName);
await taskPage.checkTaskTitle(app.taskName);
await taskPage.taskDetails().checkTaskDetailsDisplayed();
await browser.sleep(2000);
await shouldHaveInfoDrawerDetails({
...taskDetails,
dueDate: 'No date',
@@ -303,6 +311,8 @@ describe('Info Drawer', () => {
await taskPage.tasksListPage().selectRow(name);
await taskPage.checkTaskTitle(name);
await taskPage.taskDetails().checkTaskDetailsDisplayed();
await browser.sleep(2000);
await expect(await taskPage.taskDetails().isAssigneeClickable()).toBeTruthy();
await shouldHaveInfoDrawerDetails({
...taskDetails,

View File

@@ -17,7 +17,6 @@
import { element, by, protractor, browser } from 'protractor';
import * as path from 'path';
import * as remote from 'selenium-webdriver/remote';
import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing';
export class AttachmentListPage {
@@ -34,8 +33,6 @@ export class AttachmentListPage {
}
async clickAttachFileButton(fileLocation: string): Promise<void> {
browser.setFileDetector(new remote.FileDetector());
await BrowserVisibility.waitUntilElementIsPresent(this.attachFileButton);
await this.attachFileButton.sendKeys(path.resolve(path.join(browser.params.testConfig.main.rootPath, fileLocation)));
}

View File

@@ -43,7 +43,7 @@ export class ChecklistDialog {
async getNameFieldPlaceholder(): Promise<string> {
await BrowserVisibility.waitUntilElementIsVisible(this.nameField);
return this.nameField.getAttribute('placeholder');
return this.nameField.getAttribute('data-placeholder');
}
async checkCancelButtonIsEnabled(): Promise<void> {

View File

@@ -59,7 +59,7 @@ export class StartTaskDialogPage {
async getAssignee(): Promise<string> {
await BrowserVisibility.waitUntilElementIsVisible(this.assignee);
return this.assignee.getAttribute('placeholder');
return this.assignee.getAttribute('data-placeholder');
}
async selectForm(form): Promise<void> {

View File

@@ -29,7 +29,8 @@ export class FiltersPage {
async goToFilter(filterName): Promise<void> {
await BrowserActions.closeMenuAndDialogs();
await BrowserActions.clickExecuteScript(`[data-automation-id="${filterName}_filter"]`);
const filter = element(by.css(`button[data-automation-id="${filterName}_filter"]`));
await BrowserActions.click(filter);
}
async sortByName(sortOrder: string): Promise<void> {

View File

@@ -16,7 +16,7 @@
*/
import { BrowserActions, BrowserVisibility, DataTableComponentPage, StartProcessPage } from '@alfresco/adf-testing';
import { by, element } from 'protractor';
import { Locator, by, element } from 'protractor';
export class ProcessFiltersPage {
@@ -30,10 +30,11 @@ export class ProcessFiltersPage {
accordionMenu = element(by.css('.app-processes-menu mat-accordion'));
buttonWindow = element(by.css('div > button[data-automation-id="btn-start-process"] > div'));
noContentMessage = element.all(by.css('.adf-empty-content__title')).first();
rows = by.css('adf-process-instance-list .adf-datatable-body adf-datatable-row[class*="adf-datatable-row"]');
rows: Locator = by.css('adf-process-instance-list .adf-datatable-body adf-datatable-row[class*="adf-datatable-row"]');
tableBody = element.all(by.css('adf-datatable .adf-datatable-body')).first();
nameColumn = by.css('div[class*="adf-datatable-body"] adf-datatable-row[class*="adf-datatable-row"] div[title="Name"] span');
processIcon = by.css('adf-icon[data-automation-id="adf-filter-icon"]');
nameColumn: Locator = by.css('div[class*="adf-datatable-body"] adf-datatable-row[class*="adf-datatable-row"] div[title="Name"] span');
processIcon: Locator = by.css('adf-icon[data-automation-id="adf-filter-icon"]');
startProcessEl = element(by.css('adf-start-process .adf-start-process'));
async startProcess(): Promise<StartProcessPage> {
await this.clickCreateProcessButton();
@@ -67,6 +68,10 @@ export class ProcessFiltersPage {
await BrowserActions.click(this.newProcessButton);
}
async checkStartProcessIsDisplay(): Promise<void> {
await BrowserVisibility.waitUntilElementIsVisible(this.startProcessEl);
}
async checkNoContentMessage(): Promise<void> {
await BrowserVisibility.waitUntilElementIsVisible(this.noContentMessage);
}
@@ -83,6 +88,7 @@ export class ProcessFiltersPage {
}
async numberOfProcessRows(): Promise<number> {
await BrowserVisibility.waitUntilElementIsVisible(element.all(this.rows).first());
return element.all(this.rows).count();
}

View File

@@ -17,15 +17,15 @@
import { ProcessServiceTabBarPage } from './process-service-tab-bar.page';
import { element, by } from 'protractor';
import { Locator, element, by } from 'protractor';
import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing';
export class ProcessServicesPage {
apsAppsContainer = element(by.css('.adf-app-listgrid'));
taskApp = element(by.css('mat-card[title="Task App"]'));
iconTypeLocator = by.css('mat-icon[class*="card-logo-icon"]');
descriptionLocator = by.css('mat-card-subtitle[class*="subtitle"]');
iconTypeLocator: Locator = by.css('mat-icon[class*="card-logo-icon"]');
descriptionLocator: Locator = by.css('mat-card-subtitle[class*="subtitle"]');
async checkApsContainer(): Promise<void> {
await BrowserVisibility.waitUntilElementIsVisible(this.apsAppsContainer);

View File

@@ -16,7 +16,7 @@
*/
import { BrowserActions, BrowserVisibility, DropdownPage, TabsPage } from '@alfresco/adf-testing';
import { browser, by, element, Key } from 'protractor';
import { Locator, browser, by, element, Key } from 'protractor';
import { AppSettingsTogglesPage } from './dialog/app-settings-toggles.page';
export class TaskDetailsPage {
@@ -24,6 +24,7 @@ export class TaskDetailsPage {
appSettingsTogglesClass = new AppSettingsTogglesPage();
formContent = element(by.css('adf-form'));
formNameField = element(by.css('[data-automation-id="card-textitem-value-formName"]'));
formNameButton = element(by.css('[data-automation-id="card-textitem-toggle-formName"]'));
assigneeField = element(by.css('[data-automation-id="card-textitem-value-assignee"]'));
@@ -43,8 +44,8 @@ export class TaskDetailsPage {
addCommentButton = element(by.css('[data-automation-id="comments-input-add"]'));
involvePeopleButton = element(by.css('div[class*="add-people"]'));
addPeopleField = element(by.css('input[data-automation-id="adf-people-search-input"]'));
addInvolvedUserButton = element(by.css('button[id="add-people"] span'));
emailInvolvedUser = by.xpath('following-sibling::div[@class="adf-people-email"]');
addInvolvedUserButton = element(by.css('button[id="add-people"]'));
emailInvolvedUser: Locator = by.css('[data-automation-id="adf-people-email"]');
taskDetailsInfoDrawer = element(by.tagName('adf-info-drawer'));
taskDetailsSection = element(by.css('div[data-automation-id="app-tasks-details"]'));
taskDetailsEmptySection = element(by.css('div[data-automation-id="adf-tasks-details--empty"]'));
@@ -110,24 +111,17 @@ export class TaskDetailsPage {
await this.attachFormDropdown.selectDropdownOption(option);
}
async checkCancelAttachFormIsDisplayed(): Promise<void> {
await BrowserVisibility.waitUntilElementIsVisible(this.cancelAttachForm);
}
async noFormIsDisplayed(): Promise<void> {
await BrowserVisibility.waitUntilElementIsNotVisible(this.formContent);
}
async clickCancelAttachForm(): Promise<void> {
await BrowserActions.click(this.cancelAttachForm);
}
async checkRemoveAttachFormIsDisplayed() {
await BrowserVisibility.waitUntilElementIsVisible(this.removeAttachForm);
}
async clickRemoveAttachForm(): Promise<void> {
await BrowserActions.click(this.removeAttachForm);
await browser.sleep(2000);
}
async checkAttachFormButtonIsDisplayed(): Promise<void> {
@@ -142,9 +136,8 @@ export class TaskDetailsPage {
return BrowserActions.click(this.attachFormButton);
}
async checkFormIsAttached(formName): Promise<void> {
const attachedFormName = await BrowserActions.getInputValue(this.formNameField);
await expect(attachedFormName).toEqual(formName);
async checkFormIsAttached(formName: string): Promise<void> {
await BrowserVisibility.waitUntilElementHasValue(this.formNameField, formName);
}
getFormName(): Promise<string> {
@@ -210,7 +203,7 @@ export class TaskDetailsPage {
async getDescriptionPlaceholder(): Promise<string> {
await BrowserVisibility.waitUntilElementIsPresent(this.descriptionField);
return this.descriptionField.getAttribute('placeholder');
return this.descriptionField.getAttribute('data-placeholder');
}
getDueDate(): Promise<string> {
@@ -226,11 +219,13 @@ export class TaskDetailsPage {
await BrowserActions.clearWithBackSpace(this.priority);
await BrowserActions.clearSendKeys(element(by.css('input[data-automation-id="card-textitem-value-priority"]')), priority ? priority : ' ');
await this.priority.sendKeys(Key.TAB);
await browser.sleep(1000);
}
async updateDueDate(): Promise<void> {
await BrowserActions.click(this.dueDateField);
await BrowserActions.click(element.all(by.css('.mat-datetimepicker-calendar-body-cell')).first());
await browser.sleep(1000);
}
async updateDescription(description?: string): Promise<void> {
@@ -238,12 +233,16 @@ export class TaskDetailsPage {
await BrowserActions.clearWithBackSpace(this.descriptionField);
await BrowserActions.clearSendKeys(element(by.css('[data-automation-id="card-textitem-value-description"]')), description ? description : '');
await this.descriptionField.sendKeys(Key.TAB);
await browser.sleep(1000);
}
async updateAssignee(fullName: string): Promise<void> {
await BrowserActions.click(this.assigneeButton);
await BrowserActions.clearSendKeys(element(by.css('[id="userSearchText"]')), fullName);
await BrowserActions.click(element(by.cssContainingText('.adf-people-full-name', fullName)));
await BrowserVisibility.waitUntilElementIsVisible(element(by.css(`adf-datatable-row[class*='is-selected']`)));
await browser.sleep(2000);
await BrowserActions.click(element(by.css('button[id="add-people"]')));
}
@@ -293,7 +292,7 @@ export class TaskDetailsPage {
}
async checkUserIsSelected(user: string): Promise<void> {
const row = element(by.cssContainingText('div[class*="search-list-container"] div[class*="people-full-name"]', user));
const row = this.getRowsUser(user);
await BrowserVisibility.waitUntilElementIsVisible(row);
}
@@ -302,7 +301,7 @@ export class TaskDetailsPage {
}
getRowsUser(user: string) {
return element(by.cssContainingText('div[class*="people-full-name"]', user));
return element(by.css(`div[data-automation-id="adf-people-full-name-${user.replace(' ', '-')}"]`));
}
async removeInvolvedUser(user): Promise<void> {
@@ -349,7 +348,7 @@ export class TaskDetailsPage {
async getInvolvePeoplePlaceholder(): Promise<string> {
await BrowserVisibility.waitUntilElementIsVisible(this.addPeopleField);
return this.addPeopleField.getAttribute('placeholder');
return this.addPeopleField.getAttribute('data-placeholder');
}
async checkCancelButtonIsEnabled(): Promise<void> {
@@ -408,7 +407,7 @@ export class TaskDetailsPage {
}
async clickCompleteFormTask(): Promise<void> {
await BrowserActions.clickScript(this.completeFormTask);
await BrowserActions.click(this.completeFormTask);
}
async getEmptyTaskDetailsMessage(): Promise<string> {

View File

@@ -15,13 +15,13 @@
* limitations under the License.
*/
import { by, ElementFinder } from 'protractor';
import { Locator, by, ElementFinder } from 'protractor';
import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing';
export class TaskFiltersPage {
filter;
taskIcon = by.css('adf-icon[data-automation-id="adf-filter-icon"]');
taskIcon: Locator = by.css('adf-icon[data-automation-id="adf-filter-icon"]');
constructor(filter: ElementFinder) {
this.filter = filter;

View File

@@ -16,7 +16,7 @@
*/
import { BrowserActions, BrowserVisibility, DataTableComponentPage } from '@alfresco/adf-testing';
import { by, element } from 'protractor';
import { browser, by, element } from 'protractor';
export class TasksListPage {
@@ -46,6 +46,7 @@ export class TasksListPage {
async selectRow(taskName: string): Promise<void> {
await this.dataTable.selectRow('Name', taskName);
await browser.sleep(1000);
}
getAllRowsNameColumn(): Promise<string[]> {

View File

@@ -21,7 +21,7 @@ import { TaskDetailsPage } from './task-details.page';
import { FiltersPage } from './filters.page';
import { ChecklistDialog } from './dialog/create-checklist-dialog.page';
import { TasksListPage } from './tasks-list.page';
import { element, by } from 'protractor';
import { Locator, element, by } from 'protractor';
import { BrowserVisibility, BrowserActions, FormFields } from '@alfresco/adf-testing';
export class TasksPage {
@@ -29,14 +29,14 @@ export class TasksPage {
newTaskButton = element(by.css('button[data-automation-id="btn-start-task"]'));
addChecklistButton = element(by.css('button[class*="adf-add-to-checklist-button"]'));
rowByRowName = by.xpath('ancestor::mat-chip');
checklistContainer = by.css('div[class*="checklist-menu"]');
checklistContainer: Locator = by.css('div[class*="checklist-menu"]');
taskTitle = '.adf-activiti-task-details__header span';
rows = by.css('div[class*="adf-datatable-body"] adf-datatable-row[class*="adf-datatable-row"] div[class*="adf-datatable-cell"]');
rows: Locator = by.css('div[class*="adf-datatable-body"] adf-datatable-row[class*="adf-datatable-row"] div[class*="adf-datatable-cell"]');
completeButtonNoForm = element(by.id('adf-no-form-complete-button'));
checklistDialog = element(by.id('checklist-dialog'));
checklistNoMessage = element(by.id('checklist-none-message'));
numberOfChecklists = element(by.css('[data-automation-id="checklist-label"] mat-chip'));
sortByName = by.css('div[data-automation-id="auto_id_name"]');
sortByName: Locator = by.css('div[data-automation-id="auto_id_name"]');
async createNewTask(): Promise<StartTaskDialogPage> {
await this.clickOnCreateButton();

View File

@@ -71,6 +71,10 @@ describe('People component', () => {
await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS);
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C279989] Should no people be involved when no user is typed', async () => {
await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]);
await taskPage.tasksListPage().selectRow(tasks[0]);

View File

@@ -18,7 +18,7 @@
import CONSTANTS = require('../util/constants');
import {
ApiService,
ApplicationsUtil,
ApplicationsUtil, BrowserActions,
FileBrowserUtil,
LocalStorageUtil,
LoginPage,
@@ -81,6 +81,7 @@ describe('Start Process Component', () => {
});
describe('Provider: BPM', () => {
beforeAll(async () => {
await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password);
@@ -110,6 +111,10 @@ describe('Start Process Component', () => {
await processServicesPage.checkApsContainer();
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C260458] Should NOT be able to start a process without process model', async () => {
await processServicesPage.goToApp('Task App');
await processServiceTabBarPage.clickProcessButton();
@@ -120,15 +125,17 @@ describe('Start Process Component', () => {
});
describe(' Once logged with user with app', () => {
beforeAll(async () => {
await loginPage.login(secondProcUserModel.email, secondProcUserModel.password);
});
beforeEach(async () => {
await loginPage.login(secondProcUserModel.email, secondProcUserModel.password);
await navigationBarPage.navigateToProcessServicesPage();
await processServicesPage.checkApsContainer();
});
afterEach(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C260441] Should display start process form and default name when creating a new process after selecting the process definition', async () => {
await processServicesPage.goToApp('Task App');
await processServiceTabBarPage.clickProcessButton();
@@ -373,7 +380,6 @@ describe('Start Process Component', () => {
});
it('[C260457] Should display process in Completed when cancelled', async () => {
await loginPage.login(secondProcUserModel.email, secondProcUserModel.password);
await navigationBarPage.navigateToProcessServicesPage();
await processServicesPage.checkApsContainer();
await processServicesPage.goToApp(app.title);
@@ -494,11 +500,9 @@ describe('Start Process Component', () => {
await applicationsService.importPublishDeployApp(startProcessAttachFileApp.file_path);
});
afterAll(async () => {
await navigationBarPage.clickLogoutButton();
});
it('[C260490] Should be able to start a Process within ACS', async () => {
await BrowserActions.getUrl(`${browser.baseUrl}/settings`);
await LocalStorageUtil.setStorageItem('providers', 'ALL');
await loginPage.login(processUserModel.email, processUserModel.password);

View File

@@ -86,6 +86,7 @@ describe('Start Task - Task App', () => {
await task.clickStartButton();
await taskPage.tasksListPage().checkContentIsDisplayed(tasks[0]);
const taskDetails = await taskPage.taskDetails();
await taskDetails.clickInvolvePeopleButton();
await taskDetails.typeUser(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName);
await taskDetails.selectUserToInvolve(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName);

View File

@@ -82,6 +82,7 @@ describe('Task Assignee', () => {
afterAll(async () => {
await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password);
await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId);
await navigationBarPage.clickLogoutButton();
});
beforeEach(async () => {
@@ -214,6 +215,7 @@ describe('Task Assignee', () => {
await taskPage.tasksListPage().checkTaskListIsLoaded();
await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.candidateTask);
await navigationBarPage.clickLogoutButton();
await loginPage.login(candidate2.email, candidate2.password);
await navigationBarPage.navigateToProcessServicesPage();
await processServicesPage.checkApsContainer();
@@ -225,6 +227,7 @@ describe('Task Assignee', () => {
await taskPage.tasksListPage().checkTaskListIsLoaded();
await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.candidateTask);
await navigationBarPage.clickLogoutButton();
await loginPage.login(candidate1.email, candidate1.password);
await navigationBarPage.navigateToProcessServicesPage();
await processServicesPage.checkApsContainer();
@@ -253,6 +256,7 @@ describe('Task Assignee', () => {
await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.candidateTask);
await taskPage.taskDetails().checkClaimEnabled();
await navigationBarPage.clickLogoutButton();
await loginPage.login(candidate2.email, candidate2.password);
await navigationBarPage.navigateToProcessServicesPage();
await processServicesPage.checkApsContainer();

View File

@@ -150,6 +150,7 @@ describe('Task Details - Form', () => {
await taskDetailsPage.checkRemoveAttachFormIsDisplayed();
await tasksListPage.selectRow(otherTask.name);
await taskDetailsPage.checkFormIsAttached(otherAttachedForm.name);
});
@@ -214,6 +215,7 @@ describe('Task Details - Form', () => {
await tasksListPage.checkTaskListIsLoaded();
await tasksListPage.checkContentIsDisplayed(newTask.name);
await tasksListPage.selectRow(newTask.name);
await widget.tab().checkTabIsDisplayedByLabel(tab.tabWithFields);
await widget.tab().checkTabIsDisplayedByLabel(tab.tabFieldValue);
});

View File

@@ -65,6 +65,7 @@ describe('Task', () => {
await apiService.getInstance().activiti.modelsApi.deleteModel(appId);
await apiService.getInstance().login(browser.params.testConfig.admin.email, browser.params.testConfig.admin.password);
await apiService.getInstance().activiti.adminTenantsApi.deleteTenant(user.tenantId);
await navigationBarPage.clickLogoutButton();
});
it('[C279967] Should display default filters when an app is deployed', async () => {

View File

@@ -96,13 +96,16 @@ describe('Task List Pagination', () => {
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue + ' of ' + nrOfTasks);
await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue);
await paginationPage.clickOnNextPage();
currentPage++;
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks);
await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue);
await paginationPage.clickOnNextPage();
currentPage++;
await expect(await paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
await expect(await paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfTasks);
await expect(await taskPage.tasksListPage().getDataTable().numberOfRows()).toBe(itemsPerPage.fiveValue);

View File

@@ -68,6 +68,7 @@ describe('Typeahead widget', () => {
await expect(suggestions.sort()).toEqual(typeaheadWidget.case1.result.sort());
await widget.typeahedWidget().fillTypeaheadField(typeaheadWidget.case2.searchTerm);
await widget.typeahedWidget().checkDropDownListIsDisplayed();
suggestions = await widget.typeahedWidget().getDropDownList();
await expect(suggestions.sort()).toEqual(typeaheadWidget.case2.result);
@@ -80,6 +81,9 @@ describe('Typeahead widget', () => {
await taskPage.tasksListPage().selectRow(name);
await widget.typeahedWidget().checkTypeaheadFieldIsDisplayed();
await browser.sleep(1000);
await expect(await widget.typeahedWidget().getFieldValue('1583773306434')).toBe(typeaheadWidget.case2.result[0]);
});
});