[ADF-3259] [ADF-3363] e2e login and card metadata (#3612)

* remember me

* add login component e2e test

* add success route test

* add change logo check

* redirect url after logout e2e

* move redirection test in a separate file

* login component tslint

* cardview e2e

* fix login test

* add test case number

* move version test in a separate file

* clean unused elements

* metadata part 1

* tslint fix

* fix metadata test

* remove fit

* fix formatting file viewerPage

* multi propety test

* metadata and login improvements

* fix data automation fix

* metadata permission e2e

* fix tslint problems

* improve selector

* stabilize search component test

* stabilize test step 1

* fix tag test
add config timeout

* tentative

* delay after download

* change meatdata test

* stabilize metadata

* use smaller file for not extension related test

* stabilize test step 2

* exclude failing test

* timeout fix

* split in multiple task e2e

* trick travis

* trigger build

* fix command issue

* fix save screenshot

* fix run subfolder

* test timeout increase
This commit is contained in:
Eugenio Romano
2018-07-23 14:11:54 +01:00
committed by Eugenio Romano
parent 66f534b32c
commit b2cb93468d
116 changed files with 3936 additions and 1519 deletions

View File

@@ -0,0 +1,183 @@
/*!
* @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 AcsUserModel = require('../models/ACS/acsUserModel');
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');
import { UploadActions } from '../actions/ACS/upload.actions';
describe('DocumentList component', () => {
let loginPage = new LoginPage();
let contentServicesPage = new ContentServicesPage();
let acsUser = new AcsUserModel();
let pdfFileModel = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name });
let docxFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.DOCX.file_name,
'location': resources.Files.ADF_DOCUMENTS.DOCX.file_location
});
let testFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.TEST.file_name,
'location': resources.Files.ADF_DOCUMENTS.TEST.file_location
});
let folderOneModel = new FolderModel({ 'name': 'folderOne' + Util.generateRandomString() });
let folderTwoModel = new FolderModel({ 'name': 'folderTwo' + Util.generateRandomString() });
let uploadedFolder;
let rootFolder = 'APP.PERSONAL-FILES', rootFolderName = 'Personal Files';
let fileNames = [], adminFileNames = [], nrOfFiles = 15, adminNrOfFiles = 5;
let files = {
base: 'newFile',
firstFile: 'newFile14.txt',
extension: '.txt'
};
let extensions = {
pdf: 'pdf',
docx: 'word',
test: 'document'
};
beforeAll(async (done) => {
let uploadActions = new UploadActions();
fileNames = Util.generateSeqeunceFiles(1, nrOfFiles, files.base, files.extension);
adminFileNames = Util.generateSeqeunceFiles(nrOfFiles + 1, nrOfFiles + adminNrOfFiles, files.base, files.extension);
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);
await uploadActions.uploadFile(this.alfrescoJsApi, pdfFileModel.location, pdfFileModel.name, '-my-');
await uploadActions.uploadFile(this.alfrescoJsApi, docxFileModel.location, docxFileModel.name, '-my-');
await uploadActions.uploadFile(this.alfrescoJsApi, testFileModel.location, testFileModel.name, '-my-');
uploadedFolder = await uploadActions.uploadFolder(this.alfrescoJsApi, folderOneModel.name, '-my-');
await uploadActions.createEmptyFiles(this.alfrescoJsApi, fileNames, uploadedFolder.entry.id);
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
await uploadActions.createEmptyFiles(this.alfrescoJsApi, adminFileNames, uploadedFolder.entry.id);
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
done();
});
it('1. File has tooltip', () => {
expect(contentServicesPage.getTooltip(pdfFileModel.name)).toEqual(pdfFileModel.name);
});
it('2. Folder has tooltip', () => {
expect(contentServicesPage.getTooltip(folderOneModel.name)).toEqual(folderOneModel.name);
expect(contentServicesPage.getBreadcrumbTooltip(rootFolderName)).toEqual(rootFolderName);
});
it('4. Sort content ascending by name.', () => {
contentServicesPage.doubleClickRow(folderOneModel.name).checkContentIsDisplayed(files.firstFile);
expect(contentServicesPage.getActiveBreadcrumb()).toEqual(uploadedFolder.entry.name);
expect(contentServicesPage.getCurrentFolderID()).toContain(uploadedFolder.entry.id);
expect(contentServicesPage.sortAndCheckListIsOrderedByName(true)).toEqual(true);
});
it('5. Sort content descending by name.', () => {
expect(contentServicesPage.sortAndCheckListIsOrderedByName(false)).toEqual(true);
});
it('6. Sort content ascending by author.', () => {
expect(contentServicesPage.sortAndCheckListIsOrderedByAuthor(true)).toEqual(true);
});
it('7. Sort content descending by author.', () => {
expect(contentServicesPage.sortAndCheckListIsOrderedByAuthor(false)).toEqual(true);
});
it('8. Sort content ascending by created date.', () => {
expect(contentServicesPage.sortAndCheckListIsOrderedByCreated(true)).toEqual(true);
});
it('9. Sort content descending by created date.', () => {
expect(contentServicesPage.sortAndCheckListIsOrderedByCreated(false)).toEqual(true);
});
it('10. File can be uploaded in a new created folder.', () => {
contentServicesPage.createNewFolder(folderTwoModel.name).checkContentIsDisplayed(folderTwoModel.name);
contentServicesPage.doubleClickRow(folderTwoModel.name).checkEmptyFolderMessageIsDisplayed();
});
it('11. Navigate to child folder via breadcrumbs.', () => {
contentServicesPage.navigateToFolderViaBreadcrumbs(acsUser.getId());
contentServicesPage
.checkContentIsDisplayed(folderOneModel.name)
.doubleClickRow(folderOneModel.name)
.checkContentIsDisplayed(folderTwoModel.name)
.doubleClickRow(folderTwoModel.name);
expect(contentServicesPage.getActiveBreadcrumb()).toEqual(folderTwoModel.name);
});
it('12. Navigate to parent folder via breadcrumbs.', () => {
contentServicesPage.navigateToFolderViaBreadcrumbs(uploadedFolder.entry.name);
expect(contentServicesPage.getActiveBreadcrumb()).toEqual(uploadedFolder.entry.name);
expect(contentServicesPage.getCurrentFolderID()).toContain(uploadedFolder.entry.id);
browser.refresh();
expect(contentServicesPage.getActiveBreadcrumb()).toEqual(uploadedFolder.entry.name);
expect(contentServicesPage.getCurrentFolderID()).toContain(uploadedFolder.entry.id);
});
it('13. Each known extension has it s own icon.', () => {
contentServicesPage.navigateToFolderViaBreadcrumbs(acsUser.getId());
contentServicesPage.checkContentIsDisplayed(pdfFileModel.name);
contentServicesPage.checkContentIsDisplayed(docxFileModel.name);
contentServicesPage.checkContentIsDisplayed(testFileModel.name);
contentServicesPage.checkIconColumn(pdfFileModel.name, extensions.pdf);
contentServicesPage.checkIconColumn(docxFileModel.name, extensions.docx);
contentServicesPage.checkIconColumn(testFileModel.name, extensions.test);
});
it('14. Navigate to root folder via breadcrumbs.', () => {
contentServicesPage.navigateToFolderViaBreadcrumbs(rootFolder);
expect(contentServicesPage.getActiveBreadcrumb()).toEqual(rootFolderName);
});
});

View File

@@ -0,0 +1,365 @@
/*!
* @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 PaginationPage = require('../pages/adf/paginationPage');
import NavigationBarPage = require('../pages/adf/navigationBarPage');
import AcsUserModel = require('../models/ACS/acsUserModel');
import FolderModel = require('../models/ACS/folderModel');
import TestConfig = require('../test.config');
import Util = require('../util/util');
import AlfrescoApi = require('alfresco-js-api-node');
import { UploadActions } from '../actions/ACS/upload.actions';
describe('Document List - Pagination', function () {
let pagination = {
base: 'newFile',
secondSetBase: 'secondSet',
extension: '.txt'
};
let itemsPerPage = {
five: '5',
fiveValue: 5,
ten: '10',
tenValue: 10,
fifteen: '15',
fifteenValue: 15,
twenty: '20',
twentyValue: 20,
default: '25'
};
let loginPage = new LoginPage();
let contentServicesPage = new ContentServicesPage();
let paginationPage = new PaginationPage();
let navigationBarPage = new NavigationBarPage();
let acsUser = new AcsUserModel();
let newFolderModel = new FolderModel({ 'name': 'newFolder' });
let fileNames = [], nrOfFiles = 20, currentPage = 1, secondSetOfFiles, secondSetNumber = 25;
let folderTwoModel = new FolderModel({ 'name': 'folderTwo' });
let folderThreeModel = new FolderModel({ 'name': 'folderThree' });
beforeAll(async (done) => {
let uploadActions = new UploadActions();
fileNames = Util.generateSeqeunceFiles(10, nrOfFiles + 9, pagination.base, pagination.extension);
secondSetOfFiles = Util.generateSeqeunceFiles(10, secondSetNumber + 9, pagination.secondSetBase, pagination.extension);
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 folderThreeUploadedModel = await uploadActions.uploadFolder(this.alfrescoJsApi, folderThreeModel.name, '-my-');
let newFolderUploadeModel = await uploadActions.uploadFolder(this.alfrescoJsApi, newFolderModel.name, '-my-');
await uploadActions.createEmptyFiles(this.alfrescoJsApi, fileNames, newFolderUploadeModel.entry.id);
await uploadActions.createEmptyFiles(this.alfrescoJsApi, fileNames, folderThreeUploadedModel.entry.id);
loginPage.loginToContentServicesUsingUserModel(acsUser);
done();
});
it('[C260062] Default pagination settings', function () {
contentServicesPage.goToDocumentList();
contentServicesPage.navigateToFolder(newFolderModel.name);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.default);
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, fileNames)).toEqual(true);
});
paginationPage.checkNextPageButtonIsDisabled();
paginationPage.checkPreviousPageButtonIsDisabled();
});
it('[C274713] 20 Items per page', function () {
contentServicesPage.goToDocumentList();
contentServicesPage.navigateToFolder(newFolderModel.name);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
paginationPage.selectItemsPerPage(itemsPerPage.twenty);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
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) {
expect(Util.arrayContainsArray(list, fileNames)).toEqual(true);
});
paginationPage.checkNextPageButtonIsDisabled();
paginationPage.checkPreviousPageButtonIsDisabled();
navigationBarPage.clickLogoutButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty);
navigationBarPage.clickLogoutButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
});
it('[C260069] 5 Items per page', function () {
contentServicesPage.goToDocumentList();
contentServicesPage.navigateToFolder(newFolderModel.name);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
paginationPage.selectItemsPerPage(itemsPerPage.five);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true);
});
paginationPage.clickOnNextPage();
currentPage++;
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
expect(paginationPage.getPaginationRange()).toEqual('Showing 6-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, fileNames.slice(5, 10))).toEqual(true);
});
paginationPage.clickOnNextPage();
currentPage++;
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, fileNames.slice(10, 15))).toEqual(true);
});
paginationPage.clickOnNextPage();
currentPage++;
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + itemsPerPage.fiveValue * currentPage + ' of ' + nrOfFiles);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true);
});
navigationBarPage.clickLogoutButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
navigationBarPage.clickLogoutButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
});
it('[C260067] 10 Items per page', function () {
currentPage = 1;
contentServicesPage.goToDocumentList();
contentServicesPage.navigateToFolder(newFolderModel.name);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
paginationPage.selectItemsPerPage(itemsPerPage.ten);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten);
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfFiles);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, fileNames.slice(0, 10))).toEqual(true);
});
paginationPage.clickOnNextPage();
currentPage++;
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten);
expect(paginationPage.getPaginationRange()).toEqual('Showing 11-' + itemsPerPage.tenValue * currentPage + ' of ' + nrOfFiles);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, fileNames.slice(10, 20))).toEqual(true);
});
navigationBarPage.clickLogoutButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten);
navigationBarPage.clickLogoutButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
currentPage = 1;
});
it('[C260065] 15 Items per page', function () {
currentPage = 1;
contentServicesPage.goToDocumentList();
contentServicesPage.navigateToFolder(newFolderModel.name);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name);
paginationPage.selectItemsPerPage(itemsPerPage.fifteen);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen);
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + nrOfFiles);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, fileNames.slice(0, 15))).toEqual(true);
});
currentPage++;
paginationPage.clickOnNextPage();
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen);
expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + nrOfFiles + ' of ' + nrOfFiles);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(nrOfFiles - itemsPerPage.fifteenValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, fileNames.slice(15, 20))).toEqual(true);
});
navigationBarPage.clickLogoutButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
contentServicesPage.checkAcsContainer();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen);
});
xit('[C91320] Pagination when the content is sorted', function () {
contentServicesPage.goToDocumentList();
contentServicesPage.navigateToFolder(newFolderModel.name);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name);
paginationPage.selectItemsPerPage(itemsPerPage.twenty);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(JSON.stringify(list) === JSON.stringify(fileNames)).toEqual(true);
});
contentServicesPage.sortByName(false);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
fileNames.reverse();
expect(JSON.stringify(list) === JSON.stringify(fileNames)).toEqual(true);
});
paginationPage.selectItemsPerPage(itemsPerPage.five);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(JSON.stringify(list) === JSON.stringify(fileNames.slice(15, 20))).toEqual(true);
});
paginationPage.clickOnNextPage();
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(JSON.stringify(list) === JSON.stringify(fileNames.slice(10, 15))).toEqual(true);
});
paginationPage.selectItemsPerPage(itemsPerPage.ten);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(JSON.stringify(list) === JSON.stringify(fileNames.slice(10, 20))).toEqual(true);
});
});
it('[C260107] Pagination in an empty folder', function () {
contentServicesPage.goToDocumentList();
paginationPage.selectItemsPerPage(itemsPerPage.five);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
contentServicesPage.navigateToFolder(newFolderModel.name);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(contentServicesPage.getActiveBreadcrumb()).toEqual(newFolderModel.name);
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
contentServicesPage.createNewFolder(folderTwoModel.name).checkContentIsDisplayed(folderTwoModel.name);
contentServicesPage.navigateToFolder(folderTwoModel.name);
contentServicesPage.checkPaginationIsNotDisplayed();
});
xit('[C260071] Items per page when having 25 files', function () {
currentPage = 1;
contentServicesPage.goToDocumentList();
contentServicesPage.navigateToFolder(folderThreeModel.name);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(contentServicesPage.getActiveBreadcrumb()).toEqual(folderThreeModel.name);
paginationPage.selectItemsPerPage(itemsPerPage.fifteen);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen);
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue * currentPage + ' of ' + secondSetNumber);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(0, 15))).toEqual(true);
});
currentPage++;
paginationPage.clickOnNextPage();
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen);
expect(paginationPage.getPaginationRange()).toEqual('Showing 16-' + secondSetNumber + ' of ' + secondSetNumber);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(secondSetNumber - itemsPerPage.fifteenValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(15, 25))).toEqual(true);
});
currentPage = 1;
paginationPage.selectItemsPerPage(itemsPerPage.twenty);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty);
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.twentyValue * currentPage + ' of ' + secondSetNumber);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.twentyValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(0, 20))).toEqual(true);
});
currentPage++;
paginationPage.clickOnNextPage();
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty);
expect(paginationPage.getPaginationRange()).toEqual('Showing 21-' + secondSetNumber + ' of ' + secondSetNumber);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(secondSetNumber - itemsPerPage.twentyValue);
contentServicesPage.getAllRowsNameColumn().then(function (list) {
expect(Util.arrayContainsArray(list, secondSetOfFiles.slice(20, 25))).toEqual(true);
});
});
});

View File

@@ -0,0 +1,241 @@
/*!
* @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 SearchDialog = require('../pages/adf/dialog/searchDialog');
import ContentServicesPage = require('../pages/adf/contentServicesPage');
import filePreviewPage = require('../pages/adf/filePreviewPage');
import SearchResultPage = require('../pages/adf/searchResultsPage');
import AcsUserModel = require('../models/ACS/acsUserModel');
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');
import { UploadActions } from '../actions/ACS/upload.actions';
describe('Search component - Search Bar', () => {
let search = {
inactive: {
firstChar: 'x',
secondChar: 'y',
thirdChar: 'z',
name: 'impossible-name-folder' + Util.generateRandomString(8)
}
};
let loginPage = new LoginPage();
let contentServicesPage = new ContentServicesPage();
let searchDialog = new SearchDialog();
let searchResultPage = new SearchResultPage();
let acsUser = new AcsUserModel();
let filename = Util.generateRandomString(16);
let firstFolderName = Util.generateRandomString(16);
let secondFolderName = Util.generateRandomString(16);
let thirdFolderName = Util.generateRandomString(16);
let firstFileModel = new FileModel({
'name': filename, 'shortName': filename.substring(0, 8)
});
let firstFolderModel = new FolderModel({
'name': firstFolderName, 'shortName': firstFolderName.substring(0, 8)
});
let secondFolder = new FolderModel({
'name': secondFolderName, 'shortName': secondFolderName.substring(0, 8)
});
let thirdFolder = new FolderModel({
'name': thirdFolderName, 'shortName': thirdFolderName.substring(0, 8)
});
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 firstFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, firstFileModel.location, firstFileModel.name, '-my-');
Object.assign(firstFileModel, firstFileUploaded.entry);
await uploadActions.uploadFolder(this.alfrescoJsApi, firstFolderModel.name, '-my-');
await uploadActions.uploadFolder(this.alfrescoJsApi, secondFolder.name, '-my-');
await uploadActions.uploadFolder(this.alfrescoJsApi, thirdFolder.name, '-my-');
await browser.driver.sleep(5000); // wait search index previous file/folder uploaded
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
done();
});
// afterAll((done) => {
// NodesAPI.deleteContent(acsUser, firstFileModel.id, () => {
// NodesAPI.deleteContent(acsUser, firstFolderModel.id, () => {
// done();
// });
// });
// });
it('1. Search bar is visible', () => {
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible();
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().checkSearchIconIsVisible();
searchDialog.clickOnSearchIcon().checkSearchBarIsNotVisible().checkSearchIconIsVisible();
});
it('2. Add input and close', () => {
searchDialog.checkSearchIconIsVisible().clickOnSearchIcon().enterText(firstFolderModel.shortName);
searchDialog.clickOnSearchIcon().checkSearchBarIsNotVisible().checkSearchIconIsVisible();
contentServicesPage.checkAcsContainer();
});
it('3. Search for content that doesn\'t exist', () => {
searchDialog.checkSearchBarIsNotVisible().clickOnSearchIcon().checkNoResultMessageIsNotDisplayed()
.enterText(search.inactive.name).checkNoResultMessageIsDisplayed();
searchDialog.clearText();
searchDialog.checkSearchBarIsNotVisible();
});
it('4. Existing folder and file are displayed in search suggestion when typing only the first 4 letters', () => {
contentServicesPage.goToDocumentList();
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterText(firstFolderModel.shortName);
searchDialog.resultTableContainsRow(firstFolderModel.name);
expect(searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.shortName);
expect(searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName);
expect(searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name);
searchDialog.clearText();
searchDialog.checkSearchBarIsNotVisible();
searchDialog.clickOnSearchIcon().enterText(firstFileModel.shortName);
searchDialog.resultTableContainsRow(firstFileModel.name);
expect(searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.shortName);
expect(searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName);
expect(searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name);
searchDialog.clearText();
searchDialog.checkSearchBarIsNotVisible();
});
it('5. Existing folder and file are displayed in search suggestion', () => {
contentServicesPage.goToDocumentList();
searchDialog.clickOnSearchIcon().checkSearchBarIsVisible().enterText(firstFolderModel.name);
searchDialog.resultTableContainsRow(firstFolderModel.name);
expect(searchDialog.getSpecificRowsHighlightName(firstFolderModel.name)).toEqual(firstFolderModel.name);
expect(searchDialog.getSpecificRowsAuthor(firstFolderModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName);
expect(searchDialog.getSpecificRowsCompleteName(firstFolderModel.name)).toEqual(firstFolderModel.name);
searchDialog.clearText();
searchDialog.checkSearchBarIsNotVisible();
searchDialog.clickOnSearchIcon().enterText(firstFileModel.name);
searchDialog.resultTableContainsRow(firstFileModel.name);
expect(searchDialog.getSpecificRowsHighlightName(firstFileModel.name)).toEqual(firstFileModel.name);
expect(searchDialog.getSpecificRowsAuthor(firstFileModel.name)).toEqual(acsUser.firstName + ' ' + acsUser.lastName);
expect(searchDialog.getSpecificRowsCompleteName(firstFileModel.name)).toEqual(firstFileModel.name);
searchDialog.clearText();
searchDialog.checkSearchBarIsNotVisible();
});
it('6. Folder content is displayed when clicking on existing folder', () => {
searchDialog.clickOnSearchIcon().enterText(firstFolderModel.shortName);
searchDialog.resultTableContainsRow(firstFolderModel.name);
searchDialog.clickOnSpecificRow(firstFolderModel.name);
contentServicesPage.checkAcsContainer().waitForTableBody();
expect(contentServicesPage.currentFolderName()).toEqual(firstFolderModel.name);
contentServicesPage.goToDocumentList();
searchDialog.checkSearchIconIsVisible().clickOnSearchIcon().checkSearchBarIsVisible();
searchDialog.enterText(firstFileModel.name).resultTableContainsRow(firstFileModel.name);
searchDialog.clickOnSpecificRow(firstFileModel.name);
expect(filePreviewPage.getPDFTitleFromSearch()).toEqual(firstFileModel.name);
filePreviewPage.closePreviewWithButton();
});
it('7. Non-existent folder is not displayed in search page', () => {
searchDialog.checkSearchIconIsVisible().clickOnSearchIcon();
searchDialog.enterTextAndPressEnter(search.inactive.name);
searchResultPage.checkNoResultMessageIsDisplayed();
contentServicesPage.goToDocumentList();
});
it('8. Existing folder is displayed in search page', () => {
searchDialog.clickOnSearchIcon();
searchDialog.enterTextAndPressEnter(firstFolderModel.name);
searchResultPage.checkContentIsDisplayed(firstFolderModel.name);
});
it('9. Existing file is displayed in search page', () => {
contentServicesPage.goToDocumentList();
searchDialog.clickOnSearchIcon();
searchDialog.enterTextAndPressEnter(firstFileModel.name);
searchResultPage.checkContentIsDisplayed(firstFileModel.name);
});
xit('10. A folder is selected from search bar using arrows', () => {
contentServicesPage.goToDocumentList();
searchDialog
.clickOnSearchIcon()
.enterText(secondFolder.shortName)
.pressDownArrowAndEnter();
contentServicesPage.checkAcsContainer();
expect(contentServicesPage.currentFolderName()).toEqual(secondFolder.name);
});
xit('11. The search bar gets closed when clicking on another browser tab', () => {
contentServicesPage.goToDocumentList();
searchDialog
.clickOnSearchIcon()
.enterText(secondFolder.shortName);
searchDialog.resultTableContainsRow(secondFolder.name);
Util.openNewTabInBrowser();
Util.switchToWindowHandler(0);
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible();
});
});

View File

@@ -0,0 +1,286 @@
/*!
* @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 SearchDialog = require('../pages/adf/dialog/searchDialog');
import ContentServicesPage = require('../pages/adf/contentServicesPage');
import SearchResultPage = require('../pages/adf/searchResultsPage');
import filePreviewPage = require('../pages/adf/filePreviewPage');
import AcsUserModel = require('../models/ACS/acsUserModel');
import FolderModel = require('../models/ACS/folderModel');
import FileModel = require('../models/ACS/fileModel');
import TestConfig = require('../test.config');
import Util = require('../util/util');
import resources = require('../util/resources');
import AlfrescoApi = require('alfresco-js-api-node');
import { UploadActions } from '../actions/ACS/upload.actions';
describe('Search component - Search Page', () => {
let search = {
active: {
base: Util.generateRandomString(3),
firstFile: Util.generateRandomString(),
secondFile: Util.generateRandomString(),
extension: '.txt'
},
no_permission: {
noPermFile: 'Meetings',
noPermFolder: 'Meeting Notes'
}
};
let loginPage = new LoginPage();
let contentServicesPage = new ContentServicesPage();
let searchDialog = new SearchDialog();
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 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);
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);
await uploadActions.uploadFolder(this.alfrescoJsApi, emptyFolderModel.name, '-my-');
let newFolderModelUploaded = await uploadActions.uploadFolder(this.alfrescoJsApi, newFolderModel.name, '-my-');
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 this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
await uploadActions.createEmptyFiles(this.alfrescoJsApi, adminFileNames, newFolderModelUploaded.entry.id);
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
done();
});
it('1. \'No results found searching for\' message is displayed on Search Page', () => {
let notExistentFileName = Util.generateRandomString();
contentServicesPage.goToDocumentList();
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
.enterTextAndPressEnter(notExistentFileName);
searchResultPage.checkNoResultMessageIsDisplayed();
});
it('2. File previewer is displayed', () => {
contentServicesPage.goToDocumentList();
searchDialog
.checkSearchBarIsNotVisible()
.checkSearchIconIsVisible()
.clickOnSearchIcon()
.enterTextAndPressEnter(firstFileModel.name);
searchResultPage.checkContentIsDisplayed(firstFileModel.name);
searchResultPage.navigateToFolder(firstFileModel.name);
browser.driver.sleep(200);
filePreviewPage.closePreviewWithButton();
});
it('3. Only the searched file is displayed', () => {
contentServicesPage.goToDocumentList();
searchDialog
.checkSearchBarIsNotVisible()
.checkSearchIconIsVisible()
.clickOnSearchIcon()
.enterTextAndPressEnter(search.active.firstFile);
searchResultPage.checkContentIsDisplayed(search.active.firstFile);
expect(searchResultPage.numberOfResultsDisplayed()).toBe(1);
});
it('4. Folder content is displayed', () => {
contentServicesPage.goToDocumentList();
searchDialog.checkSearchBarIsNotVisible()
.checkSearchIconIsVisible()
.clickOnSearchIcon()
.enterTextAndPressEnter(emptyFolderModel.name);
searchResultPage.checkNoResultMessageIsNotDisplayed();
searchResultPage.checkContentIsDisplayed(emptyFolderModel.name);
searchResultPage.navigateToFolder(emptyFolderModel.name);
contentServicesPage.currentFolderName().then((result) => {
expect(result).toEqual(emptyFolderModel.name);
});
});
it('5. Delete a file from the Search Results Page', () => {
contentServicesPage.goToDocumentList();
searchDialog
.checkSearchBarIsNotVisible()
.checkSearchIconIsVisible()
.clickOnSearchIcon()
.enterTextAndPressEnter(search.active.firstFile);
searchResultPage.checkContentIsDisplayed(search.active.firstFile);
searchResultPage.deleteContent(search.active.firstFile);
searchResultPage.checkNoResultMessageIsDisplayed();
searchResultPage.checkContentIsNotDisplayed(search.active.firstFile);
contentServicesPage.goToDocumentList();
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
.enterTextAndPressEnter(search.active.firstFile);
searchResultPage.checkNoResultMessageIsDisplayed();
});
it('6. Delete a folder from the Search Results Page', () => {
searchDialog.checkSearchBarIsNotVisible()
.checkSearchIconIsVisible()
.clickOnSearchIcon()
.enterTextAndPressEnter(emptyFolderModel.name);
searchResultPage.checkContentIsDisplayed(emptyFolderModel.name);
searchResultPage.checkNoResultMessageIsNotDisplayed();
searchResultPage.checkContentIsDisplayed(emptyFolderModel.name);
searchResultPage.deleteContent(emptyFolderModel.name);
searchResultPage.checkNoResultMessageIsDisplayed();
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
.enterTextAndPressEnter(emptyFolderModel.name);
searchResultPage.checkNoResultMessageIsDisplayed();
});
xit('8. Sort content ascending by name.', () => {
contentServicesPage.goToDocumentList();
searchDialog
.checkSearchBarIsNotVisible()
.checkSearchIconIsVisible()
.clickOnSearchIcon()
.enterTextAndPressEnter(search.active.base);
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
searchResultPage.sortAndCheckListIsOrderedByName(true).then((result) => {
expect(result).toEqual(true);
});
});
xit('9. Sort content descending by name.', () => {
contentServicesPage.goToDocumentList();
searchDialog.checkSearchBarIsNotVisible()
.checkSearchIconIsVisible()
.clickOnSearchIcon()
.enterTextAndPressEnter(search.active.base);
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
searchResultPage.sortAndCheckListIsOrderedByName(false).then((result) => {
expect(result).toEqual(true);
});
});
xit('10. Sort content ascending by author.', () => {
contentServicesPage.goToDocumentList();
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
.enterTextAndPressEnter(search.active.base);
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
searchResultPage.sortAndCheckListIsOrderedByAuthor(true).then((result) => {
expect(result).toEqual(true);
});
});
xit('11. Sort content descending by author.', () => {
contentServicesPage.goToDocumentList();
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
.enterTextAndPressEnter(search.active.base);
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
searchResultPage.sortAndCheckListIsOrderedByAuthor(false).then((result) => {
expect(result).toEqual(true);
});
});
xit('12. Sort content ascending by created date.', () => {
contentServicesPage.goToDocumentList();
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
.enterTextAndPressEnter(search.active.base);
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
searchResultPage.sortAndCheckListIsOrderedByCreated(true).then((result) => {
expect(result).toEqual(true);
});
});
xit('13. Sort content descending by created date.', () => {
contentServicesPage.goToDocumentList();
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
.enterTextAndPressEnter(search.active.base);
searchResultPage.checkContentIsDisplayed(search.active.secondFile);
searchResultPage.sortAndCheckListIsOrderedByCreated(false).then((result) => {
expect(result).toEqual(true);
});
});
xit('14. Try to delete a file without rights from the Search Results Page', () => {
contentServicesPage.goToDocumentList();
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
.enterTextAndPressEnter(search.no_permission.noPermFile);
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFile);
searchResultPage.deleteContent(search.no_permission.noPermFile);
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFile);
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
.enterTextAndPressEnter(search.no_permission.noPermFile);
searchResultPage.checkNoResultMessageIsNotDisplayed();
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFile);
});
it('15. Try to delete a folder without rights from the Search Results Page', () => {
contentServicesPage.goToDocumentList();
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
.enterTextAndPressEnter(search.no_permission.noPermFolder);
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFolder);
searchResultPage.deleteContent(search.no_permission.noPermFolder);
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFolder);
searchDialog.checkSearchBarIsNotVisible().checkSearchIconIsVisible().clickOnSearchIcon()
.enterTextAndPressEnter(search.no_permission.noPermFolder);
searchResultPage.checkNoResultMessageIsNotDisplayed();
searchResultPage.checkContentIsDisplayed(search.no_permission.noPermFolder);
});
});

View File

@@ -0,0 +1,165 @@
/*!
* @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 AcsUserModel = require('../models/ACS/acsUserModel');
import FileModel = require('../models/ACS/fileModel');
import LoginPage = require('../pages/adf/loginPage');
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';
import Util = require('../util/util');
describe('Tag component', () => {
let loginPage = new LoginPage();
let tagPage = new TagPage();
let acsUser = new AcsUserModel();
let pdfFileModel = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.PDF.file_name });
let deleteFile = new FileModel({ 'name': Util.generateRandomString() });
let sameTag = Util.generateRandomStringToLowerCase();
let tagList = [Util.generateRandomStringToLowerCase(), Util.generateRandomStringToLowerCase()];
let uppercaseTag = Util.generateRandomStringToUpperCase();
let digitsTag = Util.generateRandomStringDigits();
let nonLatinTag = Util.generateRandomStringNonLatin();
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 pdfUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, pdfFileModel.location, pdfFileModel.name, '-my-');
let uploadedDeleteFile = await uploadActions.uploadFile(this.alfrescoJsApi, deleteFile.location, deleteFile.name, '-my-');
Object.assign(pdfFileModel, pdfUploadedFile.entry);
Object.assign(deleteFile, uploadedDeleteFile.entry);
loginPage.loginToContentServicesUsingUserModel(acsUser);
done();
});
it('[C260374] Tag node ID', () => {
tagPage.goToTagPage();
expect(tagPage.getNodeId()).toEqual('');
expect(tagPage.getNewTagPlaceholder()).toEqual('New Tag');
expect(tagPage.addTagButtonIsEnabled()).toEqual(false);
tagPage.checkTagListIsEmpty();
tagPage.checkTagListByNodeIdIsEmpty();
expect(tagPage.addNewTagInput('a').addTagButtonIsEnabled()).toEqual(false);
expect(tagPage.getNewTagInput()).toEqual('a');
});
it('[C268151] New tag for specific Node ID', () => {
tagPage.goToTagPage();
tagPage.insertNodeId(pdfFileModel.id);
tagPage.addTag(tagList[0]);
tagPage.checkTagIsDisplayedInTagList(tagList[0]);
tagPage.checkTagIsDisplayedInTagListByNodeId(tagList[0]);
});
it('[C260377] Tag name already exists', () => {
tagPage.goToTagPage();
tagPage.insertNodeId(pdfFileModel.id);
tagPage.addTag(sameTag);
tagPage.checkTagIsDisplayedInTagList(sameTag);
tagPage.addTag(sameTag);
expect(tagPage.getErrorMessage()).toEqual('Tag already exists');
});
it('[C260378] Multiple tags', () => {
tagPage.goToTagPage();
tagPage.insertNodeId(pdfFileModel.id);
tagPage.checkTagListIsOrderedAscending();
tagPage.checkTagListByNodeIdIsOrderedAscending();
tagPage.checkTagListContentServicesIsOrderedAscending();
});
it('[C91326] Tag text field', () => {
tagPage.goToTagPage();
tagPage.insertNodeId(pdfFileModel.id);
tagPage.addTag(uppercaseTag);
tagPage.checkTagIsDisplayedInTagList(uppercaseTag.toLowerCase());
tagPage.checkTagIsDisplayedInTagListByNodeId(uppercaseTag.toLowerCase());
tagPage.checkTagIsNotDisplayedInTagList(uppercaseTag);
tagPage.insertNodeId(pdfFileModel.id);
tagPage.addTag(digitsTag);
tagPage.checkTagIsDisplayedInTagList(digitsTag);
tagPage.checkTagIsDisplayedInTagListByNodeId(digitsTag);
tagPage.insertNodeId(pdfFileModel.id);
tagPage.addTag(nonLatinTag);
tagPage.checkTagIsDisplayedInTagList(nonLatinTag);
tagPage.checkTagIsDisplayedInTagListByNodeId(nonLatinTag);
});
it('[C260375] Delete tag', () => {
let deleteTag = Util.generateRandomStringToUpperCase();
tagPage.goToTagPage();
tagPage.insertNodeId(deleteFile.id);
tagPage.addTag(deleteTag);
tagPage.checkTagIsDisplayedInTagList(deleteTag.toLowerCase());
tagPage.checkTagIsDisplayedInTagListByNodeId(deleteTag.toLowerCase());
tagPage.deleteTagFromTagListByNodeId(deleteTag.toLowerCase());
tagPage.checkTagIsNotDisplayedInTagList(deleteTag.toLowerCase());
tagPage.checkTagIsNotDisplayedInTagListByNodeId(deleteTag.toLowerCase());
tagPage.insertNodeId(deleteFile.id);
tagPage.addTag(deleteTag);
tagPage.checkTagIsDisplayedInTagList(deleteTag.toLowerCase());
tagPage.checkTagIsDisplayedInTagListByNodeId(deleteTag.toLowerCase());
tagPage.deleteTagFromTagList(deleteTag.toLowerCase());
tagPage.checkTagIsNotDisplayedInTagList(deleteTag.toLowerCase());
tagPage.checkTagIsNotDisplayedInTagListByNodeId(deleteTag.toLowerCase());
});
});

View File

@@ -0,0 +1,147 @@
/*!
* @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 TrashcanPage = require('../pages/adf/trashcanPage');
import PaginationPage = require('../pages/adf/paginationPage');
import NavigationBarPage = require('../pages/adf/navigationBarPage');
import AcsUserModel = require('../models/ACS/acsUserModel');
import FolderModel = require('../models/ACS/folderModel');
import TestConfig = require('../test.config');
import Util = require('../util/util');
import AlfrescoApi = require('alfresco-js-api-node');
import { UploadActions } from '../actions/ACS/upload.actions';
describe('Trashcan - Pagination', () => {
let pagination = {
base: 'newFile',
extension: '.txt'
};
let itemsPerPage = {
five: '5',
fiveValue: 5,
ten: '10',
tenValue: 10,
fifteen: '15',
fifteenValue: 15,
twenty: '20',
twentyValue: 20,
default: '25'
};
let loginPage = new LoginPage();
let trashcanPage = new TrashcanPage();
let paginationPage = new PaginationPage();
let navigationBarPage = new NavigationBarPage();
let acsUser = new AcsUserModel();
let newFolderModel = new FolderModel({ 'name': 'newFolder' });
let nrOfFiles = 20;
beforeAll(async (done) => {
let uploadActions = new UploadActions();
let fileNames = Util.generateSeqeunceFiles(10, nrOfFiles + 9, pagination.base, pagination.extension);
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 folderUploadedModel = await uploadActions.uploadFolder(this.alfrescoJsApi, newFolderModel.name, '-my-');
let emptyFiles = await uploadActions.createEmptyFiles(this.alfrescoJsApi, fileNames, folderUploadedModel.entry.id);
await emptyFiles.list.entries.forEach(async (node) => {
await this.alfrescoJsApi.node.deleteNode(node.entry.id).then(() => {
}, () => {
this.alfrescoJsApi.node.deleteNode(node.entry.id);
});
});
loginPage.loginToContentServicesUsingUserModel(acsUser);
done();
});
it('[C272811] 20 Items per page', () => {
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
paginationPage.selectItemsPerPage(itemsPerPage.twenty);
trashcanPage.waitForTableBody();
trashcanPage.waitForPagination();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.twenty);
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + nrOfFiles + ' of ' + nrOfFiles);
expect(trashcanPage.numberOfResultsDisplayed()).toBe(nrOfFiles);
paginationPage.checkNextPageButtonIsDisabled();
paginationPage.checkPreviousPageButtonIsDisabled();
});
it('[C276742] 15 Items per page', () => {
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
paginationPage.selectItemsPerPage(itemsPerPage.fifteen);
trashcanPage.waitForTableBody();
trashcanPage.waitForPagination();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.fifteen);
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fifteenValue + ' of ' + nrOfFiles);
expect(trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fifteenValue);
paginationPage.checkNextPageButtonIsEnabled();
paginationPage.checkPreviousPageButtonIsDisabled();
});
it('[C276743] 10 Items per page', () => {
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
paginationPage.selectItemsPerPage(itemsPerPage.ten);
trashcanPage.waitForTableBody();
trashcanPage.waitForPagination();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.ten);
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.tenValue + ' of ' + nrOfFiles);
expect(trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.tenValue);
paginationPage.checkNextPageButtonIsEnabled();
paginationPage.checkPreviousPageButtonIsDisabled();
});
it('[C276744] 5 Items per page', () => {
navigationBarPage.clickTrashcanButton();
trashcanPage.waitForTableBody();
paginationPage.selectItemsPerPage(itemsPerPage.five);
trashcanPage.waitForTableBody();
trashcanPage.waitForPagination();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
expect(paginationPage.getPaginationRange()).toEqual('Showing 1-' + itemsPerPage.fiveValue + ' of ' + nrOfFiles);
expect(trashcanPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue);
paginationPage.checkNextPageButtonIsEnabled();
paginationPage.checkPreviousPageButtonIsDisabled();
});
})
;

View File

@@ -0,0 +1,101 @@
/*!
* @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 UploadDialog = require('../../pages/adf/dialog/uploadDialog');
import UploadToggles = require('../../pages/adf/dialog/uploadToggles');
import AcsUserModel = require('../../models/ACS/acsUserModel');
import FileModel = require('../../models/ACS/fileModel');
import FolderModel = require('../../models/ACS/folderModel');
import TestConfig = require('../../test.config');
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();
let uploadDialog = new UploadDialog();
let uploadToggles = new UploadToggles();
let loginPage = new LoginPage();
let acsUser = new AcsUserModel();
let iniExcludedFile = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.INI.file_name,
'location': resources.Files.ADF_DOCUMENTS.INI.file_location
});
let folderWithExcludedFile = new FolderModel({
'name': resources.Files.ADF_DOCUMENTS.FOLDER_EXCLUDED.folder_name,
'location': resources.Files.ADF_DOCUMENTS.FOLDER_EXCLUDED.folder_location
});
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);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
done();
});
it('[C279914] Should not allow upload default excluded files using D&D', () => {
contentServicesPage.checkDandDIsDisplayed();
let dragAndDropArea = element(by.css('adf-upload-drag-area div'));
let dragAndDrop = new DropActions();
dragAndDrop.dropFile(dragAndDropArea, iniExcludedFile.location);
browser.driver.sleep(2000);
uploadDialog.dialogIsNotDisplayed();
contentServicesPage.checkContentIsNotDisplayed(iniExcludedFile.name);
});
it('[C260122] Should not allow upload default excluded files using Upload button', () => {
contentServicesPage
.uploadFile(iniExcludedFile.location)
.checkContentIsNotDisplayed(iniExcludedFile.name);
});
it('[C260125] Should not upload excluded file when they are in a Folder', () => {
uploadToggles.enableFolderUpload();
contentServicesPage.uploadFolder(folderWithExcludedFile.location).checkContentIsDisplayed(folderWithExcludedFile.name);
contentServicesPage.doubleClickRow(folderWithExcludedFile.name).checkContentIsNotDisplayed(iniExcludedFile.name).checkContentIsDisplayed('a_file.txt');
});
});

View File

@@ -0,0 +1,394 @@
/*!
* @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 UploadDialog = require('../../pages/adf/dialog/uploadDialog');
import UploadToggles = require('../../pages/adf/dialog/uploadToggles');
import AcsUserModel = require('../../models/ACS/acsUserModel');
import FileModel = require('../../models/ACS/fileModel');
import FolderModel = require('../../models/ACS/folderModel');
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 { DropActions } from '../../actions/drop.actions';
describe('Upload component', () => {
let contentServicesPage = new ContentServicesPage();
let uploadDialog = new UploadDialog();
let uploadToggles = new UploadToggles();
let loginPage = new LoginPage();
let acsUser = new AcsUserModel();
let firstPdfFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PDF_B.file_name,
'location': resources.Files.ADF_DOCUMENTS.PDF_B.file_location
});
let docxFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.DOCX.file_name,
'location': resources.Files.ADF_DOCUMENTS.DOCX.file_location
});
let pdfFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PDF.file_name,
'location': resources.Files.ADF_DOCUMENTS.PDF.file_location
});
let pngFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PNG.file_name,
'location': resources.Files.ADF_DOCUMENTS.PNG.file_location
});
let largeFile = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.LARGE_FILE.file_name,
'location': resources.Files.ADF_DOCUMENTS.LARGE_FILE.file_location
});
let fileWithSpecificSize = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.TXT_400B.file_name,
'location': resources.Files.ADF_DOCUMENTS.TXT_400B.file_location
});
let emptyFile = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name,
'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location
});
let folderOne = new FolderModel({
'name': resources.Files.ADF_DOCUMENTS.FOLDER_ONE.folder_name,
'location': resources.Files.ADF_DOCUMENTS.FOLDER_ONE.folder_location
});
let folderTwo = new FolderModel({
'name': resources.Files.ADF_DOCUMENTS.FOLDER_TWO.folder_name,
'location': resources.Files.ADF_DOCUMENTS.FOLDER_TWO.folder_location
});
let uploadedFileInFolder = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.FILE_INSIDE_FOLDER_ONE.file_name });
let uploadedFileInFolderTwo = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.FILE_INSIDE_FOLDER_TWO.file_name });
let filesLocation = [pdfFileModel.location, docxFileModel.location, pngFileModel.location, firstPdfFileModel.location];
let filesName = [pdfFileModel.name, docxFileModel.name, pngFileModel.name, firstPdfFileModel.name];
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);
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
let pdfUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, firstPdfFileModel.location, firstPdfFileModel.name, '-my-');
Object.assign(firstPdfFileModel, pdfUploadedFile.entry);
done();
});
it('[C272788] Upload Button is visible on the page', () => {
expect(contentServicesPage.getSingleFileButtonTooltip()).toEqual('Custom tooltip');
contentServicesPage
.checkUploadButton()
.checkContentIsDisplayed(firstPdfFileModel.name);
contentServicesPage
.deleteContent(firstPdfFileModel.name)
.checkContentIsNotDisplayed(pdfFileModel.name);
});
it('[C272789] Upload a pdf file', () => {
contentServicesPage
.uploadFile(pdfFileModel.location)
.checkContentIsDisplayed(pdfFileModel.name);
uploadDialog.fileIsUploaded(pdfFileModel.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage
.deleteContent(pdfFileModel.name)
.checkContentIsNotDisplayed(pdfFileModel.name);
});
it('[C272790] Upload a text file', () => {
contentServicesPage
.uploadFile(docxFileModel.location)
.checkContentIsDisplayed(docxFileModel.name);
uploadDialog.fileIsUploaded(docxFileModel.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage
.deleteContent(docxFileModel.name)
.checkContentIsNotDisplayed(docxFileModel.name);
});
it('[C260141] Upload a png file', () => {
contentServicesPage
.uploadFile(pngFileModel.location)
.checkContentIsDisplayed(pngFileModel.name);
uploadDialog.fileIsUploaded(pngFileModel.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage
.deleteContent(pngFileModel.name)
.checkContentIsNotDisplayed(pngFileModel.name);
});
it('[C260143] Minimize and maximize the upload dialog box', () => {
contentServicesPage
.uploadFile(docxFileModel.location)
.checkContentIsDisplayed(docxFileModel.name);
uploadDialog.fileIsUploaded(docxFileModel.name).checkCloseButtonIsDisplayed();
expect(uploadDialog.getTitleText()).toEqual('Uploaded 1 / 1');
expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1');
expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1');
uploadDialog.minimizeUploadDialog().dialogIsMinimized();
expect(uploadDialog.getTitleText()).toEqual('Uploaded 1 / 1');
expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1');
expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1');
uploadDialog.maximizeUploadDialog().dialogIsDisplayed().fileIsUploaded(docxFileModel.name);
expect(uploadDialog.getTitleText()).toEqual('Uploaded 1 / 1');
expect(uploadDialog.numberOfCurrentFilesUploaded()).toEqual('1');
expect(uploadDialog.numberOfInitialFilesUploaded()).toEqual('1');
uploadDialog.checkCloseButtonIsDisplayed().clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.deleteContent(docxFileModel.name).checkContentIsNotDisplayed(docxFileModel.name);
});
it('[C260168] Cancel the uploaded file through the upload dialog icon', () => {
contentServicesPage.uploadFile(pdfFileModel.location)
.checkContentIsDisplayed(pdfFileModel.name);
uploadDialog.removeUploadedFile(pdfFileModel.name).fileIsCancelled(pdfFileModel.name);
expect(uploadDialog.getTitleText()).toEqual('Upload canceled');
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
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);
uploadDialog.removeFileWhileUploading(largeFile.name).fileIsCancelled(largeFile.name);
expect(uploadDialog.getTitleText()).toEqual('Upload canceled');
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.checkContentIsNotDisplayed(largeFile.name);
});
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.');
uploadDialog.clickOnConfirmationDialogYesButton().fileIsCancelled(largeFile.name);
expect(uploadDialog.getTitleText()).toEqual('Upload canceled');
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.checkContentIsNotDisplayed(largeFile.name);
});
xit('[C272793] Cancel uploading multiple files', () => {
uploadToggles.enableMultipleFileUpload();
contentServicesPage.uploadMultipleFile([pngFileModel.location, largeFile.location]);
uploadDialog.cancelUploads();
expect(uploadDialog.getConfirmationDialogTitleText()).toEqual('Cancel Upload');
expect(uploadDialog.getConfirmationDialogDescriptionText()).toEqual('Stop uploading and remove files already uploaded.');
uploadDialog.clickOnConfirmationDialogYesButton().fileIsCancelled(pngFileModel.name).fileIsCancelled(largeFile.name);
expect(uploadDialog.getTitleText()).toEqual('Upload canceled');
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.checkContentIsNotDisplayed(pngFileModel.name).checkContentIsNotDisplayed(largeFile.name);
uploadToggles.disableMultipleFileUpload();
});
it('[C272794] Tooltip of uploading multiple files button', () => {
uploadToggles.enableMultipleFileUpload();
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');
contentServicesPage.uploadFile(docxFileModel.location).checkContentIsDisplayed(docxFileModel.name);
uploadDialog.removeUploadedFile(docxFileModel.name).fileIsCancelled(docxFileModel.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.uploadFile(largeFile.location).checkContentIsNotDisplayed(largeFile.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');
let dragAndDrop = new DropActions();
let dragAndDropArea = element(by.css('adf-upload-drag-area div'));
dragAndDrop.dropFile(dragAndDropArea, docxFileModel.location);
contentServicesPage.checkContentIsDisplayed(docxFileModel.name);
uploadDialog.removeUploadedFile(docxFileModel.name).fileIsCancelled(docxFileModel.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
dragAndDrop.dropFile(dragAndDropArea, largeFile.location);
contentServicesPage.checkContentIsNotDisplayed(largeFile.name);
uploadDialog.dialogIsNotDisplayed();
uploadToggles.disableExtensionFilter();
});
it('[C279920] Upload same file twice', () => {
contentServicesPage.uploadFile(pdfFileModel.location).checkContentIsDisplayed(pdfFileModel.name);
pdfFileModel.setVersion('1');
contentServicesPage.uploadFile(pdfFileModel.location).checkContentIsDisplayed(pdfFileModel.getVersionName());
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.deleteContent(pdfFileModel.name).checkContentIsNotDisplayed(pdfFileModel.name);
contentServicesPage.deleteContent(pdfFileModel.getVersionName()).checkContentIsNotDisplayed(pdfFileModel.getVersionName());
pdfFileModel.setVersion('');
});
it('[C260172] Enable versioning', () => {
uploadToggles.enableVersioning();
contentServicesPage.uploadFile(pdfFileModel.location).checkContentIsDisplayed(pdfFileModel.name);
pdfFileModel.setVersion('1');
contentServicesPage.uploadFile(pdfFileModel.location).checkContentIsDisplayed(pdfFileModel.name);
uploadDialog.fileIsUploaded(pdfFileModel.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.checkContentIsNotDisplayed(pdfFileModel.getVersionName());
contentServicesPage.deleteContent(pdfFileModel.name).checkContentIsNotDisplayed(pdfFileModel.name);
pdfFileModel.setVersion('');
uploadToggles.disableVersioning();
});
xit('[C260173] Enable folder upload', () => {
uploadToggles.enableFolderUpload();
contentServicesPage.uploadFolder(folderOne.location).checkContentIsDisplayed(folderOne.name);
expect(contentServicesPage.getFolderButtonTooltip()).toEqual('Custom tooltip');
uploadDialog.fileIsUploaded(uploadedFileInFolder.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.doubleClickRow(folderOne.name).checkContentIsDisplayed(uploadedFileInFolder.name);
contentServicesPage.goToDocumentList();
uploadToggles.disableFolderUpload();
});
xit('[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);
contentServicesPage.uploadFile(pngFileModel.location).checkContentIsDisplayed(pngFileModel.name);
uploadDialog.fileIsUploaded(pngFileModel.name).fileIsUploaded(docxFileModel.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.uploadFile(pdfFileModel.location).checkContentIsDisplayed(pdfFileModel.name);
uploadDialog.fileIsUploaded(pdfFileModel.name).fileIsNotDisplayedInDialog(pngFileModel.name).fileIsNotDisplayedInDialog(docxFileModel.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.deleteContents([docxFileModel.name, pngFileModel.name, pdfFileModel.name])
.checkContentsAreNotDisplayed([docxFileModel.name, pngFileModel.name, pdfFileModel.name]);
});
xit('[C260170] Upload files on the same time', () => {
contentServicesPage.goToDocumentList();
contentServicesPage.checkAcsContainer();
uploadToggles.enableMultipleFileUpload();
contentServicesPage.uploadMultipleFile(filesLocation).checkContentsAreDisplayed(filesName);
uploadDialog.filesAreUploaded(filesName);
expect(uploadDialog.getTitleText()).toEqual('Uploaded 4 / 4');
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.deleteContents(filesName).checkContentsAreNotDisplayed(filesName);
uploadToggles.disableMultipleFileUpload();
});
xit('[C279919] Enable max size and set it to 400', () => {
contentServicesPage.goToDocumentList();
contentServicesPage.checkAcsContainer();
uploadToggles.enableMaxSize().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');
contentServicesPage.uploadFile(emptyFile.location).checkContentIsDisplayed(emptyFile.name);
uploadDialog.fileIsUploaded(emptyFile.name).clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.deleteContent(emptyFile.name).checkContentIsNotDisplayed(emptyFile.name);
uploadToggles.disableMaxSize();
});
xit('[C272796] Enable max size and set it to 0', () => {
contentServicesPage.goToDocumentList();
contentServicesPage.checkAcsContainer();
uploadToggles.enableMaxSize().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');
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');
uploadToggles.disableMaxSize();
contentServicesPage.uploadFile(fileWithSpecificSize.location).checkContentIsDisplayed(fileWithSpecificSize.name);
uploadDialog.fileIsUploaded(fileWithSpecificSize.name).clickOnCloseButton().dialogIsNotDisplayed();
});
it('[C91318] Should Enable/Disable upload button when change the disable property', () => {
uploadToggles.clickCheckboxDisableUpload();
expect(contentServicesPage.uploadButtonIsEnabled()).toBeFalsy();
uploadToggles.clickCheckboxDisableUpload();
expect(contentServicesPage.uploadButtonIsEnabled()).toBeTruthy();
});
it('[C279882] Should be possible Upload a folder in a folder', () => {
uploadToggles.enableFolderUpload();
contentServicesPage.uploadFolder(folderOne.location).checkContentIsDisplayed(folderOne.name);
uploadDialog.fileIsUploaded(uploadedFileInFolder.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.doubleClickRow(folderOne.name).checkContentIsDisplayed(uploadedFileInFolder.name);
uploadToggles.enableFolderUpload();
contentServicesPage.uploadFolder(folderTwo.location).checkContentIsDisplayed(folderTwo.name);
uploadDialog.fileIsUploaded(uploadedFileInFolderTwo.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.doubleClickRow(folderTwo.name).checkContentIsDisplayed(uploadedFileInFolderTwo.name);
uploadToggles.disableFolderUpload();
});
});

View File

@@ -0,0 +1,246 @@
/*!
* @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 UploadDialog = require('../../pages/adf/dialog/uploadDialog');
import UploadToggles = require('../../pages/adf/dialog/uploadToggles');
import NavigationBarPage = require('../../pages/adf/navigationBarPage');
import NotificationPage = require('../../pages/adf/notificationPage');
import AcsUserModel = require('../../models/ACS/acsUserModel');
import FileModel = require('../../models/ACS/fileModel');
import FolderModel = require('../../models/ACS/folderModel');
import TestConfig = require('../../test.config');
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();
let uploadDialog = new UploadDialog();
let uploadToggles = new UploadToggles();
let loginPage = new LoginPage();
let acsUser;
let acsUserTwo;
let navigationBarPage = new NavigationBarPage();
let notificationPage = new NotificationPage();
let emptyFile = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name,
'location': resources.Files.ADF_DOCUMENTS.TXT_0B.file_location
});
let pngFile = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PNG.file_name,
'location': resources.Files.ADF_DOCUMENTS.PNG.file_location
});
let pdfFile = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PDF.file_name,
'location': resources.Files.ADF_DOCUMENTS.PDF.file_location
});
let folder = new FolderModel({
'name': resources.Files.ADF_DOCUMENTS.FOLDER_ONE.folder_name,
'location': resources.Files.ADF_DOCUMENTS.FOLDER_ONE.folder_location
});
beforeAll(() => {
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: TestConfig.adf.url
});
});
beforeEach(async (done) => {
acsUser = new AcsUserModel();
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
loginPage.loginToContentServicesUsingUserModel(acsUser);
done();
});
describe('limited permissions', () => {
beforeEach(async (done) => {
contentServicesPage.goToDocumentList();
done();
});
it('[C212861] Should not be allowed to Drag and drop a file/folder in a restricted user folder with limited permissions', () => {
contentServicesPage.checkDandDIsDisplayed();
let dragAndDrop = new DropActions();
let dragAndDropArea = element(by.css('adf-upload-drag-area div'));
dragAndDrop.dropFile(dragAndDropArea, emptyFile.location);
dragAndDrop.dropFolder(dragAndDropArea, folder.location);
contentServicesPage.checkContentIsDisplayed(emptyFile.name);
contentServicesPage.checkContentIsDisplayed(folder.name);
contentServicesPage.navigateToFolderViaBreadcrumbs('User Homes');
dragAndDrop.dropFile(dragAndDropArea, emptyFile.location);
dragAndDrop.dropFolder(dragAndDropArea, folder.location);
let fileInTheUploadedFolder = 'share_profile_pic.png';
uploadDialog.fileIsError(emptyFile.name);
uploadDialog.fileIsError(fileInTheUploadedFolder);
contentServicesPage.checkContentIsNotDisplayed(emptyFile.name);
contentServicesPage.checkContentIsNotDisplayed(folder.name);
});
it('[C279915] Should not be allowed to upload a file in a restricted user folder with limited permissions', () => {
navigationBarPage.clickLoginButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
contentServicesPage.uploadFile(emptyFile.location).checkContentIsDisplayed(emptyFile.name);
uploadDialog.fileIsUploaded(emptyFile.name);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.navigateToFolderViaBreadcrumbs('User Homes');
contentServicesPage.uploadFile(emptyFile.location);
notificationPage.checkNotifyContains('You don\'t have the create permission to upload the content');
});
it('[C279916] Should not be allowed to upload a folder in a restricted user folder with limited permissions', () => {
uploadToggles.enableFolderUpload();
contentServicesPage.uploadFolder(folder.location).checkContentIsDisplayed(folder.name);
let fileInTheUploadedFolder = 'share_profile_pic.png';
uploadDialog.fileIsUploaded(fileInTheUploadedFolder);
uploadDialog.clickOnCloseButton().dialogIsNotDisplayed();
contentServicesPage.navigateToFolderViaBreadcrumbs('User Homes');
uploadToggles.enableFolderUpload();
contentServicesPage.uploadFolder(folder.location);
notificationPage.checkNotifyContains('You don\'t have the create permission to upload the content');
});
});
describe('full permissions', () => {
beforeEach(async (done) => {
loginPage.loginToContentServices(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
contentServicesPage.goToDocumentList();
done();
});
it('[C260130] Should be allowed to Drag and drop a file/folder in a restricted user folder with full permissions', () => {
contentServicesPage.checkDandDIsDisplayed();
let dragAndDrop = new DropActions();
let dragAndDropArea = element(by.css('adf-upload-drag-area div'));
dragAndDrop.dropFile(dragAndDropArea, emptyFile.location);
dragAndDrop.dropFolder(dragAndDropArea, folder.location);
let fileInTheUploadedFolder = 'share_profile_pic.png';
uploadDialog.fileIsUploaded(emptyFile.name);
uploadDialog.fileIsUploaded(fileInTheUploadedFolder);
});
it('[C279917] Should be allowed to upload a file in a restricted user folder with full permissions', () => {
contentServicesPage.uploadFile(emptyFile.location);
uploadDialog.fileIsUploaded(emptyFile.name);
});
it('[C279918] Should be allowed to upload a folder in a restricted user folder with full permissions', () => {
uploadToggles.enableFolderUpload();
contentServicesPage.uploadFolder(folder.location);
let fileInTheUploadedFolder = 'share_profile_pic.png';
uploadDialog.fileIsUploaded(fileInTheUploadedFolder);
});
});
describe('multiple users', () => {
beforeEach(async (done) => {
acsUserTwo = new AcsUserModel();
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUserTwo);
contentServicesPage.goToDocumentList();
done();
});
it('[C260175] Should two different user upload files in the proper User Home', () => {
contentServicesPage.uploadFile(emptyFile.location);
uploadDialog.fileIsUploaded(emptyFile.name);
contentServicesPage.checkContentIsDisplayed(emptyFile.name);
navigationBarPage.clickLoginButton();
loginPage.loginToContentServicesUsingUserModel(acsUserTwo);
contentServicesPage.goToDocumentList();
contentServicesPage.checkContentIsNotDisplayed(emptyFile.name);
contentServicesPage.uploadFile(pngFile.location);
contentServicesPage.checkContentIsDisplayed(pngFile.name);
navigationBarPage.clickLoginButton();
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
contentServicesPage.checkContentIsNotDisplayed(pngFile.name);
contentServicesPage.uploadFile(pdfFile.location);
contentServicesPage.checkContentIsDisplayed(pdfFile.name);
});
});
});

View File

@@ -0,0 +1,82 @@
/*!
* @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 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('Version component', () => {
let loginPage = new LoginPage();
let contentServicesPage = new ContentServicesPage();
let viewerPage = new ViewerPage();
let cardViewPage;
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
});
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 pdfUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, pdfFileModel.location, pdfFileModel.name, '-my-');
Object.assign(pdfFileModel, pdfUploadedFile.entry);
pdfFileModel.update(pdfUploadedFile.entry);
loginPage.loginToContentServicesUsingUserModel(acsUser);
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);
});
});

View File

@@ -0,0 +1,77 @@
/*!
* @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 AlfrescoApi = require('alfresco-js-api-node');
import TestConfig = require('../test.config');
import fs = require('fs');
import path = require('path');
let buildNumber = process.env.TRAVIS_BUILD_NUMBER;
let saveScreenshot = process.env.SAVE_SCREENSHOT;
describe('Save screenshot at the end', () => {
beforeAll(async (done) => {
if (saveScreenshot === 'true') {
if (!buildNumber) {
buildNumber = Date.now();
}
let alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: TestConfig.adf.url
});
let files = fs.readdirSync(path.join(__dirname, '../../e2e-output/screenshots'));
if (files && files.length > 0) {
alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
let folder = await alfrescoJsApi.nodes.addNode('-my-', {
'name': 'contetn-services',
'relativePath': 'Buiild-screenshot/Screenshot-e2e-' + buildNumber,
'nodeType': 'cm:folder'
}, {}, {});
for (const fileName of files) {
let pathFile = path.join(__dirname, '../../e2e-output/screenshots', fileName);
let file = fs.createReadStream(pathFile);
await alfrescoJsApi.upload.uploadFile(
file,
'',
folder.entry.id,
null,
{
'name': file.name,
'nodeType': 'cm:content'
}
);
}
}
}
done();
});
it('screenshot need it', () => {
expect(true).toEqual(true);
});
});