[ADF-3331] Create automated tests for Viewer component - Content Services (#3600)

* Automation tests for Viewer Component - Content Services

* Create remaining automation tests for Viewer Component - Content Services

* Deleting alfresco-ng2-components.iml

* Correcting Viewer Page for failing tests

* Updating Viewer Page for failing tests

* Improving the PR quality
This commit is contained in:
marouanbentaleb
2018-07-19 02:28:24 +01:00
committed by Eugenio Romano
parent 69d8ff147e
commit ab9f1c8385
8 changed files with 284 additions and 48 deletions

View File

@@ -15,20 +15,21 @@
* limitations under the License.
*/
var Util = require('../../util/util');
var Util = require("../../util/util");
var CardViewPage = require("./cardViewPage");
var ViewerToolbarPage = function () {
var closeButton = element(by.css("button[data-automation-id='adf-toolbar-back']"));
var fileName = element(by.id('adf-viewer-display-name'));
var fileName = element(by.id("adf-viewer-display-name"));
var downloadButton = element(by.css("button[data-automation-id='adf-toolbar-download'] > span > mat-icon"));
var infoButton = element(by.css("button[data-automation-id='adf-toolbar-sidebar']"));
var previousPageButton = element(by.id('viewer-previous-page-button'));
var nextPageButton = element(by.id('viewer-next-page-button'));
var zoomInButton = element(by.id('viewer-zoom-in-button'));
var zoomOutButton = element(by.id('viewer-zoom-out-button'));
var scalePageButton = element(by.id('viewer-scale-page-button'));
var pdfContainer = element(by.id('viewer-pdf-container'));
var previousPageButton = element(by.id("viewer-previous-page-button"));
var nextPageButton = element(by.id("viewer-next-page-button"));
var zoomInButton = element(by.id("viewer-zoom-in-button"));
var zoomOutButton = element(by.id("viewer-zoom-out-button"));
var scalePageButton = element(by.id("viewer-scale-page-button"));
var pdfContainer = element(by.id("viewer-pdf-container"));
var fullScreenButton = element(by.css("button[data-automation-id='adf-toolbar-fullscreen']"));
var rotateLeft = element(by.css("button[id='viewer-rotate-left-button']"));
var rotateRight = element(by.css("button[id='viewer-rotate-right-button']"));
@@ -40,6 +41,37 @@ var ViewerToolbarPage = function () {
var mediaContainer = element(by.css("adf-media-player[class='adf-media-player ng-star-inserted']"));
var allPages = element.all(by.css("div[class='canvasWrapper'] > canvas")).first();
var percentage = element(by.css("div[data-automation-id='adf-page-scale'"));
var thumbnailsBtn = element(by.css("button[data-automation-id='adf-thumbnails-button']"));
var thumbnailsContent = element(by.css("div[data-automation-id='adf-thumbnails-content']"));
var thumbnailsClose = element(by.css("button[data-automation-id='adf-thumbnails-close']"));
var secondThumbnail = element(by.css("adf-pdf-thumb > img[title='Page 2'"));
var lastThumbnailDisplayed = element.all(by.css("adf-pdf-thumb")).last();
var passwordDialog = element(by.css("adf-pdf-viewer-password-dialog"));
var passwordSubmit = element(by.css("button[data-automation-id='adf-password-dialog-submit']"));
var passwordSubmitDisabled = element(by.css("button[data-automation-id='adf-password-dialog-submit'][disabled]"));
var passwordInput = element(by.css("input[data-automation-id='adf-password-dialog-input']"));
var passwordError = element(by.css("mat-error[data-automation-id='adf-password-dialog-error']"));
var infoSideBar = element(by.css("div[class='adf-info-drawer-layout-header']"));
var unsupportedFileContainer = element(by.cssContainingText(".label","Document preview could not be loaded"));
var pageCanvas = element.all(by.css("div[class='canvasWrapper']")).first();
this.canvasHeight = function () {
var deferred = protractor.promise.defer();
pageCanvas.getAttribute("style").then(function (value) {
var canvasHeight = value.split("height: ")[1].split("px")[0];
deferred.fulfill(canvasHeight);
});
return deferred.promise;
};
this.canvasWidth = function () {
var deferred = protractor.promise.defer();
pageCanvas.getAttribute("style").then(function (value) {
var canvasWidth = value.split("width: ")[1].split("px")[0];
deferred.fulfill(canvasWidth);
});
return deferred.promise;
};
this.viewFile = function (fileName) {
var fileView = element(by.xpath("//div[@class='document-list-container']//span[@title='" + fileName +"']"));
@@ -65,6 +97,63 @@ var ViewerToolbarPage = function () {
browser.executeScript(jsCode);
};
this.enterPassword = function (password)
{
Util.waitUntilElementIsVisible(passwordInput);
passwordInput.clear();
passwordInput.sendKeys(password);
};
this.checkPasswordErrorIsDisplayed = function ()
{
Util.waitUntilElementIsVisible(passwordError);
};
this.checkPasswordInputIsDisplayed = function ()
{
Util.waitUntilElementIsVisible(passwordInput);
};
this.checkPasswordSubmitDisabledIsDisplayed = function ()
{
Util.waitUntilElementIsVisible(passwordSubmitDisabled);
};
this.checkPasswordDialogIsDisplayed = function ()
{
Util.waitUntilElementIsVisible(passwordDialog);
};
this.checkAllThumbnailsDisplayed = function (nbPages)
{
var defaultThumbnailHeight = 143;
expect(thumbnailsContent.getAttribute("style")).toEqual("height: " + nbPages*defaultThumbnailHeight + "px; transform: translate(-50%, 0px);");
};
this.checkCurrentThumbnailIsSelected = function ()
{
var selectedThumbnail = element(by.css("adf-pdf-thumb[class='pdf-thumbnails__thumb ng-star-inserted pdf-thumbnails__thumb--selected'] > img"));
pageSelectorInput.getAttribute("value").then(function (pageNumber) {
expect("Page " + pageNumber).toEqual(selectedThumbnail.getAttribute("title"));
});
};
this.checkThumbnailsCloseIsDisplayed = function () {
Util.waitUntilElementIsVisible(thumbnailsClose);
};
this.checkThumbnailsBtnIsDisplayed = function () {
Util.waitUntilElementIsVisible(thumbnailsBtn);
};
this.checkThumbnailsContentIsDisplayed = function () {
Util.waitUntilElementIsVisible(thumbnailsContent);
};
this.checkThumbnailsContentIsNotDisplayed = function () {
Util.waitUntilElementIsNotVisible(thumbnailsContent);
};
this.checkCloseButtonIsDisplayed = function () {
Util.waitUntilElementIsVisible(closeButton);
};
@@ -112,9 +201,9 @@ var ViewerToolbarPage = function () {
this.checkPageSelectorInputIsDisplayed = function (number) {
Util.waitUntilElementIsVisible(pageSelectorInput);
pageSelectorInput.getAttribute('value').then(function (pageNumber) {
pageSelectorInput.getAttribute("value").then(function (pageNumber) {
expect(pageNumber).toEqual(number);
})
});
};
this.checkImgContainerIsDisplayed = function () {
@@ -154,13 +243,11 @@ var ViewerToolbarPage = function () {
this.checkZoomedIn = function (zoom)
{
expect(percentage.getText()).toBeGreaterThan(zoom);
};
this.checkZoomedOut = function (zoom)
{
expect(percentage.getText()).toBeLessThan(zoom);
};
this.checkRotateLeftButtonIsDisplayed = function () {
@@ -182,7 +269,7 @@ var ViewerToolbarPage = function () {
this.checkRotation = function (text)
{
rotation = imgContainer.getAttribute('style');
var rotation = imgContainer.getAttribute("style");
expect(rotation).toEqual(text);
};
@@ -191,6 +278,61 @@ var ViewerToolbarPage = function () {
Util.waitUntilElementIsVisible(customBtn);
};
this.checkUnsupportedFileContainerIsDisplayed = function ()
{
Util.waitUntilElementIsVisible(unsupportedFileContainer);
};
this.checkInfoSideBarIsNotDisplayed = function ()
{
Util.waitUntilElementIsNotVisible(infoSideBar);
};
this.checkInfoSideBarIsDisplayed = function ()
{
Util.waitUntilElementIsVisible(infoSideBar);
};
this.checkInfoSideBarIsNotDisplayed = function ()
{
Util.waitUntilElementIsNotOnPage(infoSideBar);
};
this.clickInfoButton = function ()
{
Util.waitUntilElementIsVisible(infoButton);
infoButton.click();
return new CardViewPage();
};
this.clickPasswordSubmit = function ()
{
Util.waitUntilElementIsVisible(passwordSubmit);
passwordSubmit.click();
};
this.clickSecondThumbnail = function ()
{
Util.waitUntilElementIsClickable(secondThumbnail);
secondThumbnail.click();
};
this.clickLastThumbnailDisplayed = function ()
{
Util.waitUntilElementIsClickable(lastThumbnailDisplayed);
lastThumbnailDisplayed.click();
};
this.clickThumbnailsClose = function () {
Util.waitUntilElementIsClickable(thumbnailsClose);
thumbnailsClose.click();
};
this.clickThumbnailsBtn = function () {
Util.waitUntilElementIsClickable(thumbnailsBtn);
thumbnailsBtn.click();
};
this.clickScaleImgButton = function ()
{
Util.waitUntilElementIsClickable(scaleImg);

Binary file not shown.

View File

@@ -0,0 +1 @@
<EFBFBD><EFBFBD>

View File

@@ -62,7 +62,7 @@ exports.Files = {
id: -19,
taskName: "User Task",
form_fields: {
text_field: "activiti-textfield",
text_field: "activiti-textfield",
form_fieldId: "textfield",
text_field_value: "Hi tester, from Rest call"
}
@@ -121,6 +121,15 @@ exports.Files = {
file_location: "/resources/adf/allFileTypes/pdf_all_properties.pdf",
file_name: "pdf_all_properties.pdf"
},
PDF_PROTECTED: {
file_location: "/resources/adf/allFileTypes/a_file_protected.pdf",
file_name: "a_file_protected.pdf",
first_page_text: "A Journey into Test Frameworks",
second_page_text: "After looking into Spocks GitHub",
last_page_text: "and provide feedback. The main advantages being the readability of the te",
last_page_number: "8",
password: "1q2w3e4r"
},
LARGE_FILE:{
file_location: "/resources/adf/BigFile.zip",
file_name: "BigFile.zip"
@@ -202,6 +211,10 @@ exports.Files = {
file_location: "/resources/adf/allFileTypes/file_unsupported.pages",
file_name: "file_unsupported.pages"
},
UNSUPPORTED:{
file_location: "/resources/adf/allFileTypes/file_unsupported.3DS",
file_name: "file_unsupported.3DS"
},
INI:{
file_location: "/resources/adf/allFileTypes/desktop.ini",
file_name: "desktop.ini"

View File

@@ -37,7 +37,20 @@ describe('Content Services Viewer', () => {
let loginPage = new LoginPage();
let zoom;
let pdfFile = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name });
let pdfFile = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PDF.file_name,
'firstPageText': resources.Files.ADF_DOCUMENTS.PDF.first_page_text,
'secondPageText': resources.Files.ADF_DOCUMENTS.PDF.second_page_text,
'lastPageNumber': resources.Files.ADF_DOCUMENTS.PDF.last_page_number
});
let protectedFile = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PDF_PROTECTED.file_name,
'firstPageText': resources.Files.ADF_DOCUMENTS.PDF_PROTECTED.first_page_text,
'secondPageText': resources.Files.ADF_DOCUMENTS.PDF_PROTECTED.second_page_text,
'lastPageNumber': resources.Files.ADF_DOCUMENTS.PDF_PROTECTED.last_page_number,
'password': resources.Files.ADF_DOCUMENTS.PDF_PROTECTED.password,
'location': resources.Files.ADF_DOCUMENTS.PDF_PROTECTED.file_location
});
let docxFile = new FileModel({
'location': resources.Files.ADF_DOCUMENTS.DOCX_SUPPORTED.file_location,
'name': resources.Files.ADF_DOCUMENTS.DOCX_SUPPORTED.file_name,
@@ -51,9 +64,9 @@ describe('Content Services Viewer', () => {
'location': resources.Files.ADF_DOCUMENTS.MP4.file_location,
'name': resources.Files.ADF_DOCUMENTS.MP4.file_name
});
let pagesFile = new FileModel({
'location': resources.Files.ADF_DOCUMENTS.PAGES.file_location,
'name': resources.Files.ADF_DOCUMENTS.PAGES.file_name
let unsupportedFile = new FileModel({
'location': resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_location,
'name': resources.Files.ADF_DOCUMENTS.UNSUPPORTED.file_name
});
let pptFile = new FileModel({
'location': resources.Files.ADF_DOCUMENTS.PPT.file_location,
@@ -78,6 +91,9 @@ describe('Content Services Viewer', () => {
let pdfFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, pdfFile.location, pdfFile.name, '-my-');
Object.assign(pdfFile, pdfFileUploaded.entry);
let protectedFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, protectedFile.location, protectedFile.name, '-my-');
Object.assign(protectedFile, protectedFileUploaded.entry);
let docxFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, docxFile.location, docxFile.name, '-my-');
Object.assign(docxFile, docxFileUploaded.entry);
@@ -90,8 +106,8 @@ describe('Content Services Viewer', () => {
let pptFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, pptFile.location, pptFile.name, '-my-');
Object.assign(pptFile, pptFileUploaded.entry);
let pagesFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, pagesFile.location, pagesFile.name, '-my-');
Object.assign(pagesFile, pagesFileUploaded.entry);
let unsupportedFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, unsupportedFile.location, unsupportedFile.name, '-my-');
Object.assign(unsupportedFile, unsupportedFileUploaded.entry);
loginPage.loginToContentServicesUsingUserModel(acsUser);
@@ -104,19 +120,15 @@ describe('Content Services Viewer', () => {
NodesAPI.deleteContent(acsUser, pdfFile.getId(), () => {
done();
});
NodesAPI.deleteContent(acsUser, jpgFile.getId(), () => {
done();
});
NodesAPI.deleteContent(acsUser, mp4File.getId(), () => {
done();
});
NodesAPI.deleteContent(acsUser, pagesFile.getId(), () => {
done();
});
NodesAPI.deleteContent(acsUser, pptFile.getId(), () => {
done();
});
@@ -155,14 +167,16 @@ describe('Content Services Viewer', () => {
viewerPage.clearPageNumber();
viewerPage.checkPageSelectorInputIsDisplayed('');
zoom = viewerPage.getZoom();
viewerPage.clickZoomInButton();
viewerPage.checkZoomedIn(zoom);
viewerPage.clickZoomOutButton();
zoom = viewerPage.getZoom();
viewerPage.clickZoomOutButton();
viewerPage.checkZoomedOut(zoom);
zoom = viewerPage.getZoom();
viewerPage.clickZoomInButton();
viewerPage.checkZoomedIn(zoom);
viewerPage.clickCloseButton();
});
@@ -238,8 +252,6 @@ describe('Content Services Viewer', () => {
});
it('[C260053] Should display first page, toolbar and pagination when opening a .docx file', () => {
contentServicesPage.checkAcsContainer();
viewerPage.viewFile(docxFile.name);
viewerPage.checkFileContent('1', docxFile.firstPageText);
@@ -258,10 +270,10 @@ describe('Content Services Viewer', () => {
});
it('[C260054] Should display "Preview couldn\'t be loaded" and viewer toolbar when opening an unsupported file', () => {
viewerPage.viewFile(pagesFile.name);
viewerPage.viewFile(unsupportedFile.name);
viewerPage.checkCloseButtonIsDisplayed();
viewerPage.checkFileNameIsDisplayed(pagesFile.name);
viewerPage.checkFileNameIsDisplayed(unsupportedFile.name);
viewerPage.checkFileThumbnailIsDisplayed();
viewerPage.checkDownloadButtonIsDisplayed();
viewerPage.checkInfoButtonIsDisplayed();
@@ -286,4 +298,68 @@ describe('Content Services Viewer', () => {
viewerPage.clickCloseButton();
});
it('[C261123] Should be able to preview all pages and navigate to a page when using thumbnails', () => {
viewerPage.viewFile(pdfFile.name);
viewerPage.checkFileContent('1', pdfFile.firstPageText);
viewerPage.checkThumbnailsBtnIsDisplayed();
viewerPage.clickThumbnailsBtn();
viewerPage.checkThumbnailsContentIsDisplayed();
viewerPage.checkThumbnailsCloseIsDisplayed();
viewerPage.checkAllThumbnailsDisplayed(pdfFile.lastPageNumber);
viewerPage.clickSecondThumbnail();
viewerPage.checkFileContent('2', pdfFile.secondPageText);
viewerPage.checkCurrentThumbnailIsSelected();
viewerPage.checkPreviousPageButtonIsDisplayed();
viewerPage.clickPreviousPageButton();
viewerPage.checkFileContent('1', pdfFile.firstPageText);
viewerPage.checkCurrentThumbnailIsSelected();
viewerPage.clickThumbnailsBtn();
viewerPage.checkThumbnailsContentIsNotDisplayed();
viewerPage.clickThumbnailsBtn();
viewerPage.checkThumbnailsCloseIsDisplayed();
viewerPage.clickThumbnailsClose();
});
it('[C268105] Should display current thumbnail when getting to the page following the last visible thumbnail', () => {
viewerPage.checkThumbnailsBtnIsDisplayed();
viewerPage.clickThumbnailsBtn();
viewerPage.clickLastThumbnailDisplayed();
viewerPage.checkCurrentThumbnailIsSelected();
viewerPage.checkNextPageButtonIsDisplayed();
viewerPage.clickNextPageButton();
viewerPage.checkCurrentThumbnailIsSelected();
viewerPage.clickCloseButton();
});
it('[C269109] Should not be able to open thumbnail pane before the pdf is loaded', () => {
viewerPage.viewFile(pdfFile.name);
viewerPage.clickThumbnailsBtn();
viewerPage.checkThumbnailsContentIsNotDisplayed();
viewerPage.clickCloseButton();
});
it('[C268901] Should need a password when opening a protected file', () => {
viewerPage.viewFile(protectedFile.name);
viewerPage.checkPasswordDialogIsDisplayed();
viewerPage.checkPasswordSubmitDisabledIsDisplayed();
viewerPage.enterPassword('random password');
viewerPage.clickPasswordSubmit();
viewerPage.checkPasswordErrorIsDisplayed();
viewerPage.checkPasswordInputIsDisplayed();
viewerPage.enterPassword(protectedFile.password);
viewerPage.clickPasswordSubmit();
viewerPage.checkFileContent('1', protectedFile.firstPageText);
});
});

View File

@@ -5,13 +5,14 @@
<mat-dialog-content>
<form (submit)="submit()">
<mat-input-container class="adf-full-width">
<input matInput
type="password"
placeholder="{{ 'ADF_VIEWER.PDF_DIALOG.PLACEHOLDER' | translate }}"
[formControl]="passwordFormControl" />
<input matInput
data-automation-id='adf-password-dialog-input'
type="password"
placeholder="{{ 'ADF_VIEWER.PDF_DIALOG.PLACEHOLDER' | translate }}"
[formControl]="passwordFormControl" />
</mat-input-container>
<mat-error *ngIf="isError()">{{ 'ADF_VIEWER.PDF_DIALOG.ERROR' | translate }}</mat-error>
<mat-error *ngIf="isError()" data-automation-id='adf-password-dialog-error'>{{ 'ADF_VIEWER.PDF_DIALOG.ERROR' | translate }}</mat-error>
</form>
</mat-dialog-content>
@@ -21,9 +22,10 @@
<button mat-button mat-dialog-close>{{ 'ADF_VIEWER.PDF_DIALOG.CLOSE' | translate }}</button>
<button mat-button
class="adf-dialog-action-button"
[disabled]="!isValid()"
(click)="submit()">
data-automation-id='adf-password-dialog-submit'
class="adf-dialog-action-button"
[disabled]="!isValid()"
(click)="submit()">
{{ 'ADF_VIEWER.PDF_DIALOG.SUBMIT' | translate }}
</button>
</mat-dialog-actions>

View File

@@ -1,4 +1,5 @@
<div class="pdf-thumbnails__content"
data-automation-id='adf-thumbnails-content'
[style.height.px]="virtualHeight"
[style.transform]="'translate(-50%, ' + translateY + 'px)'">
<adf-pdf-thumb *ngFor="let page of renderItems; trackBy: trackByFn"

View File

@@ -3,8 +3,8 @@
<div class="adf-pdf-viewer__thumbnails">
<div class="thumbnails-template__container">
<div class="thumbnails-template__buttons">
<button mat-icon-button (click)="toggleThumbnails()">
<mat-icon>close</mat-icon>
<button mat-icon-button data-automation-id='adf-thumbnails-close' (click)="toggleThumbnails()">
<mat-icon>close</mat-icon>
</button>
</div>
@@ -37,8 +37,9 @@
<ng-container *ngIf="allowThumbnails">
<button mat-icon-button
[disabled]="isPanelDisabled"
(click)="toggleThumbnails()">
data-automation-id='adf-thumbnails-button'
[disabled]="isPanelDisabled"
(click)="toggleThumbnails()">
<mat-icon>dashboard</mat-icon>
</button>
<adf-toolbar-divider></adf-toolbar-divider>
@@ -65,11 +66,11 @@
<div class="adf-pdf-viewer__toolbar-page-selector">
<span>{{ 'ADF_VIEWER.PAGE_LABEL.SHOWING' | translate }}</span>
<input #page
type="text"
type="text"
data-automation-id="adf-page-selector"
pattern="-?[0-9]*(\.[0-9]+)?"
value="{{ displayPage }}"
(keyup.enter)="inputPage(page.value)">
pattern="-?[0-9]*(\.[0-9]+)?"
value="{{ displayPage }}"
(keyup.enter)="inputPage(page.value)">
<span>{{ 'ADF_VIEWER.PAGE_LABEL.OF' | translate }} {{ totalPages }}</span>
</div>