diff --git a/demo-shell/resources/i18n/en.json b/demo-shell/resources/i18n/en.json index 17363b1699..eb95f6a64c 100644 --- a/demo-shell/resources/i18n/en.json +++ b/demo-shell/resources/i18n/en.json @@ -20,7 +20,9 @@ "ALLOW_DELETE": "Allow delete", "SHOW_COMMENTS": "Show comments on versions", "ALLOW_DOWNLOAD": "Enable version download", - "READ_ONLY": "Read-only" + "READ_ONLY": "Read-only", + "ALLOW_DOWNLOAD": "Allow Download", + "COMMENTS": "Show comments" }, "PERSONAL-FILES": "Personal Files", "WARN-MULTIPLE-UPLOADS": "Display warning for multiple uploads.", diff --git a/demo-shell/src/app.config.json b/demo-shell/src/app.config.json index cf5ac5aefa..f7f6a78af8 100644 --- a/demo-shell/src/app.config.json +++ b/demo-shell/src/app.config.json @@ -72,7 +72,9 @@ "options": [ { "key": "name", "label": "Name", "type": "FIELD", "field": "cm:name", "ascending": true }, { "key": "content.sizeInBytes", "label": "Size", "type": "FIELD", "field": "content.size", "ascending": true }, - { "key": "description", "label": "Description", "type": "FIELD", "field": "cm:description", "ascending": true } + { "key": "description", "label": "Description", "type": "FIELD", "field": "cm:description", "ascending": true }, + { "key": "createdByUser", "label": "Author", "type": "FIELD", "field": "cm:creator", "ascending": true }, + { "key": "createdAt", "label": "Created", "type": "FIELD", "field": "cm:created", "ascending": true } ], "defaults": [ { "key": "name", "type": "FIELD", "field": "cm:name", "ascending": true } @@ -194,7 +196,7 @@ ] }, "pagination": { - "size": 25, + "size": 20, "supportedPageSizes": [ 5, 10, 15, 20 ] }, "files": { diff --git a/demo-shell/src/app/components/config-editor/config-editor.component.html b/demo-shell/src/app/components/config-editor/config-editor.component.html index e39b4ad581..4635729609 100644 --- a/demo-shell/src/app/components/config-editor/config-editor.component.html +++ b/demo-shell/src/app/components/config-editor/config-editor.component.html @@ -7,3 +7,14 @@
+
+
+ +

Search App config editor

+ + + + + + +
diff --git a/demo-shell/src/app/components/config-editor/config-editor.component.ts b/demo-shell/src/app/components/config-editor/config-editor.component.ts index c73514121e..df7426f481 100644 --- a/demo-shell/src/app/components/config-editor/config-editor.component.ts +++ b/demo-shell/src/app/components/config-editor/config-editor.component.ts @@ -26,6 +26,7 @@ import { AppConfigService, NotificationService } from '@alfresco/adf-core'; export class ConfigEditorComponent { editor: any; + editorSearch: any; editorOptions = { theme: 'vs-dark', @@ -36,6 +37,7 @@ export class ConfigEditorComponent { }; metadataConf: string; + searchConf: string; onInitMetadata(editor) { this.editor = editor; @@ -44,8 +46,16 @@ export class ConfigEditorComponent { }, 1000); } + onInitSearch(editor) { + this.editorSearch = editor; + setTimeout(() => { + this.editorSearch.getAction('editor.action.formatDocument').run(); + }, 1000); + } + constructor(private appConfig: AppConfigService, private notificationService: NotificationService) { this.metadataConf = JSON.stringify(appConfig.config['content-metadata']); + this.searchConf = JSON.stringify(appConfig.config['search']); } onSaveMetadata() { @@ -59,7 +69,22 @@ export class ConfigEditorComponent { } } + onSaveSearch() { + try { + this.appConfig.config['search'] = JSON.parse(this.editor.getValue()); + } catch (error) { + this.notificationService.openSnackMessage( + 'Wrong sSearch configuration', + 4000 + ); + } + } + onClearMetadata() { this.metadataConf = ''; } + + onClearSearch() { + this.searchConf = ''; + } } diff --git a/demo-shell/src/app/components/files/files.component.html b/demo-shell/src/app/components/files/files.component.html index 5c275b00c6..fb84e82f5a 100644 --- a/demo-shell/src/app/components/files/files.component.html +++ b/demo-shell/src/app/components/files/files.component.html @@ -380,7 +380,6 @@ *ngIf="!infiniteScrolling" class="adf-documentlist-pagination" [target]="documentList" - [supportedPageSizes]="supportedPages" (changePageSize)="onChangePageSize($event)" (changePageNumber)="onChangePageNumber($event)" (nextPage)="onNextPage($event)" @@ -397,7 +396,7 @@
- + diff --git a/demo-shell/src/app/components/files/files.component.ts b/demo-shell/src/app/components/files/files.component.ts index 942fc85d07..9c62952614 100644 --- a/demo-shell/src/app/components/files/files.component.ts +++ b/demo-shell/src/app/components/files/files.component.ts @@ -28,7 +28,7 @@ import { AlfrescoApiService, AuthenticationService, AppConfigService, AppConfigValues, ContentService, TranslationService, FileUploadEvent, FolderCreatedEvent, LogService, NotificationService, UploadService, DataColumn, DataRow, UserPreferencesService, - PaginationComponent, FormValues, DisplayMode, UserPreferenceValues, InfinitePaginationComponent + PaginationComponent, FormValues, DisplayMode, InfinitePaginationComponent } from '@alfresco/adf-core'; import { @@ -177,7 +177,6 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy { permissionsStyle: PermissionStyleModel[] = []; infiniteScrolling: boolean; - supportedPages: number[]; currentSiteid = ''; warnOnMultipleUploads = false; thumbnails = false; @@ -201,10 +200,6 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy { @Optional() private route: ActivatedRoute, public authenticationService: AuthenticationService, public alfrescoApiService: AlfrescoApiService) { - this.preference.select(UserPreferenceValues.SupportedPageSizes) - .subscribe((pages) => { - this.supportedPages = pages; - }); this.alfrescoApiService.nodeUpdated.subscribe(() => { this.documentList.reload(); @@ -255,7 +250,6 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy { this.contentService.folderCreated.subscribe(value => this.onFolderCreated(value)); this.onCreateFolder = this.contentService.folderCreate.subscribe(value => this.onFolderAction(value)); this.onEditFolder = this.contentService.folderEdit.subscribe(value => this.onFolderAction(value)); - this.supportedPages = this.supportedPages ? this.supportedPages : this.preference.getDefaultPageSizes(); // this.permissionsStyle.push(new PermissionStyleModel('document-list__create', PermissionsEnum.CREATE)); // this.permissionsStyle.push(new PermissionStyleModel('document-list__disable', PermissionsEnum.NOT_CREATE, false, true)); diff --git a/demo-shell/src/app/components/files/version-manager-dialog-adapter.component.html b/demo-shell/src/app/components/files/version-manager-dialog-adapter.component.html index 910205d1c6..5284e4f212 100644 --- a/demo-shell/src/app/components/files/version-manager-dialog-adapter.component.html +++ b/demo-shell/src/app/components/files/version-manager-dialog-adapter.component.html @@ -1,11 +1,23 @@
{{'VERSION.DIALOG.TITLE' | translate}}
- + {{'APP.ADF_VERSION_MANAGER.READ_ONLY' | translate}}
+
+ + {{'APP.ADF_VERSION_MANAGER.ALLOW_DOWNLOAD' | translate}} + +
+ +
+ + {{'APP.ADF_VERSION_MANAGER.COMMENTS' | translate}} + +
+
diff --git a/demo-shell/src/app/components/notifications/notifications.component.ts b/demo-shell/src/app/components/notifications/notifications.component.ts index e0899d7a4d..6d2aa97421 100644 --- a/demo-shell/src/app/components/notifications/notifications.component.ts +++ b/demo-shell/src/app/components/notifications/notifications.component.ts @@ -72,6 +72,10 @@ export class NotificationsComponent implements OnInit { } setSnackBarConfig(configFormValues: any) { + + if (configFormValues.announcementMessage) { + this.snackBarConfig.announcementMessage = configFormValues.announcementMessage; + } if (configFormValues.direction) { this.snackBarConfig.direction = configFormValues.direction; @@ -109,7 +113,6 @@ export class NotificationsComponent implements OnInit { "duration": "${this.snackBarConfig.duration}", "horizontalPosition": "${ this.snackBarConfig.horizontalPosition}", "verticalPosition": "${ this.snackBarConfig.verticalPosition}"}`; - if (this.message) { if (this.withAction) { this.notificationService diff --git a/demo-shell/src/app/components/process-service/process-service.component.html b/demo-shell/src/app/components/process-service/process-service.component.html index a02f78b824..1bc0bc6afe 100644 --- a/demo-shell/src/app/components/process-service/process-service.component.html +++ b/demo-shell/src/app/components/process-service/process-service.component.html @@ -59,7 +59,6 @@ *ngIf="taskList" [target]="taskList" (changePageSize)="onChangePageSize($event)" - [supportedPageSizes]="supportedPages" #taskListPagination>
@@ -157,7 +156,6 @@ *ngIf="processList" [target]="processList" (changePageSize)="onChangePageSize($event)" - [supportedPageSizes]="supportedPages" #processListPagination> diff --git a/demo-shell/src/app/components/process-service/process-service.component.ts b/demo-shell/src/app/components/process-service/process-service.component.ts index 131369dbf5..6a33ee01cd 100644 --- a/demo-shell/src/app/components/process-service/process-service.component.ts +++ b/demo-shell/src/app/components/process-service/process-service.component.ts @@ -127,8 +127,6 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit paginationPageSize = 0; processSchemaColumns: any[] = []; - supportedPages: number[]; - defaultProcessDefinitionName: string; defaultProcessName: string; @@ -225,7 +223,6 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit this.currentProcessInstanceId = null; }); this.layoutType = AppsListComponent.LAYOUT_GRID; - this.supportedPages = this.preferenceService.getDefaultPageSizes(); } ngOnDestroy() { diff --git a/demo-shell/src/app/components/trashcan/trashcan.component.html b/demo-shell/src/app/components/trashcan/trashcan.component.html index 2cf59097f4..c9535bdb80 100644 --- a/demo-shell/src/app/components/trashcan/trashcan.component.html +++ b/demo-shell/src/app/components/trashcan/trashcan.component.html @@ -91,7 +91,6 @@ diff --git a/demo-shell/src/app/components/trashcan/trashcan.component.ts b/demo-shell/src/app/components/trashcan/trashcan.component.ts index 4a7e587dd5..a0bbc64b5b 100644 --- a/demo-shell/src/app/components/trashcan/trashcan.component.ts +++ b/demo-shell/src/app/components/trashcan/trashcan.component.ts @@ -37,7 +37,6 @@ export class TrashcanComponent { @ViewChild('documentList') documentList: DocumentListComponent; - supportedPages = []; currentLocale; constructor( @@ -45,12 +44,6 @@ export class TrashcanComponent { private router: Router, private notificationService: NotificationService ) { - this.preference - .select(UserPreferenceValues.SupportedPageSizes) - .subscribe(pages => { - this.supportedPages = pages; - }); - this.preference .select(UserPreferenceValues.Locale) .subscribe(locale => { diff --git a/docs/content-services/version-list.component.md b/docs/content-services/version-list.component.md index b7f628a641..3c0c2947c7 100644 --- a/docs/content-services/version-list.component.md +++ b/docs/content-services/version-list.component.md @@ -26,6 +26,13 @@ Displays the version history of a node in a [Version Manager component](../conte | showActions | `boolean` | true | Toggles showing/hiding of version actions | | showComments | `boolean` | true | Toggles showing/hiding of comments | +### Events + +| Name | Type | Description | +| ---- | ---- | ----------- | +| deleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`MinimalNodeEntryEntity`](../content-services/document-library.model.md)`>` | Emitted when a version is deleted | +| restored | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`MinimalNodeEntryEntity`](../content-services/document-library.model.md)`>` | Emitted when a version is restored | + ## Details This component is used by the [Version Manager component](../content-services/version-manager.component.md) to diff --git a/docs/content-services/version-manager.component.md b/docs/content-services/version-manager.component.md index f23c1eacee..20e4bdb709 100644 --- a/docs/content-services/version-manager.component.md +++ b/docs/content-services/version-manager.component.md @@ -36,8 +36,8 @@ Displays the version history of a node with the ability to upload a new version. | Name | Type | Description | | ---- | ---- | ----------- | -| uploadError | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when an error occurs during upload. | -| uploadSuccess | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when a file is uploaded successfully. | +| uploadError | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`MinimalNodeEntryEntity`](../content-services/document-library.model.md)`>` | Emitted when an error occurs during upload. | +| uploadSuccess | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`MinimalNodeEntryEntity`](../content-services/document-library.model.md)`>` | Emitted when a file is uploaded successfully. | ## Details diff --git a/docs/versionIndex.md b/docs/versionIndex.md index 7f69e14b21..849d1920a7 100644 --- a/docs/versionIndex.md +++ b/docs/versionIndex.md @@ -30,6 +30,7 @@ of components organized by ADF libraries. - [Buttons menu component](core/buttons-menu.component.md) - [Empty content component](core/empty-content.component.md) - [Error content component](core/error-content.component.md) +- [Header component](core/header.component.md) - [Info drawer tab component](core/info-drawer-tab.component.md) - [Node permission dialog service](content-services/node-permission-dialog.service.md) - [Search check list component](content-services/search-check-list.component.md) @@ -129,6 +130,7 @@ of components organized by ADF libraries. - [App config service](core/app-config.service.md) - [Apps list component](process-services/apps-list.component.md) - [Apps process service](core/apps-process.service.md) +- [Attach form component](process-services/attach-form.component.md) - [Auth guard bpm service](core/auth-guard-bpm.service.md) - [Auth guard ecm service](core/auth-guard-ecm.service.md) - [Auth guard service](core/auth-guard.service.md) diff --git a/e2e/actions/ACS/node.actions.ts b/e2e/actions/ACS/node.actions.ts new file mode 100644 index 0000000000..29510cc8f6 --- /dev/null +++ b/e2e/actions/ACS/node.actions.ts @@ -0,0 +1,28 @@ +/*! + * @license + * Copyright 2016 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. + */ + +export class NodeActions { + + lockNode(alfrescoJsApi, nodeId: string, allowOwner?: string) { + + return alfrescoJsApi.nodes.lockNode(nodeId, { + 'type': allowOwner ? 'ALLOW_OWNER_CHANGES' : 'FULL', + 'lifetime': 'PERSISTENT' + }); + } + +} diff --git a/e2e/actions/ACS/upload.actions.ts b/e2e/actions/ACS/upload.actions.ts index 39a7161723..5b3ebbadcb 100644 --- a/e2e/actions/ACS/upload.actions.ts +++ b/e2e/actions/ACS/upload.actions.ts @@ -1,3 +1,20 @@ +/*! + * @license + * Copyright 2016 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 path = require('path'); import fs = require('fs'); import TestConfig = require('../../test.config'); diff --git a/e2e/actions/APS/apps.actions.ts b/e2e/actions/APS/apps.actions.ts index be66a2b308..dc2c46ad14 100644 --- a/e2e/actions/APS/apps.actions.ts +++ b/e2e/actions/APS/apps.actions.ts @@ -1,3 +1,20 @@ +/*! + * @license + * Copyright 2016 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 path = require('path'); import fs = require('fs'); import TestConfig = require('../../test.config'); @@ -42,7 +59,7 @@ export class AppsActions { return appCreated; } - async startProcess(alfrescoJsApi, app, processName) { + async startProcess(alfrescoJsApi, app, processName?: string) { let appDefinitionsList = await alfrescoJsApi.activiti.appsApi.getAppDefinitions(); @@ -52,7 +69,7 @@ export class AppsActions { let processDefinitionList = await alfrescoJsApi.activiti.processApi.getProcessDefinitions({ deploymentId: appDefinition.deploymentId }); - let startProcessOptions = { processDefinitionId: processDefinitionList.data[0].id }; + let startProcessOptions: any = { processDefinitionId: processDefinitionList.data[0].id }; if (typeof processName !== 'undefined') { startProcessOptions.name = processName; diff --git a/e2e/actions/APS/models.actions.ts b/e2e/actions/APS/models.actions.ts index 221db10156..f4b764ae7e 100644 --- a/e2e/actions/APS/models.actions.ts +++ b/e2e/actions/APS/models.actions.ts @@ -1,5 +1,19 @@ -import TestConfig = require('../../test.config'); -import AppPublish = require('../../models/APS/AppPublish'); +/*! + * @license + * Copyright 2016 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. + */ export class ModelsActions { diff --git a/e2e/actions/drop.actions.ts b/e2e/actions/drop.actions.ts index fb8db8f81e..a648385f61 100644 --- a/e2e/actions/drop.actions.ts +++ b/e2e/actions/drop.actions.ts @@ -1,3 +1,23 @@ +/*! + * @license + * Copyright 2016 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. + */ + +/* tslint:disable */ +import { browser } from 'protractor'; + import fs = require('fs'); import path = require('path'); import TestConfig = require('../test.config'); @@ -15,7 +35,7 @@ let JS_BIND_INPUT = function (target) { let data = { files: input.files }; ['dragenter', 'dragover', 'drop'].forEach(function (name) { - let mouseEvent = document.createEvent('MouseEvent'); + let mouseEvent: any = document.createEvent('MouseEvent'); mouseEvent.initMouseEvent(name, !0, !0, window, 0, 0, 0, x, y, !1, !1, !1, !1, 0, null); mouseEvent.dataTransfer = data; target.dispatchEvent(mouseEvent); @@ -32,7 +52,7 @@ let JS_BIND_INPUT_FOLDER = function (target) { let input = document.createElement('input'); input.type = 'file'; input.style.display = 'none'; - input.multiple = 'multiple'; + input.multiple = true; input.webkitdirectory = true; input.addEventListener('change', function (event) { target.scrollIntoView(true); @@ -43,7 +63,7 @@ let JS_BIND_INPUT_FOLDER = function (target) { let data = { files: input.files }; ['dragenter', 'dragover', 'drop'].forEach(function (name) { - let mouseEvent = document.createEvent('MouseEvent'); + let mouseEvent: any = document.createEvent('MouseEvent'); mouseEvent.initMouseEvent(name, !0, !0, window, 0, 0, 0, x, y, !1, !1, !1, !1, 0, null); mouseEvent.dataTransfer = data; target.dispatchEvent(mouseEvent); @@ -61,9 +81,9 @@ export class DropActions { dropFile(dropArea, filePath) { let absolutePath = path.resolve(path.join(TestConfig.main.rootPath, filePath)); - fs.accessSync(absolutePath, fs.F_OK); + fs.accessSync(absolutePath, fs.constants.F_OK); return dropArea.getWebElement().then((element) => { - browser.executeScript(JS_BIND_INPUT, element).then((input) => { + browser.executeScript(JS_BIND_INPUT, element).then((input: any) => { input.sendKeys(absolutePath); }); @@ -72,10 +92,10 @@ export class DropActions { dropFolder(dropArea, folderPath) { let absolutePath = path.resolve(path.join(TestConfig.main.rootPath, folderPath)); - fs.accessSync(absolutePath, fs.F_OK); + fs.accessSync(absolutePath, fs.constants.F_OK); return dropArea.getWebElement().then((element) => { - browser.executeScript(JS_BIND_INPUT_FOLDER, element).then((input) => { + browser.executeScript(JS_BIND_INPUT_FOLDER, element).then((input: any) => { input.sendKeys(absolutePath); }); diff --git a/e2e/actions/users.actions.ts b/e2e/actions/users.actions.ts index d93559c092..d83ef1ea33 100644 --- a/e2e/actions/users.actions.ts +++ b/e2e/actions/users.actions.ts @@ -1,3 +1,20 @@ +/*! + * @license + * Copyright 2016 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 Tenant = require('../models/APS/Tenant'); import User = require('../models/APS/User'); import TestConfig = require('../test.config'); diff --git a/e2e/content-services/comments/comment_component.e2e.ts b/e2e/content-services/comments/comment_component.e2e.ts index b9779bb489..7864418e36 100644 --- a/e2e/content-services/comments/comment_component.e2e.ts +++ b/e2e/content-services/comments/comment_component.e2e.ts @@ -25,7 +25,6 @@ import FileModel = require('../../models/ACS/fileModel'); import TestConfig = require('../../test.config'); import resources = require('../../util/resources'); -import dateFormat = require('dateformat'); import AlfrescoApi = require('alfresco-js-api-node'); import { UploadActions } from '../../actions/ACS/upload.actions'; @@ -43,7 +42,7 @@ describe('Comment Component', () => { 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location }); - + let uploadActions = new UploadActions(); let nodeId, userFullName; let comments = { @@ -73,8 +72,6 @@ describe('Comment Component', () => { beforeEach(async (done) => { - let uploadActions = new UploadActions(); - await this.alfrescoJsApi.login(acsUser.id, acsUser.password); let pngUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, pngFileModel.location, pngFileModel.name, '-my-'); @@ -94,11 +91,7 @@ describe('Comment Component', () => { await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); - await this.alfrescoJsApi.core.nodesApi.deleteNode(nodeId, {'permanent': true}).then(function() { - console.log('API called successfully.'); - }, function(error) { - console.error(error); - }); + await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, nodeId); done(); }); diff --git a/e2e/content-services/document_list_component.e2e.ts b/e2e/content-services/document_list_component.e2e.ts index 591ed4b8a9..815aa2aed9 100644 --- a/e2e/content-services/document_list_component.e2e.ts +++ b/e2e/content-services/document_list_component.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../pages/adf/loginPage'); import ContentServicesPage = require('../pages/adf/contentServicesPage'); import NavigationBarPage = require('../pages/adf/navigationBarPage'); @@ -24,7 +26,7 @@ import resources = require('../util/resources'); import Util = require('../util/util'); import AlfrescoApi = require('alfresco-js-api-node'); import { UploadActions } from '../actions/ACS/upload.actions'; -import ErrorPage = require('../pages/adf/documentListErrorPage'); +import ErrorPage = require('../pages/adf/errorPage'); import FileModel = require('../models/ACS/fileModel'); import moment from 'moment-es6'; import { browser } from '../../node_modules/protractor'; @@ -95,18 +97,19 @@ describe('Document List Component', () => { expect(errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); }); - xit('[C279924] - Custom error message is displayed', () => { + it('[C279924] - Custom error message is displayed', () => { loginPage.loginToContentServicesUsingUserModel(acsUser); contentServicesPage.goToDocumentList(); contentServicesPage.enableCustomPermissionMessage(); browser.get(TestConfig.adf.url + '/files/' + privateSite.entry.guid); - expect(errorPage.getErrorCode()).toBe('Cris you don\'t have permissions'); + expect(errorPage.getErrorCode()).toBe('403'); }); it('[C279925] - Message is translated', () => { loginPage.loginToContentServicesUsingUserModel(acsUser); navBar.openLanguageMenu(); navBar.chooseLanguage('Italian'); + browser.sleep(2000); browser.get(TestConfig.adf.url + '/files/' + privateSite.entry.guid); expect(errorPage.getErrorDescription()).toBe('Accesso alla risorsa sul server non consentito.'); }); diff --git a/e2e/content-services/document_list_pagination.e2e.ts b/e2e/content-services/document_list_pagination.e2e.ts index 390243fe5c..07d875f4a8 100644 --- a/e2e/content-services/document_list_pagination.e2e.ts +++ b/e2e/content-services/document_list_pagination.e2e.ts @@ -55,7 +55,7 @@ describe('Document List - Pagination', function () { let acsUser = new AcsUserModel(); let newFolderModel = new FolderModel({ 'name': 'newFolder' }); - let fileNames = [], nrOfFiles = 20, currentPage = 1, secondSetOfFiles, secondSetNumber = 25; + let fileNames = [], nrOfFiles = 20, currentPage = 1, secondSetOfFiles, secondSetNumber = 20; let folderTwoModel = new FolderModel({ 'name': 'folderTwo' }); let folderThreeModel = new FolderModel({ 'name': 'folderThree' }); @@ -93,7 +93,7 @@ describe('Document List - Pagination', function () { contentServicesPage.navigateToFolder(newFolderModel.name); contentServicesPage.checkAcsContainer(); contentServicesPage.waitForTableBody(); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.default); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles); expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles); contentServicesPage.getAllRowsNameColumn().then(function (list) { diff --git a/e2e/content-services/search_component.e2e.ts b/e2e/content-services/search_component.e2e.ts index 4b8c01d62f..a6130fd610 100644 --- a/e2e/content-services/search_component.e2e.ts +++ b/e2e/content-services/search_component.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../pages/adf/loginPage'); import SearchDialog = require('../pages/adf/dialog/searchDialog'); import ContentServicesPage = require('../pages/adf/contentServicesPage'); @@ -26,7 +28,6 @@ import FileModel = require('../models/ACS/fileModel'); import FolderModel = require('../models/ACS/folderModel'); import TestConfig = require('../test.config'); -import resources = require('../util/resources'); import Util = require('../util/util'); import AlfrescoApi = require('alfresco-js-api-node'); @@ -201,6 +202,7 @@ describe('Search component - Search Bar', () => { it('[C272802] Existing folder is displayed in search page', () => { searchDialog.clickOnSearchIcon(); + browser.driver.sleep(1000); searchDialog.enterTextAndPressEnter(firstFolderModel.name); searchResultPage.checkContentIsDisplayed(firstFolderModel.name); }); @@ -219,6 +221,7 @@ describe('Search component - Search Bar', () => { .clickOnSearchIcon() .enterText(secondFolder.shortName) .pressDownArrowAndEnter(); + searchDialog.pressDownArrowAndEnter(); contentServicesPage.checkAcsContainer(); expect(contentServicesPage.currentFolderName()).toEqual(secondFolder.name); diff --git a/e2e/content-services/search_page_component.e2e.ts b/e2e/content-services/search_page_component.e2e.ts index 6f3161b883..0c400bfa34 100644 --- a/e2e/content-services/search_page_component.e2e.ts +++ b/e2e/content-services/search_page_component.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../pages/adf/loginPage'); import SearchDialog = require('../pages/adf/dialog/searchDialog'); import ContentServicesPage = require('../pages/adf/contentServicesPage'); @@ -35,9 +37,9 @@ import { UploadActions } from '../actions/ACS/upload.actions'; describe('Search component - Search Page', () => { let search = { active: { + firstFile: null, + secondFile: null, base: Util.generateRandomString(3), - firstFile: Util.generateRandomString(), - secondFile: Util.generateRandomString(), extension: '.txt' }, no_permission: { @@ -52,17 +54,22 @@ describe('Search component - Search Page', () => { let searchResultPage = new SearchResultPage(); let acsUser = new AcsUserModel(); - let emptyFolderModel = new FolderModel({ 'name': Util.generateRandomString()}); - let firstFileModel = new FileModel({ - 'name': search.active.firstFile, - 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location - }); + let emptyFolderModel = new FolderModel({ 'name': Util.generateRandomString() }); + let firstFileModel; let newFolderModel = new FolderModel({ 'name': 'newFolder' }); let fileNames = [], adminFileNames = [], nrOfFiles = 15, adminNrOfFiles = 5; beforeAll(async (done) => { fileNames = Util.generateSeqeunceFiles(1, nrOfFiles, search.active.base, search.active.extension); adminFileNames = Util.generateSeqeunceFiles(nrOfFiles + 1, nrOfFiles + adminNrOfFiles, search.active.base, search.active.extension); + search.active.firstFile = fileNames[0]; + search.active.secondFile = fileNames[1]; + fileNames.splice(0, 1); + + firstFileModel = new FileModel({ + 'name': search.active.firstFile, + 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location + }); let uploadActions = new UploadActions(); @@ -82,8 +89,7 @@ describe('Search component - Search Page', () => { await uploadActions.createEmptyFiles(this.alfrescoJsApi, fileNames, newFolderModelUploaded.entry.id); - let firstFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, firstFileModel.location, firstFileModel.name, '-my-'); - Object.assign(firstFileModel, firstFileUploaded.entry); + await uploadActions.uploadFile(this.alfrescoJsApi, firstFileModel.location, firstFileModel.name, '-my-'); await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); @@ -197,7 +203,6 @@ describe('Search component - Search Page', () => { .checkSearchIconIsVisible() .clickOnSearchIcon() .enterTextAndPressEnter(search.active.base); - searchResultPage.checkContentIsDisplayed(search.active.secondFile); searchResultPage.sortAndCheckListIsOrderedByName(true).then((result) => { expect(result).toEqual(true); @@ -273,8 +278,11 @@ describe('Search component - Search Page', () => { it('[C272808] Try to delete a folder without rights from the Search Results Page', () => { contentServicesPage.goToDocumentList(); - searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon() - .enterTextAndPressEnter(search.no_permission.noPermFolder); + searchDialog.checkSearchBarIsNotVisible(); + searchDialog.checkSearchIconIsVisible(); + searchDialog.clickOnSearchIcon(); + searchDialog.enterTextAndPressEnter(search.no_permission.noPermFolder); + searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFolder); searchResultPage.deleteContent(search.no_permission.noPermFolder); searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFolder); diff --git a/e2e/content-services/tag_component.e2e.ts b/e2e/content-services/tag_component.e2e.ts index 5772ed7e4b..aac3c7de7c 100644 --- a/e2e/content-services/tag_component.e2e.ts +++ b/e2e/content-services/tag_component.e2e.ts @@ -23,7 +23,6 @@ import TagPage = require('../pages/adf/tagPage'); import TestConfig = require('../test.config'); import resources = require('../util/resources'); -import Util = require('../util/util'); import AlfrescoApi = require('alfresco-js-api-node'); import { UploadActions } from '../actions/ACS/upload.actions'; diff --git a/e2e/content-services/upload/excluded_file.e2e.ts b/e2e/content-services/upload/excluded_file.e2e.ts index 97735da793..e2fa3c463d 100644 --- a/e2e/content-services/upload/excluded_file.e2e.ts +++ b/e2e/content-services/upload/excluded_file.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { element, by, browser } from 'protractor'; + import LoginPage = require('../../pages/adf/loginPage'); import ContentServicesPage = require('../../pages/adf/contentServicesPage'); import UploadDialog = require('../../pages/adf/dialog/uploadDialog'); @@ -30,8 +32,6 @@ import resources = require('../../util/resources'); import AlfrescoApi = require('alfresco-js-api-node'); import { DropActions } from '../../actions/drop.actions'; -import path = require('path'); - describe('Upload component - Excluded Files', () => { let contentServicesPage = new ContentServicesPage(); diff --git a/e2e/content-services/upload/uploader_component.e2e.ts b/e2e/content-services/upload/uploader_component.e2e.ts index 0a40cf28f9..8e5fefe6d8 100644 --- a/e2e/content-services/upload/uploader_component.e2e.ts +++ b/e2e/content-services/upload/uploader_component.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { element, by, browser } from 'protractor'; + import LoginPage = require('../../pages/adf/loginPage'); import ContentServicesPage = require('../../pages/adf/contentServicesPage'); import UploadDialog = require('../../pages/adf/dialog/uploadDialog'); @@ -187,10 +189,11 @@ describe('Upload component', () => { contentServicesPage.checkContentIsNotDisplayed(pdfFileModel.name); }); - xit('[C272792] Cancel a big file through the upload dialog icon before the upload to be done', () => { - contentServicesPage.uploadFile(largeFile.location); + it('[C272792] Cancel a big file through the upload dialog icon before the upload to be done', () => { + browser.executeScript(' setTimeout(() => {document.querySelector("#adf-upload-dialog-cancel-all").click();' + + 'document.querySelector("#adf-upload-dialog-cancel").click(); }, 5000)'); - uploadDialog.removeFileWhileUploading(largeFile.name).fileIsCancelled(largeFile.name); + contentServicesPage.uploadFile(largeFile.location); expect(uploadDialog.getTitleText()).toEqual('Upload canceled'); uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); @@ -199,7 +202,6 @@ describe('Upload component', () => { xit('[C260169] Cancel a big file through the cancel uploads button', () => { contentServicesPage.uploadFile(largeFile.location); - uploadDialog.cancelUploads(); expect(uploadDialog.getTitleText()).toEqual('Uploading 0 / 1'); expect(uploadDialog.getConfirmationDialogTitleText()).toEqual('Cancel Upload'); expect(uploadDialog.getConfirmationDialogDescriptionText()).toEqual('Stop uploading and remove files already uploaded.'); @@ -224,22 +226,27 @@ describe('Upload component', () => { it('[C272794] Tooltip of uploading multiple files button', () => { uploadToggles.enableMultipleFileUpload(); + browser.driver.sleep(1000); expect(contentServicesPage.getMultipleFileButtonTooltip()).toEqual('Custom tooltip'); uploadToggles.disableMultipleFileUpload(); }); it('[C260171] Should upload only the extension filter allowed when Enable extension filter is enabled', () => { - uploadToggles.enableExtensionFilter().addExtension('.docx'); + uploadToggles.enableExtensionFilter(); + browser.driver.sleep(1000); + uploadToggles.addExtension('.docx'); contentServicesPage.uploadFile(docxFileModel.location).checkContentIsDisplayed(docxFileModel.name); uploadDialog.removeUploadedFile(docxFileModel.name).fileIsCancelled(docxFileModel.name); uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - contentServicesPage.uploadFile(largeFile.location).checkContentIsNotDisplayed(largeFile.name); + contentServicesPage.uploadFile(pngFileModel.location).checkContentIsNotDisplayed(pngFileModel.name); uploadDialog.dialogIsNotDisplayed(); uploadToggles.disableExtensionFilter(); }); it('[C274687] Should upload with drag and drop only the extension filter allowed when Enable extension filter is enabled', () => { - uploadToggles.enableExtensionFilter().addExtension('.docx'); + uploadToggles.enableExtensionFilter(); + browser.driver.sleep(1000); + uploadToggles.addExtension('.docx'); let dragAndDrop = new DropActions(); let dragAndDropArea = element(by.css('adf-upload-drag-area div')); @@ -250,8 +257,8 @@ describe('Upload component', () => { uploadDialog.removeUploadedFile(docxFileModel.name).fileIsCancelled(docxFileModel.name); uploadDialog.clickOnCloseButton().dialogIsNotDisplayed(); - dragAndDrop.dropFile(dragAndDropArea, largeFile.location); - contentServicesPage.checkContentIsNotDisplayed(largeFile.name); + dragAndDrop.dropFile(dragAndDropArea, pngFileModel.location); + contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name); uploadDialog.dialogIsNotDisplayed(); uploadToggles.disableExtensionFilter(); }); @@ -279,8 +286,9 @@ describe('Upload component', () => { uploadToggles.disableVersioning(); }); - xit('[C260173] Enable folder upload', () => { + it('[C260173] Enable folder upload', () => { uploadToggles.enableFolderUpload(); + browser.driver.sleep(1000); contentServicesPage.uploadFolder(folderOne.location).checkContentIsDisplayed(folderOne.name); expect(contentServicesPage.getFolderButtonTooltip()).toEqual('Custom tooltip'); uploadDialog.fileIsUploaded(uploadedFileInFolder.name); @@ -290,7 +298,7 @@ describe('Upload component', () => { uploadToggles.disableFolderUpload(); }); - xit('[C260176] The files uploaded before closing the upload dialog box are not displayed anymore in the upload box', () => { + it('[C260176] The files uploaded before closing the upload dialog box are not displayed anymore in the upload box', () => { contentServicesPage.uploadFile(docxFileModel.location).checkContentIsDisplayed(docxFileModel.name); uploadDialog.fileIsUploaded(docxFileModel.name); @@ -309,7 +317,7 @@ describe('Upload component', () => { .checkContentsAreNotDisplayed([docxFileModel.name, pngFileModel.name, pdfFileModel.name]); }); - xit('[C260170] Upload files on the same time', () => { + it('[C260170] Upload files on the same time', () => { contentServicesPage.goToDocumentList(); contentServicesPage.checkAcsContainer(); @@ -331,14 +339,15 @@ describe('Upload component', () => { xit('[C279919] Enable max size and set it to 400', () => { contentServicesPage.goToDocumentList(); contentServicesPage.checkAcsContainer(); - uploadToggles.enableMaxSize().addMaxSize('400'); + uploadToggles.enableMaxSize(); + uploadToggles.addMaxSize('400'); contentServicesPage.uploadFile(fileWithSpecificSize.location).checkContentIsDisplayed(fileWithSpecificSize.name); uploadDialog.fileIsUploaded(fileWithSpecificSize.name).clickOnCloseButton().dialogIsNotDisplayed(); contentServicesPage.deleteContent(fileWithSpecificSize.name).checkContentIsNotDisplayed(fileWithSpecificSize.name); uploadToggles.addMaxSize('399'); contentServicesPage.uploadFile(fileWithSpecificSize.location).checkContentIsNotDisplayed(fileWithSpecificSize.name); - uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); expect(contentServicesPage.getErrorMessage()).toEqual('File ' + fileWithSpecificSize.name + ' is larger than the allowed file size'); + uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); contentServicesPage.uploadFile(emptyFile.location).checkContentIsDisplayed(emptyFile.name); uploadDialog.fileIsUploaded(emptyFile.name).clickOnCloseButton().dialogIsNotDisplayed(); contentServicesPage.deleteContent(emptyFile.name).checkContentIsNotDisplayed(emptyFile.name); @@ -347,19 +356,22 @@ describe('Upload component', () => { xit('[C272796] Enable max size and set it to 0', () => { contentServicesPage.goToDocumentList(); - contentServicesPage.checkAcsContainer(); - uploadToggles.enableMaxSize().addMaxSize('0'); + uploadToggles.enableMaxSize(); + uploadToggles.addMaxSize('0'); contentServicesPage.uploadFile(fileWithSpecificSize.location).checkContentIsNotDisplayed(fileWithSpecificSize.name); - uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); expect(contentServicesPage.getErrorMessage()).toEqual('File ' + fileWithSpecificSize.name + ' is larger than the allowed file size'); + + uploadDialog.fileIsNotDisplayedInDialog(fileWithSpecificSize.name); contentServicesPage.uploadFile(emptyFile.location).checkContentIsDisplayed(emptyFile.name); uploadDialog.fileIsUploaded(emptyFile.name).clickOnCloseButton().dialogIsNotDisplayed(); contentServicesPage.deleteContent(emptyFile.name).checkContentIsNotDisplayed(emptyFile.name); uploadToggles.disableMaxSize(); }); - xit('[C272797] Set max size to 1 and disable it', () => { - uploadToggles.enableMaxSize().addMaxSize('1'); + it('[C272797] Set max size to 1 and disable it', () => { + uploadToggles.enableMaxSize(); + browser.driver.sleep(1000); + uploadToggles.addMaxSize('1'); uploadToggles.disableMaxSize(); contentServicesPage.uploadFile(fileWithSpecificSize.location).checkContentIsDisplayed(fileWithSpecificSize.name); uploadDialog.fileIsUploaded(fileWithSpecificSize.name).clickOnCloseButton().dialogIsNotDisplayed(); @@ -375,6 +387,7 @@ describe('Upload component', () => { it('[C279882] Should be possible Upload a folder in a folder', () => { uploadToggles.enableFolderUpload(); + browser.driver.sleep(1000); contentServicesPage.uploadFolder(folderOne.location).checkContentIsDisplayed(folderOne.name); uploadDialog.fileIsUploaded(uploadedFileInFolder.name); @@ -382,6 +395,7 @@ describe('Upload component', () => { contentServicesPage.doubleClickRow(folderOne.name).checkContentIsDisplayed(uploadedFileInFolder.name); uploadToggles.enableFolderUpload(); + browser.driver.sleep(1000); contentServicesPage.uploadFolder(folderTwo.location).checkContentIsDisplayed(folderTwo.name); uploadDialog.fileIsUploaded(uploadedFileInFolderTwo.name); diff --git a/e2e/content-services/upload/user_permission.e2e.ts b/e2e/content-services/upload/user_permission.e2e.ts index 988579c1af..730a58c78e 100644 --- a/e2e/content-services/upload/user_permission.e2e.ts +++ b/e2e/content-services/upload/user_permission.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { element, by } from 'protractor'; + import LoginPage = require('../../pages/adf/loginPage'); import ContentServicesPage = require('../../pages/adf/contentServicesPage'); import UploadDialog = require('../../pages/adf/dialog/uploadDialog'); @@ -32,8 +34,6 @@ import resources = require('../../util/resources'); import AlfrescoApi = require('alfresco-js-api-node'); import { DropActions } from '../../actions/drop.actions'; -import path = require('path'); - describe('Upload - User permission', () => { let contentServicesPage = new ContentServicesPage(); diff --git a/e2e/content-services/version/version-actions.e2e.ts b/e2e/content-services/version/version-actions.e2e.ts new file mode 100644 index 0000000000..a032df0b9e --- /dev/null +++ b/e2e/content-services/version/version-actions.e2e.ts @@ -0,0 +1,148 @@ +/*! + * @license + * Copyright 2016 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 } from 'protractor'; + +import LoginPage = require('../../pages/adf/loginPage'); +import ContentServicesPage = require('../../pages/adf/contentServicesPage'); +import ContentListPage = require('../../pages/adf/dialog/contentList'); +import { VersionManagePage } from '../../pages/adf/versionManagerPage'; + +import AcsUserModel = require('../../models/ACS/acsUserModel'); +import FileModel = require('../../models/ACS/fileModel'); + +import TestConfig = require('../../test.config'); +import resources = require('../../util/resources'); + +import AlfrescoApi = require('alfresco-js-api-node'); +import { UploadActions } from '../../actions/ACS/upload.actions'; +import Util = require('../../util/util'); +import path = require('path'); + +describe('Version component', () => { + + const loginPage = new LoginPage(); + const contentServicesPage = new ContentServicesPage(); + const contentListPage = new ContentListPage(); + const versionManagePage = new VersionManagePage(); + + let acsUser = new AcsUserModel(); + + let txtFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.TXT.file_name, + 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location + }); + + let fileModelVersionTwo = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + }); + + beforeAll(async (done) => { + + let uploadActions = new UploadActions(); + + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'ECM', + hostEcm: TestConfig.adf.url + }); + + await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); + + await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + + await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + + let txtUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, txtFileModel.location, txtFileModel.name, '-my-'); + + Object.assign(txtFileModel, txtUploadedFile.entry); + + txtFileModel.update(txtUploadedFile.entry); + + loginPage.loginToContentServicesUsingUserModel(acsUser); + + contentServicesPage.navigateToDocumentList(); + contentListPage.versionManagerContent(txtFileModel.name); + + done(); + }); + + it('[C280003] Should not be possible delete a file version if there is only one version', () => { + versionManagePage.clickActionButton('1.0'); + expect(element(by.css(`[id="adf-version-list-action-delete-1.0"]`)).isEnabled()).toBe(false); + versionManagePage.closeActionButton(); + Util.waitUntilElementIsNotOnPage(element(by.css(`[id="adf-version-list-action-delete-1.0"]`))); + }); + + it('[C280004] Should not be possible restore the version if there is only one version', () => { + versionManagePage.clickActionButton('1.0'); + expect(element(by.css(`[id="adf-version-list-action-restore-1.0"]`)).isEnabled()).toBe(false); + versionManagePage.closeActionButton(); + Util.waitUntilElementIsNotOnPage(element(by.css(`[id="adf-version-list-action-restore-1.0"]`))); + }); + + it('[C280005] Should be showed all the default action when you have more then one version', () => { + versionManagePage.showNewVersionButton.click(); + + versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); + + versionManagePage.clickActionButton('1.1').checkActionsArePresent('1.1'); + + versionManagePage.closeActionButton(); + }); + + it('[C269081] Should be possible download all the version of a file', () => { + versionManagePage.downloadFileVersion('1.0'); + + expect(Util.fileExists(path.join(__dirname, 'downloads', txtFileModel.name), 20)).toBe(true); + + versionManagePage.downloadFileVersion('1.1'); + + expect(Util.fileExists(path.join(__dirname, 'downloads', fileModelVersionTwo.name), 20)).toBe(true); + }); + + it('[C272819] Should be possible delete a version when click on delete version action', () => { + versionManagePage.deleteFileVersion('1.1'); + + versionManagePage.clickAcceptConfirm(); + + versionManagePage.chekFileVersionNotExist('1.1'); + versionManagePage.chekFileVersionExist('1.0'); + }); + + it('[C280006] Should be possible prevent a version to be deleted when click on No on the confirm dialog', () => { + versionManagePage.showNewVersionButton.click(); + + versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); + + versionManagePage.chekFileVersionExist('1.1'); + + versionManagePage.deleteFileVersion('1.1'); + + versionManagePage.clickCancelConfirm(); + + versionManagePage.chekFileVersionExist('1.1'); + versionManagePage.chekFileVersionExist('1.0'); + }); + + it('[C280007] Should be possible restore an old version of your file', () => { + versionManagePage.restoreFileVersion('1.0'); + + versionManagePage.chekFileVersionExist('2.0'); + }); + +}); diff --git a/e2e/content-services/version/version-permissions.e2e.ts b/e2e/content-services/version/version-permissions.e2e.ts new file mode 100644 index 0000000000..c33e727779 --- /dev/null +++ b/e2e/content-services/version/version-permissions.e2e.ts @@ -0,0 +1,383 @@ +/*! + * @license + * Copyright 2016 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 { element, by } from 'protractor'; + +import LoginPage = require('../../pages/adf/loginPage'); +import ContentListPage = require('../../pages/adf/dialog/contentList'); +import NavigationBarPage = require('../../pages/adf/navigationBarPage'); +import { VersionManagePage } from '../../pages/adf/versionManagerPage'; +import UploadDialog = require('../../pages/adf/dialog/uploadDialog'); +import NotificationPage = require('../../pages/adf/notificationPage'); + +import AcsUserModel = require('../../models/ACS/acsUserModel'); +import FileModel = require('../../models/ACS/fileModel'); + +import TestConfig = require('../../test.config'); +import resources = require('../../util/resources'); + +import AlfrescoApi = require('alfresco-js-api-node'); +import { UploadActions } from '../../actions/ACS/upload.actions'; +import { NodeActions } from '../../actions/ACS/node.actions'; + +import Util = require('../../util/util'); +import CONSTANTS = require('../../util/constants'); + +describe('Version component', () => { + + const loginPage = new LoginPage(); + const contentListPage = new ContentListPage(); + const versionManagePage = new VersionManagePage(); + const navigationBarPage = new NavigationBarPage(); + const uploadDialog = new UploadDialog(); + const notificationPage = new NotificationPage(); + let site; + + let acsUser = new AcsUserModel(); + let consumerUser = new AcsUserModel(); + let collaboratorUser = new AcsUserModel(); + let contributorUser = new AcsUserModel(); + let managerUser = new AcsUserModel(); + let fileCreatorUser = new AcsUserModel(); + + let newVersionFile = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG_B.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG_B.file_location + }); + + let lockFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG_C.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG_C.file_location + }); + + let differentCreatoFile = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG_D.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG_D.file_location + }); + + beforeAll(async (done) => { + + let uploadActions = new UploadActions(); + let nodeActions = new NodeActions(); + + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'ECM', + hostEcm: TestConfig.adf.url + }); + + await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); + + await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + await this.alfrescoJsApi.core.peopleApi.addPerson(consumerUser); + await this.alfrescoJsApi.core.peopleApi.addPerson(collaboratorUser); + await this.alfrescoJsApi.core.peopleApi.addPerson(contributorUser); + await this.alfrescoJsApi.core.peopleApi.addPerson(managerUser); + await this.alfrescoJsApi.core.peopleApi.addPerson(fileCreatorUser); + + site = await this.alfrescoJsApi.core.sitesApi.createSite({ + title: Util.generateRandomString(), + visibility: 'PUBLIC' + }); + + await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { + id: consumerUser.id, + role: CONSTANTS.CS_USER_ROLES.CONSUMER + }); + + await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { + id: collaboratorUser.id, + role: CONSTANTS.CS_USER_ROLES.COLLABORATOR + }); + + await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { + id: contributorUser.id, + role: CONSTANTS.CS_USER_ROLES.CONTRIBUTOR + }); + + await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { + id: managerUser.id, + role: CONSTANTS.CS_USER_ROLES.MANAGER + }); + + await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { + id: fileCreatorUser.id, + role: CONSTANTS.CS_USER_ROLES.MANAGER + }); + + let lockFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, lockFileModel.location, lockFileModel.name, site.entry.guid); + Object.assign(lockFileModel, lockFileUploaded.entry); + + nodeActions.lockNode(this.alfrescoJsApi, lockFileModel.id); + + await this.alfrescoJsApi.login(fileCreatorUser.id, fileCreatorUser.password); + + await uploadActions.uploadFile(this.alfrescoJsApi, differentCreatoFile.location, differentCreatoFile.name, site.entry.guid); + + done(); + }); + + describe('Manager', () => { + + let sameCreatoFile = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + }); + + beforeAll(async (done) => { + let uploadActions = new UploadActions(); + + await this.alfrescoJsApi.login(managerUser.id, managerUser.password); + + let sameCreatoFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, sameCreatoFile.location, sameCreatoFile.name, site.entry.guid); + Object.assign(sameCreatoFile, sameCreatoFileUploaded.entry); + + loginPage.loginToContentServicesUsingUserModel(managerUser); + + navigationBarPage.openContentServicesFolder(site.entry.guid); + + done(); + }); + + afterAll(async (done) => { + await this.alfrescoJsApi.nodes.deleteNode(sameCreatoFile.id); + done(); + }); + + it('[C277200] should a user with Manager permission be able to upload a new version for a file with different creator', () => { + contentListPage.versionManagerContent(differentCreatoFile.name); + + versionManagePage.showNewVersionButton.click(); + + versionManagePage.uploadNewVersionFile(newVersionFile.location); + + versionManagePage.chekFileVersionExist('1.1'); + expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + + versionManagePage.deleteFileVersion('1.1'); + versionManagePage.clickAcceptConfirm(); + + versionManagePage.chekFileVersionNotExist('1.1'); + + versionManagePage.closeVersionDialog(); + + uploadDialog.clickOnCloseButton(); + }); + + it('[C277204] Should a user with Manager permission not be able to upload a new version for a locked file', () => { + contentListPage.versionManagerContent(lockFileModel.name); + + versionManagePage.showNewVersionButton.click(); + + versionManagePage.uploadNewVersionFile(newVersionFile.location); + + versionManagePage.chekFileVersionNotExist('1.1'); + + versionManagePage.closeVersionDialog(); + + uploadDialog.clickOnCloseButton(); + }); + + it('[C277196] Should a user with Manager permission be able to upload a new version for the created file', () => { + contentListPage.versionManagerContent(sameCreatoFile.name); + + versionManagePage.showNewVersionButton.click(); + + versionManagePage.uploadNewVersionFile(newVersionFile.location); + + versionManagePage.chekFileVersionExist('1.1'); + expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + + versionManagePage.deleteFileVersion('1.1'); + versionManagePage.clickAcceptConfirm(); + + versionManagePage.chekFileVersionNotExist('1.1'); + + versionManagePage.closeVersionDialog(); + + uploadDialog.clickOnCloseButton(); + }); + }); + + describe('Consumer', () => { + + beforeAll(async (done) => { + loginPage.loginToContentServicesUsingUserModel(consumerUser); + + navigationBarPage.openContentServicesFolder(site.entry.guid); + + done(); + }); + + it('[C277197] Should a user with Consumer permission not be able to upload a new version for a file with different creator', () => { + contentListPage.versionManagerContent(differentCreatoFile.name); + + notificationPage.checkNotifyContains(`You don't have access to do this`); + }); + + it('[C277201] Should a user with Consumer permission not be able to upload a new version for a locked file', () => { + contentListPage.versionManagerContent(lockFileModel.name); + + notificationPage.checkNotifyContains(`You don't have access to do this`); + }); + + }); + + describe('Contributor', () => { + let sameCreatoFile = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + }); + + beforeAll(async (done) => { + let uploadActions = new UploadActions(); + + await this.alfrescoJsApi.login(contributorUser.id, contributorUser.password); + + let sameCreatoFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, sameCreatoFile.location, sameCreatoFile.name, site.entry.guid); + Object.assign(sameCreatoFile, sameCreatoFileUploaded.entry); + + loginPage.loginToContentServicesUsingUserModel(contributorUser); + + navigationBarPage.openContentServicesFolder(site.entry.guid); + + done(); + }); + + afterAll(async (done) => { + await this.alfrescoJsApi.nodes.deleteNode(sameCreatoFile.id); + done(); + }); + + it('[C277177] Should a user with Contributor permission be able to upload a new version for the created file', () => { + contentListPage.versionManagerContent(sameCreatoFile.name); + + versionManagePage.showNewVersionButton.click(); + + versionManagePage.uploadNewVersionFile(newVersionFile.location); + + versionManagePage.chekFileVersionExist('1.1'); + expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + + versionManagePage.deleteFileVersion('1.1'); + versionManagePage.clickAcceptConfirm(); + + versionManagePage.chekFileVersionNotExist('1.1'); + + versionManagePage.closeVersionDialog(); + + uploadDialog.clickOnCloseButton(); + }); + + it('[C277198] Should a user with Contributor permission not be able to upload a new version for a file with different creator', () => { + contentListPage.versionManagerContent(differentCreatoFile.name); + + notificationPage.checkNotifyContains(`You don't have access to do this`); + }); + + it('[C277202] Should a user with Contributor permission not be able to upload a new version for a locked file', () => { + contentListPage.versionManagerContent(lockFileModel.name); + + notificationPage.checkNotifyContains(`You don't have access to do this`); + }); + }); + + describe('Collaborator', () => { + let sameCreatoFile = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + }); + + beforeAll(async (done) => { + let uploadActions = new UploadActions(); + + await this.alfrescoJsApi.login(collaboratorUser.id, collaboratorUser.password); + + let sameCreatoFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, sameCreatoFile.location, sameCreatoFile.name, site.entry.guid); + Object.assign(sameCreatoFile, sameCreatoFileUploaded.entry); + + loginPage.loginToContentServicesUsingUserModel(collaboratorUser); + + navigationBarPage.openContentServicesFolder(site.entry.guid); + + done(); + }); + + afterAll(async (done) => { + await this.alfrescoJsApi.nodes.deleteNode(sameCreatoFile.id); + done(); + }); + + it('[C277195] Should a user with Collaborator permission be able to upload a new version for the created file', () => { + contentListPage.versionManagerContent(sameCreatoFile.name); + + versionManagePage.showNewVersionButton.click(); + + versionManagePage.uploadNewVersionFile(newVersionFile.location); + + versionManagePage.chekFileVersionExist('1.1'); + expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + + versionManagePage.deleteFileVersion('1.1'); + versionManagePage.clickAcceptConfirm(); + + versionManagePage.chekFileVersionNotExist('1.1'); + + versionManagePage.closeVersionDialog(); + + uploadDialog.clickOnCloseButton(); + }); + + it('[C277203] Should a user with Collaborator permission not be able to upload a new version for a locked file', () => { + contentListPage.versionManagerContent(lockFileModel.name); + + versionManagePage.showNewVersionButton.click(); + + versionManagePage.uploadNewVersionFile(newVersionFile.location); + + versionManagePage.chekFileVersionNotExist('1.1'); + + versionManagePage.closeVersionDialog(); + + uploadDialog.clickOnCloseButton(); + }); + + it('[C277199] should a user with Collaborator permission be able to upload a new version for a file with different creator', () => { + contentListPage.versionManagerContent(differentCreatoFile.name); + + versionManagePage.showNewVersionButton.click(); + + versionManagePage.uploadNewVersionFile(newVersionFile.location); + + versionManagePage.chekFileVersionExist('1.1'); + expect(versionManagePage.getFileVersionName('1.1')).toEqual(newVersionFile.name); + expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + + versionManagePage.clickActionButton('1.1'); + + expect(element(by.css(`[id="adf-version-list-action-delete-1.1"]`)).isEnabled()).toBe(false); + + versionManagePage.closeActionButton(); + + versionManagePage.closeVersionDialog(); + }); + }); + +}); diff --git a/e2e/content-services/version/version-properties.e2e.ts b/e2e/content-services/version/version-properties.e2e.ts new file mode 100644 index 0000000000..65cce6259d --- /dev/null +++ b/e2e/content-services/version/version-properties.e2e.ts @@ -0,0 +1,139 @@ +/*! + * @license + * Copyright 2016 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 } from 'protractor'; + +import LoginPage = require('../../pages/adf/loginPage'); +import ContentServicesPage = require('../../pages/adf/contentServicesPage'); +import ContentListPage = require('../../pages/adf/dialog/contentList'); +import { VersionManagePage } from '../../pages/adf/versionManagerPage'; + +import AcsUserModel = require('../../models/ACS/acsUserModel'); +import FileModel = require('../../models/ACS/fileModel'); + +import TestConfig = require('../../test.config'); +import resources = require('../../util/resources'); + +import AlfrescoApi = require('alfresco-js-api-node'); +import { UploadActions } from '../../actions/ACS/upload.actions'; +import Util = require('../../util/util'); + +describe('Version Properties', () => { + + const loginPage = new LoginPage(); + const contentServicesPage = new ContentServicesPage(); + const contentListPage = new ContentListPage(); + const versionManagePage = new VersionManagePage(); + + let acsUser = new AcsUserModel(); + + let txtFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, + 'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location + }); + + let fileModelVersionTwo = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + }); + + beforeAll(async (done) => { + + let uploadActions = new UploadActions(); + + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'ECM', + hostEcm: TestConfig.adf.url + }); + + await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); + + await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + + await this.alfrescoJsApi.login(acsUser.id, acsUser.password); + + let txtUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, txtFileModel.location, txtFileModel.name, '-my-'); + + Object.assign(txtFileModel, txtUploadedFile.entry); + + txtFileModel.update(txtUploadedFile.entry); + + loginPage.loginToContentServicesUsingUserModel(acsUser); + + contentServicesPage.navigateToDocumentList(); + contentListPage.versionManagerContent(txtFileModel.name); + + done(); + }); + + it('[C272817] Should NOT be present the download action when allowDownload property is false', () => { + versionManagePage.disableDownload(); + + versionManagePage.clickActionButton('1.0'); + + Util.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-download-1.0"]`))); + + versionManagePage.closeActionButton(); + }); + + it('[C279992] Should be present the download action when allowDownload property is true', () => { + versionManagePage.enableDownload(); + + versionManagePage.clickActionButton('1.0'); + + Util.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-download-1.0"]`))); + + versionManagePage.closeActionButton(); + }); + + it('[C269085] Should show/hide comments when showComments true/false', () => { + versionManagePage.enableComments(); + + versionManagePage.showNewVersionButton.click(); + versionManagePage.enterCommentText('Example comment text'); + versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); + + versionManagePage.chekFileVersionExist('1.1'); + expect(versionManagePage.getFileVersionComment('1.1')).toEqual('Example comment text'); + + versionManagePage.disableComments(); + + Util.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-item-comment-1.1"]`))); + }); + + it('[C277277] Should show/hide actions menu when readOnly is true/false', () => { + versionManagePage.disableReadOnly(); + + Util.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); + + versionManagePage.enableReadOnly(); + + Util.waitUntilElementIsNotVisible(element(by.css(`[id="adf-version-list-action-menu-button-1.0"]`))); + }); + + it('[C279994] Should show/hide upload new version button when readOnly is true/false', () => { + versionManagePage.disableReadOnly(); + + Util.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); + + versionManagePage.enableReadOnly(); + + Util.waitUntilElementIsNotVisible(versionManagePage.showNewVersionButton); + Util.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); + }); + +}); diff --git a/e2e/content-services/version/version-smoke-tests.e2e.ts b/e2e/content-services/version/version-smoke-tests.e2e.ts index fafed09b2a..d4fd0e4b87 100644 --- a/e2e/content-services/version/version-smoke-tests.e2e.ts +++ b/e2e/content-services/version/version-smoke-tests.e2e.ts @@ -15,32 +15,56 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../../pages/adf/loginPage'); import ContentServicesPage = require('../../pages/adf/contentServicesPage'); -import ViewerPage = require('../../pages/adf/viewerPage'); +import ContentListPage = require('../../pages/adf/dialog/contentList'); +import { VersionManagePage } from '../../pages/adf/versionManagerPage'; import AcsUserModel = require('../../models/ACS/acsUserModel'); import FileModel = require('../../models/ACS/fileModel'); import TestConfig = require('../../test.config'); import resources = require('../../util/resources'); -import dateFormat = require('dateformat'); import AlfrescoApi = require('alfresco-js-api-node'); import { UploadActions } from '../../actions/ACS/upload.actions'; +import Util = require('../../util/util'); describe('Version component', () => { - let loginPage = new LoginPage(); - let contentServicesPage = new ContentServicesPage(); - let viewerPage = new ViewerPage(); - let cardViewPage; + let txtUploadedFile; + const loginPage = new LoginPage(); + const contentServicesPage = new ContentServicesPage(); + const contentListPage = new ContentListPage(); + const versionManagePage = new VersionManagePage(); let acsUser = new AcsUserModel(); - let pdfFileModel = new FileModel({ - 'name': resources.Files.ADF_DOCUMENTS.PDF_ALL.file_name, - 'location': resources.Files.ADF_DOCUMENTS.PDF_ALL.file_location + let txtFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.TXT.file_name, + 'location': resources.Files.ADF_DOCUMENTS.TXT.file_location + }); + + let fileModelVersionTwo = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + }); + + let fileModelVersionThree = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG_B.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG_B.file_location + }); + + let fileModelVersionFor = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG_C.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG_C.file_location + }); + + let fileModelVersionFive = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG_D.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG_D.file_location }); beforeAll(async (done) => { @@ -58,25 +82,93 @@ describe('Version component', () => { await this.alfrescoJsApi.login(acsUser.id, acsUser.password); - let pdfUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, pdfFileModel.location, pdfFileModel.name, '-my-'); + txtUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, txtFileModel.location, txtFileModel.name, '-my-'); + Object.assign(txtFileModel, txtUploadedFile.entry); - Object.assign(pdfFileModel, pdfUploadedFile.entry); - - pdfFileModel.update(pdfUploadedFile.entry); + txtFileModel.update(txtUploadedFile.entry); loginPage.loginToContentServicesUsingUserModel(acsUser); + contentServicesPage.navigateToDocumentList(); + contentListPage.versionManagerContent(txtFileModel.name); + done(); }); - it('[C272768] Versions', () => { - contentServicesPage.navigateToDocumentList(); - viewerPage.viewFile(pdfFileModel.name); - viewerPage.clickInfoButton(); - viewerPage.checkInfoSideBarIsDisplayed(); - viewerPage.clickOnVersionsTab().checkUploadVersionsButtonIsDisplayed(); - expect(viewerPage.getActiveTab()).toEqual('VERSIONS'); - viewerPage.checkVersionIsDisplayed(pdfFileModel.name); + it('[C272768] Should be visible the first file version when you upload a file', () => { + versionManagePage.checkUploadNewVersionsButtonIsDisplayed(); + + versionManagePage.chekFileVersionExist('1.0'); + expect(versionManagePage.getFileVersionName('1.0')).toEqual(txtFileModel.name); + expect(versionManagePage.getFileVersionDate('1.0')).not.toBeUndefined(); + }); + + it('[C279995] Should show/hide the new upload file options when click on add New version/canclel button', () => { + versionManagePage.showNewVersionButton.click(); + + browser.driver.sleep(300); + + Util.waitUntilElementIsVisible(versionManagePage.cancelButton); + Util.waitUntilElementIsVisible(versionManagePage.majorRadio); + Util.waitUntilElementIsVisible(versionManagePage.minorRadio); + Util.waitUntilElementIsVisible(versionManagePage.cancelButton); + Util.waitUntilElementIsVisible(versionManagePage.commentText); + Util.waitUntilElementIsVisible(versionManagePage.uploadNewVersionButton); + + versionManagePage.cancelButton.click(); + + browser.driver.sleep(300); + + Util.waitUntilElementIsNotVisible(versionManagePage.cancelButton); + Util.waitUntilElementIsNotVisible(versionManagePage.majorRadio); + Util.waitUntilElementIsNotVisible(versionManagePage.minorRadio); + Util.waitUntilElementIsNotVisible(versionManagePage.cancelButton); + Util.waitUntilElementIsNotVisible(versionManagePage.commentText); + Util.waitUntilElementIsNotVisible(versionManagePage.uploadNewVersionButton); + + Util.waitUntilElementIsVisible(versionManagePage.showNewVersionButton); + }); + + it('[C260244] Should show the version history when select a file with multiple version', () => { + versionManagePage.showNewVersionButton.click(); + versionManagePage.uploadNewVersionFile(fileModelVersionTwo.location); + + versionManagePage.chekFileVersionExist('1.0'); + expect(versionManagePage.getFileVersionName('1.0')).toEqual(txtFileModel.name); + expect(versionManagePage.getFileVersionDate('1.0')).not.toBeUndefined(); + + versionManagePage.chekFileVersionExist('1.1'); + expect(versionManagePage.getFileVersionName('1.1')).toEqual(fileModelVersionTwo.name); + expect(versionManagePage.getFileVersionDate('1.1')).not.toBeUndefined(); + }); + + it('[C269084] Should be possible add a comment when add a new version', () => { + versionManagePage.showNewVersionButton.click(); + versionManagePage.enterCommentText('Example comment text'); + versionManagePage.uploadNewVersionFile(fileModelVersionThree.location); + + versionManagePage.chekFileVersionExist('1.2'); + expect(versionManagePage.getFileVersionName('1.2')).toEqual(fileModelVersionThree.name); + expect(versionManagePage.getFileVersionDate('1.2')).not.toBeUndefined(); + expect(versionManagePage.getFileVersionComment('1.2')).toEqual('Example comment text'); + }); + + it('[C275719] Should be possible preview the file when you add a new version', () => { + versionManagePage.showNewVersionButton.click(); + versionManagePage.clickMajorChange(); + + versionManagePage.uploadNewVersionFile(fileModelVersionFor.location); + + versionManagePage.chekFileVersionExist('2.0'); + expect(versionManagePage.getFileVersionName('2.0')).toEqual(fileModelVersionFor.name); + + versionManagePage.showNewVersionButton.click(); + versionManagePage.clickMinorChange(); + + versionManagePage.uploadNewVersionFile(fileModelVersionFive.location); + + versionManagePage.chekFileVersionExist('2.1'); + expect(versionManagePage.getFileVersionName('2.1')).toEqual(fileModelVersionFive.name); }); }); diff --git a/e2e/content-services/z-finish.e2e.ts b/e2e/content-services/z-finish.e2e.ts index 4a6b60c096..561244b3fa 100644 --- a/e2e/content-services/z-finish.e2e.ts +++ b/e2e/content-services/z-finish.e2e.ts @@ -44,15 +44,17 @@ describe('Save screenshot at the end', () => { alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); let folder = await alfrescoJsApi.nodes.addNode('-my-', { - 'name': 'contetn-services', - 'relativePath': 'Buiild-screenshot/Screenshot-e2e-' + buildNumber, + 'name': 'content-services', + 'relativePath': 'Build-screenshot/Screenshot-e2e-' + buildNumber, 'nodeType': 'cm:folder' - }, {}, {}); + }, {}, { + 'overwrite': true + }); for (const fileName of files) { let pathFile = path.join(__dirname, '../../e2e-output/screenshots', fileName); - let file = fs.createReadStream(pathFile); + let file: any = fs.createReadStream(pathFile); await alfrescoJsApi.upload.uploadFile( file, diff --git a/e2e/core/card-view/aspect-oriented-config.e2e.ts b/e2e/core/card-view/aspect-oriented-config.e2e.ts index d5ad079c51..e952bb3c85 100644 --- a/e2e/core/card-view/aspect-oriented-config.e2e.ts +++ b/e2e/core/card-view/aspect-oriented-config.e2e.ts @@ -15,11 +15,11 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../../pages/adf/loginPage'); -import ContentServicesPage = require('../../pages/adf/contentServicesPage'); import ViewerPage = require('../../pages/adf/viewerPage'); import CardViewPage = require('../../pages/adf/metadataViewPage'); -import ContentListPage = require('../../pages/adf/dialog/contentList'); import NavigationBarPage = require('../../pages/adf/navigationBarPage'); import { ConfigEditorPage } from '../../pages/adf/configEditorPage'; @@ -28,31 +28,15 @@ import FileModel = require('../../models/ACS/fileModel'); import TestConfig = require('../../test.config'); import resources = require('../../util/resources'); -import dateFormat = require('dateformat'); import AlfrescoApi = require('alfresco-js-api-node'); import { UploadActions } from '../../actions/ACS/upload.actions'; describe('Aspect oriented config', () => { - const METADATA = { - DATAFORMAT: 'mmm dd yyyy', - TITLE: 'Details', - COMMENTS_TAB: 'COMMENTS', - PROPERTY_TAB: 'PROPERTIES', - DEFAULT_ASPECT: 'Properties', - MORE_INFO_BUTTON: 'More information', - LESS_INFO_BUTTON: 'Less information', - ARROW_DOWN: 'keyboard_arrow_down', - ARROW_UP: 'keyboard_arrow_up', - EDIT_BUTTON_TOOLTIP: 'Edit' - }; - const loginPage = new LoginPage(); - const contentServicesPage = new ContentServicesPage(); const viewerPage = new ViewerPage(); const metadataViewPage = new CardViewPage(); - const contentListPage = new ContentListPage(); const navigationBarPage = new NavigationBarPage(); const configEditorPage = new ConfigEditorPage(); diff --git a/e2e/core/card-view/card-view-component.e2e.ts b/e2e/core/card-view/card-view-component.e2e.ts index 6ac09e1293..9239b8af59 100644 --- a/e2e/core/card-view/card-view-component.e2e.ts +++ b/e2e/core/card-view/card-view-component.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { element, by } from 'protractor'; + import LoginPage = require('../../pages/adf/loginPage'); import NavigationBarPage = require('../../pages/adf/navigationBarPage'); import CardViewPage = require('../../pages/adf/metadataViewPage'); @@ -279,13 +281,13 @@ describe('CardView Component', () => { describe('Date and DateTime', () => { it('[C279961] Should the label be present', () => { - let label = element(by.xpath('div[data-automation-id="card-dateitem-label-date"]')); + let labelDate = element(by.xpath('div[data-automation-id="card-dateitem-label-date"]')); - Util.waitUntilElementIsPresent(label); + Util.waitUntilElementIsPresent(labelDate); - let label = element(by.xpath('div[data-automation-id="card-dateitem-label-datetime"]')); + let labelDatetime = element(by.xpath('div[data-automation-id="card-dateitem-label-datetime"]')); - Util.waitUntilElementIsPresent(label); + Util.waitUntilElementIsPresent(labelDatetime); }); it('[C279962] Should be present a default value', () => { diff --git a/e2e/core/card-view/permissions.e2e.ts b/e2e/core/card-view/metadata-permissions.e2e.ts similarity index 91% rename from e2e/core/card-view/permissions.e2e.ts rename to e2e/core/card-view/metadata-permissions.e2e.ts index 4f8bc166a1..504ea35af0 100644 --- a/e2e/core/card-view/permissions.e2e.ts +++ b/e2e/core/card-view/metadata-permissions.e2e.ts @@ -16,10 +16,8 @@ */ import LoginPage = require('../../pages/adf/loginPage'); -import ContentServicesPage = require('../../pages/adf/contentServicesPage'); import ViewerPage = require('../../pages/adf/viewerPage'); import CardViewPage = require('../../pages/adf/metadataViewPage'); -import ContentListPage = require('../../pages/adf/dialog/contentList'); import NavigationBarPage = require('../../pages/adf/navigationBarPage'); import AcsUserModel = require('../../models/ACS/acsUserModel'); @@ -27,14 +25,12 @@ import FileModel = require('../../models/ACS/fileModel'); import TestConfig = require('../../test.config'); import resources = require('../../util/resources'); -import dateFormat = require('dateformat'); import AlfrescoApi = require('alfresco-js-api-node'); import { UploadActions } from '../../actions/ACS/upload.actions'; -import fs = require('fs'); -import path = require('path'); import Util = require('../../util/util'); +import CONSTANTS = require('../../util/constants'); describe('permissions', () => { @@ -52,13 +48,10 @@ describe('permissions', () => { }; const loginPage = new LoginPage(); - const contentServicesPage = new ContentServicesPage(); const viewerPage = new ViewerPage(); const metadataViewPage = new CardViewPage(); - const contentListPage = new ContentListPage(); const navigationBarPage = new NavigationBarPage(); - let acsUser = new AcsUserModel(); let consumerUser = new AcsUserModel(); let collaboratorUser = new AcsUserModel(); let contributorUser = new AcsUserModel(); @@ -91,17 +84,17 @@ describe('permissions', () => { await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { id: consumerUser.id, - role: 'SiteConsumer' + role: CONSTANTS.CS_USER_ROLES.CONSUMER }); await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { id: collaboratorUser.id, - role: 'SiteCollaborator' + role: CONSTANTS.CS_USER_ROLES.COLLABORATOR }); await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, { id: contributorUser.id, - role: 'SiteContributor' + role: CONSTANTS.CS_USER_ROLES.CONTRIBUTOR }); await uploadActions.uploadFile(this.alfrescoJsApi, pngFileModel.location, pngFileModel.name, site.entry.guid); diff --git a/e2e/core/card-view/metadata-properties.e2e.ts b/e2e/core/card-view/metadata-properties.e2e.ts index f5d8f801df..03ef5f9234 100644 --- a/e2e/core/card-view/metadata-properties.e2e.ts +++ b/e2e/core/card-view/metadata-properties.e2e.ts @@ -25,14 +25,10 @@ import FileModel = require('../../models/ACS/fileModel'); import TestConfig = require('../../test.config'); import resources = require('../../util/resources'); -import dateFormat = require('dateformat'); import AlfrescoApi = require('alfresco-js-api-node'); import { UploadActions } from '../../actions/ACS/upload.actions'; -import fs = require('fs'); -import path = require('path'); - describe('CardView Component - properties', () => { let METADATA = { diff --git a/e2e/core/card-view/metadata-smoke-tests.e2e.ts b/e2e/core/card-view/metadata-smoke-tests.e2e.ts index 44b2de6baa..2e1be454c8 100644 --- a/e2e/core/card-view/metadata-smoke-tests.e2e.ts +++ b/e2e/core/card-view/metadata-smoke-tests.e2e.ts @@ -15,12 +15,13 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../../pages/adf/loginPage'); import ContentServicesPage = require('../../pages/adf/contentServicesPage'); import ViewerPage = require('../../pages/adf/viewerPage'); import CardViewPage = require('../../pages/adf/metadataViewPage'); import ContentListPage = require('../../pages/adf/dialog/contentList'); -import NavigationBarPage = require('../../pages/adf/navigationBarPage'); import AcsUserModel = require('../../models/ACS/acsUserModel'); import FileModel = require('../../models/ACS/fileModel'); @@ -52,10 +53,8 @@ describe('Metadata component', () => { const viewerPage = new ViewerPage(); const metadataViewPage = new CardViewPage(); const contentListPage = new ContentListPage(); - const navigationBarPage = new NavigationBarPage(); let acsUser = new AcsUserModel(); - let consumerUser = new AcsUserModel(); let folderName = 'Metadata Folder'; diff --git a/e2e/core/error_component.e2e.ts b/e2e/core/error_component.e2e.ts new file mode 100644 index 0000000000..2cdf91395d --- /dev/null +++ b/e2e/core/error_component.e2e.ts @@ -0,0 +1,54 @@ +/*! + * @license + * Copyright 2016 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 LoginPage = require('../pages/adf/loginPage'); +import AcsUserModel = require('../models/ACS/acsUserModel'); +import TestConfig = require('../test.config'); +import AlfrescoApi = require('alfresco-js-api-node'); +import ErrorPage = require('../pages/adf/errorPage'); +import { browser } from '../../node_modules/protractor'; + +describe('Error Component', () => { + + let acsUser = new AcsUserModel(); + let loginPage = new LoginPage(); + let errorPage = new ErrorPage(); + + beforeAll(async (done) => { + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'ECM', + hostEcm: TestConfig.adf.url + }); + + await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); + + await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser); + + loginPage.loginToContentServicesUsingUserModel(acsUser); + + done(); + + }); + + it('[C277302] Error message displayed without permissions', () => { + browser.get(TestConfig.adf.url + '/error/403'); + expect(errorPage.getErrorCode()).toBe('403'); + expect(errorPage.getErrorTitle()).toBe('You don\'t have permission to access this server.'); + expect(errorPage.getErrorDescription()).toBe('You\'re not allowed access to this resource on the server.'); + }); + +}); diff --git a/e2e/core/header_component.e2e.ts b/e2e/core/header_component.e2e.ts index 9e6f40ce9c..6c8411d7bd 100644 --- a/e2e/core/header_component.e2e.ts +++ b/e2e/core/header_component.e2e.ts @@ -19,7 +19,6 @@ import NavigationBarPage = require('../pages/adf/navigationBarPage'); import { HeaderPage } from '../pages/adf/core/headerPage'; import TestConfig = require('../test.config'); -import Util = require('../util/util.js'); import AlfrescoApi = require('alfresco-js-api-node'); import { UsersActions } from '../actions/users.actions'; @@ -54,7 +53,7 @@ describe('Header Component', () => { done(); }); - beforeEach(async(done) =>{ + beforeEach(async(done) => { let users = new UsersActions(); await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); @@ -83,8 +82,8 @@ describe('Header Component', () => { it('[C280002] Should be able to view Header component', () => { headerPage.checkShowMenuCheckBoxIsDisplayed(); headerPage.checkChooseHeaderColourIsDisplayed(); - headerPage.checkChangeTitleIsDisplayed(title.default); - headerPage.checkChangeUrlPathIsDisplayed(urlPath.default); + headerPage.checkChangeTitleIsDisplayed(); + headerPage.checkChangeUrlPathIsDisplayed(); }); diff --git a/e2e/core/login/login_component.e2e.ts b/e2e/core/login/login_component.e2e.ts index 83f942b1a8..6ff3b109bb 100644 --- a/e2e/core/login/login_component.e2e.ts +++ b/e2e/core/login/login_component.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../../pages/adf/loginPage'); import ContentServicesPage = require('../../pages/adf/contentServicesPage'); import ProcessServicesPage = require('../../pages/adf/process_services/processServicesPage'); @@ -28,7 +30,6 @@ import AdfSettingsPage = require('../../pages/adf/settingsPage'); import AlfrescoApi = require('alfresco-js-api-node'); import Util = require('../../util/util'); -import { UploadActions } from '../../actions/ACS/upload.actions'; describe('Login component', () => { diff --git a/e2e/core/login/redirection.e2e.ts b/e2e/core/login/redirection.e2e.ts index a9acfad107..d04918f2a3 100644 --- a/e2e/core/login/redirection.e2e.ts +++ b/e2e/core/login/redirection.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../../pages/adf/loginPage'); import ContentServicesPage = require('../../pages/adf/contentServicesPage'); import ProcessServicesPage = require('../../pages/adf/process_services/processServicesPage'); diff --git a/e2e/core/login/remember_me.e2e.ts b/e2e/core/login/remember_me.e2e.ts index f78d605fc4..ce074d26e7 100644 --- a/e2e/core/login/remember_me.e2e.ts +++ b/e2e/core/login/remember_me.e2e.ts @@ -17,8 +17,6 @@ import LoginPage = require('../../pages/adf/loginPage'); -import AcsUserModel = require('../../models/ACS/acsUserModel'); - import AdfSettingsPage = require('../../pages/adf/settingsPage'); describe('Login component - Remember Me', () => { diff --git a/e2e/core/pagination_empty_current_page.e2e.ts b/e2e/core/pagination_empty_current_page.e2e.ts index 5a2c6adc00..2c50e82aca 100644 --- a/e2e/core/pagination_empty_current_page.e2e.ts +++ b/e2e/core/pagination_empty_current_page.e2e.ts @@ -77,7 +77,7 @@ describe('Pagination - returns to previous page when current is empty', () => { done(); }); - xit('Pagination - returns to previous page when current is empty', () => { + it('Pagination - returns to previous page when current is empty', () => { contentServicesPage.navigateToFolder(folderModel.name); contentServicesPage.checkAcsContainer(); contentServicesPage.waitForTableBody(); diff --git a/e2e/core/user_info_component.e2e.ts b/e2e/core/user_info_component.e2e.ts index e3fc06f687..88b13b0333 100644 --- a/e2e/core/user_info_component.e2e.ts +++ b/e2e/core/user_info_component.e2e.ts @@ -14,6 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +import { protractor } from 'protractor'; + import AdfSettingsPage = require('../pages/adf/settingsPage'); import LoginPage = require('../pages/adf/loginPage'); import UserInfoDialog = require('../pages/adf/dialog/userInfoDialog'); diff --git a/e2e/core/viewer_content_services_component.e2e.ts b/e2e/core/viewer_content_services_component.e2e.ts index 26d9b0ee3c..65ab7df9f8 100644 --- a/e2e/core/viewer_content_services_component.e2e.ts +++ b/e2e/core/viewer_content_services_component.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import TestConfig = require('../test.config'); import LoginPage = require('../pages/adf/loginPage'); @@ -139,7 +141,7 @@ describe('Content Services Viewer', () => { viewerPage.viewFile(pdfFile.name); - browser.driver.sleep(3000); //wait open file + browser.driver.sleep(3000); // wait open file viewerPage.checkFileContent('1', pdfFile.firstPageText); viewerPage.checkCloseButtonIsDisplayed(); @@ -304,7 +306,7 @@ describe('Content Services Viewer', () => { it('[C261123] Should be able to preview all pages and navigate to a page when using thumbnails', () => { viewerPage.viewFile(pdfFile.name); - browser.driver.sleep(3000); //wait open file + browser.driver.sleep(3000); // wait open file viewerPage.checkFileContent('1', pdfFile.firstPageText); viewerPage.checkThumbnailsBtnIsDisplayed(); @@ -355,7 +357,7 @@ describe('Content Services Viewer', () => { it('[C268901] Should need a password when opening a protected file', () => { viewerPage.viewFile(protectedFile.name); - browser.driver.sleep(3000); //wait open file + browser.driver.sleep(3000); // wait open file viewerPage.checkPasswordDialogIsDisplayed(); viewerPage.checkPasswordSubmitDisabledIsDisplayed(); diff --git a/e2e/core/z-finish.e2e.ts b/e2e/core/z-finish.e2e.ts index 3b4362ee7f..b74593ad97 100644 --- a/e2e/core/z-finish.e2e.ts +++ b/e2e/core/z-finish.e2e.ts @@ -45,14 +45,16 @@ describe('Save screenshot at the end', () => { let folder = await alfrescoJsApi.nodes.addNode('-my-', { 'name': 'core', - 'relativePath': 'Buiild-screenshot/Screenshot-e2e-' + buildNumber, + 'relativePath': 'Build-screenshot/Screenshot-e2e-' + buildNumber, 'nodeType': 'cm:folder' - }, {}, {}); + }, {}, { + 'overwrite': true + }); for (const fileName of files) { let pathFile = path.join(__dirname, '../../e2e-output/screenshots', fileName); - let file = fs.createReadStream(pathFile); + let file: any = fs.createReadStream(pathFile); await alfrescoJsApi.upload.uploadFile( file, diff --git a/e2e/insights/z-finish.e2e.ts b/e2e/insights/z-finish.e2e.ts index 155047e6a9..f9eec8ea0d 100644 --- a/e2e/insights/z-finish.e2e.ts +++ b/e2e/insights/z-finish.e2e.ts @@ -45,14 +45,16 @@ describe('Save screenshot at the end', () => { let folder = await alfrescoJsApi.nodes.addNode('-my-', { 'name': 'insights', - 'relativePath': 'Buiild-screenshot/Screenshot-e2e-' + buildNumber, + 'relativePath': 'Build-screenshot/Screenshot-e2e-' + buildNumber, 'nodeType': 'cm:folder' - }, {}, {}); + }, {}, { + 'overwrite': true + }); for (const fileName of files) { let pathFile = path.join(__dirname, '../../e2e-output/screenshots', fileName); - let file = fs.createReadStream(pathFile); + let file: any = fs.createReadStream(pathFile); await alfrescoJsApi.upload.uploadFile( file, diff --git a/e2e/pages/adf/commentsPage.ts b/e2e/pages/adf/commentsPage.ts index e12ff6e874..8532fde696 100644 --- a/e2e/pages/adf/commentsPage.ts +++ b/e2e/pages/adf/commentsPage.ts @@ -15,8 +15,9 @@ * limitations under the License. */ +import { element, by } from 'protractor'; + import Util = require('../../util/util'); -import TestConfig = require('../../test.config'); export class CommentsPage { @@ -28,7 +29,6 @@ export class CommentsPage { commentInput = element(by.id('comment-input')); addCommentButton = element(by.css("[data-automation-id='comments-input-add']")); - getTotalNumberOfComments() { Util.waitUntilElementIsVisible(this.numberOfComments); return this.numberOfComments.getText(); diff --git a/e2e/pages/adf/configEditorPage.ts b/e2e/pages/adf/configEditorPage.ts index ef7c0ec076..875e04716d 100644 --- a/e2e/pages/adf/configEditorPage.ts +++ b/e2e/pages/adf/configEditorPage.ts @@ -15,8 +15,8 @@ * limitations under the License. */ +import { element, by, browser } from 'protractor'; import Util = require('../../util/util'); -import TestConfig = require('../../test.config'); export class ConfigEditorPage { @@ -25,7 +25,8 @@ export class ConfigEditorPage { browser.driver.sleep(1000); Util.waitUntilElementIsVisible(textField); textField.sendKeys(''); - textField.clear().sendKeys(text); + textField.clear(); + textField.sendKeys(text); return this; } diff --git a/e2e/pages/adf/contentServicesPage.js b/e2e/pages/adf/contentServicesPage.js index cb2f783ca8..3b21b89e49 100644 --- a/e2e/pages/adf/contentServicesPage.js +++ b/e2e/pages/adf/contentServicesPage.js @@ -374,6 +374,7 @@ var ContentServicesPage = function () { for (i = 0; i < content.length; i++) { this.deleteContent(content[i]); this.checkContentIsNotDisplayed(content[i]); + browser.driver.sleep(1000); }; return this; }; @@ -382,6 +383,8 @@ var ContentServicesPage = function () { Util.waitUntilElementIsVisible(errorSnackBar); var deferred = protractor.promise.defer(); errorSnackBar.getText().then(function (text) { + /*tslint:disable-next-line*/ + console.log(text); deferred.fulfill(text); }); return deferred.promise; diff --git a/e2e/pages/adf/core/headerPage.ts b/e2e/pages/adf/core/headerPage.ts index ba9e2da5cd..927844090d 100644 --- a/e2e/pages/adf/core/headerPage.ts +++ b/e2e/pages/adf/core/headerPage.ts @@ -14,8 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +import { element, by, protractor } from 'protractor'; + import Util = require('../../../util/util'); -import TestConfig = require('../../../test.config'); export class HeaderPage { @@ -47,7 +49,7 @@ export class HeaderPage { } changeHeaderColor(color) { - let headerColor = element(by.css('option[value="'+color+'"]')); + let headerColor = element(by.css('option[value="' + color + '"]')); return headerColor.click(); } @@ -58,16 +60,20 @@ export class HeaderPage { addTitle(title) { Util.waitUntilElementIsVisible(this.titleInput); - return this.titleInput.click().sendKeys(title).sendKeys(protractor.Key.ENTER); + this.titleInput.click(); + this.titleInput.sendKeys(title); + this.titleInput.sendKeys(protractor.Key.ENTER); } checkIconIsDisplayed(url) { - let icon = element(by.css('img[src="'+ url +'"]')); + let icon = element(by.css('img[src="' + url + '"]')); Util.waitUntilElementIsVisible(icon); } addIcon(url) { Util.waitUntilElementIsVisible(this.iconInput); - return this.iconInput.click().sendKeys(url).sendKeys(protractor.Key.ENTER); + this.iconInput.click(); + this.iconInput.sendKeys(url); + this.iconInput.sendKeys(protractor.Key.ENTER); } } diff --git a/e2e/pages/adf/dialog/contentList.js b/e2e/pages/adf/dialog/contentList.js index fb4128b54a..b81d69cbb4 100644 --- a/e2e/pages/adf/dialog/contentList.js +++ b/e2e/pages/adf/dialog/contentList.js @@ -20,6 +20,7 @@ var Util = require('../../../util/util'); var ContentList = function () { var deleteContent = element(by.css("button[data-automation-id*='DELETE']")); var metadataAction = element(by.css("button[data-automation-id*='METADATA']")); + var versionManagerAction = element(by.css("button[data-automation-id*='VERSIONS']")); var moveContent = element(by.css("button[data-automation-id*='MOVE']")); var copyContent = element(by.css("button[data-automation-id*='COPY']")); var downloadContent = element(by.css("button[data-automation-id*='DOWNLOAD']")); @@ -88,6 +89,12 @@ var ContentList = function () { metadataAction.click(); }; + this.versionManagerContent = function (content) { + this.clickOnActionMenu(content); + this.waitForContentOptions(); + versionManagerAction.click(); + }; + this.moveContent = function (content) { this.clickOnActionMenu(content); moveContent.click(); diff --git a/e2e/pages/adf/dialog/uploadDialog.js b/e2e/pages/adf/dialog/uploadDialog.js index 17e250c8c4..a7f22499f4 100644 --- a/e2e/pages/adf/dialog/uploadDialog.js +++ b/e2e/pages/adf/dialog/uploadDialog.js @@ -20,8 +20,8 @@ var Util = require('../../../util/util'); var UploadDialog = function () { - var closeButton = element.all((by.css("footer[class*='upload-dialog__actions'] button"))).first(); - var dialog = element.all(by.css("div[class*='upload-dialog']")).first(); + var closeButton = element((by.css('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-close"]'))); + var dialog = element(by.css("div[id='upload-dialog']")); var minimizedDialog = element(by.css("div[class*='upload-dialog--minimized']")); var uploadedStatusIcon = by.css("mat-icon[class*='status--done']"); var cancelledStatusIcon = by.css("div[class*='status--cancelled']"); @@ -36,7 +36,7 @@ var UploadDialog = function () { var canUploadConfirmationDescription = element(by.css("p[class='upload-dialog__confirmation--text']")); var confirmationDialogNoButton = element(by.partialButtonText("No")); var confirmationDialogYesButton = element(by.partialButtonText("Yes")); - var cancelUploads = element(by.partialButtonText("Cancel uploads")); + var cancelUploads = element((by.css('footer[class*="upload-dialog__actions"] button[id="adf-upload-dialog-cancel-all"]'))); this.clickOnCloseButton = function () { this.checkCloseButtonIsDisplayed(); diff --git a/e2e/pages/adf/documentListErrorPage.js b/e2e/pages/adf/errorPage.js similarity index 84% rename from e2e/pages/adf/documentListErrorPage.js rename to e2e/pages/adf/errorPage.js index 5640d48b81..c5029e3def 100644 --- a/e2e/pages/adf/documentListErrorPage.js +++ b/e2e/pages/adf/errorPage.js @@ -23,11 +23,17 @@ var ErrorPage = function(){ var errorPageCode = element(by.css("adf-error-content .adf-error-content-code")); var errorPageTitle = element(by.css("adf-error-content .adf-error-content-title")); var errorPageDescription = element(by.css("adf-error-content .adf-error-content-description")); + var backButton = element(by.id("adf-return-button")); this.checkErrorPage = function(){ Util.waitUntilElementIsVisible(errorPage); }; + this.clickBackButton = function(){ + Util.waitUntilElementIsVisible(backButton); + backButton.click(); + }; + this.checkErrorTitle = function(){ Util.waitUntilElementIsVisible(errorPageTitle); }; @@ -45,6 +51,11 @@ var ErrorPage = function(){ return errorPageCode.getText(); }; + this.getErrorTitle = function() { + Util.waitUntilElementIsVisible(errorPageTitle); + return errorPageTitle.getText(); + }; + this.getErrorDescription = function() { Util.waitUntilElementIsVisible(errorPageDescription); return errorPageDescription.getText(); diff --git a/e2e/pages/adf/process_services/attachmentListPage.ts b/e2e/pages/adf/process_services/attachmentListPage.ts index f2dd8cc93f..91c89b54db 100644 --- a/e2e/pages/adf/process_services/attachmentListPage.ts +++ b/e2e/pages/adf/process_services/attachmentListPage.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { element, by, protractor, browser } from 'protractor'; + import Util = require('../../../util/util'); import TestConfig = require('../../../test.config'); import path = require('path'); diff --git a/e2e/pages/adf/process_services/processFiltersPage.js b/e2e/pages/adf/process_services/processFiltersPage.js index c330c42a71..cb9da3fbf0 100644 --- a/e2e/pages/adf/process_services/processFiltersPage.js +++ b/e2e/pages/adf/process_services/processFiltersPage.js @@ -76,11 +76,11 @@ var ProcessFiltersPage = function () { }; this.checkNoContentMessage = function () { - Util.waitUntilElementIsVisible(noContentMessage); + return Util.waitUntilElementIsVisible(noContentMessage); }; this.selectFromProcessList = function (title) { - var processName = element.all(by.css('div[data-automation-id="text_'+ title +'"]')).first(); + var processName = element.all(by.css('div[data-automation-id="text_' + title + '"]')).first(); Util.waitUntilElementIsVisible(processName); processName.click(); }; @@ -94,7 +94,7 @@ var ProcessFiltersPage = function () { return element.all(rows).count(); }; - this.waitForTableBody = function (){ + this.waitForTableBody = function () { Util.waitUntilElementIsVisible(tableBody); }; diff --git a/e2e/pages/adf/searchResultsPage.js b/e2e/pages/adf/searchResultsPage.js index 7ac41bbbaf..b72bf5383f 100644 --- a/e2e/pages/adf/searchResultsPage.js +++ b/e2e/pages/adf/searchResultsPage.js @@ -125,7 +125,7 @@ var SearchResultsPage = function () { * @param sortOrder: 'true' to sort the list ascendant and 'false' for descendant */ this.sortByAuthor = function (sortOrder) { - contentList.sortByAuthor(sortOrder); + this.sortBy(sortOrder, "Author"); }; /** @@ -134,7 +134,7 @@ var SearchResultsPage = function () { * @param sortOrder: 'true' to sort the list ascendant and 'false' for descendant */ this.sortByCreated = function (sortOrder) { - return contentList.sortByCreated(sortOrder); + this.sortBy(sortOrder, "Created"); }; /** diff --git a/e2e/pages/adf/versionManagerPage.ts b/e2e/pages/adf/versionManagerPage.ts new file mode 100644 index 0000000000..3689bd983e --- /dev/null +++ b/e2e/pages/adf/versionManagerPage.ts @@ -0,0 +1,229 @@ +/*! + * @license + * Copyright 2016 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 Util = require('../../util/util'); +import TestConfig = require('../../test.config'); +import path = require('path'); +import { browser, by, element, protractor } from 'protractor'; + +export class VersionManagePage { + + showNewVersionButton = element(by.css('#adf-show-version-upload-button')); + uploadNewVersionButton = element(by.css('adf-upload-version-button input[data-automation-id="upload-single-file"]')); + uploadNewVersionContainer = element(by.css('#adf-new-version-uploader-container')); + cancelButton = element(by.css('#adf-new-version-cancel')); + majorRadio = element(by.css('#adf-new-version-major')); + minorRadio = element(by.css('#adf-new-version-minor')); + commentText = element(by.css('#adf-new-version-text-area')); + readOnlySwitch = element(by.id('adf-version-manager-switch-readonly')); + downloadSwitch = element(by.id('adf-version-manager-switch-download')); + commentsSwitch = element(by.id('adf-version-manager-switch-comments')); + + checkUploadNewVersionsButtonIsDisplayed() { + Util.waitUntilElementIsVisible(this.showNewVersionButton); + return this; + } + + uploadNewVersionFile = function (fileLocation) { + Util.waitUntilElementIsVisible(this.uploadNewVersionButton); + this.uploadNewVersionButton.sendKeys(path.resolve(path.join(TestConfig.main.rootPath, fileLocation))); + Util.waitUntilElementIsVisible(this.showNewVersionButton); + return this; + }; + + getFileVersionName(version) { + let fileElement = element(by.css(`[id="adf-version-list-item-name-${version}"]`)); + Util.waitUntilElementIsVisible(fileElement); + return fileElement.getText(); + } + + chekFileVersionExist(version) { + let fileVersion = element(by.css(`[id="adf-version-list-item-version-${version}"]`)); + return Util.waitUntilElementIsVisible(fileVersion); + } + + chekFileVersionNotExist(version) { + let fileVersion = element(by.css(`[id="adf-version-list-item-version-${version}"]`)); + return Util.waitUntilElementIsNotVisible(fileVersion); + } + + getFileVersionComment(version) { + let fileComment = element(by.css(`[id="adf-version-list-item-comment-${version}"]`)); + Util.waitUntilElementIsVisible(fileComment); + return fileComment.getText(); + } + + getFileVersionDate(version) { + let fileDate = element(by.css(`[id="adf-version-list-item-date-${version}"]`)); + Util.waitUntilElementIsVisible(fileDate); + return fileDate.getText(); + } + + enterCommentText(text) { + Util.waitUntilElementIsVisible(this.commentText); + this.commentText.sendKeys(''); + this.commentText.clear(); + this.commentText.sendKeys(text); + return this; + } + + clickMajorChange() { + let radioMajor = element(by.css(`[id="adf-new-version-major"]`)); + Util.waitUntilElementIsVisible(radioMajor); + radioMajor.click(); + } + + clickMinorChange() { + let radioMinor = element(by.css(`[id="adf-new-version-minor"]`)); + Util.waitUntilElementIsVisible(radioMinor); + radioMinor.click(); + } + + /** + * disables download + */ + disableReadOnly() { + Util.waitUntilElementIsVisible(this.readOnlySwitch); + this.readOnlySwitch.getAttribute('class').then((check) => { + if (check.indexOf('mat-checked') >= 0) { + this.readOnlySwitch.click(); + } + }); + } + + /** + * enables download + */ + enableReadOnly() { + Util.waitUntilElementIsVisible(this.readOnlySwitch); + this.readOnlySwitch.getAttribute('class').then((check) => { + if (check.indexOf('mat-checked') < 0) { + this.readOnlySwitch.click(); + } + }); + } + + /** + * disables download + */ + disableDownload() { + Util.waitUntilElementIsVisible(this.downloadSwitch); + this.downloadSwitch.getAttribute('class').then((check) => { + if (check.indexOf('mat-checked') >= 0) { + this.downloadSwitch.click(); + } + }); + } + + /** + * enables download + */ + enableDownload() { + Util.waitUntilElementIsVisible(this.downloadSwitch); + this.downloadSwitch.getAttribute('class').then((check) => { + if (check.indexOf('mat-checked') < 0) { + this.downloadSwitch.click(); + } + }); + } + + /** + * + * disables comments + */ + disableComments() { + Util.waitUntilElementIsVisible(this.commentsSwitch); + this.commentsSwitch.getAttribute('class').then((check) => { + if (check.indexOf('mat-checked') >= 0) { + this.commentsSwitch.click(); + } + }); + } + + /** + * enables comments + */ + enableComments() { + Util.waitUntilElementIsVisible(this.commentsSwitch); + this.commentsSwitch.getAttribute('class').then((check) => { + if (check.indexOf('mat-checked') < 0) { + this.commentsSwitch.click(); + } + }); + } + + clickActionButton(version) { + Util.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-menu-button-${version}"]`))); + element(by.css(`[id="adf-version-list-action-menu-button-${version}"]`)).click(); + return this; + } + + clickAcceptConfirm() { + Util.waitUntilElementIsVisible(element(by.css(`[id="adf-confirm-accept"]`))); + element(by.css(`[id="adf-confirm-accept"]`)).click(); + return this; + } + + clickCancelConfirm() { + Util.waitUntilElementIsVisible(element(by.css(`[id="adf-confirm-cancel"]`))); + element(by.css(`[id="adf-confirm-cancel"]`)).click(); + return this; + } + + closeActionButton() { + browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + return this; + } + + downloadFileVersion(version) { + this.clickActionButton(version); + let downloadButton = element(by.css(`[id="adf-version-list-action-download-${version}"]`)); + Util.waitUntilElementIsVisible(downloadButton); + browser.driver.sleep(500); + downloadButton.click(); + return this; + } + + deleteFileVersion(version) { + this.clickActionButton(version); + let deleteButton = element(by.css(`[id="adf-version-list-action-delete-${version}"]`)); + Util.waitUntilElementIsVisible(deleteButton); + browser.driver.sleep(500); + deleteButton.click(); + return this; + } + + restoreFileVersion(version) { + this.clickActionButton(version); + let restoreButton = element(by.css(`[id="adf-version-list-action-restore-${version}"]`)); + Util.waitUntilElementIsVisible(restoreButton); + browser.driver.sleep(500); + restoreButton.click(); + return this; + } + + checkActionsArePresent(version) { + Util.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-download-${version}"]`))); + Util.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-delete-${version}"]`))); + Util.waitUntilElementIsVisible(element(by.css(`[id="adf-version-list-action-restore-${version}"]`))); + } + + closeVersionDialog() { + browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); + Util.waitUntilElementIsNotOnPage(this.uploadNewVersionContainer); + } +} diff --git a/e2e/process-services/apps-section.e2e.ts b/e2e/process-services/apps-section.e2e.ts index 33d1d343e0..10da19082b 100644 --- a/e2e/process-services/apps-section.e2e.ts +++ b/e2e/process-services/apps-section.e2e.ts @@ -15,12 +15,12 @@ * limitations under the License. */ +import { browser } from 'protractor'; import LoginPage = require('../pages/adf/loginPage'); import ProcessServicesPage = require('../pages/adf/process_services/processServicesPage'); import NavigationBarPage = require('../pages/adf/navigationBarPage'); import CONSTANTS = require('../util/constants'); -import Util = require('../util/util'); import TestConfig = require('../test.config'); import resources = require('../util/resources'); @@ -29,7 +29,6 @@ import AlfrescoApi = require('alfresco-js-api-node'); import { UsersActions } from '../actions/users.actions'; import { AppsActions } from '../actions/APS/apps.actions'; import { ModelsActions } from '../actions/APS/models.actions'; -import AppPublish = require('../models/APS/AppPublish'); describe('Modify applications', () => { @@ -43,7 +42,7 @@ describe('Modify applications', () => { let modelActions = new ModelsActions(); let firstApp, appVersionToBeDeleted; - beforeAll(async(done) => { + beforeAll(async (done) => { let users = new UsersActions(); this.alfrescoJsApi = new AlfrescoApi({ @@ -75,7 +74,7 @@ describe('Modify applications', () => { expect(processServicesPage.getDescription(app.title)).toEqual(app.description); }); - it('[C260213] Should a new version of the app be displayed on dashboard when is replaced by importing another app in APS', async() => { + it('[C260213] Should a new version of the app be displayed on dashboard when is replaced by importing another app in APS', async () => { navigationBarPage.clickProcessServicesButton(); processServicesPage.checkApsContainer(); @@ -97,7 +96,7 @@ describe('Modify applications', () => { expect(processServicesPage.getDescription(app.title)).toEqual(app.description); }); - it('[C260220] Should the app not be displayed on dashboard after it was deleted in APS', async() => { + it('[C260220] Should the app not be displayed on dashboard after it was deleted in APS', async () => { navigationBarPage.clickProcessServicesButton(); processServicesPage.checkApsContainer(); @@ -114,7 +113,7 @@ describe('Modify applications', () => { processServicesPage.checkAppIsNotDisplayed(app.title); }); - it('[C260215] Should the penultimate version of an app be displayed on dashboard when the last version is deleted in APS', async() => { + it('[C260215] Should the penultimate version of an app be displayed on dashboard when the last version is deleted in APS', async () => { navigationBarPage.clickProcessServicesButton(); processServicesPage.checkApsContainer(); @@ -132,7 +131,7 @@ describe('Modify applications', () => { expect(processServicesPage.getBackgroundColor(appTobeDeleted.title)).toEqual(CONSTANTS.APP_COLOR.GREY); - browser.controlFlow().execute(async() => { + browser.controlFlow().execute(async () => { await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); await modelActions.deleteVersionModel(this.alfrescoJsApi, appVersionToBeDeleted.id); await apps.publishDeployApp(this.alfrescoJsApi, appVersionToBeDeleted.id); diff --git a/e2e/process-services/checklist_component.e2e.ts b/e2e/process-services/checklist_component.e2e.ts index f059183e51..6ea95e1ac3 100644 --- a/e2e/process-services/checklist_component.e2e.ts +++ b/e2e/process-services/checklist_component.e2e.ts @@ -40,7 +40,7 @@ describe('Checklist component', () => { let taskPage = new TasksPage(); let tasks = ['no checklist created task', 'checklist number task', 'remove running checklist', 'remove completed checklist', 'hierarchy']; - let checklists= ['cancelCheckList', 'dialogChecklist', 'addFirstChecklist', 'addSecondChecklist']; + let checklists = ['cancelCheckList', 'dialogChecklist', 'addFirstChecklist', 'addSecondChecklist']; let removeChecklist = ['removeFirstRunningChecklist', 'removeSecondRunningChecklist', 'removeFirstCompletedChecklist', 'removeSecondCompletedChecklist']; let hierarchyChecklist = ['checklistOne', 'checklistTwo', 'checklistOneChild', 'checklistTwoChild']; @@ -178,7 +178,7 @@ describe('Checklist component', () => { taskPage.usingTasksListPage().selectTaskFromTasksList(tasks[4]); taskPage.completeTaskNoForm(); - + taskPage.usingFiltersPage().goToFilter(CONSTANTS.TASKFILTERS.COMPL_TASKS); taskPage.usingTasksListPage().checkTaskIsDisplayedInTasksList(tasks[4]); taskPage.usingTasksListPage().checkTaskIsDisplayedInTasksList(hierarchyChecklist[0]); @@ -188,4 +188,3 @@ describe('Checklist component', () => { }); }); - diff --git a/e2e/process-services/comment_component_processes.e2e.ts b/e2e/process-services/comment_component_processes.e2e.ts index 052fc93339..bb25179209 100644 --- a/e2e/process-services/comment_component_processes.e2e.ts +++ b/e2e/process-services/comment_component_processes.e2e.ts @@ -15,15 +15,14 @@ * limitations under the License. */ +import { browser } from 'protractor'; import LoginPage = require('../pages/adf/loginPage'); import ProcessServicesPage = require('../pages/adf/process_services/processServicesPage'); import ProcessFiltersPage = require('../pages/adf/process_services/processFiltersPage.js'); import { CommentsPage } from '../pages/adf/commentsPage'; - import TestConfig = require('../test.config'); import resources = require('../util/resources'); -import Util = require('../util/util.js'); import AlfrescoApi = require('alfresco-js-api-node'); import { UsersActions } from '../actions/users.actions'; @@ -45,10 +44,10 @@ describe('Comment component for Processes', () => { hostBpm: TestConfig.adf.url }); - done(); + done(); }); - beforeEach(async(done) =>{ + beforeEach(async(done) => { let apps = new AppsActions(); let users = new UsersActions(); @@ -85,7 +84,7 @@ describe('Comment component for Processes', () => { it('[C260464] Should be able to add a comment on APS and check on ADF', () => { browser.controlFlow().execute(async() => { - comment = {message: "HELLO"}; + comment = {message: 'HELLO'}; await this.alfrescoJsApi.activiti.commentsApi.addProcessInstanceComment(comment, processInstanceId); }); @@ -100,7 +99,7 @@ describe('Comment component for Processes', () => { commentsPage.checkUserIconIsDisplayed(0); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments ('+ addedComment.total +')'); + expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + addedComment.total + ')'); expect(commentsPage.getMessage(0)).toEqual(addedComment.data[0].message); expect(commentsPage.getUserName(0)).toEqual(addedComment.data[0].createdBy.firstName + ' ' + addedComment.data[0].createdBy.lastName); expect(commentsPage.getTime(0)).toEqual('a few seconds ago'); @@ -109,7 +108,7 @@ describe('Comment component for Processes', () => { it('[C260465] Should not be able to view process comment on included task', () => { browser.controlFlow().execute(async() => { - comment = {message: "GOODBYE"}; + comment = {message: 'GOODBYE'}; await this.alfrescoJsApi.activiti.commentsApi.addProcessInstanceComment(comment, processInstanceId); }); @@ -135,7 +134,7 @@ describe('Comment component for Processes', () => { let taskId = taskQuery.data[0].id; - taskComment = {message: "Task Comment"}; + taskComment = {message: 'Task Comment'}; await this.alfrescoJsApi.activiti.taskApi.addTaskComment(taskComment, taskId); }); @@ -150,7 +149,7 @@ describe('Comment component for Processes', () => { commentsPage.checkUserIconIsDisplayed(0); - expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments ('+ addedTaskComment.total +')'); + expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + addedTaskComment.total + ')'); expect(commentsPage.getMessage(0)).toEqual(addedTaskComment.data[0].message); expect(commentsPage.getUserName(0)).toEqual(addedTaskComment.data[0].createdBy.firstName + ' ' + addedTaskComment.data[0].createdBy.lastName); expect(commentsPage.getTime(0)).toEqual('a few seconds ago'); diff --git a/e2e/process-services/comment_component_tasks.e2e.ts b/e2e/process-services/comment_component_tasks.e2e.ts index e83f03decf..7bc5efb550 100644 --- a/e2e/process-services/comment_component_tasks.e2e.ts +++ b/e2e/process-services/comment_component_tasks.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../pages/adf/loginPage'); import ProcessServicesPage = require('../pages/adf/process_services/processServicesPage'); import TasksPage = require('../pages/adf/process_services/tasksPage'); @@ -24,7 +26,6 @@ import CONSTANTS = require('../util/constants'); import TestConfig = require('../test.config'); import resources = require('../util/resources'); -import Util = require('../util/util.js'); import AlfrescoApi = require('alfresco-js-api-node'); import { UsersActions } from '../actions/users.actions'; @@ -55,7 +56,7 @@ describe('Comment component for Processes', () => { done(); }); - beforeEach(async(done) =>{ + beforeEach(async(done) => { let apps = new AppsActions(); let users = new UsersActions(); @@ -114,8 +115,8 @@ describe('Comment component for Processes', () => { await this.alfrescoJsApi.activiti.taskApi.involveUser(newTaskId, {email: secondUser.email}); - let taskComment = {message: "Task Comment"}; - let secondTaskComment = {message: "Second Task Comment"}; + let taskComment = {message: 'Task Comment'}; + let secondTaskComment = {message: 'Second Task Comment'}; await this.alfrescoJsApi.activiti.taskApi.addTaskComment(taskComment, newTaskId); await this.alfrescoJsApi.activiti.taskApi.addTaskComment(secondTaskComment, newTaskId); @@ -130,12 +131,12 @@ describe('Comment component for Processes', () => { browser.controlFlow().execute(async() => { let totalComments = await this.alfrescoJsApi.activiti.taskApi.getTaskComments(newTaskId, {'latestFirst': true}); - let thirdTaskComment = {message: "Third Task Comment"}; + let thirdTaskComment = {message: 'Third Task Comment'}; await commentsPage.checkUserIconIsDisplayed(0); await commentsPage.checkUserIconIsDisplayed(1); - await expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments ('+ totalComments.total +')'); + await expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + totalComments.total + ')'); await expect(commentsPage.getMessage(0)).toEqual(totalComments.data[0].message); await expect(commentsPage.getMessage(1)).toEqual(totalComments.data[1].message); @@ -164,7 +165,7 @@ describe('Comment component for Processes', () => { await commentsPage.checkUserIconIsDisplayed(1); await commentsPage.checkUserIconIsDisplayed(2); - await expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments ('+ totalComments.total +')'); + await expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (' + totalComments.total + ')'); await expect(commentsPage.getMessage(0)).toEqual(totalComments.data[0].message); await expect(commentsPage.getMessage(1)).toEqual(totalComments.data[1].message); diff --git a/e2e/process-services/custom_process_filters.e2e.ts b/e2e/process-services/custom_process_filters.e2e.ts index a837f9a70d..6b262d7a06 100644 --- a/e2e/process-services/custom_process_filters.e2e.ts +++ b/e2e/process-services/custom_process_filters.e2e.ts @@ -15,14 +15,13 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../pages/adf/loginPage'); import ProcessServicesPage = require('../pages/adf/process_services/processServicesPage'); import ProcessFiltersPage = require('../pages/adf/process_services/processFiltersPage.js'); -import FiltersPage = require('../pages/adf/process_services/filtersPage.js') import TestConfig = require('../test.config'); -import resources = require('../util/resources'); -import Util = require('../util/util.js'); import AlfrescoApi = require('alfresco-js-api-node'); import { UsersActions } from '../actions/users.actions'; diff --git a/e2e/process-services/custom_process_filters_sorting.e2e.ts b/e2e/process-services/custom_process_filters_sorting.e2e.ts index 5de3c08e9f..7ea85eaf91 100644 --- a/e2e/process-services/custom_process_filters_sorting.e2e.ts +++ b/e2e/process-services/custom_process_filters_sorting.e2e.ts @@ -15,14 +15,15 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../pages/adf/loginPage'); import ProcessServicesPage = require('../pages/adf/process_services/processServicesPage'); import ProcessFiltersPage = require('../pages/adf/process_services/processFiltersPage.js'); -import FiltersPage = require('../pages/adf/process_services/filtersPage.js') +import FiltersPage = require('../pages/adf/process_services/filtersPage.js'); import TestConfig = require('../test.config'); import resources = require('../util/resources'); -import Util = require('../util/util.js'); import AlfrescoApi = require('alfresco-js-api-node'); import { UsersActions } from '../actions/users.actions'; @@ -96,41 +97,29 @@ describe('Sorting for process filters', () => { it('[C260476] Should be able to create a filter on APS for running processes - Oldest first and check on ADF', () => { browser.controlFlow().execute(async () => {
 await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 
'appId': null,
 'name': processFilter.running_old_first,
'icon': 'glyphicon-random',
 - 'filter':{'sort': 'created-asc', 'name': '', 'state': 'running'}
 +
'appId': null,
 'name': processFilter.running_old_first,
 'icon': 'glyphicon-random',
 + 'filter': {'sort': 'created-asc', 'name': '', 'state': 'running'}
 });
 - await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1');
 await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 2');
 await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 3');
 - });

 - - loginPage.loginToProcessServicesUsingUserModel(user);

 - - processServicesPage
 + });

 loginPage.loginToProcessServicesUsingUserModel(user);

 processServicesPage
 .goToProcessServices()
 .goToTaskApp()
 - .clickProcessButton();

 - - processFiltersPage.checkFilterIsDisplayed(processFilter.running_old_first);

 - - filtersPage.goToFilter(processFilter.running_old_first);

 - - browser.controlFlow().execute(async () => {
 + .clickProcessButton();

 processFiltersPage.checkFilterIsDisplayed(processFilter.running_old_first);

 filtersPage.goToFilter(processFilter.running_old_first);

 browser.controlFlow().execute(async () => {
 processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - "processDefinitionId":null,"appDefinitionId":null,"state":"running","sort":"created-asc" + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-asc' }); expect(processesQuery.data[0].name).toEqual('Process 1'); expect(processesQuery.data[1].name).toEqual('Process 2'); expect(processesQuery.data[2].name).toEqual('Process 3'); - });

 - }); + });

 }); it('[C260477] Should be able to create a filter on APS for completed processes - Oldest first and check on ADF', () => { browser.controlFlow().execute(async () => { await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({ - 
'appId': null,
 'name': processFilter.completed_old_first,
'icon': 'glyphicon-random', - 'filter':{'sort': 'created-asc', 'name': '', 'state': 'completed'} +
'appId': null,
 'name': processFilter.completed_old_first,
 'icon': 'glyphicon-random', + 'filter': {'sort': 'created-asc', 'name': '', 'state': 'completed'} }); let firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); @@ -155,7 +144,7 @@ describe('Sorting for process filters', () => { browser.controlFlow().execute(async () => { processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - "processDefinitionId":null,"appDefinitionId":null,"state":"completed","sort":"created-asc" + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-asc' }); expect(processesQuery.data[0].name).toEqual('Process 1'); expect(processesQuery.data[1].name).toEqual('Process 2'); @@ -166,8 +155,8 @@ describe('Sorting for process filters', () => { it('[C260478] Should be able to create a filter on APS for all processes - Oldest first and check on ADF', () => { browser.controlFlow().execute(async () => { await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({
 - 'appId': null,
 'name': processFilter.all_old_first,
'icon': 'glyphicon-random', - 'filter':{'sort': 'created-asc', 'name': '', 'state': 'all'} + 'appId': null,
 'name': processFilter.all_old_first,
 'icon': 'glyphicon-random', + 'filter': {'sort': 'created-asc', 'name': '', 'state': 'all'} }); await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); @@ -196,7 +185,7 @@ describe('Sorting for process filters', () => { browser.controlFlow().execute(async () => { processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - "processDefinitionId":null,"appDefinitionId":null,"state":"all","sort":"created-asc" + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-asc' }); expect(processesQuery.data[0].name).toEqual('Process 1'); expect(processesQuery.data[1].name).toEqual('Process 2'); @@ -210,8 +199,8 @@ describe('Sorting for process filters', () => { it('[C260479] Should be able to create a filter on APS for running processes - Newest first and check on ADF', () => { browser.controlFlow().execute(async () => { await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({
 - 'appId': null,
 'name': processFilter.running_new_first,
'icon': 'glyphicon-random', - 'filter':{'sort': 'created-desc', 'name': '', 'state': 'running'} + 'appId': null,
 'name': processFilter.running_new_first,
 'icon': 'glyphicon-random', + 'filter': {'sort': 'created-desc', 'name': '', 'state': 'running'} }); await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); @@ -232,7 +221,7 @@ describe('Sorting for process filters', () => { browser.controlFlow().execute(async () => { processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - "processDefinitionId":null,"appDefinitionId":null,"state":"running","sort":"created-desc" + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'running', 'sort': 'created-desc' }); expect(processesQuery.data[0].name).toEqual('Process 3'); expect(processesQuery.data[1].name).toEqual('Process 2'); @@ -243,8 +232,8 @@ describe('Sorting for process filters', () => { it('[C260480] Should be able to create a filter on APS for completed processes - Newest first and check on ADF', () => { browser.controlFlow().execute(async () => { await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({
 - 'appId': null,
 'name': processFilter.completed_new_first,
'icon': 'glyphicon-random', - 'filter':{'sort': 'created-desc', 'name': '', 'state': 'completed'} + 'appId': null,
 'name': processFilter.completed_new_first,
 'icon': 'glyphicon-random', + 'filter': {'sort': 'created-desc', 'name': '', 'state': 'completed'} }); let firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); @@ -269,7 +258,7 @@ describe('Sorting for process filters', () => { browser.controlFlow().execute(async () => { processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - "processDefinitionId":null,"appDefinitionId":null,"state":"completed","sort":"created-desc" + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'created-desc' }); expect(processesQuery.data[0].name).toEqual('Process 3'); expect(processesQuery.data[1].name).toEqual('Process 2'); @@ -280,8 +269,8 @@ describe('Sorting for process filters', () => { it('[C260481] Should be able to create a filter on APS for all processes - Newest first and check on ADF', () => { browser.controlFlow().execute(async () => { await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({
 - 'appId': null,
 'name': processFilter.all_new_first,
'icon': 'glyphicon-random', - 'filter':{'sort': 'created-desc', 'name': '', 'state': 'all'} + 'appId': null,
 'name': processFilter.all_new_first,
 'icon': 'glyphicon-random', + 'filter': {'sort': 'created-desc', 'name': '', 'state': 'all'} }); await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); @@ -310,7 +299,7 @@ describe('Sorting for process filters', () => { browser.controlFlow().execute(async () => { processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - "processDefinitionId":null,"appDefinitionId":null,"state":"all","sort":"created-desc" + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'all', 'sort': 'created-desc' }); expect(processesQuery.data[0].name).toEqual('Process 6'); expect(processesQuery.data[1].name).toEqual('Process 5'); @@ -321,11 +310,11 @@ describe('Sorting for process filters', () => { }); }); - it('[C272815] Should be able to create a filter on APS for completed processes - Completed most recently and check on ADF', () =>{ + it('[C272815] Should be able to create a filter on APS for completed processes - Completed most recently and check on ADF', () => { browser.controlFlow().execute(async () => { await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({
 - 'appId': null,
 'name': processFilter.completed_most_recently,
'icon': 'glyphicon-random', - 'filter':{'sort': 'ended-asc', 'name': '', 'state': 'completed'} + 'appId': null,
 'name': processFilter.completed_most_recently,
 'icon': 'glyphicon-random', + 'filter': {'sort': 'ended-asc', 'name': '', 'state': 'completed'} }); let firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); @@ -350,7 +339,7 @@ describe('Sorting for process filters', () => { browser.controlFlow().execute(async () => { processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - "processDefinitionId":null,"appDefinitionId":null,"state":"completed","sort":"ended-asc" + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-asc' }); expect(processesQuery.data[0].name).toEqual('Process 2'); expect(processesQuery.data[1].name).toEqual('Process 1'); @@ -361,8 +350,8 @@ describe('Sorting for process filters', () => { it('[C272816] Should be able to create a filter on APS for completed processes - Completed least recently and check on ADF', () => { browser.controlFlow().execute(async () => { await this.alfrescoJsApi.activiti.userFiltersApi.createUserProcessInstanceFilter({
 - 'appId': null,
 'name': processFilter.completed_least_recently,
'icon': 'glyphicon-random', - 'filter':{'sort': 'ended-desc', 'name': '', 'state': 'completed'} + 'appId': null,
 'name': processFilter.completed_least_recently,
 'icon': 'glyphicon-random', + 'filter': {'sort': 'ended-desc', 'name': '', 'state': 'completed'} }); let firstProc = await apps.startProcess(this.alfrescoJsApi, 'Task App', 'Process 1'); @@ -387,7 +376,7 @@ describe('Sorting for process filters', () => { browser.controlFlow().execute(async () => { processesQuery = await this.alfrescoJsApi.activiti.processApi.getProcessInstances({ - "processDefinitionId":null,"appDefinitionId":null,"state":"completed","sort":"ended-desc" + 'processDefinitionId': null, 'appDefinitionId': null, 'state': 'completed', 'sort': 'ended-desc' }); expect(processesQuery.data[0].name).toEqual('Process 3'); expect(processesQuery.data[1].name).toEqual('Process 1'); diff --git a/e2e/process-services/people_component.e2e.ts b/e2e/process-services/people_component.e2e.ts index d11b0f555d..46a8b53e9b 100644 --- a/e2e/process-services/people_component.e2e.ts +++ b/e2e/process-services/people_component.e2e.ts @@ -38,9 +38,9 @@ describe('People component', () => { let processUserModel, assigneeUserModel, secondAssigneeUserModel; let app = resources.Files.SIMPLE_APP_WITH_USER_FORM; let taskPage = new TasksPage(); - let peopleTitle = "People this task is shared with "; + let peopleTitle = 'People this task is shared with '; - let tasks = ['no people involved task', 'remove people task', 'can not complete task', 'multiple users', 'completed filter']; + let tasks = ['no people involved task', 'remove people task', 'can not complete task', 'multiple users', 'completed filter']; beforeAll(async (done) => { let users = new UsersActions(); @@ -177,8 +177,8 @@ describe('People component', () => { expect(taskPage.usingTaskDetails().getInvolvedUserEmail(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) .toEqual(assigneeUserModel.email); expect(taskPage.usingTaskDetails().getInvolvedUserEditAction(assigneeUserModel.firstName + ' ' + assigneeUserModel.lastName)) - .toEqual("can edit"); - expect(taskPage.usingTaskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + "(1)"); + .toEqual('can edit'); + expect(taskPage.usingTaskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + '(1)'); taskPage.usingTaskDetails().clickInvolvePeopleButton() .typeUser(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName) @@ -190,8 +190,8 @@ describe('People component', () => { .toEqual(secondAssigneeUserModel.email); expect(taskPage.usingTaskDetails().getInvolvedUserEditAction(secondAssigneeUserModel.firstName + ' ' + secondAssigneeUserModel.lastName)) - .toEqual("can edit"); - expect(taskPage.usingTaskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + "(2)"); + .toEqual('can edit'); + expect(taskPage.usingTaskDetails().getInvolvedPeopleTitle()).toEqual(peopleTitle + '(2)'); }); it('[C280014] Should involved user see the task in completed filters when the task is completed', () => { @@ -224,4 +224,3 @@ describe('People component', () => { }); }); - diff --git a/e2e/process-services/process_attachmentList_actionMenu.e2e.ts b/e2e/process-services/process_attachmentList_actionMenu.e2e.ts index 1691fe8432..79c55b682b 100644 --- a/e2e/process-services/process_attachmentList_actionMenu.e2e.ts +++ b/e2e/process-services/process_attachmentList_actionMenu.e2e.ts @@ -22,8 +22,6 @@ import ProcessDetailsPage = require('../pages/adf/process_services/processDetail import { AttachmentListPage } from '../pages/adf/process_services/attachmentListPage'; import ViewerPage = require('../pages/adf/viewerPage.js'); -import CONSTANTS = require('../util/constants'); - import TestConfig = require('../test.config'); import resources = require('../util/resources'); import Util = require('../util/util.js'); @@ -98,7 +96,7 @@ describe('Attachment list action menu for processes', () => { done(); }); - xit('[C260228] Option menu functionality - Active Process', () => { + it('[C260228] Option menu functionality - Active Process', () => { processServicesPage.goToProcessServices().goToApp(app.title).clickProcessButton(); processFiltersPage.selectFromProcessList(processName.active); @@ -132,7 +130,7 @@ describe('Attachment list action menu for processes', () => { attachmentListPage.checkFileIsRemoved(pngFile.name); }); - xit('[C279886] Option menu functionality - Completed Process', () => { + it('[C279886] Option menu functionality - Completed Process', () => { processServicesPage.goToProcessServices().goToApp(app.title).clickProcessButton(); processFiltersPage.clickRunningFilterButton(); diff --git a/e2e/process-services/process_filters_component.e2e.ts b/e2e/process-services/process_filters_component.e2e.ts index e3a70eba2d..2267368f22 100644 --- a/e2e/process-services/process_filters_component.e2e.ts +++ b/e2e/process-services/process_filters_component.e2e.ts @@ -29,7 +29,6 @@ import AlfrescoApi = require('alfresco-js-api-node'); import { AppsActions } from '../actions/APS/apps.actions'; import { UsersActions } from '../actions/users.actions'; -import { browser } from 'protractor'; describe('Process Filters Test', () => { @@ -75,7 +74,7 @@ describe('Process Filters Test', () => { done(); }); - beforeEach( () => { + beforeEach(() => { navigationBarPage.clickProcessServicesButton(); processServicesPage.checkApsContainer(); processServicesPage.goToApp(app.title); diff --git a/e2e/process-services/processlist_pagination.e2e.ts b/e2e/process-services/processlist_pagination.e2e.ts index e63f573011..f892c25868 100644 --- a/e2e/process-services/processlist_pagination.e2e.ts +++ b/e2e/process-services/processlist_pagination.e2e.ts @@ -51,7 +51,7 @@ describe('Process List - Pagination', function () { let paginationPage = new PaginationPage(); let processFiltersPage = new ProcessFiltersPage(); let processDetailsPage = new ProcessDetailsPage(); - + let deployedTestApp; let processUserModel; let app = resources.Files.SIMPLE_APP_WITH_USER_FORM; let nrOfProcesses = 20; @@ -73,283 +73,322 @@ describe('Process List - Pagination', function () { await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); - let resultApp = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); - - for (let i = 0; i < nrOfProcesses; i++) { - await apps.startProcess(this.alfrescoJsApi, resultApp); - } + deployedTestApp = await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location); loginPage.loginToProcessServicesUsingUserModel(processUserModel); done(); }); - xit('[C261042] Default pagination', function () { - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.checkNoContentMessage(); - paginationPage.checkPaginationIsNotDisplayed(); + describe('Empty processes', function () { - page = 1; - totalPages = 1; - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); - }); - - xit('[C261043] Items per page set to 15', function () { - page = 1; - totalPages = 2; - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.fifteen); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); - - page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses - itemsPerPage.fifteenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); - - page = 1; - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); - }); - - xit('[C261044] Items per page set to 10', function () { - page = 1; - totalPages = 2; - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); - - page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); - - page = 1; - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - }); - - it('[C261047] Items per page set to 20', function () { - page = 1; - totalPages = 1; - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); - - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); - }); - - it('[C261045] 5 Items per page', function () { - page = 1; - totalPages = 4; - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.five); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.five * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); - - page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.five * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); - - page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.five * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); - - page++; - paginationPage.clickOnNextPage(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.five * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); - - page = 1; - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); - }); - - it('[C261049] Page number dropdown', function () { - page = 1; - totalPages = 2; - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.ten); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); - - paginationPage.clickOnPageDropdown(); - expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); - page = 2; - paginationPage.clickOnPageDropdownOption('2'); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsDisabled(); - paginationPage.checkPreviousPageButtonIsEnabled(); - - paginationPage.clickOnPageDropdown(); - expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); - page = 1; - paginationPage.clickOnPageDropdownOption('1'); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); - expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); - expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); - expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * page + ' of ' + nrOfProcesses); - expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); - paginationPage.checkNextPageButtonIsEnabled(); - paginationPage.checkPreviousPageButtonIsDisabled(); - }); - - xit('[C261048] Sorting by Name', function () { - processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); - processFiltersPage.clickRunningFilterButton(); - processFiltersPage.checkFilterIsHighlighted(processFilterRunning); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - paginationPage.selectItemsPerPage(itemsPerPage.twenty); - processDetailsPage.checkProcessTitleIsDisplayed(); - processFiltersPage.waitForTableBody(); - processFiltersPage.sortByName(true); - processFiltersPage.waitForTableBody(); - processFiltersPage.getAllRowsNameColumn().then(function (list) { - expect(JSON.stringify(list) === JSON.stringify(processNames)).toEqual(true); + it('[C261042] Should show empty content message an no pagination when no process are present', function () { + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.checkNoContentMessage(); + paginationPage.checkPaginationIsNotDisplayed(); }); - processFiltersPage.sortByName(false); - processFiltersPage.getAllRowsNameColumn().then(function (list) { - processNames.reverse(); - expect(JSON.stringify(list) === JSON.stringify(processNames)).toEqual(true); + }); + + describe('With processes Pagination', function () { + + beforeAll(async (done) => { + let apps = new AppsActions(); + + this.alfrescoJsApi = new AlfrescoApi({ + provider: 'BPM', + hostBpm: TestConfig.adf.url + }); + + await this.alfrescoJsApi.login(processUserModel.email, processUserModel.password); + + for (let i = 0; i < nrOfProcesses; i++) { + await apps.startProcess(this.alfrescoJsApi, deployedTestApp); + } + + done(); + }); + + it('[C261042] Default pagination', function () { + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + + page = 1; + totalPages = 1; + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); + paginationPage.checkNextPageButtonIsDisabled(); + paginationPage.checkPreviousPageButtonIsDisabled(); + }); + + it('[C261043] Items per page set to 15', function () { + page = 1; + totalPages = 2; + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + paginationPage.selectItemsPerPage(itemsPerPage.fifteen); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * page + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fifteenValue); + paginationPage.checkNextPageButtonIsEnabled(); + paginationPage.checkPreviousPageButtonIsDisabled(); + + page++; + paginationPage.clickOnNextPage(); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfProcesses + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses - itemsPerPage.fifteenValue); + paginationPage.checkNextPageButtonIsDisabled(); + paginationPage.checkPreviousPageButtonIsEnabled(); + + page = 1; + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen); + }); + + it('[C261044] Items per page set to 10', function () { + page = 1; + totalPages = 2; + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + paginationPage.selectItemsPerPage(itemsPerPage.ten); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * page + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + paginationPage.checkNextPageButtonIsEnabled(); + paginationPage.checkPreviousPageButtonIsDisabled(); + + page++; + paginationPage.clickOnNextPage(); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + nrOfProcesses + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + paginationPage.checkNextPageButtonIsDisabled(); + paginationPage.checkPreviousPageButtonIsEnabled(); + + page = 1; + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + }); + + it('[C261047] Items per page set to 20', function () { + page = 1; + totalPages = 1; + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + paginationPage.selectItemsPerPage(itemsPerPage.twenty); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfProcesses + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(nrOfProcesses); + paginationPage.checkNextPageButtonIsDisabled(); + paginationPage.checkPreviousPageButtonIsDisabled(); + + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty); + }); + + it('[C261045] 5 Items per page', function () { + let showing; + page = 1; + totalPages = 4; + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + paginationPage.selectItemsPerPage(itemsPerPage.five); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + + showing = (itemsPerPage.fiveValue * page); + expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + paginationPage.checkNextPageButtonIsEnabled(); + paginationPage.checkPreviousPageButtonIsDisabled(); + + page++; + paginationPage.clickOnNextPage(); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + + showing = (itemsPerPage.fiveValue * page); + expect(paginationPage.getPaginationRange()).toEqual('Showing 6-' + showing + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + paginationPage.checkNextPageButtonIsEnabled(); + paginationPage.checkPreviousPageButtonIsEnabled(); + + page++; + paginationPage.clickOnNextPage(); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + + showing = (itemsPerPage.fiveValue * page); + expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + showing + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + paginationPage.checkNextPageButtonIsEnabled(); + paginationPage.checkPreviousPageButtonIsEnabled(); + + page++; + paginationPage.clickOnNextPage(); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + + showing = (itemsPerPage.fiveValue * page); + expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + showing + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.fiveValue); + paginationPage.checkNextPageButtonIsDisabled(); + paginationPage.checkPreviousPageButtonIsEnabled(); + + page = 1; + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five); + }); + + it('[C261049] Page number dropdown', function () { + let showing; + page = 1; + totalPages = 2; + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + paginationPage.selectItemsPerPage(itemsPerPage.ten); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + + showing = (itemsPerPage.tenValue * page); + expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + paginationPage.checkNextPageButtonIsEnabled(); + paginationPage.checkPreviousPageButtonIsDisabled(); + + paginationPage.clickOnPageDropdown(); + expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); + page = 2; + paginationPage.clickOnPageDropdownOption('2'); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + + showing = (itemsPerPage.tenValue * page); + expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + showing + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + paginationPage.checkNextPageButtonIsDisabled(); + paginationPage.checkPreviousPageButtonIsEnabled(); + + paginationPage.clickOnPageDropdown(); + expect(paginationPage.getPageDropdownOptions()).toEqual(['1', '2']); + page = 1; + paginationPage.clickOnPageDropdownOption('1'); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + expect(paginationPage.getCurrentPage()).toEqual('Page ' + page); + expect(paginationPage.getTotalPages()).toEqual('of ' + totalPages); + expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten); + + showing = (itemsPerPage.tenValue * page); + expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + showing + ' of ' + nrOfProcesses); + expect(processFiltersPage.numberOfProcessRows()).toBe(itemsPerPage.tenValue); + paginationPage.checkNextPageButtonIsEnabled(); + paginationPage.checkPreviousPageButtonIsDisabled(); + }); + + xit('[C261048] Sorting by Name', function () { + processServicesPage.goToProcessServices().goToTaskApp().clickProcessButton(); + processFiltersPage.clickRunningFilterButton(); + processFiltersPage.checkFilterIsHighlighted(processFilterRunning); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + paginationPage.selectItemsPerPage(itemsPerPage.twenty); + processDetailsPage.checkProcessTitleIsDisplayed(); + processFiltersPage.waitForTableBody(); + processFiltersPage.sortByName(true); + processFiltersPage.waitForTableBody(); + processFiltersPage.getAllRowsNameColumn().then(function (list) { + expect(JSON.stringify(list) === JSON.stringify(processNames)).toEqual(true); + }); + processFiltersPage.sortByName(false); + processFiltersPage.getAllRowsNameColumn().then(function (list) { + processNames.reverse(); + expect(JSON.stringify(list) === JSON.stringify(processNames)).toEqual(true); + }); }); }); }); diff --git a/e2e/process-services/start_task_custom_app.e2e.ts b/e2e/process-services/start_task_custom_app.e2e.ts index 96aab13019..e6d5cd773f 100644 --- a/e2e/process-services/start_task_custom_app.e2e.ts +++ b/e2e/process-services/start_task_custom_app.e2e.ts @@ -15,12 +15,13 @@ * limitations under the License. */ +import { by } from 'protractor'; + import LoginPage = require('../pages/adf/loginPage'); import ProcessServicesPage = require('../pages/adf/process_services/processServicesPage'); import TasksPage = require('../pages/adf/process_services/tasksPage'); import { AttachmentListPage } from '../pages/adf/process_services/attachmentListPage'; import CONSTANTS = require('../util/constants'); -import ProcessFiltersPage = require('../pages/adf/process_services/processFiltersPage'); import Task = require('../models/APS/Task'); import Tenant = require('../models/APS/Tenant'); @@ -40,7 +41,6 @@ import { UsersActions } from '../actions/users.actions'; describe('Start Task - Custom App', () => { - let processFiltersPage = new ProcessFiltersPage(); let TASKDATAFORMAT = 'mmm dd yyyy'; let loginPage = new LoginPage(); let processServicesPage = new ProcessServicesPage(); diff --git a/e2e/process-services/start_task_task_app.e2e.ts b/e2e/process-services/start_task_task_app.e2e.ts index 51010d8d4d..d8dad1a543 100644 --- a/e2e/process-services/start_task_task_app.e2e.ts +++ b/e2e/process-services/start_task_task_app.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { by } from 'protractor'; + import LoginPage = require('../pages/adf/loginPage'); import ProcessServicesPage = require('../pages/adf/process_services/processServicesPage'); import TasksPage = require('../pages/adf/process_services/tasksPage'); diff --git a/e2e/process-services/task_attachmentList_actionMenu.e2e.ts b/e2e/process-services/task_attachmentList_actionMenu.e2e.ts index dc804bb2e3..f6dd9fdb28 100644 --- a/e2e/process-services/task_attachmentList_actionMenu.e2e.ts +++ b/e2e/process-services/task_attachmentList_actionMenu.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('../pages/adf/loginPage'); import ProcessServicesPage = require('../pages/adf/process_services/processServicesPage'); import TasksPage = require('../pages/adf/process_services/tasksPage'); @@ -177,7 +179,7 @@ describe('Attachment list action menu for tasks', () => { it('[C260234] Should be able to attache a file on a task on APS and check on ADF', () => { browser.controlFlow().execute(async() => { - let newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({name: "SHARE KNOWLEDGE"}); + let newTask = await this.alfrescoJsApi.activiti.taskApi.createNewTask({name: 'SHARE KNOWLEDGE'}); let newTaskId = newTask.id; diff --git a/e2e/process-services/task_list_pagination.e2e.ts b/e2e/process-services/task_list_pagination.e2e.ts index 9509160002..b6309018a5 100644 --- a/e2e/process-services/task_list_pagination.e2e.ts +++ b/e2e/process-services/task_list_pagination.e2e.ts @@ -49,7 +49,7 @@ describe('Task List Pagination', () => { fifteenValue: 15, twenty: '20', twentyValue: 20, - default: '25' + default: '20' }; beforeAll(async (done) => { diff --git a/e2e/process-services/z-finish.e2e.ts b/e2e/process-services/z-finish.e2e.ts index fc84fa57d3..7a3876a528 100644 --- a/e2e/process-services/z-finish.e2e.ts +++ b/e2e/process-services/z-finish.e2e.ts @@ -45,14 +45,16 @@ describe('Save screenshot at the end', () => { let folder = await alfrescoJsApi.nodes.addNode('-my-', { 'name': 'process-services', - 'relativePath': 'Buiild-screenshot/Screenshot-e2e-' + buildNumber, + 'relativePath': 'Build-screenshot/Screenshot-e2e-' + buildNumber, 'nodeType': 'cm:folder' - }, {}, {}); + }, {}, { + 'overwrite': true + }); for (const fileName of files) { let pathFile = path.join(__dirname, '../../e2e-output/screenshots', fileName); - let file = fs.createReadStream(pathFile); + let file: any = fs.createReadStream(pathFile); await alfrescoJsApi.upload.uploadFile( file, diff --git a/e2e/standalone_task.e2e.ts b/e2e/standalone_task.e2e.ts index 6338554c3f..650e3da9b3 100644 --- a/e2e/standalone_task.e2e.ts +++ b/e2e/standalone_task.e2e.ts @@ -15,6 +15,8 @@ * limitations under the License. */ +import { browser } from 'protractor'; + import LoginPage = require('./pages/adf/loginPage'); import ProcessServicesPage = require('./pages/adf/process_services/processServicesPage'); import TasksPage = require('./pages/adf/process_services/tasksPage'); @@ -23,15 +25,10 @@ import CONSTANTS = require('./util/constants'); import Tenant = require('./models/APS/Tenant'); import Task = require('./models/APS/Task'); -import TaskModel = require('./models/APS/TaskModel'); -import FormModel = require('./models/APS/FormModel'); -import FileModel = require('./models/ACS/fileModel'); import TestConfig = require('./test.config'); import resources = require('./util/resources'); -import dateFormat = require('dateformat'); - import AlfrescoApi = require('alfresco-js-api-node'); import { UsersActions } from './actions/users.actions'; import fs = require('fs'); @@ -47,7 +44,6 @@ describe('Start Task - Task App', () => { let taskPage = new TasksPage(); let tasks = ['Standalone task', 'Completed standalone task', 'Add a form', 'Remove form']; let noFormMessage = 'No forms attached'; - let taskModel; beforeAll(async (done) => { let users = new UsersActions(); @@ -126,7 +122,7 @@ describe('Start Task - Task App', () => { taskPage.usingTasksListPage().checkTaskIsDisplayedInTasksList(tasks[3]); expect(taskPage.usingTaskDetails().getFormName()).toEqual(app.formName); - browser.controlFlow().execute(async() => { + browser.controlFlow().execute(async () => { const listOfTasks = await this.alfrescoJsApi.activiti.taskApi.listTasks(new Task({ sort: 'created-desc' })); await this.alfrescoJsApi.activiti.taskApi.removeForm(listOfTasks.data[0].id); }); diff --git a/e2e/task-audit.e2e.ts b/e2e/task-audit.e2e.ts index 7e8f4326b4..50866bd470 100644 --- a/e2e/task-audit.e2e.ts +++ b/e2e/task-audit.e2e.ts @@ -22,21 +22,14 @@ import TasksPage = require('./pages/adf/process_services/tasksPage'); import CONSTANTS = require('./util/constants'); import Tenant = require('./models/APS/Tenant'); -import Task = require('./models/APS/Task'); -import TaskModel = require('./models/APS/TaskModel'); -import FormModel = require('./models/APS/FormModel'); -import FileModel = require('./models/ACS/fileModel'); import TestConfig = require('./test.config'); import resources = require('./util/resources'); -import dateFormat = require('dateformat'); - import AlfrescoApi = require('alfresco-js-api-node'); import { UsersActions } from './actions/users.actions'; import { AppsActions } from './actions/APS/apps.actions'; -import fs = require('fs'); import path = require('path'); import Util = require('./util/util'); diff --git a/e2e/util/constants.js b/e2e/util/constants.js index 01641d7809..1b6d88c134 100644 --- a/e2e/util/constants.js +++ b/e2e/util/constants.js @@ -20,7 +20,7 @@ var exports = module.exports = {}; /** *Rest API Response statusCodes */ -exports.HTTP_RESPONSE_STATUS_CODE ={ +exports.HTTP_RESPONSE_STATUS_CODE = { FORBIDDEN: 403, OK: 200, BAD_REQUEST: 400, @@ -32,7 +32,7 @@ exports.HTTP_RESPONSE_STATUS_CODE ={ /** *Rest API Response Messages */ -exports.HTTP_RESPONSE_STATUS ={ +exports.HTTP_RESPONSE_STATUS = { OK: { 'CODE': 200, 'MESSAGE': 'OK' @@ -55,8 +55,8 @@ exports.HTTP_RESPONSE_STATUS ={ *Rest API HTTP content types */ exports.HTTP_CONTENT_TYPE = { - JSON : 'application/json', - URLENCODED : 'application/x-www-form-urlencoded', + JSON: 'application/json', + URLENCODED: 'application/x-www-form-urlencoded', IMAGE_PNG: 'image/png', TEXT: 'text/csv' }; @@ -120,3 +120,10 @@ exports.PROCESSSTATUS = { RUNNING: 'Running', COMPLETED: 'Completed' }; + +exports.CS_USER_ROLES = { + CONSUMER: 'SiteConsumer', + COLLABORATOR: 'SiteCollaborator', + CONTRIBUTOR: 'SiteContributor', + MANAGER: 'SiteManager' +}; diff --git a/e2e/util/resources.js b/e2e/util/resources.js index d07564d740..b9533ec1a9 100644 --- a/e2e/util/resources.js +++ b/e2e/util/resources.js @@ -182,11 +182,27 @@ exports.Files = { file_location: "/resources/adf/allFileTypes/a_png_file.png", file_name: "a_png_file.png" }, + PNG_B: { + file_location: "/resources/adf/allFileTypes/b_png_file.png", + file_name: "b_png_file.png" + }, + PNG_C: { + file_location: "/resources/adf/allFileTypes/c_png_file.png", + file_name: "c_png_file.png" + }, + PNG_D: { + file_location: "/resources/adf/allFileTypes/d_png_file.png", + file_name: "d_png_file.png" + }, PPT: { file_location: "/resources/adf/allFileTypes/a_ppt_file.pptx", file_name: "a_ppt_file.pptx", first_page_text: "PPTX test file" }, + PPT_B: { + file_location: "/resources/adf/allFileTypes/b_ppt_file.pptx", + file_name: "b_ppt_file.pptx" + }, TEST: { file_location: "/resources/adf/allFileTypes/testExtension.test", file_name: "testExtension.test" diff --git a/lib/content-services/dialogs/confirm.dialog.ts b/lib/content-services/dialogs/confirm.dialog.ts index 03cf894ed6..7c476592ae 100644 --- a/lib/content-services/dialogs/confirm.dialog.ts +++ b/lib/content-services/dialogs/confirm.dialog.ts @@ -27,8 +27,8 @@ import { MAT_DIALOG_DATA } from '@angular/material'; - - + + `, styles: [` diff --git a/lib/content-services/upload/components/file-uploading-dialog.component.html b/lib/content-services/upload/components/file-uploading-dialog.component.html index 75ecf8af08..2978cbbc91 100644 --- a/lib/content-services/upload/components/file-uploading-dialog.component.html +++ b/lib/content-services/upload/components/file-uploading-dialog.component.html @@ -1,5 +1,6 @@
@@ -45,8 +46,7 @@ -
{{ (totalErrors > 1 @@ -56,8 +56,7 @@ }}
-
-
+
-
+
-
diff --git a/lib/content-services/version-manager/version-list.component.spec.ts b/lib/content-services/version-manager/version-list.component.spec.ts index ee22e63978..878ae37225 100644 --- a/lib/content-services/version-manager/version-list.component.spec.ts +++ b/lib/content-services/version-manager/version-list.component.spec.ts @@ -33,6 +33,15 @@ describe('VersionListComponent', () => { const nodeId = 'test-id'; const versionId = '1.0'; + const versionTest = [ + { + entry: { name: 'test-file-name', id: '1.0', versionComment: 'test-version-comment' } + }, + { + entry: { name: 'test-file-name-two', id: '1.0', versionComment: 'test-version-comment' } + } + ]; + setupTestBed({ imports: [ CoreModule.forRoot(), @@ -64,6 +73,9 @@ describe('VersionListComponent', () => { }); it('should raise confirmation dialog on delete', () => { + fixture.detectChanges(); + component.versions = versionTest; + spyOn(dialog, 'open').and.returnValue({ afterClosed() { return Observable.of(false); @@ -76,7 +88,8 @@ describe('VersionListComponent', () => { }); it('should delete the version if user confirms', () => { - spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and.returnValue(Promise.resolve({ list: { entries: [] } })); + fixture.detectChanges(); + component.versions = versionTest; spyOn(dialog, 'open').and.returnValue({ afterClosed() { return Observable.of(true); @@ -92,6 +105,8 @@ describe('VersionListComponent', () => { }); it('should not delete version if user rejects', () => { + component.versions = versionTest; + spyOn(dialog, 'open').and.returnValue({ afterClosed() { return Observable.of(false); @@ -106,21 +121,21 @@ describe('VersionListComponent', () => { expect(alfrescoApiService.versionsApi.deleteVersion).not.toHaveBeenCalled(); }); - it('should reload and raise version-deleted DOM event', (done) => { + it('should reload and raise deleted event', (done) => { spyOn(component, 'loadVersionHistory').and.stub(); - fixture.nativeElement.addEventListener('version-deleted', () => { + component.deleted.subscribe(() => { expect(component.loadVersionHistory).toHaveBeenCalled(); done(); }); fixture.detectChanges(); - component.onVersionDeleted(); + component.onVersionDeleted({}); }); describe('Version history fetching', () => { it('should use loading bar', () => { spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and - .callFake(() => Promise.resolve({ list: { entries: [] } })); + .callFake(() => Promise.resolve({ list: { entries: versionTest } })); let loadingProgressBar = fixture.debugElement.query(By.css('[data-automation-id="version-history-loading-bar"]')); expect(loadingProgressBar).toBeNull(); @@ -134,7 +149,7 @@ describe('VersionListComponent', () => { it('should load the versions for a given id', () => { spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and - .callFake(() => Promise.resolve({ list: { entries: [] } })); + .callFake(() => Promise.resolve({ list: { entries: versionTest } })); component.ngOnChanges(); fixture.detectChanges(); @@ -241,12 +256,12 @@ describe('VersionListComponent', () => { it('should reload and raise version-restored DOM event', (done) => { spyOn(component, 'loadVersionHistory').and.stub(); - fixture.nativeElement.addEventListener('version-restored', () => { + component.restored.subscribe(() => { expect(component.loadVersionHistory).toHaveBeenCalled(); done(); }); fixture.detectChanges(); - component.onVersionRestored(); + component.onVersionRestored({}); }); it('should restore version only when restore allowed', () => { @@ -258,8 +273,8 @@ describe('VersionListComponent', () => { it('should load the versions for a given id', () => { fixture.detectChanges(); - spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and - .callFake(() => Promise.resolve({ list: { entries: [] } })); + component.versions = versionTest; + const spyOnRevertVersion = spyOn(alfrescoApiService.versionsApi, 'revertVersion').and .callFake(() => Promise.resolve( { entry: { name: 'test-file-name', id: '1.0', versionComment: 'test-version-comment' } })); @@ -271,8 +286,10 @@ describe('VersionListComponent', () => { it('should reload the version list after a version restore', (done) => { fixture.detectChanges(); + component.versions = versionTest; + const spyOnListVersionHistory = spyOn(alfrescoApiService.versionsApi, 'listVersionHistory').and - .callFake(() => Promise.resolve({ list: { entries: [] } })); + .callFake(() => Promise.resolve({ list: { entries: versionTest } })); spyOn(alfrescoApiService.versionsApi, 'revertVersion').and.callFake(() => Promise.resolve()); component.restore(versionId); @@ -307,12 +324,14 @@ describe('VersionListComponent', () => { }); it('should show Actions if showActions is true', (done) => { + component.versions = versionTest; + component.showActions = true; fixture.detectChanges(); fixture.whenStable().then(() => { fixture.detectChanges(); - let menuButton = fixture.debugElement.query(By.css('#adf-version-list-action-menu-button-0')); + let menuButton = fixture.nativeElement.querySelector('[id="adf-version-list-action-menu-button-1.0"]'); expect(menuButton).not.toBeNull(); done(); @@ -325,7 +344,7 @@ describe('VersionListComponent', () => { fixture.whenStable().then(() => { fixture.detectChanges(); - let menuButton = fixture.debugElement.query(By.css('#adf-version-list-action-menu-button-0')); + let menuButton = fixture.nativeElement.querySelector('[id="adf-version-list-action-menu-button-1.0"]'); expect(menuButton).toBeNull(); done(); @@ -342,6 +361,9 @@ describe('VersionListComponent', () => { return Promise.resolve({ list: { entries: [ + { + entry: { name: 'test-file-two', id: '1.1', versionComment: 'test-version-comment' } + }, { entry: { name: 'test-file-name', id: '1.0', versionComment: 'test-version-comment' } } @@ -356,12 +378,12 @@ describe('VersionListComponent', () => { it('should disable delete action if is not allowed', (done) => { fixture.whenStable().then(() => { fixture.detectChanges(); - let menuButton = fixture.debugElement.query(By.css('#adf-version-list-action-menu-button-0')); - menuButton.nativeElement.click(); + let menuButton = fixture.nativeElement.querySelector('[id="adf-version-list-action-menu-button-1.1"]'); + menuButton.click(); - let deleteButton = fixture.debugElement.query(By.css('#adf-version-list-action-delete-0')); + let deleteButton: any = document.querySelector('[id="adf-version-list-action-delete-1.1"]'); - expect(deleteButton.nativeElement.disabled).toBe(true); + expect(deleteButton.disabled).toBe(true); done(); }); }); @@ -369,12 +391,12 @@ describe('VersionListComponent', () => { it('should disable restore action if is not allowed', (done) => { fixture.whenStable().then(() => { fixture.detectChanges(); - let menuButton = fixture.debugElement.query(By.css('#adf-version-list-action-menu-button-0')); - menuButton.nativeElement.click(); + let menuButton = fixture.nativeElement.querySelector('[id="adf-version-list-action-menu-button-1.1"]'); + menuButton.click(); - let restoreButton = fixture.debugElement.query(By.css('#adf-version-list-action-restore-0')); + let restoreButton: any = document.querySelector('[id="adf-version-list-action-restore-1.1"]'); - expect(restoreButton.nativeElement.disabled).toBe(true); + expect(restoreButton.disabled).toBe(true); done(); }); }); @@ -389,6 +411,9 @@ describe('VersionListComponent', () => { return Promise.resolve({ list: { entries: [ + { + entry: { name: 'test-file-name', id: '1.1', versionComment: 'test-version-comment' } + }, { entry: { name: 'test-file-name', id: '1.0', versionComment: 'test-version-comment' } } @@ -403,12 +428,12 @@ describe('VersionListComponent', () => { it('should enable delete action if is allowed', (done) => { fixture.whenStable().then(() => { fixture.detectChanges(); - let menuButton = fixture.debugElement.query(By.css('#adf-version-list-action-menu-button-0')); - menuButton.nativeElement.click(); + let menuButton = fixture.nativeElement.querySelector('[id="adf-version-list-action-menu-button-1.1"]'); + menuButton.click(); - let deleteButton = fixture.debugElement.query(By.css('#adf-version-list-action-delete-0')); + let deleteButton: any = document.querySelector('[id="adf-version-list-action-delete-1.1"]'); - expect(deleteButton.nativeElement.disabled).toBe(false); + expect(deleteButton.disabled).toBe(false); done(); }); }); @@ -416,12 +441,12 @@ describe('VersionListComponent', () => { it('should enable restore action if is allowed', (done) => { fixture.whenStable().then(() => { fixture.detectChanges(); - let menuButton = fixture.debugElement.query(By.css('#adf-version-list-action-menu-button-0')); - menuButton.nativeElement.click(); + let menuButton = fixture.nativeElement.querySelector('[id="adf-version-list-action-menu-button-1.1"]'); + menuButton.click(); - let restoreButton = fixture.debugElement.query(By.css('#adf-version-list-action-restore-0')); + let restoreButton: any = document.querySelector('[id="adf-version-list-action-restore-1.1"]'); - expect(restoreButton.nativeElement.disabled).toBe(false); + expect(restoreButton.disabled).toBe(false); done(); }); }); diff --git a/lib/content-services/version-manager/version-list.component.ts b/lib/content-services/version-manager/version-list.component.ts index 46f88489f4..752ab1d525 100644 --- a/lib/content-services/version-manager/version-list.component.ts +++ b/lib/content-services/version-manager/version-list.component.ts @@ -16,7 +16,7 @@ */ import { AlfrescoApiService, ContentService } from '@alfresco/adf-core'; -import { Component, Input, OnChanges, ViewEncapsulation, ElementRef } from '@angular/core'; +import { Component, Input, OnChanges, ViewEncapsulation, EventEmitter, Output } from '@angular/core'; import { VersionsApi, MinimalNodeEntryEntity, VersionEntry } from 'alfresco-js-api'; import { MatDialog } from '@angular/material'; import { ConfirmDialogComponent } from '../dialogs/confirm.dialog'; @@ -56,10 +56,17 @@ export class VersionListComponent implements OnChanges { @Input() showActions = true; + /** Emitted when a version is restored */ + @Output() + restored: EventEmitter = new EventEmitter(); + + /** Emitted when a version is deleted */ + @Output() + deleted: EventEmitter = new EventEmitter(); + constructor(private alfrescoApi: AlfrescoApiService, private contentService: ContentService, - private dialog: MatDialog, - private el: ElementRef) { + private dialog: MatDialog) { this.versionsApi = this.alfrescoApi.versionsApi; } @@ -68,18 +75,18 @@ export class VersionListComponent implements OnChanges { } canUpdate(): boolean { - return this.contentService.hasPermission(this.node, 'update'); + return this.contentService.hasPermission(this.node, 'update') && this.versions.length > 1; } canDelete(): boolean { - return this.contentService.hasPermission(this.node, 'delete'); + return this.contentService.hasPermission(this.node, 'delete') && this.versions.length > 1; } restore(versionId) { if (this.canUpdate()) { this.versionsApi .revertVersion(this.node.id, versionId, { majorVersion: true, comment: '' }) - .then(() => this.onVersionRestored()); + .then(() => this.onVersionRestored(this.node)); } } @@ -114,24 +121,20 @@ export class VersionListComponent implements OnChanges { if (result === true) { this.alfrescoApi.versionsApi .deleteVersion(this.node.id, versionId) - .then(() => this.onVersionDeleted()); + .then(() => this.onVersionDeleted(this.node)); } }); } } - onVersionDeleted() { + onVersionDeleted(node: any) { this.loadVersionHistory(); - - const event = new CustomEvent('version-deleted', { bubbles: true }); - this.el.nativeElement.dispatchEvent(event); + this.deleted.emit(node); } - onVersionRestored() { + onVersionRestored(node: any) { this.loadVersionHistory(); - - const event = new CustomEvent('version-restored', { bubbles: true }); - this.el.nativeElement.dispatchEvent(event); + this.restored.emit(node); } private getVersionContentUrl(nodeId: string, versionId: string, attachment?: boolean) { diff --git a/lib/content-services/version-manager/version-manager.component.html b/lib/content-services/version-manager/version-manager.component.html index d84f1f84ff..a0c541430a 100644 --- a/lib/content-services/version-manager/version-manager.component.html +++ b/lib/content-services/version-manager/version-manager.component.html @@ -1,6 +1,6 @@
-
- +
+
@@ -27,11 +27,14 @@
+ + [showComments]="showComments" + (deleted)="refresh($event)" + (restored)="refresh($event)">
diff --git a/lib/content-services/version-manager/version-manager.component.scss b/lib/content-services/version-manager/version-manager.component.scss index 18798e68f8..e74ec2c162 100644 --- a/lib/content-services/version-manager/version-manager.component.scss +++ b/lib/content-services/version-manager/version-manager.component.scss @@ -14,7 +14,7 @@ float: left; position: relative; - visibility: hidden; + display: hidden; } .adf-new-version-container { diff --git a/lib/content-services/version-manager/version-manager.component.spec.ts b/lib/content-services/version-manager/version-manager.component.spec.ts index 48edd9122e..7701dcf99f 100644 --- a/lib/content-services/version-manager/version-manager.component.spec.ts +++ b/lib/content-services/version-manager/version-manager.component.spec.ts @@ -102,7 +102,7 @@ describe('VersionManagerComponent', () => { const emittedData = { value: { entry: node }}; component.uploadSuccess.subscribe(event => { - expect(event).toBe(emittedData); + expect(event).toBe(node); }); component.onUploadSuccess(emittedData); })); diff --git a/lib/content-services/version-manager/version-manager.component.ts b/lib/content-services/version-manager/version-manager.component.ts index 4739c718e3..633ddb5f26 100644 --- a/lib/content-services/version-manager/version-manager.component.ts +++ b/lib/content-services/version-manager/version-manager.component.ts @@ -57,11 +57,11 @@ export class VersionManagerComponent { /** Emitted when a file is uploaded successfully. */ @Output() - uploadSuccess = new EventEmitter(); + uploadSuccess: EventEmitter = new EventEmitter(); /** Emitted when an error occurs during upload. */ @Output() - uploadError = new EventEmitter(); + uploadError: EventEmitter = new EventEmitter(); @ViewChild('versionList') versionListComponent: VersionListComponent; @@ -73,13 +73,24 @@ export class VersionManagerComponent { private alfrescoApiService: AlfrescoApiService) { } - onUploadSuccess(event) { + refresh(node: MinimalNodeEntryEntity) { + this.alfrescoApiService.nodeUpdated.next(node); + this.versionListComponent.loadVersionHistory(); + this.uploadSuccess.emit(node); + this.uploadState = 'close'; + } + + onUploadSuccess(event: any) { this.alfrescoApiService.nodeUpdated.next(event.value.entry); this.versionListComponent.loadVersionHistory(); - this.uploadSuccess.emit(event); + this.uploadSuccess.emit(event.value.entry); this.uploadState = 'close'; } + onUploadError(event: any) { + this.uploadError.emit(event); + } + onUploadCancel() { this.uploadState = 'close'; } diff --git a/lib/content-services/version-manager/version-upload.component.html b/lib/content-services/version-manager/version-upload.component.html index 5b966eb995..ccda47b6cd 100644 --- a/lib/content-services/version-manager/version-upload.component.html +++ b/lib/content-services/version-manager/version-upload.component.html @@ -1,16 +1,16 @@
- {{ + {{ 'ADF_VERSION_LIST.ACTIONS.UPLOAD.MINOR' | translate }} - {{ + {{ 'ADF_VERSION_LIST.ACTIONS.UPLOAD.MAJOR' | translate }} - @@ -29,7 +29,7 @@ (success)="success.emit($event)" (error)="error.emit($event)"> -
diff --git a/lib/core/app-config/app-config.service.ts b/lib/core/app-config/app-config.service.ts index fc1088720d..c937b70656 100644 --- a/lib/core/app-config/app-config.service.ts +++ b/lib/core/app-config/app-config.service.ts @@ -18,7 +18,7 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { ObjectUtils } from '../utils/object-utils'; -import { BehaviorSubject } from 'rxjs/BehaviorSubject'; +import { Subject } from 'rxjs/Subject'; import { Observable } from 'rxjs/Observable'; export enum AppConfigValues { @@ -49,11 +49,11 @@ export class AppConfigService { alfrescoRepositoryName: 'alfresco-1' }; - private onLoadSubject: BehaviorSubject; + private onLoadSubject: Subject; onLoad: Observable; constructor(private http: HttpClient) { - this.onLoadSubject = new BehaviorSubject(this.config); + this.onLoadSubject = new Subject(); this.onLoad = this.onLoadSubject.asObservable(); } diff --git a/lib/core/context-menu/context-menu-holder.component.ts b/lib/core/context-menu/context-menu-holder.component.ts index e0eb824e52..4f83009f79 100644 --- a/lib/core/context-menu/context-menu-holder.component.ts +++ b/lib/core/context-menu/context-menu-holder.component.ts @@ -21,6 +21,7 @@ import { Component, HostListener, Input, OnDestroy, OnInit, Renderer2, ViewChild import { MatMenuTrigger } from '@angular/material'; import { Subscription } from 'rxjs/Subscription'; import { ContextMenuService } from './context-menu.service'; + /** * @deprecated: context-menu-holder is deprecated, use adf-context-menu-holder instead. */ @@ -31,9 +32,9 @@ import { ContextMenuService } from './context-menu.service'; @@ -44,7 +45,7 @@ import { ContextMenuService } from './context-menu.service'; export class ContextMenuHolderComponent implements OnInit, OnDestroy { links = []; - private mouseLocation: { left: number, top: number } = {left: 0, top: 0}; + private mouseLocation: { left: number, top: number } = { left: 0, top: 0 }; private menuElement = null; private subscriptions: Subscription[] = []; private contextMenuListenerFn: () => void; @@ -70,11 +71,12 @@ export class ContextMenuHolderComponent implements OnInit, OnDestroy { } constructor( - private viewport: ViewportRuler, - private overlayContainer: OverlayContainer, - private contextMenuService: ContextMenuService, - private renderer: Renderer2 - ) {} + private viewport: ViewportRuler, + private overlayContainer: OverlayContainer, + private contextMenuService: ContextMenuService, + private renderer: Renderer2 + ) { + } ngOnInit() { this.subscriptions.push( @@ -149,20 +151,22 @@ export class ContextMenuHolderComponent implements OnInit, OnDestroy { private updatePosition() { setTimeout(() => { - if (this.mdMenuElement.clientWidth + this.mouseLocation.left > this.viewport.getViewportRect().width) { - this.menuTrigger.menu.xPosition = 'before'; - this.mdMenuElement.parentElement.style.left = this.mouseLocation.left - this.mdMenuElement.clientWidth + 'px'; - } else { - this.menuTrigger.menu.xPosition = 'after'; - this.mdMenuElement.parentElement.style.left = this.locationCss().left; - } + if (this.mdMenuElement.parentElement) { + if (this.mdMenuElement.clientWidth + this.mouseLocation.left > this.viewport.getViewportRect().width) { + this.menuTrigger.menu.xPosition = 'before'; + this.mdMenuElement.parentElement.style.left = this.mouseLocation.left - this.mdMenuElement.clientWidth + 'px'; + } else { + this.menuTrigger.menu.xPosition = 'after'; + this.mdMenuElement.parentElement.style.left = this.locationCss().left; + } - if (this.mdMenuElement.clientHeight + this.mouseLocation.top > this.viewport.getViewportRect().height) { - this.menuTrigger.menu.yPosition = 'above'; - this.mdMenuElement.parentElement.style.top = this.mouseLocation.top - this.mdMenuElement.clientHeight + 'px'; - } else { - this.menuTrigger.menu.yPosition = 'below'; - this.mdMenuElement.parentElement.style.top = this.locationCss().top; + if (this.mdMenuElement.clientHeight + this.mouseLocation.top > this.viewport.getViewportRect().height) { + this.menuTrigger.menu.yPosition = 'above'; + this.mdMenuElement.parentElement.style.top = this.mouseLocation.top - this.mdMenuElement.clientHeight + 'px'; + } else { + this.menuTrigger.menu.yPosition = 'below'; + this.mdMenuElement.parentElement.style.top = this.locationCss().top; + } } }, 0); } diff --git a/lib/core/pagination/pagination.component.spec.ts b/lib/core/pagination/pagination.component.spec.ts index 100b2a167c..00082ac519 100644 --- a/lib/core/pagination/pagination.component.spec.ts +++ b/lib/core/pagination/pagination.component.spec.ts @@ -232,6 +232,8 @@ describe('PaginationComponent', () => { describe('Without pagination input', () => { it('has defaults', () => { + component.ngOnInit(); + const { current, lastPage, isFirstPage, isLastPage, next, previous, range, pages diff --git a/lib/core/pagination/pagination.component.ts b/lib/core/pagination/pagination.component.ts index d6486e6eb6..cb3f963c98 100644 --- a/lib/core/pagination/pagination.component.ts +++ b/lib/core/pagination/pagination.component.ts @@ -15,14 +15,17 @@ * limitations under the License. */ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, - ChangeDetectorRef, OnDestroy, HostBinding } from '@angular/core'; +import { + ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, + ChangeDetectorRef, OnDestroy, HostBinding +} from '@angular/core'; import { Pagination } from 'alfresco-js-api'; import { PaginatedComponent } from './paginated-component.interface'; import { PaginationComponentInterface } from './pagination-component.interface'; import { Subscription } from 'rxjs/Subscription'; import { PaginationModel } from '../models/pagination.model'; +import { UserPreferencesService } from '../services/user-preferences.service'; @Component({ selector: 'adf-pagination', @@ -53,11 +56,11 @@ export class PaginationComponent implements OnInit, OnDestroy, PaginationCompone /** An array of page sizes. */ @Input() - supportedPageSizes: number[] = [5, 25, 50, 100]; + supportedPageSizes: number[]; /** Pagination object. */ @Input() - pagination: PaginationModel = PaginationComponent.DEFAULT_PAGINATION; + pagination: PaginationModel; /** Emitted when pagination changes in any way. */ @Output() @@ -81,10 +84,20 @@ export class PaginationComponent implements OnInit, OnDestroy, PaginationCompone private paginationSubscription: Subscription; - constructor(private cdr: ChangeDetectorRef) { + constructor(private cdr: ChangeDetectorRef, private userPreferencesService: UserPreferencesService) { } ngOnInit() { + if (!this.pagination) { + let defaultPagination = PaginationComponent.DEFAULT_PAGINATION; + defaultPagination.maxItems = this.userPreferencesService.paginationSize; + this.pagination = defaultPagination; + } + + if (!this.supportedPageSizes) { + this.supportedPageSizes = this.userPreferencesService.getDefaultPageSizes(); + } + if (this.target) { this.paginationSubscription = this.target.pagination.subscribe((pagination: PaginationModel) => { diff --git a/lib/core/services/translation.service.ts b/lib/core/services/translation.service.ts index ac39c8e15a..195a247b87 100644 --- a/lib/core/services/translation.service.ts +++ b/lib/core/services/translation.service.ts @@ -56,7 +56,7 @@ export class TranslationService { } } - userPreference.locale$.subscribe( (locale) => { + userPreference.locale$.subscribe((locale) => { this.userLang = locale; this.use(this.userLang); }); @@ -70,22 +70,18 @@ export class TranslationService { addTranslationFolder(name: string = '', path: string = '') { if (!this.customLoader.providerRegistered(name)) { this.customLoader.registerProvider(name, path); - if (this.userLang !== this.defaultLang) { - this.translate.getTranslation(this.defaultLang).subscribe(() => { - this.translate.getTranslation(this.userLang).subscribe( - () => { - this.translate.use(this.userLang); - this.onTranslationChanged(this.userLang); - } - ); - }); - } else { - this.translate.getTranslation(this.userLang).subscribe( - () => { + if (this.userLang) { + this.translate.getTranslation(this.userLang).subscribe(() => { this.translate.use(this.userLang); this.onTranslationChanged(this.userLang); } ); + } else { + this.translate.getTranslation(this.defaultLang).subscribe(() => { + this.translate.use(this.defaultLang); + this.onTranslationChanged(this.defaultLang); + } + ); } } } @@ -117,7 +113,7 @@ export class TranslationService { * @param interpolateParams String(s) to be interpolated into the main message * @returns Translated text */ - get(key: string|Array, interpolateParams?: Object): Observable { + get(key: string | Array, interpolateParams?: Object): Observable { return this.translate.get(key, interpolateParams); } diff --git a/lib/core/services/user-preferences.service.ts b/lib/core/services/user-preferences.service.ts index 2a59d36fbc..bded94d40a 100644 --- a/lib/core/services/user-preferences.service.ts +++ b/lib/core/services/user-preferences.service.ts @@ -53,7 +53,7 @@ export class UserPreferencesService { private appConfig: AppConfigService, private storage: StorageService) { this.appConfig.onLoad.subscribe(this.initUserPreferenceStatus.bind(this)); - this.localeSubject = new BehaviorSubject(this.userPreferenceStatus[UserPreferenceValues.Locale]); + this.localeSubject = new BehaviorSubject(this.get(UserPreferenceValues.Locale, this.getDefaultLocale())); this.locale$ = this.localeSubject.asObservable(); this.onChangeSubject = new BehaviorSubject(this.userPreferenceStatus); this.onChange = this.onChangeSubject.asObservable(); @@ -61,8 +61,7 @@ export class UserPreferencesService { private initUserPreferenceStatus() { this.userPreferenceStatus[UserPreferenceValues.Locale] = this.locale || this.getDefaultLocale(); - this.userPreferenceStatus[UserPreferenceValues.PaginationSize] = this.paginationSize ? - this.paginationSize : this.appConfig.get('pagination.size', this.defaults.paginationSize); + this.userPreferenceStatus[UserPreferenceValues.PaginationSize] = this.appConfig.get('pagination.size', this.defaults.paginationSize); this.userPreferenceStatus[UserPreferenceValues.SupportedPageSizes] = this.appConfig.get('pagination.supportedPageSizes', this.defaults.supportedPageSizes); } @@ -150,27 +149,27 @@ export class UserPreferencesService { * @returns Array of page size values */ getDefaultPageSizes(): number[] { - return this.defaults.supportedPageSizes; + return this.userPreferenceStatus[UserPreferenceValues.SupportedPageSizes]; } /** Pagination size. */ set paginationSize(value: number) { - this.set('PAGINATION_SIZE', value); + this.set(UserPreferenceValues.PaginationSize, value); } get paginationSize(): number { - return Number(this.get('PAGINATION_SIZE')) || this.defaults.paginationSize; + return Number(this.get(UserPreferenceValues.PaginationSize, this.userPreferenceStatus[UserPreferenceValues.PaginationSize])) || this.defaults.paginationSize; } /** Current locale setting. */ get locale(): string { - const locale = this.get('LOCALE'); + const locale = this.get(UserPreferenceValues.Locale, this.userPreferenceStatus[UserPreferenceValues.Locale]); return locale; } set locale(value: string) { this.localeSubject.next(value); - this.set('LOCALE', value); + this.set(UserPreferenceValues.Locale, value); } /** diff --git a/lib/core/templates/error-content/error-content.component.html b/lib/core/templates/error-content/error-content.component.html index cf113b19f7..a10a8f37cb 100644 --- a/lib/core/templates/error-content/error-content.component.html +++ b/lib/core/templates/error-content/error-content.component.html @@ -10,12 +10,12 @@ {{ 'ERROR_CONTENT.' + errorCode + '.DESCRIPTION' | translate }}

diff --git a/lib/core/utils/momentDateAdapter.ts b/lib/core/utils/momentDateAdapter.ts index 5ef710b927..b081fcbe98 100644 --- a/lib/core/utils/momentDateAdapter.ts +++ b/lib/core/utils/momentDateAdapter.ts @@ -89,7 +89,8 @@ export class MomentDateAdapter extends DateAdapter { } clone(date: Moment): Moment { - return date.clone().locale(this.locale); + let locale = this.locale || 'en'; + return date.clone().locale(locale); } createDate(year: number, month: number, date: number): Moment { @@ -97,16 +98,18 @@ export class MomentDateAdapter extends DateAdapter { } today(): Moment { - return moment().locale(this.locale); + let locale = this.locale || 'en'; + return moment().locale(locale); } parse(value: any, parseFormat: any): Moment { + let locale = this.locale || 'en'; if (value && typeof value === 'string') { - let m = moment(value, parseFormat, this.locale, true); + let m = moment(value, parseFormat, locale, true); if (!m.isValid()) { // use strict parsing because Moment's parser is very forgiving, and this can lead to undesired behavior. - m = moment(value, this.overrideDisplyaFormat, this.locale, true); + m = moment(value, this.overrideDisplyaFormat, locale, true); } if (m.isValid()) { // if user omits year, it defaults to 2001, so check for that issue. @@ -123,7 +126,7 @@ export class MomentDateAdapter extends DateAdapter { return m; } - return value ? moment(value).locale(this.locale) : null; + return value ? moment(value).locale(locale) : null; } format(date: Moment, displayFormat: any): string { @@ -204,7 +207,8 @@ export class MomentDateAdapter extends DateAdapter { } fromIso8601(iso8601String: string): Moment | null { - let d = moment(iso8601String, moment.ISO_8601).locale(this.locale); + let locale = this.locale || 'en'; + let d = moment(iso8601String, moment.ISO_8601).locale(locale); return this.isValid(d) ? d : null; } diff --git a/lib/process-services/process-list/components/process-list.component.ts b/lib/process-services/process-list/components/process-list.component.ts index 5ad9626edf..db46c6b39a 100644 --- a/lib/process-services/process-list/components/process-list.component.ts +++ b/lib/process-services/process-list/components/process-list.component.ts @@ -335,8 +335,4 @@ export class ProcessInstanceListComponent extends DataTableSchema implements On currentPage(skipCount: number, maxItems: number): number { return (skipCount && maxItems) ? Math.floor(skipCount / maxItems) : 0; } - - get supportedPageSizes(): number[] { - return this.userPreferences.getDefaultPageSizes(); - } } diff --git a/lib/process-services/task-list/components/task-list.component.ts b/lib/process-services/task-list/components/task-list.component.ts index 846460dff4..77d96d111e 100644 --- a/lib/process-services/task-list/components/task-list.component.ts +++ b/lib/process-services/task-list/components/task-list.component.ts @@ -377,8 +377,4 @@ export class TaskListComponent extends DataTableSchema implements OnChanges, Aft currentPage(skipCount: number, maxItems: number): number { return (skipCount && maxItems) ? Math.floor(skipCount / maxItems) : 0; } - - get supportedPageSizes(): number[] { - return this.userPreferences.getDefaultPageSizes(); - } } diff --git a/tsconfig.json b/tsconfig.json index f2b3aab6c8..daf9f9eb64 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,7 +21,6 @@ ] }, "exclude": [ - "e2e", "lib/config", "integration", "scripts",
+ (error)="onUploadError($event)">