diff --git a/e2e/content-services/comments/comment_component.e2e.ts b/e2e/content-services/comments/comment_component.e2e.ts new file mode 100644 index 0000000000..b9779bb489 --- /dev/null +++ b/e2e/content-services/comments/comment_component.e2e.ts @@ -0,0 +1,158 @@ +/*! + * @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 ContentServicesPage = require('../../pages/adf/contentServicesPage'); +import ViewerPage = require('../../pages/adf/viewerPage'); +import { CommentsPage } from '../../pages/adf/commentsPage'; + +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'; + +describe('Comment Component', () => { + + let loginPage = new LoginPage(); + let contentServicesPage = new ContentServicesPage(); + let viewerPage = new ViewerPage(); + let commentsPage = new CommentsPage(); + + let acsUser = new AcsUserModel(); + + let pngFileModel = new FileModel({ + 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, + 'location': resources.Files.ADF_DOCUMENTS.PNG.file_location + }); + + let nodeId, userFullName; + + let comments = { + first: 'This is a comment', + multiline: 'This is a comment\n' + 'with a new line', + second: 'This is another comment', + codeType: `
+ First name:
+ Last name:
+ +
` + }; + + 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); + + done(); + }); + + 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-'); + + nodeId = pngUploadedFile.entry.id; + + userFullName = pngUploadedFile.entry.createdByUser.displayName; + + loginPage.loginToContentServicesUsingUserModel(acsUser); + + contentServicesPage.navigateToDocumentList(); + + done(); + }); + + afterEach(async (done) => { + + 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); + }); + + done(); + }); + + it('[C276948] Should be able to add a comment on a file', () => { + viewerPage.viewFile(pngFileModel.name); + viewerPage.clickInfoButton(); + viewerPage.checkInfoSideBarIsDisplayed(); + viewerPage.clickOnCommentsTab(); + + commentsPage.addComment(comments.first); + commentsPage.checkUserIconIsDisplayed(0); + + expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); + expect(commentsPage.getMessage(0)).toEqual(comments.first); + expect(commentsPage.getUserName(0)).toEqual(userFullName); + expect(commentsPage.getTime(0)).toEqual('a few seconds ago'); + }); + + it('[C280021] Should be able to add a multiline comment on a file', () => { + viewerPage.viewFile(pngFileModel.name); + viewerPage.clickInfoButton(); + viewerPage.checkInfoSideBarIsDisplayed(); + viewerPage.clickOnCommentsTab(); + + commentsPage.addComment(comments.multiline); + commentsPage.checkUserIconIsDisplayed(0); + + expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); + expect(commentsPage.getMessage(0)).toEqual(comments.multiline); + expect(commentsPage.getUserName(0)).toEqual(userFullName); + expect(commentsPage.getTime(0)).toEqual('a few seconds ago'); + + commentsPage.addComment(comments.second); + commentsPage.checkUserIconIsDisplayed(0); + + expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (2)'); + expect(commentsPage.getMessage(0)).toEqual(comments.second); + expect(commentsPage.getUserName(0)).toEqual(userFullName); + expect(commentsPage.getTime(0)).toEqual('a few seconds ago'); + }); + + it('[C280022] Should not be able to add an HTML or other code input into the comment input filed', () => { + viewerPage.viewFile(pngFileModel.name); + viewerPage.clickInfoButton(); + viewerPage.checkInfoSideBarIsDisplayed(); + viewerPage.clickOnCommentsTab(); + + commentsPage.addComment(comments.codeType); + commentsPage.checkUserIconIsDisplayed(0); + + expect(commentsPage.getTotalNumberOfComments()).toEqual('Comments (1)'); + expect(commentsPage.getMessage(0)).toEqual('First name: Last name:'); + expect(commentsPage.getUserName(0)).toEqual(userFullName); + expect(commentsPage.getTime(0)).toEqual('a few seconds ago'); + }); +}); diff --git a/e2e/pages/adf/commentsPage.ts b/e2e/pages/adf/commentsPage.ts index 2ec33eb616..e12ff6e874 100644 --- a/e2e/pages/adf/commentsPage.ts +++ b/e2e/pages/adf/commentsPage.ts @@ -26,33 +26,41 @@ export class CommentsPage { commentMessage = element.all(by.id('comment-message')); commentTime = element.all(by.id('comment-time')); 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(); } - checkUserIconIsDisplayed(number) { + checkUserIconIsDisplayed(position) { Util.waitUntilElementIsVisible(this.commentUserIcon); - return this.commentUserIcon.get(number); + return this.commentUserIcon.get(position); } - getUserName(number) { + getUserName(position) { Util.waitUntilElementIsVisible(this.commentUserName); - return this.commentUserName.get(number).getText(); + return this.commentUserName.get(position).getText(); } - getMessage(number) { + getMessage(position) { Util.waitUntilElementIsVisible(this.commentMessage); - return this.commentMessage.get(number).getText(); + return this.commentMessage.get(position).getText(); } - getTime(number) { + getTime(position) { Util.waitUntilElementIsVisible(this.commentTime); - return this.commentTime.get(number).getText(); + return this.commentTime.get(position).getText(); } checkCommentInputIsNotDisplayed() { Util.waitUntilElementIsNotVisible(this.commentInput); } + + addComment(comment) { + Util.waitUntilElementIsVisible(this.commentInput); + this.commentInput.sendKeys(comment); + return this.addCommentButton.click(); + } } diff --git a/e2e/pages/adf/viewerPage.js b/e2e/pages/adf/viewerPage.js index b58170515b..1f86c870cb 100644 --- a/e2e/pages/adf/viewerPage.js +++ b/e2e/pages/adf/viewerPage.js @@ -418,6 +418,13 @@ var ViewerToolbarPage = function () { return this; }; + this.clickOnCommentsTab = function() { + var commentsTab = element(by.cssContainingText("div[id*='mat-tab-label']", "Comments")); + Util.waitUntilElementIsVisible(commentsTab); + commentsTab.click(); + return this; + }; + }; module.exports = ViewerToolbarPage;