From 4355c5f30528938ee9ff940e6f31138e8fdd03bf Mon Sep 17 00:00:00 2001 From: Denys Vuika Date: Thu, 29 Aug 2024 19:30:14 -0400 Subject: [PATCH] cleanup e2e resources [ci:force] --- .../form/attach-file-content-service.e2e.ts | 142 ----- .../form/dynamic-table-date-picker.e2e.ts | 84 --- .../form/form-people-widget.e2e.ts | 104 ---- .../form/form-widgets-component.e2e.ts | 251 --------- .../pages/task-filters.page.ts | 35 -- e2e/process-services/tasks/info-drawer.e2e.ts | 371 ------------- .../tasks/task-assignee.e2e.ts | 265 --------- .../tasks/task-details-no-form.e2e.ts | 69 --- .../widgets/amount-widget.e2e.ts | 94 ---- .../widgets/attach-folder-widget.e2e.ts | 76 --- .../widgets/checkbox-widget.e2e.ts | 81 --- .../widgets/document-template-widget.e2e.ts | 72 --- .../widgets/dropdown-widget.e2e.ts | 90 ---- .../widgets/dynamic-table-widget.e2e.ts | 199 ------- .../widgets/header-widget.e2e.ts | 77 --- .../widgets/hyperlink-widget.e2e.ts | 77 --- .../widgets/multi-line-widget.e2e.ts | 101 ---- .../widgets/number-widget.e2e.ts | 98 ---- .../widgets/people-group-widget.e2e.ts | 196 ------- .../widgets/people-widget.e2e.ts | 85 --- .../widgets/radio-buttons-widget.e2e.ts | 82 --- .../widgets/text-widget.e2e.ts | 115 ---- .../widget-visibility-condition.e2e.ts | 137 ----- .../apps/AppDynamicTableDropdown.zip | Bin 5414 -> 0 bytes e2e/resources/apps/App_file_form.zip | Bin 15505 -> 0 bytes e2e/resources/apps/Assignee.zip | Bin 12406 -> 0 bytes e2e/resources/apps/Dynamic Table App.zip | Bin 5618 -> 0 bytes e2e/resources/apps/More Widgets.zip | Bin 21180 -> 0 bytes e2e/resources/apps/No form app.zip | Bin 5089 -> 0 bytes .../apps/Start_process_attach_file.zip | Bin 7428 -> 0 bytes e2e/resources/apps/Test-ADF.zip | Bin 8928 -> 0 bytes e2e/resources/apps/WidgetApps.zip | Bin 146281 -> 0 bytes e2e/resources/apps/appWithUser.zip | Bin 9102 -> 0 bytes e2e/util/resources.js | 503 ------------------ 34 files changed, 3404 deletions(-) delete mode 100644 e2e/process-services/form/attach-file-content-service.e2e.ts delete mode 100644 e2e/process-services/form/dynamic-table-date-picker.e2e.ts delete mode 100644 e2e/process-services/form/form-people-widget.e2e.ts delete mode 100644 e2e/process-services/form/form-widgets-component.e2e.ts delete mode 100644 e2e/process-services/pages/task-filters.page.ts delete mode 100644 e2e/process-services/tasks/info-drawer.e2e.ts delete mode 100644 e2e/process-services/tasks/task-assignee.e2e.ts delete mode 100644 e2e/process-services/tasks/task-details-no-form.e2e.ts delete mode 100644 e2e/process-services/widgets/amount-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/attach-folder-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/checkbox-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/document-template-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/dropdown-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/dynamic-table-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/header-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/hyperlink-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/multi-line-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/number-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/people-group-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/people-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/radio-buttons-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/text-widget.e2e.ts delete mode 100644 e2e/process-services/widgets/widget-visibility-condition.e2e.ts delete mode 100644 e2e/resources/apps/AppDynamicTableDropdown.zip delete mode 100644 e2e/resources/apps/App_file_form.zip delete mode 100644 e2e/resources/apps/Assignee.zip delete mode 100644 e2e/resources/apps/Dynamic Table App.zip delete mode 100644 e2e/resources/apps/More Widgets.zip delete mode 100644 e2e/resources/apps/No form app.zip delete mode 100644 e2e/resources/apps/Start_process_attach_file.zip delete mode 100644 e2e/resources/apps/Test-ADF.zip delete mode 100644 e2e/resources/apps/WidgetApps.zip delete mode 100644 e2e/resources/apps/appWithUser.zip diff --git a/e2e/process-services/form/attach-file-content-service.e2e.ts b/e2e/process-services/form/attach-file-content-service.e2e.ts deleted file mode 100644 index 83060de3098..00000000000 --- a/e2e/process-services/form/attach-file-content-service.e2e.ts +++ /dev/null @@ -1,142 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, - ApplicationsUtil, - ContentNodeSelectorDialogPage, - IntegrationService, - LocalStorageUtil, - LoginPage, - UploadActions, - UserModel, - UsersActions, - Widget, - SearchService -} from '@alfresco/adf-testing'; -import { TasksPage } from './../pages/tasks.page'; -import { browser } from 'protractor'; -import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import CONSTANTS = require('../../util/constants'); - -describe('Attach File - Content service', () => { - - const app = browser.params.resources.Files.WIDGET_CHECK_APP; - - const loginPage = new LoginPage(); - const widget = new Widget(); - const taskPage = new TasksPage(); - const navigationBarPage = new NavigationBarPage(); - const contentNodeSelector = new ContentNodeSelectorDialogPage(); - - const apiServiceExternal = createApiService({ - provider: 'ECM', - hostEcm: browser.params.testConfig.adf_external_acs.host, - authType: 'BASIC' - }); - const usersActionsExternal = new UsersActions(apiServiceExternal); - - const apiService = createApiService({ provider: 'ALL' }); - const integrationService = new IntegrationService(apiService); - const applicationService = new ApplicationsUtil(apiService); - const searchService = new SearchService(apiService); - const uploadActions = new UploadActions(apiService); - const usersActions = new UsersActions(apiService); - - const pdfFileOne = { - name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name, - location: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_path - }; - - const pdfFileTwo = { - name: browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_name, - location: browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_path - }; - - const externalFile = 'Project Overview.ppt'; - const csIntegrations = ['adf dev', 'adf master']; - let user: UserModel; - - beforeAll(async () => { - await LocalStorageUtil.setStorageItem('providers', 'ALL'); - await apiService.loginWithProfile('admin'); - user = await usersActions.createUser(); - - await apiServiceExternal.loginWithProfile('admin'); - await usersActionsExternal.createUser(user); - - await integrationService.addCSIntegration({ - tenantId: user.tenantId, - name: csIntegrations[0], - host: browser.params.testConfig.appConfig.ecmHost - }); - await integrationService.addCSIntegration({ - tenantId: user.tenantId, - name: csIntegrations[1], - host: browser.params.testConfig.adf_external_acs.host - }); - - await apiService.login(user.username, user.password); - await uploadActions.uploadFile(pdfFileTwo.location, pdfFileTwo.name, '-my-'); - await applicationService.importPublishDeployApp(app.file_path); - - await searchService.isSearchable(pdfFileTwo.name); - await searchService.isSearchable(externalFile); - }); - - afterAll(async () => { - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(user.tenantId); - }); - - beforeEach(async () => { - await loginPage.login(user.username, user.password); - await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - }); - - afterEach(async () => { - await navigationBarPage.clickLogoutButton(); - }); - - it('[C315268] Attach file - Able to upload more than one file (both ACS and local)', async () => { - const name = 'Attach local and acs file'; - await taskPage.createTask({ name, formName: app.UPLOAD_FILE_FORM_CS.formName }); - - await widget.attachFileWidget().attachFile(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, pdfFileOne.location); - await widget.attachFileWidget().checkFileIsAttached(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, pdfFileOne.name); - - await widget.attachFileWidget().clickUploadButton(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id); - await widget.attachFileWidget().selectUploadSource(csIntegrations[0]); - - await contentNodeSelector.checkDialogIsDisplayed(); - await searchService.isSearchable(pdfFileTwo.name); - await contentNodeSelector.searchAndSelectResult(pdfFileTwo.name, pdfFileTwo.name); - - await contentNodeSelector.clickMoveCopyButton(); - await widget.attachFileWidget().checkFileIsAttached(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, pdfFileTwo.name); - }); - - it('[C246522] Attach file - Local file', async () => { - const name = 'Attach local file'; - await taskPage.createTask({ name, formName: app.UPLOAD_FILE_FORM_CS.formName }); - - await widget.attachFileWidget().attachFile(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, pdfFileOne.location); - await widget.attachFileWidget().checkFileIsAttached(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, pdfFileOne.name); - - await widget.attachFileWidget().clickUploadButton(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id); - }); -}); diff --git a/e2e/process-services/form/dynamic-table-date-picker.e2e.ts b/e2e/process-services/form/dynamic-table-date-picker.e2e.ts deleted file mode 100644 index 30632e705df..00000000000 --- a/e2e/process-services/form/dynamic-table-date-picker.e2e.ts +++ /dev/null @@ -1,84 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ModelsActions, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { ProcessFiltersPage } from '../pages/process-filters.page'; -import { ProcessServiceTabBarPage } from '../pages/process-service-tab-bar.page'; -import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import { browser } from 'protractor'; - -describe('Dynamic Table', () => { - const loginPage = new LoginPage(); - const processFiltersPage = new ProcessFiltersPage(); - const processServiceTabBarPage = new ProcessServiceTabBarPage(); - const navigationBarPage = new NavigationBarPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const modelsActions = new ModelsActions(apiService); - - let user: UserModel; - let tenantId: number; - let appId: number; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - user = await usersActions.createUser(); - tenantId = user.tenantId; - }); - - afterAll(async () => { - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(tenantId); - }); - - describe('Required Dropdown', () => { - const app = browser.params.resources.Files.APP_DYNAMIC_TABLE_DROPDOWN; - const dropdown = widget.dropdown(); - - beforeAll(async () => { - await apiService.login(user.username, user.password); - const applicationsService = new ApplicationsUtil(apiService); - - const importedApp = await applicationsService.importPublishDeployApp(app.file_path); - appId = importedApp.id; - await loginPage.login(user.username, user.password); - }); - - afterAll(async () => { - await apiService.login(user.username, user.password); - await modelsActions.deleteModel(appId); - }); - - beforeEach(async () => { - await (await (await navigationBarPage.navigateToProcessServicesPage()).goToApp(app.title)).clickProcessButton(); - - await processServiceTabBarPage.clickProcessButton(); - await processFiltersPage.clickCreateProcessButton(); - await processFiltersPage.clickNewProcessDropdown(); - }); - - it('[C286519] Should be able to save row with required dropdown column', async () => { - const dropdownOption = 'Option 1'; - await widget.dynamicTable().clickAddRow(); - await dropdown.selectOption(dropdownOption); - await widget.dynamicTable().clickSaveButton(); - await widget.dynamicTable().checkItemIsPresent(dropdownOption); - }); - }); -}); diff --git a/e2e/process-services/form/form-people-widget.e2e.ts b/e2e/process-services/form/form-people-widget.e2e.ts deleted file mode 100644 index e339dbe509a..00000000000 --- a/e2e/process-services/form/form-people-widget.e2e.ts +++ /dev/null @@ -1,104 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, StartProcessPage, UsersActions, Widget } from '@alfresco/adf-testing'; -import { ProcessFiltersPage } from './../pages/process-filters.page'; -import { ProcessDetailsPage } from './../pages/process-details.page'; -import { TaskDetailsPage } from './../pages/task-details.page'; -import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import { browser } from 'protractor'; -import { ProcessServiceTabBarPage } from './../pages/process-service-tab-bar.page'; -import { TaskFormsApi } from '@alfresco/js-api'; - -describe('Form widgets - People ', () => { - const app = browser.params.resources.Files.APP_WITH_USER_WIDGET; - - const loginPage = new LoginPage(); - const processFiltersPage = new ProcessFiltersPage(); - const startProcess = new StartProcessPage(); - const processDetailsPage = new ProcessDetailsPage(); - const taskDetails = new TaskDetailsPage(); - const processServiceTabBarPage = new ProcessServiceTabBarPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const taskFormsApi = new TaskFormsApi(apiService.getInstance()); - - let processUserModel; - let appModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - - const applicationsService = new ApplicationsUtil(apiService); - - appModel = await applicationsService.importPublishDeployApp(app.file_path); - - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - afterAll(async () => { - await apiService.loginWithProfile('admin'); - - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - beforeEach(async () => { - await (await (await new NavigationBarPage().navigateToProcessServicesPage()).goToApp(appModel.name)).clickProcessButton(); - await processFiltersPage.clickCreateProcessButton(); - await processFiltersPage.clickNewProcessDropdown(); - - await widget.peopleWidget().checkPeopleFieldIsDisplayed(); - await widget.peopleWidget().fillPeopleField(processUserModel.firstName); - await widget.peopleWidget().selectUserFromDropdown(); - }); - - it('[C286577] Should be able to start a process with people widget', async () => { - await startProcess.clickFormStartProcessButton(); - await processDetailsPage.activeTask.click(); - - const taskId = await taskDetails.getId(); - const taskForm: any = await taskFormsApi.getTaskForm(taskId); - const userEmail = taskForm['fields'][0].fields['1'][0].value.email; - expect(userEmail).toEqual(processUserModel.email); - }); - - it('[C286576] Should be able to see user in completed task', async () => { - await startProcess.enterProcessName(app.processName); - await startProcess.clickFormStartProcessButton(); - - await processDetailsPage.activeTask.click(); - await taskDetails.checkCompleteFormButtonIsDisplayed(); - await taskDetails.clickCompleteFormTask(); - - await processServiceTabBarPage.clickProcessButton(); - await processFiltersPage.clickCompletedFilterButton(); - await processFiltersPage.selectFromProcessList(app.processName); - - await processDetailsPage.completedTask.click(); - - const taskId = await taskDetails.getId(); - const taskForm: any = await taskFormsApi.getTaskForm(taskId); - const userEmail = taskForm['fields'][0].fields['1'][0].value.email; - expect(userEmail).toEqual(processUserModel.email); - }); -}); diff --git a/e2e/process-services/form/form-widgets-component.e2e.ts b/e2e/process-services/form/form-widgets-component.e2e.ts deleted file mode 100644 index a9acf98ed94..00000000000 --- a/e2e/process-services/form/form-widgets-component.e2e.ts +++ /dev/null @@ -1,251 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget } from '@alfresco/adf-testing'; -import { TasksPage } from './../pages/tasks.page'; -import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import FormDefinitionModel = require('../../models/APS/FormDefinitionModel'); -import { TaskFormsApi } from '@alfresco/js-api'; - -const formInstance = new FormDefinitionModel(); - -describe('Form widgets', () => { - const taskPage = new TasksPage(); - const loginPage = new LoginPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const taskFormsApi = new TaskFormsApi(apiService.getInstance()); - const processUtil = new ProcessUtil(apiService); - - const newTask = 'First task'; - let processUserModel; - let appModelWidget; - - describe('Form widgets', () => { - const appWidget = browser.params.resources.Files.WIDGETS_SMOKE_TEST; - const appFields = appWidget.form_fields; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - - appModelWidget = await applicationsService.importPublishDeployApp(appWidget.file_path); - - await loginPage.login(processUserModel.username, processUserModel.password); - - 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(appWidget.formName); - await task.clickStartButton(); - - await taskPage.tasksListPage().checkContentIsDisplayed(newTask); - await taskPage.formFields().checkFormIsDisplayed(); - expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - - const response = await taskPage.taskDetails().getId(); - - const formDefinition = await taskFormsApi.getTaskForm(response); - formInstance.setFields(formDefinition.fields); - formInstance.setAllWidgets(formDefinition.fields); - }); - - afterAll(async () => { - await new NavigationBarPage().clickLogoutButton(); - await apiService.loginWithProfile('admin'); - - await usersActions.deleteTenant(processUserModel.tenantId); - await apiService.getInstance().logout(); - }); - - it('[C272778] Should display text and multi-line in form', async () => { - expect(await taskPage.formFields().getFieldLabel(appFields.text_id)).toEqual(formInstance.getWidgetBy('id', appFields.text_id).name); - expect(await taskPage.formFields().getFieldValue(appFields.text_id)).toEqual( - formInstance.getWidgetBy('id', appFields.text_id).value || '' - ); - - expect(await widget.multilineTextWidget().getFieldValue(appFields.multiline_id)).toEqual( - formInstance.getWidgetBy('id', appFields.multiline_id).value || '' - ); - expect(await taskPage.formFields().getFieldLabel(appFields.multiline_id)).toEqual( - formInstance.getWidgetBy('id', appFields.multiline_id).name - ); - }); - - it('[C272779] Should display number and amount in form', async () => { - expect(await taskPage.formFields().getFieldValue(appFields.number_id)).toEqual( - formInstance.getWidgetBy('id', appFields.number_id).value || '' - ); - expect(await taskPage.formFields().getFieldLabel(appFields.number_id)).toEqual(formInstance.getWidgetBy('id', appFields.number_id).name); - - expect(await taskPage.formFields().getFieldValue(appFields.amount_id)).toEqual( - formInstance.getWidgetBy('id', appFields.amount_id).value || '' - ); - expect(await taskPage.formFields().getFieldLabel(appFields.amount_id)).toEqual(formInstance.getWidgetBy('id', appFields.amount_id).name); - }); - - it('[C272780] Should display attach file and attach folder in form', async () => { - expect(await taskPage.formFields().getFieldLabel(appFields.attachFolder_id)).toEqual( - formInstance.getWidgetBy('id', appFields.attachFolder_id).name - ); - expect(await taskPage.formFields().getFieldLabel(appFields.attachFile_id)).toEqual( - formInstance.getWidgetBy('id', appFields.attachFile_id).name - ); - }); - - it('[C272781] Should display date and date & time in form', async () => { - expect(await taskPage.formFields().getFieldLabel(appFields.date_id)).toContain(formInstance.getWidgetBy('id', appFields.date_id).name); - expect(await taskPage.formFields().getFieldValue(appFields.date_id)).toEqual( - formInstance.getWidgetBy('id', appFields.date_id).value || '' - ); - - expect(await taskPage.formFields().getFieldLabel(appFields.dateTime_id)).toContain( - formInstance.getWidgetBy('id', appFields.dateTime_id).name - ); - expect(await taskPage.formFields().getFieldValue(appFields.dateTime_id)).toEqual( - formInstance.getWidgetBy('id', appFields.dateTime_id).value || '' - ); - }); - - it('[C272782] Should display people and group in form', async () => { - expect(await taskPage.formFields().getFieldValue(appFields.people_id)).toEqual( - formInstance.getWidgetBy('id', appFields.people_id).value || '' - ); - expect(await taskPage.formFields().getFieldLabel(appFields.people_id)).toEqual(formInstance.getWidgetBy('id', appFields.people_id).name); - - expect(await taskPage.formFields().getFieldValue(appFields.group_id)).toEqual( - formInstance.getWidgetBy('id', appFields.group_id).value || '' - ); - expect(await taskPage.formFields().getFieldLabel(appFields.group_id)).toEqual(formInstance.getWidgetBy('id', appFields.group_id).name); - }); - - it('[C272783] Should display displayText and displayValue in form', async () => { - const expected0 = ' ' + formInstance.getWidgetBy('id', appFields.displayText_id).value; - const expected1 = (formInstance.getWidgetBy('id', appFields.displayValue_id).value as string) || 'Display value'; - const expected2 = (formInstance.getWidgetBy('id', appFields.displayValue_id).value as string) || ''; - - expect(await widget.displayTextWidget().getFieldLabel(appFields.displayText_id)).toEqual(expected0); - expect(await widget.displayValueWidget().getFieldLabel(appFields.displayValue_id)).toEqual(expected1); - expect(await widget.displayValueWidget().getFieldValue(appFields.displayValue_id)).toEqual(expected2); - }); - - it('[C272784] Should display typeahead and header in form', async () => { - expect(await widget.headerWidget().getFieldLabel(appFields.header_id)).toEqual(formInstance.getWidgetBy('id', appFields.header_id).name); - expect(await taskPage.formFields().getFieldValue(appFields.typeAhead_id)).toEqual( - formInstance.getWidgetBy('id', appFields.typeAhead_id).value || '' - ); - expect(await taskPage.formFields().getFieldLabel(appFields.typeAhead_id)).toEqual( - formInstance.getWidgetBy('id', appFields.typeAhead_id).name - ); - }); - - it('[C272785] Should display checkbox and radio button in form', async () => { - const radioOption = 1; - - expect(await taskPage.formFields().getFieldLabel(appFields.checkbox_id)).toContain( - formInstance.getWidgetBy('id', appFields.checkbox_id).name - ); - - expect(await taskPage.formFields().getFieldLabel(appFields.radioButtons_id)).toContain( - formInstance.getWidgetBy('id', appFields.radioButtons_id).name - ); - expect(await widget.radioWidget().getSpecificOptionLabel(appFields.radioButtons_id, radioOption)).toContain( - formInstance.getWidgetBy('id', appFields.radioButtons_id).options[radioOption - 1].name - ); - }); - - it('[C268149] Should display hyperlink, dropdown and dynamic table in form', async () => { - expect(await widget.hyperlink().getFieldText(appFields.hyperlink_id)).toEqual( - formInstance.getWidgetBy('id', appFields.hyperlink_id).hyperlinkUrl || '' - ); - expect(await taskPage.formFields().getFieldLabel(appFields.hyperlink_id)).toEqual( - formInstance.getWidgetBy('id', appFields.hyperlink_id).name - ); - - expect(await taskPage.formFields().getFieldLabel(appFields.dropdown_id)).toContain( - formInstance.getWidgetBy('id', appFields.dropdown_id).name - ); - expect(widget.dropdown().getSelectedOptionText(appFields.dropdown_id)).toContain( - formInstance.getWidgetBy('id', appFields.dropdown_id).value - ); - - expect(await widget.dynamicTable().getFieldLabel(appFields.dynamicTable_id)).toContain( - formInstance.getWidgetBy('id', appFields.dynamicTable_id).name - ); - expect(await widget.dynamicTable().getColumnName(appFields.dynamicTable_id)).toContain( - formInstance.getWidgetBy('id', appFields.dynamicTable_id).columnDefinitions[0].name - ); - }); - }); - - describe('with fields involving other people', () => { - const app = browser.params.resources.Files.FORM_ADF; - let process; - const appFields = app.form_fields; - let appModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(app.file_path); - - process = await processUtil.startProcessOfApp(appModel.name); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await (await new NavigationBarPage().navigateToProcessServicesPage()).goToApp(appModel.name); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C260405] Value fields configured with process variables', async () => { - await taskPage.formFields().checkFormIsDisplayed(); - expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - - await taskPage.formFields().setValueInInputById('label', 'value 1'); - await taskPage.formFields().completeForm(); - /* cspell:disable-next-line */ - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - - expect(await widget.displayTextWidget().getFieldText(appFields.displayText_id)).toContain('value 1'); - expect(await widget.textWidget().getFieldValue(appFields.text_id)).toEqual('value 1'); - expect(await widget.displayValueWidget().getFieldValue(appFields.displayValue_id)).toEqual('value 1'); - }); - }); -}); diff --git a/e2e/process-services/pages/task-filters.page.ts b/e2e/process-services/pages/task-filters.page.ts deleted file mode 100644 index 454cc1e3b3f..00000000000 --- a/e2e/process-services/pages/task-filters.page.ts +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { ElementFinder } from 'protractor'; -import { BrowserVisibility, BrowserActions } from '@alfresco/adf-testing'; - -export class TaskFiltersPage { - filter: ElementFinder; - - constructor(filter: ElementFinder) { - this.filter = filter; - } - - async checkTaskFilterIsDisplayed(): Promise { - await BrowserVisibility.waitUntilElementIsVisible(this.filter); - } - - async clickTaskFilter(): Promise { - return BrowserActions.click(this.filter); - } -} diff --git a/e2e/process-services/tasks/info-drawer.e2e.ts b/e2e/process-services/tasks/info-drawer.e2e.ts deleted file mode 100644 index c5244e0198a..00000000000 --- a/e2e/process-services/tasks/info-drawer.e2e.ts +++ /dev/null @@ -1,371 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { - createApiService, - ApplicationsUtil, - BrowserActions, - BrowserVisibility, - LocalStorageUtil, - LoginPage, - ModelsActions, - StringUtil, - UserModel, - UsersActions -} from '@alfresco/adf-testing'; -import { AppDefinitionRepresentation } from '@alfresco/js-api'; -import { browser, by, element } from 'protractor'; -import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import { TasksPage } from './../pages/tasks.page'; -import { ProcessServiceTabBarPage } from './../pages/process-service-tab-bar.page'; -import { ProcessFiltersPage } from './../pages/process-filters.page'; -import { infoDrawerConfiguration } from './../config/task.config'; -import CONSTANTS = require('../../util/constants'); -import { DateFnsUtils } from '../../../lib/core/src/lib/common/utils/date-fns-utils'; - -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(); - const processServiceTabBarPage = new ProcessServiceTabBarPage(); - const processFiltersPage = new ProcessFiltersPage(); - - const apiService = createApiService(); - const applicationsService = new ApplicationsUtil(apiService); - const modelsActions = new ModelsActions(apiService); - const usersActions = new UsersActions(apiService); - - const firstComment = 'comm1'; - - const date = { - form: '12/08/2017', - header: 'Aug 12, 2017', - dateFormat: 'll' - }; - - const taskDetails = { - description: 'I am your Description', - dueDate: date.form, - status: 'Running', - priority: '0', - category: 'No category', - parentName: 'No parent', - dateFormat: 'll' - }; - - let processUserModelFullName: string; - let assigneeUserModelFullName: string; - let appCreated: AppDefinitionRepresentation; - let processUserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - const assigneeUserModel = await usersActions.createUser(); - assigneeUserModelFullName = assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName; - - processUserModel = await usersActions.createUser(new UserModel({ tenantId: assigneeUserModel.tenantId })); - processUserModelFullName = processUserModel.firstName + ' ' + processUserModel.lastName; - - await apiService.login(processUserModel.username, processUserModel.password); - appCreated = await applicationsService.importPublishDeployApp(app.file_path); - - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - afterAll(async () => { - await modelsActions.deleteModel(appCreated.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - beforeEach(async () => { - await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - }); - - it('[C260319] New Task - displayed details', async () => { - const name = StringUtil.generateRandomString(5); - await taskPage.createTask({ ...taskDetails, formName: app.formName, name }); - await taskPage.tasksListPage().getDataTable().waitTillContentLoaded(); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.tasksListPage().checkContentIsDisplayed(name); - await taskPage.tasksListPage().selectRow(name); - - await taskPage.checkTaskTitle(name); - expect(await taskPage.taskDetails().isAssigneeClickable()).toBeTruthy(); - await shouldHaveInfoDrawerDetails({ - ...taskDetails, - dueDate: date.header, - fullName: processUserModelFullName, - formName: app.formName - }); - - await taskPage.taskDetails().selectActivityTab(); - await taskPage.taskDetails().checkIsEmptyCommentListDisplayed(); - await taskPage.taskDetails().addComment(firstComment); - await taskPage.taskDetails().checkCommentIsDisplayed(firstComment); - - await taskPage.taskDetails().clickCompleteFormTask(); - }); - - it('[C260323] Priority - Editing field', async () => { - const name = StringUtil.generateRandomString(5); - await taskPage.createTask({ ...taskDetails, formName: app.formName, name }); - await taskPage.tasksListPage().getDataTable().waitTillContentLoaded(); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.tasksListPage().checkContentIsDisplayed(name); - await taskPage.tasksListPage().selectRow(name); - - await taskPage.checkTaskTitle(name); - expect(await taskPage.taskDetails().getPriority()).toEqual(taskDetails.priority); - await taskPage.taskDetails().updatePriority('40'); - await taskPage.taskDetails().checkTaskDetailsDisplayed(); - expect(await taskPage.taskDetails().getPriority()).toEqual('40'); - await taskPage.taskDetails().updatePriority(); - await taskPage.taskDetails().checkTaskDetailsDisplayed(); - expect(await taskPage.taskDetails().getPriority()).toEqual(''); - - await taskPage.taskDetails().clickCompleteFormTask(); - }); - - it('[C260325] Due Date - Changing', async () => { - const name = StringUtil.generateRandomString(5); - await taskPage.createTask({ ...taskDetails, formName: app.formName, name }); - await taskPage.tasksListPage().getDataTable().waitTillContentLoaded(); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.tasksListPage().checkContentIsDisplayed(name); - await taskPage.tasksListPage().selectRow(name); - - await taskPage.checkTaskTitle(name); - expect(await taskPage.taskDetails().isAssigneeClickable()).toBeTruthy(); - await shouldHaveInfoDrawerDetails({ - ...taskDetails, - dueDate: date.header, - fullName: processUserModelFullName, - formName: app.formName - }); - - await taskPage.taskDetails().updateDueDate(); - expect(await taskPage.taskDetails().getDueDate()).toEqual(DateFnsUtils.formatDate(new Date('Aug 1, 2017'), taskDetails.dateFormat)); - - await taskPage.taskDetails().clickCompleteFormTask(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.tasksListPage().checkContentIsNotDisplayed(name); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.tasksListPage().checkContentIsNotDisplayed(name); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - await taskPage.tasksListPage().checkContentIsDisplayed(name); - await taskPage.tasksListPage().selectRow(name); - - await taskPage.checkTaskTitle(name); - await shouldHaveInfoDrawerDetails({ - ...taskDetails, - dueDate: 'Aug 1, 2017', - status: 'Completed', - fullName: processUserModelFullName, - formName: app.formName - }); - }); - - it('[C260329] Task with no form', async () => { - const name = StringUtil.generateRandomString(5); - await taskPage.createTask({ ...taskDetails, formName: '', name }); - await taskPage.tasksListPage().getDataTable().waitTillContentLoaded(); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.tasksListPage().checkContentIsDisplayed(name); - await taskPage.tasksListPage().selectRow(name); - - await shouldHaveInfoDrawerDetails({ - ...taskDetails, - dueDate: date.header, - fullName: processUserModelFullName, - formName: 'No form' - }); - await taskPage.completeTaskNoForm(); - }); - - it('[C260320] Assign user to the task', async () => { - const name = StringUtil.generateRandomString(5); - await taskPage.createTask({ ...taskDetails, formName: app.formName, name }); - await taskPage.tasksListPage().getDataTable().waitTillContentLoaded(); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.tasksListPage().checkContentIsDisplayed(name); - await taskPage.tasksListPage().selectRow(name); - - await taskPage.checkTaskTitle(name); - await shouldHaveInfoDrawerDetails({ - ...taskDetails, - dueDate: date.header, - fullName: processUserModelFullName, - formName: app.formName - }); - - expect(await taskPage.taskDetails().isAssigneeClickable()).toBeTruthy(); - await BrowserActions.click(taskPage.taskDetails().assigneeButton); - const cancelSearch = element(by.css('button[id="close-people-search"]')); - await BrowserVisibility.waitUntilElementIsPresent(cancelSearch); - await BrowserActions.click(cancelSearch); - - await shouldHaveInfoDrawerDetails({ - ...taskDetails, - dueDate: date.header, - fullName: processUserModelFullName, - formName: app.formName - }); - - expect(await taskPage.taskDetails().isAssigneeClickable()).toBeTruthy(); - await BrowserActions.click(taskPage.taskDetails().assigneeButton); - const addPeople = element(by.css('button[id="add-people"]')); - await BrowserVisibility.waitUntilElementIsPresent(addPeople); - await BrowserActions.click(addPeople); - - await shouldHaveInfoDrawerDetails({ - ...taskDetails, - dueDate: date.header, - fullName: processUserModelFullName, - formName: app.formName - }); - - await taskPage.taskDetails().updateAssignee(assigneeUserModelFullName); - await taskPage.tasksListPage().getDataTable().waitTillContentLoaded(); - await taskPage.tasksListPage().checkContentIsNotDisplayed(app.taskName); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - - await taskPage.taskDetails().checkTaskDetailsDisplayed(); - await browser.sleep(2000); - await shouldHaveInfoDrawerDetails({ - ...taskDetails, - dueDate: date.header, - fullName: assigneeUserModelFullName, - formName: app.formName - }); - }); - - it('[C260326] Process with a task included', async () => { - await processServiceTabBarPage.clickProcessButton(); - const startProcess = await processFiltersPage.startProcess(); - await startProcess.enterProcessName('My process'); - await startProcess.selectFromProcessDropdown(app.processName); - await startProcess.clickStartProcessButton(); - - await processServiceTabBarPage.clickTasksButton(); - await taskPage.tasksListPage().getDataTable().waitTillContentLoaded(); - 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', - description: 'No description', - parentName: app.processName, - fullName: processUserModelFullName, - formName: app.formName - }); - - await taskPage.taskDetails().clickCompleteFormTask(); - }); - - it('[C260328] Description - Editing field', async () => { - const name = StringUtil.generateRandomString(5); - await taskPage.createTask({ ...taskDetails, formName: app.formName, name }); - await taskPage.tasksListPage().getDataTable().waitTillContentLoaded(); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.tasksListPage().checkContentIsDisplayed(name); - await taskPage.tasksListPage().selectRow(name); - - await taskPage.checkTaskTitle(name); - await taskPage.taskDetails().checkTaskDetailsDisplayed(); - await browser.sleep(2000); - expect(await taskPage.taskDetails().isAssigneeClickable()).toBeTruthy(); - await shouldHaveInfoDrawerDetails({ - ...taskDetails, - dueDate: 'Aug 12, 2017', - fullName: processUserModelFullName, - formName: app.formName - }); - - await taskPage.taskDetails().updateDescription(''); - expect(await taskPage.taskDetails().getDescriptionPlaceholder()).toEqual('No description'); - await taskPage.taskDetails().updateDescription('Good Bye'); - expect(await taskPage.taskDetails().getDescription()).toEqual('Good Bye'); - - await taskPage.taskDetails().clickCompleteFormTask(); - }); - - it('[C260505] Should be possible customised Task Header changing the adf-task-header field in the app.config.json', async () => { - await LocalStorageUtil.setConfigField('adf-task-header', JSON.stringify(infoDrawerConfiguration)); - - const name = StringUtil.generateRandomString(5); - await taskPage.createTask({ ...taskDetails, formName: app.formName, name }); - await taskPage.tasksListPage().getDataTable().waitTillContentLoaded(); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.tasksListPage().checkContentIsDisplayed(name); - await taskPage.tasksListPage().selectRow(name); - - await taskPage.checkTaskTitle(name); - expect(await taskPage.taskDetails().getAssignee()).toEqual(processUserModelFullName); - expect(await taskPage.taskDetails().getStatus()).toEqual(taskDetails.status); - expect(await taskPage.taskDetails().getPriority()).toEqual(taskDetails.priority); - expect(await taskPage.taskDetails().getParentName()).toEqual(taskDetails.parentName); - await taskPage.taskDetails().checkDueDatePickerButtonIsNotDisplayed(); - - await taskPage.taskDetails().clickCompleteFormTask(); - }); - - interface TaskDetailsProps { - description: string; - status: string; - priority: string; - category: string; - parentName: string; - dateFormat: string; - formName: string; - fullName: string; - dueDate: string; - } - - /** - * Validate the info drawer has expected values for the task details - * - * @param props task details properties to validate - */ - async function shouldHaveInfoDrawerDetails(props: TaskDetailsProps) { - expect(await taskPage.taskDetails().getAssignee()).toEqual(props.fullName); - expect(await taskPage.taskDetails().getDescription()).toEqual(props.description); - expect(await taskPage.taskDetails().getStatus()).toEqual(props.status); - expect(await taskPage.taskDetails().getPriority()).toEqual(props.priority); - expect(await taskPage.taskDetails().getDueDate()).toEqual( - props.dueDate !== 'No date' ? DateFnsUtils.formatDate(new Date(props.dueDate), props.dateFormat) : 'No date' - ); - expect(await taskPage.taskDetails().getCategory()).toEqual(props.category); - expect(await taskPage.taskDetails().getParentName()).toEqual(props.parentName); - expect(await taskPage.taskDetails().getCreated()).toEqual(DateFnsUtils.formatDate(new Date().getTime(), props.dateFormat)); - await taskPage.taskDetails().waitFormNameEqual(props.formName); - } -}); diff --git a/e2e/process-services/tasks/task-assignee.e2e.ts b/e2e/process-services/tasks/task-assignee.e2e.ts deleted file mode 100644 index 322f3c7c8e7..00000000000 --- a/e2e/process-services/tasks/task-assignee.e2e.ts +++ /dev/null @@ -1,265 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, StartProcessPage, UserModel, UsersActions } from '@alfresco/adf-testing'; -import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import { ProcessServicesPage } from './../pages/process-services.page'; -import { ProcessFiltersPage } from './../pages/process-filters.page'; -import { ProcessServiceTabBarPage } from './../pages/process-service-tab-bar.page'; -import { ProcessDetailsPage } from './../pages/process-details.page'; -import { ProcessListPage } from './../pages/process-list.page'; -import { browser } from 'protractor'; -import { TasksPage } from './../pages/tasks.page'; -import CONSTANTS = require('../../util/constants'); -import { AdminGroupsApi } from '@alfresco/js-api'; - -describe('Task Assignee', () => { - const app = browser.params.resources.Files.TEST_ASSIGNEE; - - const loginPage = new LoginPage(); - const navigationBarPage = new NavigationBarPage(); - const processServicesPage = new ProcessServicesPage(); - const processListPage = new ProcessListPage(); - const processFiltersPage = new ProcessFiltersPage(); - const startProcessPage = new StartProcessPage(); - const processServiceTabBarPage = new ProcessServiceTabBarPage(); - const processDetailsPage = new ProcessDetailsPage(); - const taskPage = new TasksPage(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const adminGroupsApi = new AdminGroupsApi(apiService.getInstance()); - - describe('Candidate User Assignee', () => { - let user: UserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - user = await usersActions.createUser( - new UserModel({ - firstName: app.candidate.firstName, - lastName: app.candidate.lastName - }) - ); - - try { - // creates group if not available - await adminGroupsApi.createNewGroup({ - name: app.candidateGroup, - tenantId: user.tenantId, - type: 1 - }); - } catch {} - - await apiService.login(user.username, user.password); - await applicationsService.importPublishDeployApp(app.file_path, { renewIdmEntries: true }); - - await loginPage.login(user.username, user.password); - }); - - afterAll(async () => { - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(user.tenantId); - await navigationBarPage.clickLogoutButton(); - }); - - beforeEach(async () => { - await navigationBarPage.navigateToProcessServicesPage(); - await processServicesPage.checkApsContainer(); - }); - - it('[C260387] Should the running process be displayed when clicking on Running filter', async () => { - const name = 'sample-process-one'; - await processServicesPage.goToApp(app.title); - await processServiceTabBarPage.clickProcessButton(); - expect(await processListPage.isProcessListDisplayed()).toEqual(true); - await processFiltersPage.clickCreateProcessButton(); - await processFiltersPage.clickNewProcessDropdown(); - await startProcessPage.startProcess(name, app.processNames[0]); - await processFiltersPage.selectFromProcessList(name); - await processDetailsPage.activeTask.click(); - - await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.simple.one); - await taskPage.tasksListPage().selectRow(app.userTasks.simple.one); - await taskPage.taskDetails().clickCompleteFormTask(); - await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.simple.one); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.simple.one); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.simple.one); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.taskDetails().clickCompleteFormTask(); - await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.simple.two); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.simple.two); - }); - }); - - describe('Candidate Group Assignee', () => { - let user: UserModel; - let candidate1: UserModel; - let candidate2: UserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - user = await usersActions.createUser(); - candidate1 = await usersActions.createUser(new UserModel({ tenantId: user.tenantId })); - candidate2 = await usersActions.createUser(new UserModel({ tenantId: user.tenantId })); - - const adminGroup = await adminGroupsApi.createNewGroup({ name: app.adminGroup, tenantId: user.tenantId }); - - await adminGroupsApi.addGroupMember(adminGroup.id, user.id); - - await adminGroupsApi.addGroupCapabilities(adminGroup.id, { capabilities: app.adminCapabilities }); - - const candidateGroup = await adminGroupsApi.createNewGroup({ name: app.candidateGroup, tenantId: user.tenantId, type: 1 }); - - await adminGroupsApi.addGroupMember(candidateGroup.id, candidate1.id); - await adminGroupsApi.addGroupMember(candidateGroup.id, candidate2.id); - await adminGroupsApi.addGroupMember(candidateGroup.id, user.id); - - try { - // for creates user if not available - await usersActions.createUser( - new UserModel({ - tenantId: user.tenantId, - firstName: app.candidate.firstName, - lastName: app.candidate.lastName - }) - ); - } catch (e) {} - - await apiService.login(user.username, user.password); - const appModel = await applicationsService.importPublishDeployApp(app.file_path, { renewIdmEntries: true }); - - await new ProcessUtil(apiService).startProcessByDefinitionName(appModel.name, app.processNames[1]); - }); - - afterAll(async () => { - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(user.tenantId); - }); - - it('[C216430] Start Task - Claim and Requeue a task', async () => { - await loginPage.login(candidate1.username, candidate1.password); - await navigationBarPage.navigateToProcessServicesPage(); - await processServicesPage.checkApsContainer(); - await processServicesPage.goToApp('Task App'); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.candidateTask); - await taskPage.tasksListPage().selectRow(app.userTasks.candidateTask); - await taskPage.taskDetails().checkClaimEnabled(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.candidateTask); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.candidateTask); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.candidateTask); - await taskPage.tasksListPage().selectRow(app.userTasks.candidateTask); - await taskPage.taskDetails().claimTask(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.candidateTask); - await taskPage.taskDetails().checkReleaseEnabled(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.candidateTask); - await taskPage.taskDetails().checkReleaseEnabled(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.candidateTask); - - await navigationBarPage.clickLogoutButton(); - await loginPage.login(candidate2.username, candidate2.password); - await navigationBarPage.navigateToProcessServicesPage(); - await processServicesPage.checkApsContainer(); - await processServicesPage.goToApp('Task App'); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.candidateTask); - - await navigationBarPage.clickLogoutButton(); - await loginPage.login(candidate1.username, candidate1.password); - await navigationBarPage.navigateToProcessServicesPage(); - await processServicesPage.checkApsContainer(); - await processServicesPage.goToApp('Task App'); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.candidateTask); - await taskPage.tasksListPage().selectRow(app.userTasks.candidateTask); - await taskPage.taskDetails().releaseTask(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.INV_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.candidateTask); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.tasksListPage().checkContentIsNotDisplayed(app.userTasks.candidateTask); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.candidateTask); - await taskPage.taskDetails().checkClaimEnabled(); - - await navigationBarPage.clickLogoutButton(); - await loginPage.login(candidate2.username, candidate2.password); - await navigationBarPage.navigateToProcessServicesPage(); - await processServicesPage.checkApsContainer(); - await processServicesPage.goToApp('Task App'); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.filtersPage().checkFilterIsHighlighted(CONSTANTS.TASK_FILTERS.QUE_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.tasksListPage().checkContentIsDisplayed(app.userTasks.candidateTask); - await taskPage.taskDetails().checkClaimEnabled(); - }); - }); -}); diff --git a/e2e/process-services/tasks/task-details-no-form.e2e.ts b/e2e/process-services/tasks/task-details-no-form.e2e.ts deleted file mode 100644 index 1ca7e091b3b..00000000000 --- a/e2e/process-services/tasks/task-details-no-form.e2e.ts +++ /dev/null @@ -1,69 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, UserModel } from '@alfresco/adf-testing'; -import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import { AppDefinitionRepresentation } from '@alfresco/js-api'; - -describe('Task Details - No form', () => { - const app = browser.params.resources.Files.NO_FORM_APP; - - const loginPage = new LoginPage(); - const navigationBarPage = new NavigationBarPage(); - const taskPage = new TasksPage(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - - let processUserModel: UserModel; - let importedApp: AppDefinitionRepresentation; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - const applicationsService = new ApplicationsUtil(apiService); - importedApp = await applicationsService.importPublishDeployApp(app.file_path); - await new ProcessUtil(apiService).startProcessOfApp(importedApp.name); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - afterAll(async () => { - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C289311] Should attach form and complete buttons to be displayed when no form is attached', async () => { - await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - - await taskPage.tasksListPage().checkContentIsDisplayed(app.taskName); - await taskPage.tasksListPage().selectRow(app.taskName); - await taskPage.taskDetails().noFormIsDisplayed(); - await taskPage.taskDetails().checkCompleteTaskButtonIsDisplayed(); - await taskPage.taskDetails().checkCompleteTaskButtonIsEnabled(); - await taskPage.taskDetails().checkAttachFormButtonIsNotDisplayed(); - await taskPage.taskDetails().waitFormNameEqual(CONSTANTS.TASK_DETAILS.NO_FORM); - - const noFormMessage = 'No forms attached'; - expect(await taskPage.formFields().getNoFormMessage()).toEqual(noFormMessage); - }); -}); diff --git a/e2e/process-services/widgets/amount-widget.e2e.ts b/e2e/process-services/widgets/amount-widget.e2e.ts deleted file mode 100644 index 1c577066732..00000000000 --- a/e2e/process-services/widgets/amount-widget.e2e.ts +++ /dev/null @@ -1,94 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { LoginPage, BrowserActions, Widget, ApplicationsUtil, ProcessUtil, createApiService, UsersActions, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import CONSTANTS = require('../../util/constants'); -import { browser } from 'protractor'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Amount Widget', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.AMOUNT; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - let appModel: AppDefinitionRepresentation; - let deployedAppId: number; - let process: ProcessInstanceRepresentation; - let processUserModel: UserModel; - - const apiService = createApiService(); - const applicationsService = new ApplicationsUtil(apiService); - const usersActions = new UsersActions(apiService); - const processUtil = new ProcessUtil(apiService); - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - const urlToNavigateTo = `${browser.baseUrl}/activiti/apps/${deployedAppId}/tasks/`; - await BrowserActions.getUrl(urlToNavigateTo); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C274703] Should be possible to set general, advance and visibility properties for Amount Widget', async () => { - await taskPage.formFields().checkWidgetIsHidden(app.FIELD.amount_input_id); - await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - await taskPage.formFields().checkWidgetIsVisible(app.FIELD.amount_input_id); - - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - expect(await widget.amountWidget().getAmountFieldLabel(app.FIELD.amount_input_id)).toContain('Amount'); - expect(await widget.amountWidget().getPlaceholder(app.FIELD.amount_input_id)).toContain('Type amount'); - const fieldCurrency = await widget.amountWidget().getAmountFieldCurrency(app.FIELD.amount_input_id); - expect(fieldCurrency.trim()).toBe('$'); - - await widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 4); - expect(await widget.amountWidget().getErrorMessage(app.FIELD.amount_input_id)).toBe(`Can't be less than 5`); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - await widget.amountWidget().clearFieldValue(app.FIELD.amount_input_id); - - await widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 101); - expect(await widget.amountWidget().getErrorMessage(app.FIELD.amount_input_id)).toBe(`Can't be greater than 100`); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - await widget.amountWidget().clearFieldValue(app.FIELD.amount_input_id); - - await widget.amountWidget().setFieldValue(app.FIELD.amount_input_id, 6); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); -}); diff --git a/e2e/process-services/widgets/attach-folder-widget.e2e.ts b/e2e/process-services/widgets/attach-folder-widget.e2e.ts deleted file mode 100644 index e5352102b50..00000000000 --- a/e2e/process-services/widgets/attach-folder-widget.e2e.ts +++ /dev/null @@ -1,76 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Attach Folder widget', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.ATTACH_FOLDER; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - let appModel: AppDefinitionRepresentation; - let deployedAppId: number; - let process: ProcessInstanceRepresentation; - let processUserModel: UserModel; - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const processUtil = new ProcessUtil(apiService); - const applicationsService = new ApplicationsUtil(apiService); - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(deployedAppId); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C276745] Should be possible to set visibility properties for Attach Folder Widget', async () => { - await taskPage.formFields().checkWidgetIsHidden(app.FIELD.upload_button_id); - await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - await taskPage.formFields().checkWidgetIsVisible(app.FIELD.upload_button_id); - - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - }); -}); diff --git a/e2e/process-services/widgets/checkbox-widget.e2e.ts b/e2e/process-services/widgets/checkbox-widget.e2e.ts deleted file mode 100644 index 3ba4edcd36b..00000000000 --- a/e2e/process-services/widgets/checkbox-widget.e2e.ts +++ /dev/null @@ -1,81 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import * as CONSTANTS from '../../util/constants'; -import { ProcessServicesPage } from '../pages/process-services.page'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Checkbox Widget', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.CHECKBOX; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - let processUserModel: UserModel; - let appModel: AppDefinitionRepresentation; - let deployedAppId: number; - let process: ProcessInstanceRepresentation; - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(`${deployedAppId}`); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C272812] Should be able to set visibility settings for Checkbox widget', async () => { - await widget.checkboxWidget().isCheckboxHidden(app.FIELD.checkbox_field_id); - await taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, '2'); - await widget.checkboxWidget().isCheckboxDisplayed(app.FIELD.checkbox_field_id); - }); - - it('[C268554] Should be able to set general settings for Checkbox widget ', async () => { - await taskPage.formFields().setValueInInputById(app.FIELD.number_input_id, '2'); - expect(await widget.checkboxWidget().getCheckboxLabel()).toContain(app.FIELD.checkbox_label); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_input_id); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); -}); diff --git a/e2e/process-services/widgets/document-template-widget.e2e.ts b/e2e/process-services/widgets/document-template-widget.e2e.ts deleted file mode 100644 index 306d8bbde43..00000000000 --- a/e2e/process-services/widgets/document-template-widget.e2e.ts +++ /dev/null @@ -1,72 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Document Template widget', () => { - const app = browser.params.resources.Files.FILE_FORM_ADF; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - let appModel: AppDefinitionRepresentation; - let deployedAppId: number; - let process: ProcessInstanceRepresentation; - let processUserModel: UserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(app.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessOfApp(appModel.name); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(deployedAppId); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C260406] should check that the template contains assigned file ', async () => { - expect(await widget.containerWidget().getFieldText(app.form_fields.container_id)).toEqual(app.attached_file); - }); -}); diff --git a/e2e/process-services/widgets/dropdown-widget.e2e.ts b/e2e/process-services/widgets/dropdown-widget.e2e.ts deleted file mode 100644 index a9a484b2dd9..00000000000 --- a/e2e/process-services/widgets/dropdown-widget.e2e.ts +++ /dev/null @@ -1,90 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Dropdown widget', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.DROPDOWN; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - let appModel: AppDefinitionRepresentation; - let deployedAppId; - let process: ProcessInstanceRepresentation; - let processUserModel: UserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(deployedAppId); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C269051] Should be possible to set general and options properties for Dropdown widget ', async () => { - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - - await widget.dropdown().selectOption('Happy'); - expect(await widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Happy'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - - await widget.dropdown().selectOption('Choose one'); - expect(await widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Choose one'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - - await widget.dropdown().selectOption('Sad'); - expect(await widget.dropdown().getSelectedOptionText(app.FIELD.general_dropdown)).toContain('Sad'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); - - it('[C269052] Should be possible to set visibility properties for Dropdown widget', async () => { - await taskPage.formFields().checkWidgetIsHidden(app.FIELD.dropdown_visible); - await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - await taskPage.formFields().checkWidgetIsVisible(app.FIELD.dropdown_visible); - }); -}); diff --git a/e2e/process-services/widgets/dynamic-table-widget.e2e.ts b/e2e/process-services/widgets/dynamic-table-widget.e2e.ts deleted file mode 100644 index 87f72e39e72..00000000000 --- a/e2e/process-services/widgets/dynamic-table-widget.e2e.ts +++ /dev/null @@ -1,199 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; -import { ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Dynamic Table widget ', () => { - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - const navigationBarPage = new NavigationBarPage(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - let processUserModel: UserModel; - let deployedAppId: number; - let process: ProcessInstanceRepresentation; - - describe('with Date Time Widget App', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.DYNAMIC_TABLE; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - const appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(`${deployedAppId}`); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - await navigationBarPage.clickLogoutButton(); - }); - - it('[C276729] Should be possible to set visibility properties for Dynamic Table', async () => { - await taskPage.formFields().checkWidgetIsHidden(app.FIELD.dynamic_table_age_id); - await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - await taskPage.formFields().checkWidgetIsVisible(app.FIELD.dynamic_table_age_id); - }); - - it('[C279349] Should be able to have a Date Time widget in a Dynamic Table widget', async () => { - await widget.dynamicTable().clickAddRow(); - await widget.dateTimeWidget().openDatepicker(app.FIELD.dateTime_input_id); - await widget.dateTimeWidget().selectDay('10'); - await widget.dateTimeWidget().selectHour('8'); - await widget.dateTimeWidget().selectMinute('30'); - await widget.dateTimeWidget().clearDateTimeInput(app.FIELD.dateTime_input_id); - - await widget.dynamicTable().clickSaveButton(); - await widget.dynamicTable().getTableRow(0); - }); - }); - - describe('with People Widget App', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.DYNAMIC_TABLE_USERS; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - const appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - await navigationBarPage.clickLogoutButton(); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(`${deployedAppId}`); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - it('[C260407] Should be able to add/delete/update row in Dynamic Table widget', async () => { - await widget.dynamicTable().clickAddRow(app.FIELD.dynamic_table_id); - await widget.dynamicTable().setDatatableInput('User1'); - await widget.dynamicTable().clickSaveButton(); - expect(await widget.dynamicTable().getTableRowText(0)).toEqual('User1'); - - await widget.dynamicTable().clickTableRow(0); - await widget.dynamicTable().clickEditButton(); - await widget.dynamicTable().setDatatableInput('User2'); - await widget.dynamicTable().clickCancelButton(); - expect(await widget.dynamicTable().getTableRowText(0)).toEqual('User1'); - - await widget.dynamicTable().clickEditButton(); - await widget.dynamicTable().setDatatableInput('User2'); - await widget.dynamicTable().clickSaveButton(); - expect(await widget.dynamicTable().getTableRowText(0)).toEqual('User2'); - - await widget.dynamicTable().clickAddRow(app.FIELD.dynamic_table_id); - await widget.dynamicTable().setDatatableInput('User3'); - await widget.dynamicTable().clickCancelButton(); - await widget.dynamicTable().checkTableRowIsNotVisible(1); - }); - }); - - describe('Custom validation', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - const appModel = await applicationsService.importPublishDeployApp(app.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.CUSTOM_VALIDATOR.processName); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - beforeEach(async () => { - await loginPage.login(processUserModel.username, processUserModel.password); - - await new ProcessServicesPage().goToAppByAppId(`${deployedAppId}`); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - it('[C260437] Customised validator', async () => { - await widget.dynamicTable().clickAddRow(); - await widget.dynamicTable().setDatatableInput('admin', app.CUSTOM_VALIDATOR.FIELD.NAME); - await widget.dynamicTable().clickSaveButton(); - expect(await widget.dynamicTable().checkErrorMessage()).toBe('Sorry, wrong value. You cannot use "admin".'); - - await widget.dynamicTable().setDatatableInput('name', app.CUSTOM_VALIDATOR.FIELD.NAME); - await widget.dynamicTable().clickSaveButton(); - expect(await widget.dynamicTable().checkErrorMessage()).toBe(`Field 'Id' is required.`); - - await widget.dynamicTable().setDatatableInput('id', app.CUSTOM_VALIDATOR.FIELD.ID); - await widget.dynamicTable().clickSaveButton(); - expect(await widget.dynamicTable().checkErrorMessage()).toBe(`Field 'Number' is required.`); - - await widget.dynamicTable().setDatatableInput('12', app.CUSTOM_VALIDATOR.FIELD.NUM); - await widget.dynamicTable().clickSaveButton(); - expect(await widget.dynamicTable().checkErrorMessage()).toBe(`Field 'Address' is required.`); - - await widget.dynamicTable().setDatatableInput('address', app.CUSTOM_VALIDATOR.FIELD.ADDRESS); - await widget.dynamicTable().clickSaveButton(); - await taskPage.taskDetails().clickCompleteFormTask(); - }); - }); -}); diff --git a/e2e/process-services/widgets/header-widget.e2e.ts b/e2e/process-services/widgets/header-widget.e2e.ts deleted file mode 100644 index 59ebb46c530..00000000000 --- a/e2e/process-services/widgets/header-widget.e2e.ts +++ /dev/null @@ -1,77 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Header widget', async () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.HEADER; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - let appModel: AppDefinitionRepresentation; - let deployedAppId: number; - let process: ProcessInstanceRepresentation; - let processUserModel: UserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(deployedAppId); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C276737] Should be able to set general and visibility properties for Header widget', async () => { - await taskPage.formFields().checkWidgetIsHidden(app.FIELD.header_id); - await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - await taskPage.formFields().checkWidgetIsVisible(app.FIELD.header_id); - - expect(await widget.headerWidget().getFieldLabel(app.FIELD.header_id)).toBe('Header'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); -}); diff --git a/e2e/process-services/widgets/hyperlink-widget.e2e.ts b/e2e/process-services/widgets/hyperlink-widget.e2e.ts deleted file mode 100644 index c6f8ba42964..00000000000 --- a/e2e/process-services/widgets/hyperlink-widget.e2e.ts +++ /dev/null @@ -1,77 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Hyperlink widget', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.HYPERLINK; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - let appModel: AppDefinitionRepresentation; - let processUserModel: UserModel; - let deployedAppId: number; - let process: ProcessInstanceRepresentation; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(deployedAppId); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C276728] Should be able to set visibility properties for Hyperlink widget', async () => { - await taskPage.formFields().checkWidgetIsHidden(app.FIELD.hyperlink_id); - await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - await taskPage.formFields().checkWidgetIsVisible(app.FIELD.hyperlink_id); - - expect(await widget.hyperlink().getFieldLabel(app.FIELD.hyperlink_id)).toBe('Hyperlink'); - expect(await widget.hyperlink().getFieldText(app.FIELD.hyperlink_id)).toBe('https://www.google.com/'); - }); -}); diff --git a/e2e/process-services/widgets/multi-line-widget.e2e.ts b/e2e/process-services/widgets/multi-line-widget.e2e.ts deleted file mode 100644 index a1fe033813c..00000000000 --- a/e2e/process-services/widgets/multi-line-widget.e2e.ts +++ /dev/null @@ -1,101 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Multi-line Widget', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.MULTILINE_TEXT; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - let appModel: AppDefinitionRepresentation; - let processUserModel: UserModel; - let deployedAppId: number; - let process: ProcessInstanceRepresentation; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(deployedAppId); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C268182] Should be able to set general properties for Multi-line Text Widget', async () => { - const label = await widget.multilineTextWidget().getFieldLabel(app.FIELD.multiSimple); - expect(label).toBe('multiSimple*'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - const placeHolder = await widget.multilineTextWidget().getFieldPlaceHolder(app.FIELD.multiSimple); - expect(placeHolder).toBe('Type something...'); - await widget.multilineTextWidget().setValue(app.FIELD.multiSimple, 'TEST'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); - - it('[C268184] Should be able to set advanced properties for Multi-line Text Widget', async () => { - await widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'A'); - expect(await widget.multilineTextWidget().getErrorMessage(app.FIELD.multiMinMax)).toContain('Enter at least 4 characters'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - await widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'AAAAAAAAAAA'); - expect(await widget.multilineTextWidget().getErrorMessage(app.FIELD.multiMinMax)).toContain('Enter no more than 10 characters'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - await widget.multilineTextWidget().setValue(app.FIELD.multiMinMax, 'AAAA'); - - await widget.multilineTextWidget().setValue(app.FIELD.multiSimple, 'TEST'); - await widget.multilineTextWidget().setValue(app.FIELD.multiRegexp, '3'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - expect(await widget.multilineTextWidget().getErrorMessage(app.FIELD.multiRegexp)).toContain('Enter a different value'); - await widget.multilineTextWidget().setValue(app.FIELD.multiRegexp, 'TE'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); - - it('[C268232] Should be able to set visibility properties for Multi-line Text Widget', async () => { - await widget.textWidget().isWidgetNotVisible(app.FIELD.multiVisible); - await widget.textWidget().setValue(app.FIELD.showMultiHidden, '1'); - await widget.textWidget().isWidgetVisible(app.FIELD.multiVisible); - }); -}); diff --git a/e2e/process-services/widgets/number-widget.e2e.ts b/e2e/process-services/widgets/number-widget.e2e.ts deleted file mode 100644 index 84319e7ec36..00000000000 --- a/e2e/process-services/widgets/number-widget.e2e.ts +++ /dev/null @@ -1,98 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Number widget', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.NUMBER; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - let appModel: AppDefinitionRepresentation; - let deployedAppId: number; - let process: ProcessInstanceRepresentation; - let processUserModel: UserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(deployedAppId); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C269111] Should be able to set general properties for Number Widget', async () => { - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - expect(await widget.numberWidget().getNumberFieldLabel(app.FIELD.number_general)).toContain('Number General'); - expect(await widget.numberWidget().getPlaceholder(app.FIELD.number_general)).toContain('Type a number'); - - await widget.numberWidget().setFieldValue(app.FIELD.number_general, 2); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); - - it('[C274702] Should be able to set advanced and visibility properties for Number Widget', async () => { - await widget.numberWidget().setFieldValue(app.FIELD.number_general, 2); - - await taskPage.formFields().checkWidgetIsHidden(app.FIELD.number_visible); - await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - await taskPage.formFields().checkWidgetIsVisible(app.FIELD.number_visible); - - await widget.numberWidget().setFieldValue(app.FIELD.number_visible, 2); - expect(await widget.numberWidget().getErrorMessage(app.FIELD.number_visible)).toBe(`Can't be less than 3`); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - await widget.numberWidget().clearFieldValue(app.FIELD.number_visible); - - await widget.numberWidget().setFieldValue(app.FIELD.number_visible, 101); - expect(await widget.numberWidget().getErrorMessage(app.FIELD.number_visible)).toBe(`Can't be greater than 100`); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - await widget.numberWidget().clearFieldValue(app.FIELD.number_visible); - - await widget.numberWidget().setFieldValue(app.FIELD.number_visible, 4); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); -}); diff --git a/e2e/process-services/widgets/people-group-widget.e2e.ts b/e2e/process-services/widgets/people-group-widget.e2e.ts deleted file mode 100644 index 46d97e0fb60..00000000000 --- a/e2e/process-services/widgets/people-group-widget.e2e.ts +++ /dev/null @@ -1,196 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, UserModel, UsersActions, Widget } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import { NavigationBarPage } from '../../core/pages/navigation-bar.page'; -import CONSTANTS = require('../../util/constants'); -import { AdminGroupsApi } from '@alfresco/js-api'; - -interface AppGroupUser { - firstName: string; - lastName: string; -} - -interface AppSubGroup { - name: string; -} - -describe('People and Group widget', () => { - const app = browser.params.resources.Files.MORE_WIDGETS; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const navigationBarPage = new NavigationBarPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const adminGroupsApi = new AdminGroupsApi(apiService.getInstance()); - - let user: UserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - user = await usersActions.createUser(); - await createGroupAndUsers(user.tenantId); - await apiService.login(user.username, user.password); - - await applicationsService.importPublishDeployApp(app.file_path, { renewIdmEntries: true }); - - await loginPage.login(user.username, user.password); - }); - - beforeEach(async () => { - await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp(); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - }); - - it('[C275715] Add group widget - Visibility and group restriction', async () => { - const name = 'group visibility task'; - const groupVisibilityForm = app.ADD_GROUP_VISIBILITY; - await taskPage.createTask({ name, formName: groupVisibilityForm.formName }); - expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - - await taskPage.formFields().checkWidgetIsHidden(groupVisibilityForm.FIELD.widget_id); - await widget.checkboxWidget().clickCheckboxInput(groupVisibilityForm.FIELD.checkbox_id); - await taskPage.formFields().checkWidgetIsVisible(groupVisibilityForm.FIELD.widget_id); - - await widget.groupWidget().insertGroup(groupVisibilityForm.FIELD.widget_id, groupVisibilityForm.searchTerm); - await widget.groupWidget().checkDropDownListIsDisplayed(); - const suggestions = (await widget.groupWidget().getDropDownList()).sort((a, b) => a.localeCompare(b)); - expect(suggestions).toEqual(['Heros', 'Users']); - await widget.groupWidget().selectGroupFromDropDown('Users'); - await taskPage.taskDetails().clickCompleteFormTask(); - }); - - it('[C275716] Add group widget - sub group restrictions', async () => { - const name = 'group widget - subgroup restriction'; - const subgroupFrom = app.ADD_GROUP_AND_SUBGROUP_RESTRICTION; - await taskPage.createTask({ name, formName: subgroupFrom.formName }); - expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - - await taskPage.formFields().checkWidgetIsHidden(subgroupFrom.FIELD.widget_id); - await widget.checkboxWidget().clickCheckboxInput(subgroupFrom.FIELD.checkbox_id); - await taskPage.formFields().checkWidgetIsVisible(subgroupFrom.FIELD.widget_id); - - await widget.groupWidget().insertGroup(subgroupFrom.FIELD.widget_id, subgroupFrom.searchTerm); - await widget.groupWidget().checkDropDownListIsDisplayed(); - const suggestions = (await widget.groupWidget().getDropDownList()).sort((a, b) => a.localeCompare(b)); - expect(suggestions).toEqual(getSubGroupsName()); - await widget.groupWidget().selectGroupFromDropDown(getSubGroupsName()[0]); - await taskPage.taskDetails().clickCompleteFormTask(); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); - await taskPage.tasksListPage().checkTaskListIsLoaded(); - - await taskPage.tasksListPage().selectRow(name); - await widget.groupWidget().checkGroupFieldIsDisplayed(); - expect(await widget.groupWidget().getFieldValue(subgroupFrom.FIELD.widget_id)).toBe('Heros'); - }); - - it('[C275714] Add people widget - group restrictions', async () => { - const name = 'people widget - group restrictions'; - const peopleWidget = app.ADD_PEOPLE_AND_GROUP_RESTRICTION; - await taskPage.createTask({ name, formName: peopleWidget.formName }); - expect(await taskPage.taskDetails().getTitle()).toEqual('Activities'); - - await taskPage.formFields().checkWidgetIsHidden(peopleWidget.FIELD.widget_id); - await widget.checkboxWidget().clickCheckboxInput(peopleWidget.FIELD.checkbox_id); - await taskPage.formFields().checkWidgetIsVisible(peopleWidget.FIELD.widget_id); - - await widget.peopleWidget().insertUser(peopleWidget.FIELD.widget_id, peopleWidget.searchTerm); - await widget.peopleWidget().checkDropDownListIsDisplayed(); - const suggestions = (await widget.peopleWidget().getDropDownList()).sort((a, b) => a.localeCompare(b)); - expect(suggestions).toEqual(getGroupMembers()); - await widget.peopleWidget().selectUserFromDropDown(getGroupMembers()[0]); - await taskPage.taskDetails().clickCompleteFormTask(); - }); - - /** - * Create group and users - * - * @param tenantId tenant id - */ - async function createGroupAndUsers(tenantId: number) { - await apiService.loginWithProfile('admin'); - - const userCreated = await Promise.all( - app.groupUser.map((usersToCreate: AppGroupUser) => - usersActions.createUser( - new UserModel({ - tenantId, - firstName: usersToCreate.firstName, - lastName: usersToCreate.lastName - }) - ) - ) - ); - - const subgroupUser = await usersActions.createUser( - new UserModel({ - tenantId, - firstName: app.subGroupUser.firstName, - lastName: app.subGroupUser.lastName - }) - ); - - const group = await adminGroupsApi.createNewGroup({ - name: app.group.name, - tenantId, - type: 1 - }); - - await Promise.all(userCreated.map((userToAddGroup: UserModel) => adminGroupsApi.addGroupMember(group.id, userToAddGroup.id))); - - const subgroups = await Promise.all( - getSubGroupsName().map((name) => - adminGroupsApi.createNewGroup({ - name, - tenantId, - type: 1, - parentGroupId: group.id - }) - ) - ); - - await Promise.all(subgroups.map((subgroup) => adminGroupsApi.addGroupMember(subgroup.id, subgroupUser.id))); - } - - /** - * Get subgroups name - * - * @returns list of subgroup names - */ - function getSubGroupsName(): string[] { - return app.group.subgroup.map((subgroup: AppSubGroup) => subgroup.name).sort((a: string, b: string) => a.localeCompare(b)); - } - - /** - * Get group members - * - * @returns list of group member full names - */ - function getGroupMembers(): string[] { - return app.groupUser - .map((groupUser: AppGroupUser) => `${groupUser.firstName} ${groupUser.lastName}`) - .sort((a: string, b: string) => a.localeCompare(b)); - } -}); diff --git a/e2e/process-services/widgets/people-widget.e2e.ts b/e2e/process-services/widgets/people-widget.e2e.ts deleted file mode 100644 index c0ac51f0828..00000000000 --- a/e2e/process-services/widgets/people-widget.e2e.ts +++ /dev/null @@ -1,85 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, - ApplicationsUtil, - LoginPage, - ProcessUtil, - UsersActions, - Widget -} from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; - -describe('People widget', () => { - - const app = browser.params.resources.Files.WIDGET_CHECK_APP.ADD_PEOPLE; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - let appModel; - let deployedAppId; let process; - let processUserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessOfApp(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(deployedAppId); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C260435][C274707] Should be possible to set visibility properties for People Widget', async () => { - await taskPage.formFields().checkWidgetIsHidden(app.FIELD.widget_id); - await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - await taskPage.formFields().checkWidgetIsVisible(app.FIELD.widget_id); - - const admin = processUserModel.firstName + ' ' + processUserModel.lastName; - await widget.peopleWidget().insertUser(app.FIELD.widget_id, admin.charAt(0)); - await widget.peopleWidget().checkDropDownListIsDisplayed(); - await widget.peopleWidget().checkUserIsListed(admin); - await widget.peopleWidget().selectUserFromDropDown(admin); - }); -}); diff --git a/e2e/process-services/widgets/radio-buttons-widget.e2e.ts b/e2e/process-services/widgets/radio-buttons-widget.e2e.ts deleted file mode 100644 index 3c01a77681b..00000000000 --- a/e2e/process-services/widgets/radio-buttons-widget.e2e.ts +++ /dev/null @@ -1,82 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Radio Buttons Widget', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.RADIO_BUTTONS; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - let appModel: AppDefinitionRepresentation; - let appId: number; - let process: ProcessInstanceRepresentation; - let processUserModel: UserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - appId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(appId); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C277316] Should display empty radio buttons when no preselection is configured', async () => { - await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - await widget.radioWidget().isSelectionClean(app.FIELD.radio_buttons_id); - }); - - it('[C274704] Should be able to set visibility properties for Radio Button widget', async () => { - await taskPage.formFields().checkWidgetIsHidden(app.FIELD.radio_buttons_id); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - - await widget.checkboxWidget().clickCheckboxInput(app.FIELD.checkbox_id); - expect(await widget.radioWidget().getRadioWidgetLabel(app.FIELD.radio_buttons_id)).toContain('Radio posts'); - await widget.radioWidget().selectOption(app.FIELD.radio_buttons_id, 1); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); -}); diff --git a/e2e/process-services/widgets/text-widget.e2e.ts b/e2e/process-services/widgets/text-widget.e2e.ts deleted file mode 100644 index 2048eca547b..00000000000 --- a/e2e/process-services/widgets/text-widget.e2e.ts +++ /dev/null @@ -1,115 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { TasksPage } from '../pages/tasks.page'; -import { browser } from 'protractor'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -describe('Text widget', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.TEXT; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - let appModel: AppDefinitionRepresentation; - let deployedAppId: number; - let process: ProcessInstanceRepresentation; - let processUserModel: UserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(deployedAppId); - - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C268157] Should be able to set general properties for Text widget', async () => { - const label = await widget.textWidget().getFieldLabel(app.FIELD.simpleText); - expect(label).toBe('textSimple*'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - const placeHolder = await widget.textWidget().getFieldPlaceHolder(app.FIELD.simpleText); - expect(placeHolder).toBe('Type something...'); - await widget.textWidget().setValue(app.FIELD.simpleText, 'TEST'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); - - it('[C268170] Min-max length properties', async () => { - await widget.textWidget().setValue(app.FIELD.simpleText, 'TEST'); - await widget.textWidget().setValue(app.FIELD.textMinMax, 'A'); - expect(await widget.textWidget().getErrorMessage(app.FIELD.textMinMax)).toContain('Enter at least 4 characters'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - await widget.textWidget().setValue(app.FIELD.textMinMax, '01234567890'); - expect(await widget.textWidget().getErrorMessage(app.FIELD.textMinMax)).toContain('Enter no more than 10 characters'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - await widget.textWidget().setValue(app.FIELD.textMinMax, '123456789'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); - - it('[C268171] Input mask reversed checkbox properties', async () => { - await widget.textWidget().setValue(app.FIELD.textMask, '18951523'); - expect(await widget.textWidget().getFieldValue(app.FIELD.textMask)).toBe('1895-1523'); - }); - - it('[C268171] Input mask reversed checkbox properties', async () => { - await widget.textWidget().setValue(app.FIELD.textMaskReversed, '1234567899'); - expect(await widget.textWidget().getFieldValue(app.FIELD.textMaskReversed)).toBe('3456-7899'); - }); - - it('[C268177] Should be able to set Regex Pattern property for Text widget', async () => { - await widget.textWidget().setValue(app.FIELD.simpleText, 'TEST'); - await widget.textWidget().setValue(app.FIELD.textRegexp, 'T'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(false); - expect(await widget.textWidget().getErrorMessage(app.FIELD.textRegexp)).toContain('Enter a different value'); - await widget.textWidget().setValue(app.FIELD.textRegexp, 'TE'); - expect(await taskPage.formFields().isCompleteFormButtonEnabled()).toEqual(true); - }); - - it('[C274712] Should be able to set visibility properties for Text widget ', async () => { - await widget.textWidget().isWidgetNotVisible(app.FIELD.textHidden); - await widget.textWidget().setValue(app.FIELD.showHiddenText, '1'); - await widget.textWidget().isWidgetVisible(app.FIELD.textHidden); - }); -}); diff --git a/e2e/process-services/widgets/widget-visibility-condition.e2e.ts b/e2e/process-services/widgets/widget-visibility-condition.e2e.ts deleted file mode 100644 index 2c6f7eaa003..00000000000 --- a/e2e/process-services/widgets/widget-visibility-condition.e2e.ts +++ /dev/null @@ -1,137 +0,0 @@ -/*! - * @license - * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. - * - * 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 { createApiService, ApplicationsUtil, LoginPage, ProcessUtil, UsersActions, Widget, UserModel } from '@alfresco/adf-testing'; -import { browser } from 'protractor'; -import { TasksPage } from '../pages/tasks.page'; -import CONSTANTS = require('../../util/constants'); -import { ProcessServicesPage } from '../pages/process-services.page'; -import { AppDefinitionRepresentation, ProcessInstanceRepresentation } from '@alfresco/js-api'; - -const widgets = { - textOneId: 'text1', - textTwoId: 'text2' -}; - -const value = { - displayCheckbox: 'showCheck', - displayFieldVariableCheckbox: 'showCheckText1', - showVariableFieldCheckbox: 'showCheckText1', - notDisplayCheckbox: 'anythingElse', - displayVariableValueCheckbox: 'showCheck2' -}; - -const checkbox = { - checkboxFieldValue: 'text1value', - checkboxVariableField: 'variablefield', - checkboxFieldVariable: 'text1variable', - checkboxFieldField: 'text1text2', - checkboxVariableValue: 'variablevalue', - checkboxVariableVariable: 'variablevariable' -}; - -describe('Process-Services - Visibility conditions', () => { - const app = browser.params.resources.Files.WIDGET_CHECK_APP.VISIBILITY; - - const loginPage = new LoginPage(); - const taskPage = new TasksPage(); - const widget = new Widget(); - - const apiService = createApiService(); - const usersActions = new UsersActions(apiService); - const applicationsService = new ApplicationsUtil(apiService); - const processUtil = new ProcessUtil(apiService); - - let appModel: AppDefinitionRepresentation; - let deployedAppId: number; - let process: ProcessInstanceRepresentation; - let processUserModel: UserModel; - - beforeAll(async () => { - await apiService.loginWithProfile('admin'); - - processUserModel = await usersActions.createUser(); - - await apiService.login(processUserModel.username, processUserModel.password); - appModel = await applicationsService.importPublishDeployApp(browser.params.resources.Files.WIDGET_CHECK_APP.file_path); - - deployedAppId = await applicationsService.getAppDefinitionId(appModel.id); - - process = await processUtil.startProcessByDefinitionName(appModel.name, app.processName); - await loginPage.login(processUserModel.username, processUserModel.password); - }); - - beforeEach(async () => { - await new ProcessServicesPage().goToAppByAppId(deployedAppId); - await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); - await taskPage.formFields().checkFormIsDisplayed(); - }); - - afterAll(async () => { - await processUtil.cancelProcessInstance(process.id); - await apiService.loginWithProfile('admin'); - await usersActions.deleteTenant(processUserModel.tenantId); - }); - - it('[C309647] Should be able to see Checkbox widget when visibility condition refers to another field with specific value', async () => { - await widget.textWidget().isWidgetVisible(widgets.textOneId); - await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldValue); - await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldValue); - }); - - it('[C309648] Should be able to see Checkbox widget when visibility condition refers to a form variable and a field', async () => { - await widget.textWidget().isWidgetVisible(widgets.textOneId); - await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); - - await widget.textWidget().setValue(widgets.textOneId, value.showVariableFieldCheckbox); - await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableField); - - await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxVariableField); - }); - - it('[C311425] Should be able to see Checkbox widget when visibility condition refers to a field and another field', async () => { - await widget.textWidget().isWidgetVisible(widgets.textOneId); - await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField); - await widget.textWidget().setValue(widgets.textOneId, value.displayCheckbox); - - await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldField); - - await widget.textWidget().setValue(widgets.textTwoId, value.displayCheckbox); - await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldField); - }); - - it('[C309649] Should be able to see Checkbox widget when visibility condition refers to a field and a form variable', async () => { - await widget.textWidget().isWidgetVisible(widgets.textOneId); - await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); - - await widget.textWidget().setValue(widgets.textOneId, value.displayFieldVariableCheckbox); - await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxFieldVariable); - - await widget.textWidget().setValue(widgets.textOneId, value.notDisplayCheckbox); - await widget.checkboxWidget().isCheckboxHidden(checkbox.checkboxFieldVariable); - }); - - it('[C311424] Should be able to see Checkbox widget when visibility condition refers to a variable with specific value', async () => { - await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableValue); - }); - - it('[C311426] Should be able to see Checkbox widget when visibility condition refers to form variable and another form variable', async () => { - await widget.checkboxWidget().isCheckboxDisplayed(checkbox.checkboxVariableVariable); - }); -}); diff --git a/e2e/resources/apps/AppDynamicTableDropdown.zip b/e2e/resources/apps/AppDynamicTableDropdown.zip deleted file mode 100644 index f3c0dba188f2d041c86d2c6abe5139075c1eb092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5414 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 DAvJ)U diff --git a/e2e/resources/apps/App_file_form.zip b/e2e/resources/apps/App_file_form.zip deleted file mode 100644 index a9198a6d5263696de30c2fbb5f18bc89ba3dd603..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15505 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 CW^+LR diff --git a/e2e/resources/apps/Assignee.zip b/e2e/resources/apps/Assignee.zip deleted file mode 100644 index 098074763019a8df9293a06411c21eaa875e9345..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12406 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 a|0&+jN56Grx}e=geKt|=;eh1k*S`QD6AeB9 diff --git a/e2e/resources/apps/More Widgets.zip b/e2e/resources/apps/More Widgets.zip deleted file mode 100644 index 94d7f8f4e032a5d5f169f14bf6065f24dc65edef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21180 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 diff --git a/e2e/resources/apps/No form app.zip b/e2e/resources/apps/No form app.zip deleted file mode 100644 index 31e392b5febe519fa0fff535e99ea8b973a94af4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5089 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 M`JGB0$)DZ-0XE`NKImn+Hp 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

j-wq;>nER&1CE3z-Kgs1+@PD^NR= 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 diff --git a/e2e/resources/apps/WidgetApps.zip b/e2e/resources/apps/WidgetApps.zip deleted file mode 100644 index 53641414dd1de038ac803f951fd1e6b472f7cfb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146281 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

jR$MBvn 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 HfIs~o^ypI~ diff --git a/e2e/resources/apps/appWithUser.zip b/e2e/resources/apps/appWithUser.zip deleted file mode 100644 index 743412ee209119051c18fc8f76b70da6fca0d04c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9102 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