From fde037498f859f58b4b51c71dc03435211c38cd1 Mon Sep 17 00:00:00 2001 From: dhrn <14145706+dhrn@users.noreply.github.com> Date: Wed, 22 Apr 2020 02:01:26 +0530 Subject: [PATCH] [AAE-1936] Attach File E2E APS1 (#5623) * [AAE-1936] Attach File E2E APS1 * * minor changes * * fix title --- .../attach-file-content-service.e2e.ts | 211 ++++++++++++++++++ .../attach-file-widget.e2e.ts | 57 +++-- e2e/process-services/attach-folder.e2e.ts | 24 +- .../widgets/attach-file-widget.e2e.ts | 10 +- e2e/resources/apps/WidgetApps.zip | Bin 132297 -> 146281 bytes e2e/test.config.js | 30 +++ e2e/util/resources.js | 7 + .../content-node-selector-dialog.page.ts | 5 + .../core/actions/APS/integration.service.ts | 26 +-- .../form/widgets/attach-file-widget.page.ts | 42 +++- .../external-node-selector-dialog.page.ts | 71 ++++++ .../lib/process-services/pages/public-api.ts | 1 + lib/testing/src/lib/test.configuration.ts | 8 + 13 files changed, 427 insertions(+), 65 deletions(-) create mode 100644 e2e/process-services/attach-file-content-service.e2e.ts create mode 100644 lib/testing/src/lib/process-services/pages/external-node-selector-dialog.page.ts diff --git a/e2e/process-services/attach-file-content-service.e2e.ts b/e2e/process-services/attach-file-content-service.e2e.ts new file mode 100644 index 0000000000..91bc489065 --- /dev/null +++ b/e2e/process-services/attach-file-content-service.e2e.ts @@ -0,0 +1,211 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + ApplicationsUtil, + ContentNodeSelectorDialogPage, + ExternalNodeSelectorDialogPage, + IntegrationService, + LoginPage, + UploadActions, + Widget +} from '@alfresco/adf-testing'; +import { TasksPage } from '../pages/adf/process-services/tasks.page'; +import { browser } from 'protractor'; +import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; +import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; +import { UsersActions } from '../actions/users.actions'; +import { User } from '../models/APS/user'; +import CONSTANTS = require('../util/constants'); + +describe('Attach File - Content service', () => { + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'ALL', + hostEcm: browser.params.testConfig.adf_acs.host, + hostBpm: browser.params.testConfig.adf_aps.host + }); + this.alfrescoJsApiExternal = new AlfrescoApi({ + provider: 'ECM', + hostEcm: browser.params.testConfig.adf_external_acs.host + }); + + const loginPage = new LoginPage(); + const widget = new Widget(); + const taskPage = new TasksPage(); + const navigationBarPage = new NavigationBarPage(); + const contentNodeSelector = new ContentNodeSelectorDialogPage(); + const externalNodeSelector = new ExternalNodeSelectorDialogPage(); + + const app = browser.params.resources.Files.WIDGET_CHECK_APP; + const { adminEmail, adminPassword } = browser.params.testConfig.adf; + + const pdfFileOne = { + name: browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name, + location: browser.params.testConfig.main.rootPath + browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_location + }; + + const pdfFileTwo = { + name: browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_name, + location: browser.params.resources.Files.ADF_DOCUMENTS.PDF_B.file_location + }; + + const externalFile = 'Project Overview.ppt'; + const csIntegrations = ['adf dev', 'adf master']; + let user: User; + + beforeAll(async () => { + const integrationService = new IntegrationService(this.alfrescoJsApi); + const applicationService = new ApplicationsUtil(this.alfrescoJsApi); + const uploadActions = new UploadActions(this.alfrescoJsApi); + const users = new UsersActions(); + + await this.alfrescoJsApi.login(adminEmail, adminPassword); + user = await users.createTenantAndUser(this.alfrescoJsApi); + const acsUser = { ...user, id: user.email }; delete acsUser.type; delete acsUser.tenantId; + await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await this.alfrescoJsApiExternal.login(adminEmail, adminPassword); + await this.alfrescoJsApiExternal.core.peopleApi.addPerson(acsUser); + + await integrationService.addCSIntegration({ tenantId: user.tenantId, name: csIntegrations[0], host: browser.params.testConfig.adf_acs.host }); + await integrationService.addCSIntegration({ tenantId: user.tenantId, name: csIntegrations[1], host: browser.params.testConfig.adf_external_acs.host }); + + await this.alfrescoJsApi.login(user.email, user.password); + await uploadActions.uploadFile(pdfFileTwo.location, pdfFileTwo.name, '-my-'); + await applicationService.importPublishDeployApp(app.file_path); + }); + + afterAll(async () => { + await this.alfrescoJsApi.login(adminEmail, adminPassword); + await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); + }); + + beforeEach( async () => { + await loginPage.loginToAllUsingUserModel(user); + }); + + 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 (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + + 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 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 (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + + 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); + }); + + it('[C299040] Should display the login screen right, when user has access to 2 alfresco repositiories', async () => { + const name = 'Attach file'; + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + + await taskPage.createTask({ name, formName: app.UPLOAD_FILE_FORM_CS.formName }); + + await widget.attachFileWidget().clickUploadButton(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id); + await widget.attachFileWidget().selectUploadSource(csIntegrations[1]); + + await expect(await externalNodeSelector.getTitle()).toEqual(`Please log in for ${browser.params.testConfig.adf_external_acs.host}`); + await externalNodeSelector.login(user.email, user.password); + + await externalNodeSelector.checkDialogIsDisplayed(); + await externalNodeSelector.searchAndSelectResult(externalFile, externalFile); + await externalNodeSelector.clickMoveCopyButton(); + await widget.attachFileWidget().checkFileIsAttached(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, externalFile); + }); + + it('[C286516] Able to upload a file when user has more than two alfresco repositories', async () => { + const name = 'Attach file - multiple repo'; + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.createTask({ name, formName: app.UPLOAD_FILE_FORM_CS.formName }); + + await widget.attachFileWidget().clickUploadButton(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id); + await widget.attachFileWidget().selectUploadSource(csIntegrations[0]); + + await contentNodeSelector.checkDialogIsDisplayed(); + await contentNodeSelector.searchAndSelectResult(pdfFileTwo.name, pdfFileTwo.name); + await contentNodeSelector.clickMoveCopyButton(); + + await widget.attachFileWidget().checkFileIsAttached(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, pdfFileTwo.name); + + await widget.attachFileWidget().toggleAttachedFileMenu(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, pdfFileTwo.name); + await expect(await widget.attachFileWidget().viewFileEnabled()).toBe(false); + await expect(await widget.attachFileWidget().downloadFileEnabled()).toBe(true); + await expect(await widget.attachFileWidget().removeFileEnabled()).toBe(true); + + await widget.attachFileWidget().clickUploadButton(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id); + await widget.attachFileWidget().selectUploadSource(csIntegrations[1]); + + await expect(await externalNodeSelector.getTitle()).toEqual(`Please log in for ${browser.params.testConfig.adf_external_acs.host}`); + await externalNodeSelector.login(user.email, user.password); + + await externalNodeSelector.checkDialogIsDisplayed(); + await externalNodeSelector.searchAndSelectResult(externalFile, externalFile); + await externalNodeSelector.clickMoveCopyButton(); + await widget.attachFileWidget().checkFileIsAttached(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, externalFile); + + await widget.attachFileWidget().toggleAttachedFileMenu(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, pdfFileTwo.name); + await expect(await widget.attachFileWidget().viewFileEnabled()).toBe(false); + await expect(await widget.attachFileWidget().downloadFileEnabled()).toBe(true); + await expect(await widget.attachFileWidget().removeFileEnabled()).toBe(true); + + await widget.attachFileWidget().toggleAttachedFileMenu(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, externalFile); + await expect(await widget.attachFileWidget().viewFileEnabled()).toBe(false); + await expect(await widget.attachFileWidget().downloadFileEnabled()).toBe(false); + await expect(await widget.attachFileWidget().removeFileEnabled()).toBe(true); + + await taskPage.taskDetails().clickCompleteFormTask(); + + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(name); + + await widget.attachFileWidget().checkFileIsAttached(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, pdfFileTwo.name); + await widget.attachFileWidget().toggleAttachedFileMenu(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, pdfFileTwo.name); + await expect(await widget.attachFileWidget().viewFileEnabled()).toBe(false); + await expect(await widget.attachFileWidget().downloadFileEnabled()).toBe(true); + + await widget.attachFileWidget().checkFileIsAttached(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, externalFile); + await widget.attachFileWidget().toggleAttachedFileMenu(app.UPLOAD_FILE_FORM_CS.FIELD.widget_id, externalFile); + await expect(await widget.attachFileWidget().viewFileEnabled()).toBe(false); + await expect(await widget.attachFileWidget().downloadFileEnabled()).toBe(true); + }); +}); diff --git a/e2e/process-services/attach-file-widget.e2e.ts b/e2e/process-services/attach-file-widget.e2e.ts index 2b1e877ce5..0b5e33894e 100644 --- a/e2e/process-services/attach-file-widget.e2e.ts +++ b/e2e/process-services/attach-file-widget.e2e.ts @@ -23,8 +23,15 @@ import { browser } from 'protractor'; import { NavigationBarPage } from '../pages/adf/navigation-bar.page'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UsersActions } from '../actions/users.actions'; +import { User } from '../models/APS/user'; describe('Start Task - Task App', () => { + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'BPM', + hostBpm: browser.params.testConfig.adf_aps.host + }); + const users = new UsersActions(); + const applicationService = new ApplicationsUtil(this.alfrescoJsApi); const loginPage = new LoginPage(); const viewerPage = new ViewerPage(); @@ -32,41 +39,26 @@ describe('Start Task - Task App', () => { const taskPage = new TasksPage(); const navigationBarPage = new NavigationBarPage(); - let processUserModel; + let user: User; const app = browser.params.resources.Files.WIDGETS_SMOKE_TEST; const pdfFile = new FileModel({ 'name': browser.params.resources.Files.ADF_DOCUMENTS.PDF.file_name }); + const wordFile = new FileModel({ + name: browser.params.resources.Files.ADF_DOCUMENTS.DOCX.file_name, + location: browser.params.testConfig.main.rootPath + browser.params.resources.Files.ADF_DOCUMENTS.DOCX.file_location + }); const appFields = app.form_fields; beforeAll(async () => { - const users = new UsersActions(); - - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - - const applicationService = new ApplicationsUtil(this.alfrescoJsApi); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - processUserModel = await users.createTenantAndUser(this.alfrescoJsApi); - - await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - + user = await users.createTenantAndUser(this.alfrescoJsApi); + await this.alfrescoJsApi.login(user.email, user.password); await applicationService.importPublishDeployApp(app.file_path); - - await loginPage.loginToProcessServicesUsingUserModel(processUserModel); + await loginPage.loginToProcessServicesUsingUserModel(user); }); afterAll(async () => { - this.alfrescoJsApi = new AlfrescoApi({ - provider: 'BPM', - hostBpm: browser.params.testConfig.adf_aps.host - }); - await this.alfrescoJsApi.login(browser.params.testConfig.adf.adminEmail, browser.params.testConfig.adf.adminPassword); - - await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(processUserModel.tenantId); + await this.alfrescoJsApi.activiti.adminTenantsApi.deleteTenant(user.tenantId); }); it('[C274690] Should be able to open a file attached to a start form', async () => { @@ -88,4 +80,21 @@ describe('Start Task - Task App', () => { await viewerPage.clickCloseButton(); await taskPage.tasksListPage().checkContentIsDisplayed('View file'); }); + + it('[C260418] Uploading single file form', async () => { + const name = 'View Doc file'; + await (await (await navigationBarPage.navigateToProcessServicesPage()).goToTaskApp()).clickTasksButton(); + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.MY_TASKS); + await taskPage.createTask({ name, formName: app.formName }); + + await widget.attachFileWidget().attachFile(appFields.attachFile_id, wordFile.location); + await widget.attachFileWidget().checkUploadIsNotVisible(appFields.attachFile_id); + await widget.attachFileWidget().checkFileIsAttached(appFields.attachFile_id, wordFile.name); + await taskPage.taskDetails().clickCompleteFormTask(); + + await taskPage.filtersPage().goToFilter(CONSTANTS.TASK_FILTERS.COMPLETED_TASKS); + await taskPage.tasksListPage().selectRow(name); + await widget.attachFileWidget().checkUploadIsNotVisible(appFields.attachFile_id); + await widget.attachFileWidget().checkFileIsAttached(appFields.attachFile_id, wordFile.name); + }); }); diff --git a/e2e/process-services/attach-folder.e2e.ts b/e2e/process-services/attach-folder.e2e.ts index 1001f2bf94..9a7b949c62 100644 --- a/e2e/process-services/attach-folder.e2e.ts +++ b/e2e/process-services/attach-folder.e2e.ts @@ -56,18 +56,8 @@ describe('Attach Folder', () => { user = await users.createTenantAndUser(this.alfrescoJsApi); const acsUser = { ...user, id: user.email }; delete acsUser.type; delete acsUser.tenantId; await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await integrationService.addCSIntegration({ tenantId: user.tenantId, name: 'adf dev', host: browser.params.testConfig.adf_acs }); - const repository = { - name: 'adf dev', - tenantId: user.tenantId, - alfrescoTenantId: '', - repositoryUrl: `${browser.params.testConfig.adf_acs.host}/alfresco`, - shareUrl: `${browser.params.testConfig.adf_acs.host}/share`, - version: '4.2', - useShareConnector: false - }; - - await integrationService.addCSIntegration(repository); await this.alfrescoJsApi.login(user.email, user.password); await applicationService.importPublishDeployApp(app.file_path); await loginPage.loginToAllUsingUserModel(user); @@ -88,15 +78,11 @@ describe('Attach Folder', () => { await contentNodeSelector.checkDialogIsDisplayed(); - await contentNodeSelector.typeIntoNodeSelectorSearchField(user.email); - await contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(user.email); - await contentNodeSelector.clickContentNodeSelectorResult(user.email); + await contentNodeSelector.searchAndSelectResult(user.email, user.email); await expect(await contentNodeSelector.checkCancelButtonIsEnabled()).toBe(true); await expect(await contentNodeSelector.checkCopyMoveButtonIsEnabled()).toBe(true); - await contentNodeSelector.typeIntoNodeSelectorSearchField(meetingNotes); - await contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(meetingNotes); - await contentNodeSelector.clickContentNodeSelectorResult(meetingNotes); + await contentNodeSelector.searchAndSelectResult(meetingNotes, meetingNotes); await expect(await contentNodeSelector.checkCancelButtonIsEnabled()).toBe(true); await expect(await contentNodeSelector.checkCopyMoveButtonIsEnabled()).toBe(false); @@ -106,9 +92,7 @@ describe('Attach Folder', () => { await contentFileWidget.clickWidget(app.UPLOAD_FOLDER_FORM_CS.FIELD.widget_id); await contentNodeSelector.checkDialogIsDisplayed(); - await contentNodeSelector.typeIntoNodeSelectorSearchField(user.email); - await contentNodeSelector.contentListPage().dataTablePage().checkRowContentIsDisplayed(user.email); - await contentNodeSelector.clickContentNodeSelectorResult(user.email); + await contentNodeSelector.searchAndSelectResult(user.email, user.email); await expect(await contentNodeSelector.checkCancelButtonIsEnabled()).toBe(true); await expect(await contentNodeSelector.checkCopyMoveButtonIsEnabled()).toBe(true); diff --git a/e2e/process-services/widgets/attach-file-widget.e2e.ts b/e2e/process-services/widgets/attach-file-widget.e2e.ts index 75aede1baa..336258f55f 100644 --- a/e2e/process-services/widgets/attach-file-widget.e2e.ts +++ b/e2e/process-services/widgets/attach-file-widget.e2e.ts @@ -83,7 +83,7 @@ describe('Attach widget - File', () => { }); it('[C268067] Should be able to preview, download and remove attached files from an active form', async () => { - await widget.attachFileWidget().toggleAttachedFileMenu(); + await widget.attachFileWidget().toggleAttachedFileMenu(appFields.attachFile_id, pdfFile.name); await widget.attachFileWidget().checkAttachFileOptionsActiveForm(); await widget.attachFileWidget().viewAttachedFile(); @@ -91,11 +91,11 @@ describe('Attach widget - File', () => { await viewerPage.checkCloseButtonIsDisplayed(); await viewerPage.clickCloseButton(); - await widget.attachFileWidget().toggleAttachedFileMenu(); + await widget.attachFileWidget().toggleAttachedFileMenu(appFields.attachFile_id, pdfFile.name); await widget.attachFileWidget().downloadFile(); await FileBrowserUtil.isFileDownloaded(pdfFile.name); - await widget.attachFileWidget().toggleAttachedFileMenu(); + await widget.attachFileWidget().toggleAttachedFileMenu(appFields.attachFile_id, pdfFile.name); await widget.attachFileWidget().removeAttachedFile(); await widget.attachFileWidget().attachFileWidgetDisplayed(); }); @@ -109,7 +109,7 @@ describe('Attach widget - File', () => { await tasksListPage.checkTaskListIsLoaded(); await widget.attachFileWidget().checkFileIsAttached(appFields.attachFile_id, pdfFile.name); - await widget.attachFileWidget().toggleAttachedFileMenu(); + await widget.attachFileWidget().toggleAttachedFileMenu(appFields.attachFile_id, pdfFile.name); await widget.attachFileWidget().checkAttachFileOptionsCompletedForm(); await widget.attachFileWidget().viewAttachedFile(); @@ -117,7 +117,7 @@ describe('Attach widget - File', () => { await viewerPage.checkCloseButtonIsDisplayed(); await viewerPage.clickCloseButton(); - await widget.attachFileWidget().toggleAttachedFileMenu(); + await widget.attachFileWidget().toggleAttachedFileMenu(appFields.attachFile_id, pdfFile.name); await widget.attachFileWidget().downloadFile(); await FileBrowserUtil.isFileDownloaded(pdfFile.name); }); diff --git a/e2e/resources/apps/WidgetApps.zip b/e2e/resources/apps/WidgetApps.zip index 80ff15fe13b985ce3d7bfc2da1b61286a66313e5..53641414dd1de038ac803f951fd1e6b472f7cfb6 100644 GIT binary patch delta 43296 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 delta 29682 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 UBKX!Q)+jv;C@5P?5U|JoADwS*dH?_b diff --git a/e2e/test.config.js b/e2e/test.config.js index 1d35586a93..456748947b 100644 --- a/e2e/test.config.js +++ b/e2e/test.config.js @@ -31,6 +31,8 @@ const SCREENSHOT_URL = process.env.SCREENSHOT_URL || process.env.URL_HOST_ADF; const SCREENSHOT_PASSWORD = process.env.SCREENSHOT_PASSWORD || process.env.PASSWORD_ADF; const SCREENSHOT_USERNAME = process.env.SCREENSHOT_USERNAME || process.env.USERNAME_ADF; +const EXTERNAL_ACS_HOST = process.env.EXTERNAL_ACS_HOST; + const appConfig = { "bpmHost": BPM_HOST, "identityHost": IDENTITY_HOST, @@ -196,6 +198,34 @@ module.exports = { clientIdSso: "alfresco", }, + adf_external_acs: { + /** + * The protocol where the app runs. + * @config main.protocol {String} + */ + protocol: "http", + + /** + * The protocol where the app runs. + * @config main.protocol {String} + */ + host: EXTERNAL_ACS_HOST, + + /** + * The port where the app runs. + * @config main.port {String} + */ + port: "", + + /** + * The ECM API context required for calls + * @config adf.ACSAPIContextRoot {String} + */ + apiContextRoot: "/alfresco/api/-default-/public", + + clientIdSso: "alfresco", + }, + adf_aps: { /** * The protocol where the app runs. diff --git a/e2e/util/resources.js b/e2e/util/resources.js index eb6721cf2e..dc05d00fdb 100644 --- a/e2e/util/resources.js +++ b/e2e/util/resources.js @@ -398,6 +398,13 @@ exports.Files = { FIELD: { widget_id: 'attachfolder', } + }, + + UPLOAD_FILE_FORM_CS: { + formName: "Upload multiple files", + FIELD: { + widget_id: 'attachfile', + } } }, diff --git a/lib/testing/src/lib/content-services/dialog/content-node-selector-dialog.page.ts b/lib/testing/src/lib/content-services/dialog/content-node-selector-dialog.page.ts index db039bfe1a..619049460e 100644 --- a/lib/testing/src/lib/content-services/dialog/content-node-selector-dialog.page.ts +++ b/lib/testing/src/lib/content-services/dialog/content-node-selector-dialog.page.ts @@ -129,6 +129,11 @@ export class ContentNodeSelectorDialogPage { await this.clickMoveCopyButton(); } + async searchAndSelectResult(searchText: string, name: string) { + await this.typeIntoNodeSelectorSearchField(searchText); + await this.clickContentNodeSelectorResult(name); + } + contentListPage(): DocumentListPage { return this.contentList; } diff --git a/lib/testing/src/lib/core/actions/APS/integration.service.ts b/lib/testing/src/lib/core/actions/APS/integration.service.ts index 4f9bddbfa2..8ccbf6a794 100644 --- a/lib/testing/src/lib/core/actions/APS/integration.service.ts +++ b/lib/testing/src/lib/core/actions/APS/integration.service.ts @@ -17,16 +17,6 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; -export interface IntegrationType { - name: string; - tenantId: number; - alfrescoTenantId: string; - repositoryUrl: string; - shareUrl: string; - version: string; - useShareConnector: boolean; -} - export class IntegrationService { api: AlfrescoApi; @@ -34,14 +24,22 @@ export class IntegrationService { this.api = api; } - addCSIntegration(body: IntegrationType): Promise { + addCSIntegration({ name, tenantId, host }): Promise { + const repository = { + name, + tenantId, + alfrescoTenantId: '', + repositoryUrl: `${host}/alfresco`, + shareUrl: `${host}/share`, + version: '4.2', + useShareConnector: false + }; return this.api.activiti.integrationAccountApi.apiClient.callApi('app/rest/integration/alfresco', 'POST', - {}, {}, {}, {}, body, [], [], Object); + {}, {}, {}, {}, repository, [], [], Object); } - authenticateRepositary(id: number, body: { username: string, password: string }): Promise { + authenticateRepository(id: number, body: { username: string, password: string }): Promise { return this.api.activiti.integrationAccountApi.apiClient.callApi(`app/rest/integration/alfresco/${id}/account`, 'POST', {}, {}, {}, body, {}, [], []); } - } diff --git a/lib/testing/src/lib/core/pages/form/widgets/attach-file-widget.page.ts b/lib/testing/src/lib/core/pages/form/widgets/attach-file-widget.page.ts index b9c809537b..503bf1261e 100644 --- a/lib/testing/src/lib/core/pages/form/widgets/attach-file-widget.page.ts +++ b/lib/testing/src/lib/core/pages/form/widgets/attach-file-widget.page.ts @@ -58,8 +58,14 @@ export class AttachFileWidgetPage { await BrowserVisibility.waitUntilElementIsVisible(this.attachFileWidget); } - async toggleAttachedFileMenu(): Promise { - await BrowserActions.click(this.attachedFileMenu); + async toggleAttachedFileMenu(fieldId: string, fileName: string): Promise { + await BrowserActions.closeMenuAndDialogs(); + const widget = await this.formFields.getWidget(fieldId); + const fileAttached = await widget.element(this.filesListLocator).element(by.cssContainingText('mat-list-item span ', fileName)); + await BrowserVisibility.waitUntilElementIsVisible(fileAttached); + const id = await fileAttached.getAttribute('id'); + const optionMenu = widget.element(by.css(`button[id='${id}-option-menu']`)); + await BrowserActions.click(optionMenu); } async checkAttachFileOptionsActiveForm(): Promise { @@ -87,4 +93,36 @@ export class AttachFileWidgetPage { async removeAttachedFile(): Promise { await BrowserActions.click(this.removeFileOptionButton); } + + async viewFileEnabled(): Promise { + return this.viewFileOptionButton.isEnabled(); + } + + async downloadFileEnabled(): Promise { + return this.downloadFileOptionButton.isEnabled(); + } + + async removeFileEnabled(): Promise { + return this.removeFileOptionButton.isEnabled(); + } + + async checkUploadIsNotVisible(fieldId): Promise { + browser.setFileDetector(new remote.FileDetector()); + const widget = await this.formFields.getWidget(fieldId); + const uploadButton = await widget.element(this.uploadLocator); + await BrowserVisibility.waitUntilElementIsNotPresent(uploadButton); + } + + async selectUploadSource(name: string): Promise { + await BrowserVisibility.waitUntilElementIsVisible(this.attachedFileOptions); + await BrowserActions.click(element(by.css(`button[id="attach-${name}"]`))); + } + + async clickUploadButton(fieldId): Promise { + browser.setFileDetector(new remote.FileDetector()); + await BrowserActions.closeMenuAndDialogs(); + const widget = await this.formFields.getWidget(fieldId); + const uploadButton = await widget.element(this.uploadLocator); + await BrowserActions.click(uploadButton); + } } diff --git a/lib/testing/src/lib/process-services/pages/external-node-selector-dialog.page.ts b/lib/testing/src/lib/process-services/pages/external-node-selector-dialog.page.ts new file mode 100644 index 0000000000..2f664eb1bc --- /dev/null +++ b/lib/testing/src/lib/process-services/pages/external-node-selector-dialog.page.ts @@ -0,0 +1,71 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { by, element, ElementFinder } from 'protractor'; +import { BrowserActions } from '../../core/utils/browser-actions'; +import { BrowserVisibility } from '../../core/utils/browser-visibility'; +import { ContentNodeSelectorDialogPage } from '../../content-services/dialog/content-node-selector-dialog.page'; +import { DocumentListPage } from '../../content-services/pages/document-list.page'; + +export class ExternalNodeSelectorDialogPage extends ContentNodeSelectorDialogPage { + txtUsername: ElementFinder = element(by.css('input[id="username"]')); + txtPassword: ElementFinder = element(by.css('input[id="password"]')); + loginElement: ElementFinder = element(by.css('[data-automation-id="attach-file-dialog-actions-login"]')); + title: ElementFinder = element(by.css('[data-automation-id="content-node-selector-title"]')); + + constructor() { + super(); + this.dialog = element(by.css(`adf-content-node-selector-panel`)); + this.contentList = new DocumentListPage(this.dialog); + this.dataTable = this.contentList.dataTablePage(); + this.header = this.dialog.element(by.css(`header[data-automation-id='content-node-selector-title']`)); + this.searchInputElement = this.dialog.element(by.css(`input[data-automation-id='content-node-selector-search-input']`)); + this.selectedRow = this.dialog.element(by.css(`adf-datatable-row[class*="adf-is-selected"]`)); + this.moveCopyButton = element(by.css(`button[data-automation-id="attach-file-dialog-actions-choose"]`)); + } + + async getTitle(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.title); + return this.title.getText(); + } + + async clickLoginButton() { + await BrowserActions.click(this.loginElement); + } + + async enterUsername(username): Promise { + await BrowserActions.clearSendKeys(this.txtUsername, username); + } + + async enterPassword(password): Promise { + await BrowserActions.clearSendKeys(this.txtPassword, password); + } + + async waitForLogInDialog(): Promise { + await BrowserVisibility.waitUntilElementIsPresent(this.title); + await BrowserVisibility.waitUntilElementIsPresent(this.txtUsername); + await BrowserVisibility.waitUntilElementIsPresent(this.txtPassword); + await BrowserVisibility.waitUntilElementIsPresent(this.loginElement); + } + + async login(username, password): Promise { + await this.waitForLogInDialog(); + await this.enterUsername(username); + await this.enterPassword(password); + await this.clickLoginButton(); + } +} diff --git a/lib/testing/src/lib/process-services/pages/public-api.ts b/lib/testing/src/lib/process-services/pages/public-api.ts index e06a147a09..3f086c34a5 100644 --- a/lib/testing/src/lib/process-services/pages/public-api.ts +++ b/lib/testing/src/lib/process-services/pages/public-api.ts @@ -24,3 +24,4 @@ export * from './task-filters.page'; export * from './process-instance-tasks.page'; export * from './start-process.page'; export * from './select-apps-dialog.page'; +export * from './external-node-selector-dialog.page'; diff --git a/lib/testing/src/lib/test.configuration.ts b/lib/testing/src/lib/test.configuration.ts index e20943ed23..12ef3f3028 100644 --- a/lib/testing/src/lib/test.configuration.ts +++ b/lib/testing/src/lib/test.configuration.ts @@ -58,6 +58,14 @@ export interface TestConfiguration { clientIdSso: string; }; + adf_external_acs: { + protocol: string; + host: string; + port: string; + apiContextRoot: string; + clientIdSso: string; + }; + adf_aps: { protocol: string; host: string;