[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,305 @@
/*!
* @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 CardViewPage = require('../../pages/adf/metadataViewPage');
import ContentListPage = require('../../pages/adf/dialog/contentList');
import NavigationBarPage = require('../../pages/adf/navigationBarPage');
import { ConfigEditorPage } from '../../pages/adf/configEditorPage';
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('Aspect oriented config', () => {
const METADATA = {
DATAFORMAT: 'mmm dd yyyy',
TITLE: 'Details',
COMMENTS_TAB: 'COMMENTS',
PROPERTY_TAB: 'PROPERTIES',
DEFAULT_ASPECT: 'Properties',
MORE_INFO_BUTTON: 'More information',
LESS_INFO_BUTTON: 'Less information',
ARROW_DOWN: 'keyboard_arrow_down',
ARROW_UP: 'keyboard_arrow_up',
EDIT_BUTTON_TOOLTIP: 'Edit'
};
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const viewerPage = new ViewerPage();
const metadataViewPage = new CardViewPage();
const contentListPage = new ContentListPage();
const navigationBarPage = new NavigationBarPage();
const configEditorPage = new ConfigEditorPage();
let acsUser = new AcsUserModel();
let pngFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PNG.file_name,
'location': resources.Files.ADF_DOCUMENTS.PNG.file_location
});
beforeAll(async (done) => {
let uploadActions = new UploadActions();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
await uploadActions.uploadFile(this.alfrescoJsApi, pngFileModel.location, pngFileModel.name, '-my-');
loginPage.loginToContentServicesUsingUserModel(acsUser);
done();
});
afterEach(() => {
viewerPage.clickCloseButton();
browser.refresh();
});
it('[C261117] Should be possible restrict the display properties of one an aspect', () => {
navigationBarPage.clickConfigEditorButton();
configEditorPage.clickClearMetadataButton();
configEditorPage.enterMetadataConfiguration('{ "presets": {' +
' "default": [{' +
' "title": "IMAGE",' +
' "items": [' +
' {' +
' "aspect": "exif:exif", "properties": [ "exif:pixelXDimension", "exif:pixelYDimension", "exif:isoSpeedRatings"]' +
' }' +
' ]' +
' }]' +
' }');
configEditorPage.clickSaveMetadataButton();
navigationBarPage.clickContentServicesButton();
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.clickOnInformationButton();
metadataViewPage.clickMetadatGroup('IMAGE');
metadataViewPage.checkPopertyIsVisible('properties.exif:pixelXDimension', 'textitem');
metadataViewPage.checkPopertyIsVisible('properties.exif:pixelYDimension', 'textitem');
metadataViewPage.checkPopertyIsNotVisible('properties.exif:isoSpeedRatings', 'textitem');
metadataViewPage.editIconClick();
metadataViewPage.checkPopertyIsVisible('properties.exif:isoSpeedRatings', 'textitem');
});
it('[C260185] Should ignore not existing aspect when present in the configuration', () => {
navigationBarPage.clickConfigEditorButton();
configEditorPage.clickClearMetadataButton();
configEditorPage.enterMetadataConfiguration(' {' +
' "presets": {' +
' "default": {' +
' "exif:exif": "*",' +
' "cm:versionable": "*",' +
' "not:exists": "*"' +
' }' +
' }' +
' }');
configEditorPage.clickSaveMetadataButton();
navigationBarPage.clickContentServicesButton();
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.clickOnInformationButton();
metadataViewPage.checkkMetadatGroupIsPresent('EXIF');
metadataViewPage.checkkMetadatGroupIsPresent('properties');
metadataViewPage.checkkMetadatGroupIsPresent('Versionable');
metadataViewPage.checkkMetadatGroupIsNotPresent('exists');
});
it('[C260183] Should show all the aspect if the content-metadata configuration is NOT provided' , () => {
navigationBarPage.clickConfigEditorButton();
configEditorPage.clickClearMetadataButton();
configEditorPage.enterMetadataConfiguration('{ }');
configEditorPage.clickSaveMetadataButton();
navigationBarPage.clickContentServicesButton();
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.clickOnInformationButton();
metadataViewPage.checkkMetadatGroupIsPresent('EXIF');
metadataViewPage.checkkMetadatGroupIsPresent('properties');
metadataViewPage.checkkMetadatGroupIsPresent('Versionable');
metadataViewPage.checkkMetadatGroupIsPresent('Titled');
metadataViewPage.checkkMetadatGroupIsPresent('Auditable');
metadataViewPage.checkkMetadatGroupIsPresent('Author');
metadataViewPage.checkkMetadatGroupIsPresent('Content');
});
it('[C260182] Should show all the aspects if the default configuration contains the * symbol' , () => {
navigationBarPage.clickConfigEditorButton();
configEditorPage.clickClearMetadataButton();
configEditorPage.enterMetadataConfiguration('{' +
' "presets": {' +
' "default": "*"' +
' }' +
'}');
configEditorPage.clickSaveMetadataButton();
navigationBarPage.clickContentServicesButton();
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.clickOnInformationButton();
metadataViewPage.checkkMetadatGroupIsPresent('EXIF');
metadataViewPage.checkkMetadatGroupIsPresent('properties');
metadataViewPage.checkkMetadatGroupIsPresent('Versionable');
metadataViewPage.checkkMetadatGroupIsPresent('Titled');
metadataViewPage.checkkMetadatGroupIsPresent('Auditable');
metadataViewPage.checkkMetadatGroupIsPresent('Author');
metadataViewPage.checkkMetadatGroupIsPresent('Content');
});
it('[C268899] Should be possible use a Translation key as Title of a metadata group' , () => {
navigationBarPage.clickConfigEditorButton();
configEditorPage.clickClearMetadataButton();
configEditorPage.enterMetadataConfiguration('{' +
' "presets": {' +
' "default": [' +
' {' +
' "title": "GROUP-TITLE1-TRANSLATION-KEY",' +
' "items": [' +
' {' +
' "aspect": "exif:exif",' +
' "properties": "*"' +
' }' +
' ]' +
' },' +
' {' +
' "title": "GROUP-TITLE2-TRANSLATION-KEY",' +
' "items": [' +
' {' +
' "aspect": "kitten:food",' +
' "properties": [' +
' "kitten:favourite-food",' +
' "kitten:recommended-food"' +
' ]' +
' }' +
' ]' +
' }' +
' ]' +
' }' +
'}');
configEditorPage.clickSaveMetadataButton();
navigationBarPage.clickContentServicesButton();
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.clickOnInformationButton();
metadataViewPage.checkkMetadatGroupIsPresent('GROUP-TITLE1-TRANSLATION-KEY');
metadataViewPage.checkkMetadatGroupIsPresent('GROUP-TITLE2-TRANSLATION-KEY');
expect(metadataViewPage.getkMetadatGroupTitle('GROUP-TITLE1-TRANSLATION-KEY')).toBe('CUSTOM TITLE TRANSLATION ONE');
expect(metadataViewPage.getkMetadatGroupTitle('GROUP-TITLE2-TRANSLATION-KEY')).toBe('CUSTOM TITLE TRANSLATION TWO');
});
it('[C268899] Should be possible use a custom preset' , () => {
navigationBarPage.clickConfigEditorButton();
configEditorPage.clickClearMetadataButton();
configEditorPage.enterMetadataConfiguration('{' +
' "presets": {' +
' "custom-preset": {' +
' "exif:exif": "*",' +
' "cm:versionable": "*"' +
' }' +
' }' +
'}');
configEditorPage.clickSaveMetadataButton();
navigationBarPage.clickContentServicesButton();
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.enablePreset();
metadataViewPage.enterPresetText('custom-preset');
metadataViewPage.clickOnInformationButton();
metadataViewPage.checkkMetadatGroupIsPresent('properties');
metadataViewPage.checkkMetadatGroupIsPresent('EXIF');
metadataViewPage.checkkMetadatGroupIsPresent('Versionable');
});
});

View File

@@ -0,0 +1,313 @@
/*!
* @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 NavigationBarPage = require('../../pages/adf/navigationBarPage');
import CardViewPage = require('../../pages/adf/metadataViewPage');
import TestConfig = require('../../test.config');
import resources = require('../../util/resources');
import AlfrescoApi = require('alfresco-js-api-node');
import { UsersActions } from '../../actions/users.actions';
import { AppsActions } from '../../actions/APS/apps.actions';
import CardViewPageComponent = require('../../pages/adf/cardViewPageComponent');
import Util = require('../../util/util');
describe('CardView Component', () => {
const loginPage = new LoginPage();
const navigationBarPage = new NavigationBarPage();
const cardViewPageComponent = new CardViewPageComponent();
const metadataViewPage = new CardViewPage();
const app = resources.Files.APP_WITH_PROCESSES;
beforeAll(async (done) => {
const apps = new AppsActions();
const users = new UsersActions();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'BPM',
hostBpm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
let user = await users.createTenantAndUser(this.alfrescoJsApi);
await this.alfrescoJsApi.login(user.email, user.password);
await apps.importPublishDeployApp(this.alfrescoJsApi, app.file_location);
loginPage.loginToProcessServicesUsingUserModel(user);
navigationBarPage.clickCardViewButton();
done();
});
afterEach(() => {
cardViewPageComponent.clickOnResetButton();
});
describe('key-value pair ', () => {
it('[C279937] Should the label be present', () => {
let label = element(by.xpath('div[data-automation-id="card-key-value-pairs-label-key-value-pairs"]'));
Util.waitUntilElementIsPresent(label);
});
it('[C279898] Should be possible edit key-value pair properties', () => {
cardViewPageComponent.clickOnAddButton();
cardViewPageComponent.setName('testName');
cardViewPageComponent.setValue('testValue');
cardViewPageComponent.clickOnAddButton();
cardViewPageComponent.waitForOutput();
expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Key-Value Pairs Item] - [{"name":"testName","value":"testValue"}]');
cardViewPageComponent.deletePairsValues();
expect(cardViewPageComponent.getOutputText(1)).toBe('[CardView Key-Value Pairs Item] - []');
});
});
describe('Selectbox', () => {
it('[C279939] Should the label be present', () => {
let label = element(by.xpath('div[data-automation-id="card-select-label-select"]'));
Util.waitUntilElementIsPresent(label);
});
it('[C279899] Should be possible edit selectbox item', () => {
cardViewPageComponent.clickSelectBox();
cardViewPageComponent.selectValueFromComboBox(1);
expect(cardViewPageComponent.getOutputText(0))
.toBe('[CardView Select Item] - two');
});
});
describe('Text', () => {
it('[C279937] Should the label be present', () => {
let label = element(by.xpath('div[data-automation-id="card-textitem-label-name"]'));
Util.waitUntilElementIsPresent(label);
});
it('[C279943] Should be present a default value', () => {
expect(cardViewPageComponent.getTextFieldText()).toBe('Spock');
});
it('[C279934] Should be possible edit text item', () => {
cardViewPageComponent
.clickOnTextField()
.enterTextField('example')
.clickOnTextSaveIcon();
expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Text Item] - example');
});
it('[C279944] Should be possible undo text item modify when click on the clear button', () => {
cardViewPageComponent
.clickOnTextField()
.enterTextField('example')
.clickOnTextClearIcon();
expect(cardViewPageComponent.getTextFieldText()).toBe('Spock');
});
});
describe('Int', () => {
it('[C279940] Should the label be present', () => {
let label = element(by.xpath('div[data-automation-id="card-textitem-label-int"]'));
Util.waitUntilElementIsPresent(label);
});
it('[C279945] Should be present a default value', () => {
expect(cardViewPageComponent.getIntFieldText()).toBe('213');
});
it('[C279946] Should be possible edit int item', () => {
cardViewPageComponent
.clickOnIntField()
.enterIntField('99999')
.clickOnIntSaveIcon();
expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Int Item] - 99999');
});
it('[C279947] Should not be possible add string value to the int item', () => {
cardViewPageComponent
.clickOnIntField()
.enterIntField('string value')
.clickOnIntSaveIcon();
expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format');
});
it('[C279948] Should not be possible add float value to the int item', () => {
cardViewPageComponent
.clickOnIntField()
.enterIntField('0.22')
.clickOnIntSaveIcon();
expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format');
});
it('[C279949] Should not be possible have an empty value', () => {
cardViewPageComponent
.clickOnIntField()
.enterIntField(' ')
.clickOnIntSaveIcon();
expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format');
});
it('[C279950] Should return an error when the value is > 2147483647', () => {
cardViewPageComponent
.clickOnIntField()
.enterIntField('214748367')
.clickOnIntSaveIcon();
expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Int Item] - 214748367');
cardViewPageComponent
.clickOnIntField()
.enterIntField('2147483648')
.clickOnIntSaveIcon();
expect(cardViewPageComponent.getErrorInt()).toBe('Use an integer format');
});
it('[C279951] Should be possible undo item modify when click on the clear button', () => {
cardViewPageComponent
.clickOnIntField()
.enterIntField('999')
.clickOnIntClearIcon();
expect(cardViewPageComponent.getIntFieldText()).toBe('213');
});
});
describe('Float', () => {
it('[C279941] Should the label be present', () => {
let label = element(by.xpath('div[data-automation-id="card-textitem-label-float"]'));
Util.waitUntilElementIsPresent(label);
});
it('[C279952] Should be present a default value', () => {
expect(cardViewPageComponent.getFloatFieldText()).toBe('9.9');
});
it('[C279953] Should be possible edit float item', () => {
cardViewPageComponent
.clickOnFloatField()
.enterFloatField('77.33')
.clickOnFloatSaveIcon();
expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Float Item] - 77.33');
});
it('[C279954] Should not be possible add string value to the float item', () => {
cardViewPageComponent
.clickOnFloatField()
.enterFloatField('string value')
.clickOnFloatSaveIcon();
expect(cardViewPageComponent.getErrorFloat()).toBe('Use a number format');
});
it('[C279955] Should be possible undo item item modify when click on the clear button', () => {
cardViewPageComponent
.clickOnFloatField()
.enterFloatField('77.33')
.clickOnFloatClearIcon();
expect(cardViewPageComponent.getFloatFieldText()).toBe('9.9');
});
it('[C279956] Should not be possible have an empty value', () => {
cardViewPageComponent
.clickOnFloatField()
.enterFloatField(' ')
.clickOnFloatSaveIcon();
expect(cardViewPageComponent.getErrorFloat()).toBe('Use a number format');
});
});
describe('Boolean', () => {
it('[C279942] Should the label be present', () => {
let label = element(by.xpath('div[data-automation-id="card-boolean-label-boolean"]'));
Util.waitUntilElementIsPresent(label);
});
it('[C279957] Should be possible edit the checkbox value when click on it', () => {
cardViewPageComponent.checkboxClick();
expect(cardViewPageComponent.getOutputText(0)).toBe('[CardView Boolean Item] - false');
cardViewPageComponent.checkboxClick();
expect(cardViewPageComponent.getOutputText(1)).toBe('[CardView Boolean Item] - true');
});
});
describe('Date and DateTime', () => {
it('[C279961] Should the label be present', () => {
let label = element(by.xpath('div[data-automation-id="card-dateitem-label-date"]'));
Util.waitUntilElementIsPresent(label);
let label = element(by.xpath('div[data-automation-id="card-dateitem-label-datetime"]'));
Util.waitUntilElementIsPresent(label);
});
it('[C279962] Should be present a default value', () => {
expect(metadataViewPage.getPropertyText('date', 'date')).toEqual('24.12.1983');
expect(metadataViewPage.getPropertyText('datetime', 'datetime')).toEqual('Dec 24 1983 10:00');
});
});
it('[C279936] Should not be possible edit any parameter when editable property is false', () => {
cardViewPageComponent.disableEdit();
let editIconText = element(by.xpath('mat-icon[data-automation-id="card-textitem-edit-icon-name"]'));
let editIconInt = element(by.xpath('mat-icon[data-automation-id="card-textitem-edit-icon-int"]'));
let editIconFloat = element(by.xpath('mat-icon[data-automation-id="card-textitem-edit-icon-float"]'));
let editIconKey = element(by.xpath('mat-icon[data-automation-id="card-key-value-pairs-button-key-value-pairs"]'));
let editIconData = element(by.xpath('mat-datetimepicker-toggle'));
Util.waitUntilElementIsNotVisible(editIconText);
Util.waitUntilElementIsNotVisible(editIconInt);
Util.waitUntilElementIsNotVisible(editIconFloat);
Util.waitUntilElementIsNotVisible(editIconKey);
Util.waitUntilElementIsNotVisible(editIconData);
});
});

View File

@@ -0,0 +1,158 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import LoginPage = require('../../pages/adf/loginPage');
import ContentServicesPage = require('../../pages/adf/contentServicesPage');
import ViewerPage = require('../../pages/adf/viewerPage');
import CardViewPage = require('../../pages/adf/metadataViewPage');
import AcsUserModel = require('../../models/ACS/acsUserModel');
import FileModel = require('../../models/ACS/fileModel');
import TestConfig = require('../../test.config');
import resources = require('../../util/resources');
import dateFormat = require('dateformat');
import AlfrescoApi = require('alfresco-js-api-node');
import { UploadActions } from '../../actions/ACS/upload.actions';
import fs = require('fs');
import path = require('path');
describe('CardView Component - properties', () => {
let METADATA = {
DATAFORMAT: 'mmm dd yyyy',
TITLE: 'Details',
COMMENTS_TAB: 'COMMENTS',
PROPERTY_TAB: 'PROPERTIES',
DEFAULT_ASPECT: 'Properties',
MORE_INFO_BUTTON: 'More information',
LESS_INFO_BUTTON: 'Less information',
ARROW_DOWN: 'keyboard_arrow_down',
ARROW_UP: 'keyboard_arrow_up',
EDIT_BUTTON_TOOLTIP: 'Edit'
};
let loginPage = new LoginPage();
let contentServicesPage = new ContentServicesPage();
let viewerPage = new ViewerPage();
let metadataViewPage = new CardViewPage();
let acsUser = new AcsUserModel();
let pngFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PNG.file_name,
'location': resources.Files.ADF_DOCUMENTS.PNG.file_location
});
beforeAll(async (done) => {
let uploadActions = new UploadActions();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
let pdfUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, pngFileModel.location, pngFileModel.name, '-my-');
Object.assign(pngFileModel, pdfUploadedFile.entry);
pngFileModel.update(pdfUploadedFile.entry);
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.navigateToDocumentList();
done();
});
afterEach(() => {
viewerPage.clickCloseButton();
});
it('[C246516] Should show/hide the empty metadata when the property displayEmpty is true/false', () => {
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.editIconIsDisplayed();
expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB);
metadataViewPage.clickOnInformationButton();
metadataViewPage.clickMetadatGroup('EXIF');
metadataViewPage.checkPopertyIsVisible('properties.exif:flash', 'boolean');
metadataViewPage.checkPopertyIsNotVisible('properties.exif:model', 'textitem');
metadataViewPage.enableDisplayEmpty();
metadataViewPage.checkPopertyIsVisible('properties.exif:flash', 'boolean');
metadataViewPage.checkPopertyIsVisible('properties.exif:model', 'textitem');
});
it('[C260179] Should not be possible edit the basic property when readOnly is true', () => {
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.editIconIsDisplayed();
metadataViewPage.enableReadonly();
metadataViewPage.editIconIsNotDisplayed();
});
it('[C268965] Should multi property allow expand multi accordion at the same time when set', () => {
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.clickOnInformationButton();
metadataViewPage.chekMetadatGroupIsNotExpand('EXIF');
metadataViewPage.chekMetadatGroupIsNotExpand('properties');
metadataViewPage.clickMetadatGroup('properties');
metadataViewPage.chekMetadatGroupIsNotExpand('EXIF');
metadataViewPage.chekMetadatGroupIsExpand('properties');
metadataViewPage.clickMetadatGroup('EXIF');
metadataViewPage.chekMetadatGroupIsExpand('EXIF');
metadataViewPage.chekMetadatGroupIsNotExpand('properties');
metadataViewPage.enableMulti();
metadataViewPage.clickMetadatGroup('properties');
metadataViewPage.chekMetadatGroupIsExpand('EXIF');
metadataViewPage.chekMetadatGroupIsExpand('properties');
});
});

View File

@@ -0,0 +1,330 @@
/*!
* @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 CardViewPage = require('../../pages/adf/metadataViewPage');
import ContentListPage = require('../../pages/adf/dialog/contentList');
import NavigationBarPage = require('../../pages/adf/navigationBarPage');
import AcsUserModel = require('../../models/ACS/acsUserModel');
import FileModel = require('../../models/ACS/fileModel');
import TestConfig = require('../../test.config');
import resources = require('../../util/resources');
import dateFormat = require('dateformat');
import AlfrescoApi = require('alfresco-js-api-node');
import { UploadActions } from '../../actions/ACS/upload.actions';
import fs = require('fs');
import path = require('path');
import Util = require('../../util/util');
describe('Metadata component', () => {
const METADATA = {
DATAFORMAT: 'mmm dd yyyy',
TITLE: 'Details',
COMMENTS_TAB: 'COMMENTS',
PROPERTY_TAB: 'PROPERTIES',
DEFAULT_ASPECT: 'Properties',
MORE_INFO_BUTTON: 'More information',
LESS_INFO_BUTTON: 'Less information',
ARROW_DOWN: 'keyboard_arrow_down',
ARROW_UP: 'keyboard_arrow_up',
EDIT_BUTTON_TOOLTIP: 'Edit'
};
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const viewerPage = new ViewerPage();
const metadataViewPage = new CardViewPage();
const contentListPage = new ContentListPage();
const navigationBarPage = new NavigationBarPage();
let acsUser = new AcsUserModel();
let consumerUser = new AcsUserModel();
let folderName = 'Metadata Folder';
let pngFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PNG.file_name,
'location': resources.Files.ADF_DOCUMENTS.PNG.file_location
});
beforeAll(async (done) => {
let uploadActions = new UploadActions();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
await uploadActions.uploadFolder(this.alfrescoJsApi, folderName, '-my-');
let pngUploadedFile = await uploadActions.uploadFile(this.alfrescoJsApi, pngFileModel.location, pngFileModel.name, '-my-');
Object.assign(pngFileModel, pngUploadedFile.entry);
pngFileModel.update(pngUploadedFile.entry);
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.navigateToDocumentList();
done();
});
it('[C245652] Properties', () => {
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
expect(metadataViewPage.getTitle()).toEqual(METADATA.TITLE);
expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB);
expect(metadataViewPage.getExpandedAspectName()).toEqual(METADATA.DEFAULT_ASPECT);
expect(metadataViewPage.getName()).toEqual(pngFileModel.name);
expect(metadataViewPage.getCreator()).toEqual(pngFileModel.getCreatedByUser().displayName);
expect(metadataViewPage.getCreatedDate()).toEqual(dateFormat(pngFileModel.createdAt, METADATA.DATAFORMAT));
expect(metadataViewPage.getModifier()).toEqual(pngFileModel.getCreatedByUser().displayName);
expect(metadataViewPage.getModifiedDate()).toEqual(dateFormat(pngFileModel.createdAt, METADATA.DATAFORMAT));
expect(metadataViewPage.getMimetypeName()).toEqual(pngFileModel.getContent().mimeTypeName);
expect(metadataViewPage.getSize()).toEqual(pngFileModel.getContent().getSizeInBytes());
metadataViewPage.editIconIsDisplayed();
metadataViewPage.informationButtonIsDisplayed();
expect(metadataViewPage.getInformationButtonText()).toEqual(METADATA.MORE_INFO_BUTTON);
expect(metadataViewPage.getInformationIconText()).toEqual(METADATA.ARROW_DOWN);
viewerPage.clickCloseButton();
});
it('[C272769] Information button', () => {
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.informationButtonIsDisplayed();
metadataViewPage.clickOnInformationButton();
expect(metadataViewPage.getInformationButtonText()).toEqual(METADATA.LESS_INFO_BUTTON);
expect(metadataViewPage.getInformationIconText()).toEqual(METADATA.ARROW_UP);
viewerPage.clickCloseButton();
});
it('[C270952] Info icon', () => {
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab().informationButtonIsDisplayed();
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsNotDisplayed();
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
expect(viewerPage.getActiveTab()).toEqual(METADATA.COMMENTS_TAB);
metadataViewPage.clickOnPropertiesTab();
expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB);
expect(metadataViewPage.getEditIconTooltip()).toEqual(METADATA.EDIT_BUTTON_TOOLTIP);
viewerPage.clickCloseButton();
});
it('[C245654] Should be possible edit the basic Metadata Info of a Document', () => {
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.editIconIsDisplayed();
expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB);
metadataViewPage.editIconClick();
metadataViewPage.editPropertyIconIsDisplayed('name');
metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title');
metadataViewPage.editPropertyIconIsDisplayed('properties.cm:description');
expect(metadataViewPage.getPropertyIconTooltip('name', 'edit')).toEqual('Edit');
expect(metadataViewPage.getPropertyIconTooltip('properties.cm:title', 'edit')).toEqual('Edit');
expect(metadataViewPage.getPropertyIconTooltip('properties.cm:description', 'edit')).toEqual('Edit');
metadataViewPage.clickEditPropertyIcons('name');
metadataViewPage.updatePropertyIconIsDisplayed('name');
metadataViewPage.clearPropertyIconIsDisplayed('name');
metadataViewPage.enterPropertyText('name', 'exampleText');
metadataViewPage.clickClearPropertyIcon('name');
expect(metadataViewPage.getPropertyText('name')).toEqual(resources.Files.ADF_DOCUMENTS.PNG.file_name);
metadataViewPage.clickEditPropertyIcons('name');
metadataViewPage.enterPropertyText('name', 'exampleText.png');
metadataViewPage.clickUpdatePropertyIcon('name');
expect(metadataViewPage.getPropertyText('name')).toEqual('exampleText.png');
metadataViewPage.clickEditPropertyIcons('properties.cm:title');
metadataViewPage.enterPropertyText('properties.cm:title', 'example title');
metadataViewPage.clickUpdatePropertyIcon('properties.cm:title');
expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title');
metadataViewPage.clickEditPropertyIcons('properties.cm:description');
metadataViewPage.enterDescriptionText('example description');
metadataViewPage.clickUpdatePropertyIcon('properties.cm:description');
expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description');
viewerPage.clickCloseButton();
viewerPage.viewFile('exampleText.png');
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.editIconIsDisplayed();
expect(metadataViewPage.getPropertyText('name')).toEqual('exampleText.png');
expect(metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title');
expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description');
metadataViewPage.editIconClick();
metadataViewPage.clickEditPropertyIcons('name');
metadataViewPage.enterPropertyText('name', resources.Files.ADF_DOCUMENTS.PNG.file_name);
metadataViewPage.clickUpdatePropertyIcon('name');
expect(metadataViewPage.getPropertyText('name')).toEqual(resources.Files.ADF_DOCUMENTS.PNG.file_name);
viewerPage.clickCloseButton();
});
it('[C279960] Should show the last username modifier when modify a File', () => {
let fileUrl;
viewerPage.viewFile(pngFileModel.name);
browser.getCurrentUrl().then((currentUrl) => {
fileUrl = currentUrl;
});
loginPage.loginToContentServices(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
browser.controlFlow().execute(() => {
browser.get(fileUrl);
});
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.editIconIsDisplayed();
expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB);
metadataViewPage.editIconClick();
metadataViewPage.clickEditPropertyIcons('properties.cm:description');
metadataViewPage.enterDescriptionText('check author example description');
metadataViewPage.clickUpdatePropertyIcon('properties.cm:description');
expect(metadataViewPage.getPropertyText('properties.cm:description')).toEqual('check author example description');
loginPage.loginToContentServicesUsingUserModel(acsUser);
browser.controlFlow().execute(() => {
browser.get(fileUrl);
});
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
expect(metadataViewPage.getPropertyText('modifiedByUser.displayName')).toEqual('Administrator');
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.navigateToDocumentList();
});
it('[C261157] Should be possible use the metadata component When the node is a Folder', () => {
contentListPage.metadataContent(folderName);
expect(metadataViewPage.getPropertyText('name')).toEqual(folderName);
expect(metadataViewPage.getPropertyText('createdByUser.displayName')).toEqual(acsUser.firstName + ' ' + acsUser.lastName);
browser.refresh();
});
it('[C261158] Should be possible edit the metadata When the node is a Folder', () => {
contentListPage.metadataContent(folderName);
metadataViewPage.editIconClick();
metadataViewPage.clickEditPropertyIcons('name');
metadataViewPage.enterPropertyText('name', 'newnameFolder');
metadataViewPage.clickClearPropertyIcon('name');
expect(metadataViewPage.getPropertyText('name')).toEqual(folderName);
metadataViewPage.clickEditPropertyIcons('name');
metadataViewPage.enterPropertyText('name', 'newnameFolder');
metadataViewPage.clickUpdatePropertyIcon('name');
expect(metadataViewPage.getPropertyText('name')).toEqual('newnameFolder');
metadataViewPage.clickEditPropertyIcons('name');
metadataViewPage.enterPropertyText('name', folderName);
metadataViewPage.clickUpdatePropertyIcon('name');
expect(metadataViewPage.getPropertyText('name')).toEqual(folderName);
browser.refresh();
});
it('[C260181] Should be possible edit all the metadata aspect', () => {
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.editIconIsDisplayed();
expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB);
metadataViewPage.clickOnInformationButton();
metadataViewPage.clickMetadatGroup('EXIF');
metadataViewPage.editIconClick();
metadataViewPage.clickEditPropertyIcons('properties.exif:software');
metadataViewPage.enterPropertyText('properties.exif:software', 'test custom text software');
metadataViewPage.clickUpdatePropertyIcon('properties.exif:software');
expect(metadataViewPage.getPropertyText('properties.exif:software')).toEqual('test custom text software');
metadataViewPage.clickEditPropertyIcons('properties.exif:isoSpeedRatings');
metadataViewPage.enterPropertyText('properties.exif:isoSpeedRatings', 'test custom text isoSpeedRatings');
metadataViewPage.clickUpdatePropertyIcon('properties.exif:isoSpeedRatings');
expect(metadataViewPage.getPropertyText('properties.exif:isoSpeedRatings')).toEqual('test custom text isoSpeedRatings');
metadataViewPage.clickEditPropertyIcons('properties.exif:fNumber');
metadataViewPage.enterPropertyText('properties.exif:fNumber', 22);
metadataViewPage.clickUpdatePropertyIcon('properties.exif:fNumber');
expect(metadataViewPage.getPropertyText('properties.exif:fNumber')).toEqual('22');
});
});

View File

@@ -0,0 +1,163 @@
/*!
* @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 CardViewPage = require('../../pages/adf/metadataViewPage');
import ContentListPage = require('../../pages/adf/dialog/contentList');
import NavigationBarPage = require('../../pages/adf/navigationBarPage');
import AcsUserModel = require('../../models/ACS/acsUserModel');
import FileModel = require('../../models/ACS/fileModel');
import TestConfig = require('../../test.config');
import resources = require('../../util/resources');
import dateFormat = require('dateformat');
import AlfrescoApi = require('alfresco-js-api-node');
import { UploadActions } from '../../actions/ACS/upload.actions';
import fs = require('fs');
import path = require('path');
import Util = require('../../util/util');
describe('permissions', () => {
const METADATA = {
DATAFORMAT: 'mmm dd yyyy',
TITLE: 'Details',
COMMENTS_TAB: 'COMMENTS',
PROPERTY_TAB: 'PROPERTIES',
DEFAULT_ASPECT: 'Properties',
MORE_INFO_BUTTON: 'More information',
LESS_INFO_BUTTON: 'Less information',
ARROW_DOWN: 'keyboard_arrow_down',
ARROW_UP: 'keyboard_arrow_up',
EDIT_BUTTON_TOOLTIP: 'Edit'
};
const loginPage = new LoginPage();
const contentServicesPage = new ContentServicesPage();
const viewerPage = new ViewerPage();
const metadataViewPage = new CardViewPage();
const contentListPage = new ContentListPage();
const navigationBarPage = new NavigationBarPage();
let acsUser = new AcsUserModel();
let consumerUser = new AcsUserModel();
let collaboratorUser = new AcsUserModel();
let contributorUser = new AcsUserModel();
let site;
let pngFileModel = new FileModel({
'name': resources.Files.ADF_DOCUMENTS.PNG.file_name,
'location': resources.Files.ADF_DOCUMENTS.PNG.file_location
});
beforeAll(async (done) => {
let uploadActions = new UploadActions();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(consumerUser);
await this.alfrescoJsApi.core.peopleApi.addPerson(collaboratorUser);
await this.alfrescoJsApi.core.peopleApi.addPerson(contributorUser);
site = await this.alfrescoJsApi.core.sitesApi.createSite({
title: Util.generateRandomString(),
visibility: 'PUBLIC'
});
await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, {
id: consumerUser.id,
role: 'SiteConsumer'
});
await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, {
id: collaboratorUser.id,
role: 'SiteCollaborator'
});
await this.alfrescoJsApi.core.sitesApi.addSiteMember(site.entry.id, {
id: contributorUser.id,
role: 'SiteContributor'
});
await uploadActions.uploadFile(this.alfrescoJsApi, pngFileModel.location, pngFileModel.name, site.entry.guid);
done();
});
it('[C274692] Should not be possible edit metadata properties when the user is a consumer user', () => {
loginPage.loginToContentServicesUsingUserModel(consumerUser);
navigationBarPage.openContentServicesFolder(site.entry.guid);
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.editIconIsNotDisplayed();
});
it('[C279971] Should be possible edit metadata properties when the user is a collaborator user', () => {
loginPage.loginToContentServicesUsingUserModel(collaboratorUser);
navigationBarPage.openContentServicesFolder(site.entry.guid);
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.editIconIsDisplayed();
expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB);
metadataViewPage.clickOnInformationButton();
metadataViewPage.clickMetadatGroup('EXIF');
metadataViewPage.editIconIsDisplayed();
});
it('[C279972] Should be possible edit metadata properties when the user is a contributor user', () => {
loginPage.loginToContentServicesUsingUserModel(collaboratorUser);
navigationBarPage.openContentServicesFolder(site.entry.guid);
viewerPage.viewFile(pngFileModel.name);
viewerPage.clickInfoButton();
viewerPage.checkInfoSideBarIsDisplayed();
metadataViewPage.clickOnPropertiesTab();
metadataViewPage.editIconIsDisplayed();
expect(viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB);
metadataViewPage.clickOnInformationButton();
metadataViewPage.clickMetadatGroup('EXIF');
metadataViewPage.editIconIsDisplayed();
});
});

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 DataTablePage = require('../../pages/adf/dataTablePage');
import TestConfig = require('../../test.config');
import AcsUserModel = require('../../models/ACS/acsUserModel');
import AlfrescoApi = require('alfresco-js-api-node');
describe('Datatable component - selection', () => {
let dataTablePage = new DataTablePage();
let loginPage = new LoginPage();
let acsUser = new AcsUserModel();
beforeAll(async (done) => {
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
loginPage.loginToContentServicesUsingUserModel(acsUser);
dataTablePage.goToDatatable();
done();
});
it('[C213258] Should be possible change the selection modes when change the selectionMode property', () => {
dataTablePage.selectRow('2');
dataTablePage.checkRowIsSelected('2');
dataTablePage.getNumberOfSelectedRows().then((result) => {
expect(result).toEqual(1);
});
dataTablePage.selectRow('3');
dataTablePage.checkRowIsSelected('3');
dataTablePage.getNumberOfSelectedRows().then((result) => {
expect(result).toEqual(1);
});
dataTablePage.selectSelectionMode('Multiple');
dataTablePage.selectRow('1');
dataTablePage.checkRowIsSelected('1');
dataTablePage.selectRowWithKeyboard('3');
dataTablePage.checkRowIsSelected('1');
dataTablePage.checkRowIsSelected('3');
dataTablePage.checkRowIsNotSelected('2');
dataTablePage.checkRowIsNotSelected('4');
dataTablePage.selectSelectionMode('None');
dataTablePage.selectRow('1');
dataTablePage.checkNoRowIsSelected();
});
it('[C260059] Should be possible select multiple row when multiselect is true', () => {
dataTablePage.clickMultiSelect();
dataTablePage.clickCheckbox('1');
dataTablePage.checkRowIsChecked('1');
dataTablePage.clickCheckbox('3');
dataTablePage.checkRowIsChecked('3');
dataTablePage.checkRowIsNotChecked('2');
dataTablePage.checkRowIsNotChecked('4');
dataTablePage.clickCheckbox('3');
dataTablePage.checkRowIsNotChecked('3');
dataTablePage.checkRowIsChecked('1');
});
it('[C260058] Should be possible select all the rows when multiselect is true', () => {
dataTablePage.checkAllRows();
dataTablePage.checkRowIsChecked('1');
dataTablePage.checkRowIsChecked('2');
dataTablePage.checkRowIsChecked('3');
dataTablePage.checkRowIsChecked('4');
});
it('[C277262] Should be possible reset the selected row when click on the reset button', () => {
dataTablePage.checkRowIsChecked('1');
dataTablePage.checkRowIsChecked('2');
dataTablePage.checkRowIsChecked('3');
dataTablePage.checkRowIsChecked('4');
dataTablePage.clickReset();
dataTablePage.checkNoRowIsSelected();
});
});

View File

@@ -0,0 +1,73 @@
/*!
* @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.js');
import DataTablePage = require('../../pages/adf/dataTablePage.js');
import AcsUserModel = require('../../models/ACS/acsUserModel.js');
import TestConfig = require('../../test.config.js');
import AlfrescoApi = require('alfresco-js-api-node');
describe('Datatable component', () => {
let dataTablePage = new DataTablePage();
let loginPage = new LoginPage();
let acsUser = new AcsUserModel();
beforeAll(async (done) => {
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
loginPage.loginToContentServicesUsingUserModel(acsUser);
dataTablePage.goToDatatable();
done();
});
it('[C91314] Should be possible add new row to the table', () => {
dataTablePage.getNumberOfRows().then((result) => {
dataTablePage.addRow();
expect(dataTablePage.getNumberOfRows()).toEqual(result + 1);
dataTablePage.addRow();
expect(dataTablePage.getNumberOfRows()).toEqual(result + 2);
});
});
it('[C260039] Should be possible replace rows', () => {
dataTablePage.replaceRows(1);
});
it('[C260041] Should be possible replace columns', () => {
dataTablePage.replaceColumns();
});
it('[C277314] Should filter the table rows when the input filter is passed', () => {
expect(dataTablePage.getNumberOfRows()).toEqual(5);
dataTablePage.insertFilter('Name');
expect(dataTablePage.getNumberOfRows()).toEqual(4);
dataTablePage.insertFilter('I');
expect(dataTablePage.getNumberOfRows()).toEqual(2);
});
});

View File

@@ -0,0 +1,81 @@
/*!
* @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 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('Enable infinite scrolling', () => {
let loginPage = new LoginPage();
let contentServicesPage = new ContentServicesPage();
let acsUser = new AcsUserModel();
let folderModel = new FolderModel({ 'name': 'folderOne' });
let fileNames = [], nrOfFiles = 30;
let fileNum = 0;
let files = {
base: 'newFile',
extension: '.txt'
};
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);
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
fileNames = Util.generateSeqeunceFiles(1, nrOfFiles, files.base, files.extension);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
let folderUploadedModel = await uploadActions.uploadFolder(this.alfrescoJsApi, folderModel.name, '-my-');
await uploadActions.createEmptyFiles(this.alfrescoJsApi, fileNames, folderUploadedModel.entry.id);
done();
});
it('Enable infinite scrolling', () => {
contentServicesPage.navigateToFolder(folderModel.name);
contentServicesPage.enableInfiniteScrolling();
contentServicesPage.clickLoadMoreButton();
for (fileNum; fileNum < nrOfFiles; fileNum++) {
contentServicesPage.checkContentIsDisplayed(fileNames[fileNum]);
}
});
});

View File

@@ -0,0 +1,250 @@
/*!
* @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 ProcessServicesPage = require('../../pages/adf/process_services/processServicesPage');
import NavigationBarPage = require('../../pages/adf/navigationBarPage');
import UserInfoDialog = require('../../pages/adf/dialog/userInfoDialog');
import TestConfig = require('../../test.config');
import AcsUserModel = require('../../models/ACS/acsUserModel');
import AdfSettingsPage = require('../../pages/adf/settingsPage');
import AlfrescoApi = require('alfresco-js-api-node');
import Util = require('../../util/util');
import { UploadActions } from '../../actions/ACS/upload.actions';
describe('Login component', () => {
let adfSettingsPage = new AdfSettingsPage();
let processServicesPage = new ProcessServicesPage();
let navigationBarPage = new NavigationBarPage();
let userInfoDialog = new UserInfoDialog();
let contentServicesPage = new ContentServicesPage();
let loginPage = new LoginPage();
let adminUserModel = new AcsUserModel({
'id': TestConfig.adf.adminUser,
'password': TestConfig.adf.adminPassword
});
let userA = new AcsUserModel();
let userB = new AcsUserModel();
let errorMessages = {
username: 'Your username needs to be at least 2 characters.',
invalid_credentials: 'You\'ve entered an unknown username or password',
password: 'Enter your password to sign in',
required: 'Required'
};
beforeAll(async (done) => {
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ALL',
hostEcm: TestConfig.adf.url,
hostBpm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(userA);
await this.alfrescoJsApi.core.peopleApi.addPerson(userB);
done();
});
it('[C260036] Username Required', () => {
loginPage.goToLoginPage();
loginPage.checkUsernameInactive();
loginPage.checkSignInButtonIsDisabled();
loginPage.enterUsername('A');
loginPage.checkUsernameTooltip(errorMessages.username);
loginPage.clearUsername();
loginPage.checkUsernameTooltip(errorMessages.required);
loginPage.checkUsernameHighlighted();
loginPage.checkSignInButtonIsDisabled();
});
it('[C260043] Enter Password to sign in', () => {
loginPage.goToLoginPage();
loginPage.checkPasswordInactive();
loginPage.checkSignInButtonIsDisabled();
loginPage.enterPassword('A');
loginPage.checkPasswordTooltipIsNotVisible();
loginPage.clearPassword();
loginPage.checkPasswordTooltip(errorMessages.password);
loginPage.checkPasswordHighlighted();
loginPage.checkSignInButtonIsDisabled();
});
it('[C260044] Username must be at least 2 characters long', () => {
loginPage.goToLoginPage();
loginPage.checkSignInButtonIsDisabled();
loginPage.enterUsername('A');
loginPage.checkUsernameTooltip(errorMessages.username);
loginPage.enterUsername('AB');
loginPage.checkUsernameTooltipIsNotVisible();
loginPage.checkSignInButtonIsDisabled();
loginPage.clearUsername();
});
it('[C260045] Login button is enabled', () => {
loginPage.goToLoginPage();
loginPage.enterUsername(adminUserModel.id);
loginPage.checkSignInButtonIsDisabled();
loginPage.enterPassword('a');
loginPage.checkSignInButtonIsEnabled();
loginPage.clearUsername(adminUserModel.id);
loginPage.clearPassword();
});
it('[C260046] You have entered an invalid username or password', () => {
loginPage.goToLoginPage();
loginPage.checkSignInButtonIsDisabled();
loginPage.enterUsername('test');
loginPage.enterPassword('test');
loginPage.checkSignInButtonIsEnabled();
loginPage.clickSignInButton();
loginPage.checkLoginError(errorMessages.invalid_credentials);
loginPage.clearUsername();
loginPage.clearPassword();
});
it('[C260047] Password field is crypted', () => {
loginPage.goToLoginPage();
loginPage.checkSignInButtonIsDisabled();
loginPage.enterPassword('test');
loginPage.showPassword();
loginPage.checkPasswordIsShown('test');
loginPage.hidePassword();
loginPage.checkPasswordIsHidden();
loginPage.clearPassword();
});
it('[C260048] Remember Need Help? and Register are displayed and hidden', () => {
loginPage.goToLoginPage();
loginPage.enableFooter();
loginPage.checkRememberIsDisplayed();
loginPage.checkNeedHelpIsDisplayed();
loginPage.checkRegisterDisplayed();
loginPage.disableFooter();
loginPage.checkRememberIsNotDisplayed();
loginPage.checkNeedHelpIsNotDisplayed();
loginPage.checkRegisterIsNotDisplayed();
});
it('[C260049] Login to Process Services with Content Services disabled', () => {
loginPage.goToLoginPage();
loginPage.checkSignInButtonIsDisabled();
adfSettingsPage.setProviderBpm();
loginPage.login(adminUserModel.id, adminUserModel.password);
navigationBarPage.clickProcessServicesButton();
processServicesPage.checkApsContainer();
navigationBarPage.clickContentServicesButton();
loginPage.waitForElements();
});
it('[C260050] Login to Content Services with Process Services disabled', () => {
loginPage.goToLoginPage();
loginPage.checkSignInButtonIsDisabled();
adfSettingsPage.setProviderEcm();
loginPage.login(TestConfig.adf.adminUser, TestConfig.adf.adminPassword);
navigationBarPage.clickContentServicesButton();
contentServicesPage.checkAcsContainer();
navigationBarPage.clickProcessServicesButton();
loginPage.waitForElements();
});
it('[C260051] Able to login to both Content Services and Process Services', () => {
adfSettingsPage.setProviderEcmBpm();
loginPage.checkSignInButtonIsDisabled();
adfSettingsPage.setProviderEcmBpm();
loginPage.login(adminUserModel.id, adminUserModel.password);
navigationBarPage.clickProcessServicesButton();
processServicesPage.checkApsContainer();
navigationBarPage.clickContentServicesButton();
contentServicesPage.checkAcsContainer();
navigationBarPage.clickLoginButton();
loginPage.waitForElements();
});
it('[C277754] Should the user be redirect to the login page when the Content Service session expire', () => {
adfSettingsPage.setProviderEcmBpm();
loginPage.login(adminUserModel.id, adminUserModel.password);
browser.executeScript('window.localStorage.removeItem("ticket-ECM");').then(() => {
browser.get(TestConfig.adf.url + '/files');
loginPage.waitForElements();
});
});
it('[C279932] Should successRoute property change the landing page when the user Login', () => {
adfSettingsPage.setProviderEcmBpm();
loginPage.enableSuccessRouteSwitch();
loginPage.enterSuccessRoute('activiti');
loginPage.login(adminUserModel.id, adminUserModel.password);
processServicesPage.checkApsContainer();
});
it('[C279931] Should the user be redirect to the login page when the Process Service session expire', () => {
adfSettingsPage.setProviderEcmBpm();
loginPage.login(adminUserModel.id, adminUserModel.password);
browser.executeScript('window.localStorage.removeItem("ticket-BPM");').then(() => {
browser.get(TestConfig.adf.url + '/activiti');
loginPage.waitForElements();
});
});
it('[C279930] Should a user still be logged-in when open a new tab', () => {
adfSettingsPage.setProviderEcmBpm();
loginPage.login(adminUserModel.id, adminUserModel.password);
Util.openNewTabInBrowser();
browser.getAllWindowHandles().then((handles) => {
browser.ignoreSynchronization = true;
browser.switchTo().window(handles[1]).then(() => {
browser.get(TestConfig.adf.url + '/activiti');
processServicesPage.checkApsContainer();
browser.get(TestConfig.adf.url + '/files');
contentServicesPage.checkAcsContainer();
});
});
});
it('[C276746] Login with two different users', () => {
loginPage.loginToContentServicesUsingUserModel(userA);
navigationBarPage.clickUserProfile();
expect(userInfoDialog.getContentHeaderTitle()).toEqual(userA.firstName + ' ' + userA.lastName);
expect(userInfoDialog.getContentEmail()).toEqual(userA.email);
loginPage.loginToContentServicesUsingUserModel(userB);
navigationBarPage.clickUserProfile();
expect(userInfoDialog.getContentHeaderTitle()).toEqual(userB.firstName + ' ' + userB.lastName);
expect(userInfoDialog.getContentEmail()).toEqual(userB.email);
});
it('[C279933] Should be possible change the login component logo when logoImageUrl is changed', () => {
adfSettingsPage.setProviderEcmBpm();
loginPage.enableLogoSwitch();
loginPage.enterLogo('https://rawgit.com/Alfresco/alfresco-ng2-components/master/assets/angular2.png');
loginPage.checkLoginImgURL('https://rawgit.com/Alfresco/alfresco-ng2-components/master/assets/angular2.png');
});
});

View File

@@ -0,0 +1,135 @@
/*!
* @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 ProcessServicesPage = require('../../pages/adf/process_services/processServicesPage');
import NavigationBarPage = require('../../pages/adf/navigationBarPage');
import TestConfig = require('../../test.config');
import AcsUserModel = require('../../models/ACS/acsUserModel');
import AdfSettingsPage = require('../../pages/adf/settingsPage');
import AlfrescoApi = require('alfresco-js-api-node');
import Util = require('../../util/util');
import { UploadActions } from '../../actions/ACS/upload.actions';
describe('Login component', () => {
let adfSettingsPage = new AdfSettingsPage();
let processServicesPage = new ProcessServicesPage();
let navigationBarPage = new NavigationBarPage();
let contentServicesPage = new ContentServicesPage();
let loginPage = new LoginPage();
let adminUserModel = new AcsUserModel({
'id': TestConfig.adf.adminUser,
'password': TestConfig.adf.adminPassword
});
beforeAll(async (done) => {
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ALL',
hostEcm: TestConfig.adf.url,
hostBpm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
done();
});
it('[C213838] Should after login in CS be redirect to Login page when try to access to PS', () => {
adfSettingsPage.setProviderEcm();
loginPage.login(adminUserModel.id, adminUserModel.password);
navigationBarPage.clickContentServicesButton();
contentServicesPage.checkAcsContainer();
navigationBarPage.clickProcessServicesButton();
loginPage.waitForElements();
});
it('[C260085] Should after login in PS be redirect to Login page when try to access to CS', () => {
adfSettingsPage.setProviderBpm();
loginPage.enableSuccessRouteSwitch();
loginPage.enterSuccessRoute('activiti');
loginPage.login(adminUserModel.id, adminUserModel.password);
navigationBarPage.clickProcessServicesButton();
processServicesPage.checkApsContainer();
navigationBarPage.clickContentServicesButton();
loginPage.waitForElements();
});
it('[C260085] Should after login in BOTH not be redirect to Login page when try to access to CS or PS', () => {
adfSettingsPage.setProviderEcmBpm();
loginPage.login(adminUserModel.id, adminUserModel.password);
navigationBarPage.clickProcessServicesButton();
processServicesPage.checkApsContainer();
navigationBarPage.clickContentServicesButton();
contentServicesPage.checkAcsContainer();
});
it('[C260088] Sould be re-redirect to the request URL after login when try to access to a protect URL ', () => {
let uploadActions = new UploadActions();
let uploadedFolder;
let folderName = Util.generateRandomString();
adfSettingsPage.setProviderEcmBpm();
loginPage.login(adminUserModel.id, adminUserModel.password);
browser.controlFlow().execute(async () => {
uploadedFolder = await uploadActions.uploadFolder(this.alfrescoJsApi, folderName, '-my-');
navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id);
browser.getCurrentUrl().then((actualUrl) => {
expect(actualUrl).toEqual(TestConfig.adf.url + '/files/' + uploadedFolder.entry.id);
});
browser.driver.sleep(1000);
navigationBarPage.clickLogoutButton();
browser.driver.sleep(1000);
navigationBarPage.openContentServicesFolder(uploadedFolder.entry.id);
loginPage.waitForElements();
loginPage.enterUsername(adminUserModel.id);
loginPage.enterPassword(adminUserModel.password);
loginPage.clickSignInButton();
browser.driver.sleep(1000);
browser.getCurrentUrl().then((actualUrl) => {
expect(actualUrl).toEqual(TestConfig.adf.url + '/files/' + uploadedFolder.entry.id);
});
});
});
});

View File

@@ -0,0 +1,39 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import LoginPage = require('../../pages/adf/loginPage');
import AcsUserModel = require('../../models/ACS/acsUserModel');
import AdfSettingsPage = require('../../pages/adf/settingsPage');
describe('Login component - Remember Me', () => {
let adfSettingsPage = new AdfSettingsPage();
let loginPage = new LoginPage();
beforeAll((done) => {
adfSettingsPage.setProviderEcmBpm();
done();
});
it('[C260036] Should Remember me checkbox not be present in the login if the property showRememberMe is false', () => {
loginPage.checkRememberIsDisplayed();
loginPage.disableRememberMe();
loginPage.checkRememberIsNotDisplayed();
});
});

View File

@@ -0,0 +1,120 @@
/*!
* @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 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('Pagination - returns to previous page when current is empty', () => {
let loginPage = new LoginPage();
let contentServicesPage = new ContentServicesPage();
let paginationPage = new PaginationPage();
let acsUser = new AcsUserModel();
let folderModel = new FolderModel({ 'name': 'folderOne' });
let fileNames = [], nrOfFiles = 6;
let lastFile = 'newFile6.txt';
let itemsPerPage = {
five: '5',
fiveValue: 5
};
let files = {
base: 'newFile',
extension: '.txt'
};
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);
fileNames = Util.generateSeqeunceFiles(1, nrOfFiles, files.base, files.extension);
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
let folderUploadedModel = await uploadActions.uploadFolder(this.alfrescoJsApi, folderModel.name, '-my-');
await uploadActions.createEmptyFiles(this.alfrescoJsApi, fileNames, folderUploadedModel.entry.id);
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
done();
});
xit('Pagination - returns to previous page when current is empty', () => {
contentServicesPage.navigateToFolder(folderModel.name);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
paginationPage.selectItemsPerPage(itemsPerPage.five);
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue);
contentServicesPage.getAllRowsNameColumn().then((list) => {
expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true);
});
paginationPage.clickOnNextPage();
contentServicesPage.checkAcsContainer();
contentServicesPage.waitForTableBody();
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
contentServicesPage.getAllRowsNameColumn().then((list) => {
expect(Util.arrayContainsArray(list, fileNames.slice(5, 6))).toEqual(true);
});
contentServicesPage.deleteContent(lastFile);
contentServicesPage.checkContentIsNotDisplayed(lastFile);
expect(paginationPage.getCurrentItemsPerPage()).toEqual(itemsPerPage.five);
expect(contentServicesPage.numberOfResultsDisplayed()).toBe(itemsPerPage.fiveValue);
contentServicesPage.getAllRowsNameColumn().then((list) => {
expect(Util.arrayContainsArray(list, fileNames.slice(0, 5))).toEqual(true);
});
});
});

View File

@@ -0,0 +1,70 @@
/*!
* @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 NavigationBarPage = require('../pages/adf/navigationBarPage');
import TestConfig = require('../test.config');
import AcsUserModel = require('../models/ACS/acsUserModel');
import CONSTANTS = require('../util/constants');
import AlfrescoApi = require('alfresco-js-api-node');
describe('Theming component', () => {
let navigationBarPage = new NavigationBarPage();
let loginPage = new LoginPage();
let acsUser = new AcsUserModel();
beforeAll(async (done) => {
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
loginPage.goToLoginPage();
loginPage.waitForElements();
done();
});
xit('Theming component', () => {
expect(loginPage.getShowPasswordIconColor()).toEqual(CONSTANTS.THEMING.DEFAULT_PASSWORD_ICON_COLOR);
expect(loginPage.getSignInButtonColor()).toEqual(CONSTANTS.THEMING.DEFAULT_LOGIN_BUTTON_COLOR);
expect(loginPage.getBackgroundColor()).toEqual(CONSTANTS.THEMING.DEFAULT_BACKGROUND_COLOR);
loginPage.loginToContentServicesUsingUserModel(acsUser);
navigationBarPage.clickThemeButton();
navigationBarPage.clickOnSpecificThemeButton(CONSTANTS.THEMING.PINK_BLUE_DARK);
navigationBarPage.clickLoginButton();
loginPage.waitForElements();
loginPage.enterUsername(acsUser.email);
loginPage.enterPassword(acsUser.password);
expect(loginPage.getShowPasswordIconColor()).toEqual(CONSTANTS.THEMING.PINK_BLUE_DARK_PASSWORD_ICON_COLOR);
expect(loginPage.getSignInButtonColor()).toEqual(CONSTANTS.THEMING.PINK_BLUE_DARK_LOGIN_BUTTON_COLOR);
expect(loginPage.getBackgroundColor()).toEqual(CONSTANTS.THEMING.PINK_BLUE_DARK_BACKGROUND_COLOR);
});
});

View File

@@ -0,0 +1,188 @@
/*!
* @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 AdfSettingsPage = require('../pages/adf/settingsPage');
import LoginPage = require('../pages/adf/loginPage');
import UserInfoDialog = require('../pages/adf/dialog/userInfoDialog');
import NavigationBarPage = require('../pages/adf/navigationBarPage');
import AcsUserModel = require('../models/ACS/acsUserModel');
import FileModel = require('../models/ACS/fileModel');
import PeopleAPI = require('../restAPI/ACS/PeopleAPI');
import TestConfig = require('../test.config');
import resources = require('../util/resources');
import AlfrescoApi = require('alfresco-js-api-node');
import { UsersActions } from '../actions/users.actions';
fdescribe('User Info component', () => {
let adfSettingsPage = new AdfSettingsPage();
let loginPage = new LoginPage();
let navigationBarPage = new NavigationBarPage();
let userInfoDialog = new UserInfoDialog();
let processUserModel, contentUserModel;
let acsAvatarFileModel = new FileModel({
'name': resources.Files.PROFILE_IMAGES.ECM.file_name,
'location': resources.Files.PROFILE_IMAGES.ECM.file_location
});
let apsAvatarFileModel = new FileModel({
'name': resources.Files.PROFILE_IMAGES.BPM.file_name,
'location': resources.Files.PROFILE_IMAGES.BPM.file_location
});
beforeAll(async (done) => {
let users = new UsersActions();
this.alfrescoJsApi = new AlfrescoApi({
provider: 'ALL',
hostEcm: TestConfig.adf.url,
hostBpm: TestConfig.adf.url
});
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
processUserModel = await users.createTenantAndUser(this.alfrescoJsApi);
contentUserModel = new AcsUserModel({
'id': processUserModel.email,
'password': processUserModel.password,
'firstName': processUserModel.firstName,
'lastName': processUserModel.lastName,
'email': processUserModel.email
});
await this.alfrescoJsApi.core.peopleApi.addPerson(contentUserModel);
loginPage.goToLoginPage();
adfSettingsPage.setProviderEcmBpm();
loginPage.login(contentUserModel.id, contentUserModel.password);
done();
});
it('1. Enable Process Services and Content Services ', () => {
navigationBarPage.clickUserProfile();
userInfoDialog.dialogIsDisplayed().contentServicesTabIsDisplayed().processServicesTabIsDisplayed();
expect(userInfoDialog.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName);
expect(userInfoDialog.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName);
expect(userInfoDialog.getContentEmail()).toEqual(contentUserModel.email);
expect(userInfoDialog.getContentJobTitle()).toEqual(contentUserModel.jobTitle);
userInfoDialog.checkInitialImage();
userInfoDialog.APSProfileImageNotDisplayed();
userInfoDialog.ACSProfileImageNotDisplayed();
userInfoDialog.clickOnContentServicesTab();
expect(userInfoDialog.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName);
expect(userInfoDialog.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName);
expect(userInfoDialog.getContentEmail()).toEqual(contentUserModel.email);
expect(userInfoDialog.getContentJobTitle()).toEqual(contentUserModel.jobTitle);
userInfoDialog.checkInitialImage();
userInfoDialog.APSProfileImageNotDisplayed();
userInfoDialog.ACSProfileImageNotDisplayed();
userInfoDialog.clickOnProcessServicesTab().processServicesTabIsDisplayed();
expect(userInfoDialog.getProcessHeaderTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName);
expect(userInfoDialog.getProcessTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName);
expect(userInfoDialog.getProcessEmail()).toEqual(processUserModel.email);
userInfoDialog.checkInitialImage();
userInfoDialog.APSProfileImageNotDisplayed();
userInfoDialog.ACSProfileImageNotDisplayed();
userInfoDialog.closeUserProfile();
});
it('2. Enable Content Services and disable Process Services ', () => {
navigationBarPage.clickLoginButton();
adfSettingsPage.setProviderEcm();
loginPage.login(contentUserModel.id, contentUserModel.password);
navigationBarPage.clickUserProfile();
userInfoDialog.dialogIsDisplayed().contentServicesTabIsNotDisplayed().processServicesTabIsNotDisplayed();
expect(userInfoDialog.getContentHeaderTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName);
expect(userInfoDialog.getContentTitle()).toEqual(contentUserModel.firstName + ' ' + contentUserModel.lastName);
expect(userInfoDialog.getContentEmail()).toEqual(contentUserModel.email);
expect(userInfoDialog.getContentJobTitle()).toEqual(contentUserModel.jobTitle);
userInfoDialog.checkInitialImage();
userInfoDialog.APSProfileImageNotDisplayed();
userInfoDialog.ACSProfileImageNotDisplayed();
userInfoDialog.closeUserProfile();
});
it('3. Enable Process Services and disable Content Services ', () => {
navigationBarPage.clickLoginButton();
adfSettingsPage.setProviderBpm();
loginPage.login(processUserModel.email, processUserModel.password);
navigationBarPage.clickUserProfile();
userInfoDialog.dialogIsDisplayed().contentServicesTabIsNotDisplayed().processServicesTabIsNotDisplayed();
expect(userInfoDialog.getProcessHeaderTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName);
expect(userInfoDialog.getProcessTitle()).toEqual(processUserModel.firstName + ' ' + processUserModel.lastName);
expect(userInfoDialog.getProcessEmail()).toEqual(processUserModel.email);
userInfoDialog.checkInitialImage();
userInfoDialog.APSProfileImageNotDisplayed();
userInfoDialog.ACSProfileImageNotDisplayed();
userInfoDialog.closeUserProfile();
});
it('4. Enable Process Services and Content Services ', () => {
let flow = protractor.promise.controlFlow();
flow.execute(() => {
PeopleAPI.updateAvatarViaAPI(contentUserModel, acsAvatarFileModel, '-me-');
PeopleAPI.getAvatarViaAPI(4, contentUserModel, '-me-', function (result) {
});
});
navigationBarPage.clickLoginButton();
adfSettingsPage.setProviderEcm();
loginPage.login(contentUserModel.id, contentUserModel.password);
navigationBarPage.clickUserProfile();
userInfoDialog.checkACSProfileImage();
userInfoDialog.APSProfileImageNotDisplayed();
userInfoDialog.closeUserProfile();
});
it('5. The profile picture is changed from APS', async () => {
let users = new UsersActions();
navigationBarPage.clickLoginButton();
await this.alfrescoJsApi.login(contentUserModel.email, contentUserModel.password);
await users.changeProfilePictureAps(this.alfrescoJsApi, apsAvatarFileModel.getLocation());
adfSettingsPage.setProviderBpm();
loginPage.login(processUserModel.email, processUserModel.password);
navigationBarPage.clickUserProfile();
userInfoDialog.checkAPSProfileImage();
userInfoDialog.ACSProfileImageNotDisplayed();
userInfoDialog.initialImageNotDisplayed();
userInfoDialog.closeUserProfile();
});
it('6. Delete the profile picture from ACS', () => {
navigationBarPage.clickLoginButton();
PeopleAPI.deleteAvatarViaAPI(contentUserModel, '-me-');
adfSettingsPage.setProviderEcm();
loginPage.login(contentUserModel.id, contentUserModel.password);
navigationBarPage.clickUserProfile();
userInfoDialog.checkInitialImage();
userInfoDialog.APSProfileImageNotDisplayed();
userInfoDialog.ACSProfileImageNotDisplayed();
userInfoDialog.closeUserProfile();
});
});

View File

@@ -0,0 +1,372 @@
/*!
* @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 TestConfig = require('../test.config');
import LoginPage = require('../pages/adf/loginPage');
import ContentServicesPage = require('../pages/adf/contentServicesPage');
import ViewerPage = require('../pages/adf/viewerPage');
import resources = require('../util/resources');
import FileModel = require('../models/ACS/fileModel');
import AcsUserModel = require('../models/ACS/acsUserModel');
import AlfrescoApi = require('alfresco-js-api-node');
import { UploadActions } from '../actions/ACS/upload.actions';
describe('Content Services Viewer', () => {
let acsUser = new AcsUserModel();
let viewerPage = new ViewerPage();
let contentServicesPage = new ContentServicesPage();
let loginPage = new LoginPage();
let zoom;
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,
'firstPageText': resources.Files.ADF_DOCUMENTS.DOCX_SUPPORTED.first_page_text
});
let jpgFile = new FileModel({
'location': resources.Files.ADF_DOCUMENTS.JPG.file_location,
'name': resources.Files.ADF_DOCUMENTS.JPG.file_name
});
let mp4File = new FileModel({
'location': resources.Files.ADF_DOCUMENTS.MP4.file_location,
'name': resources.Files.ADF_DOCUMENTS.MP4.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,
'name': resources.Files.ADF_DOCUMENTS.PPT.file_name,
'firstPageText': resources.Files.ADF_DOCUMENTS.PPT.first_page_text
});
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 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);
let jpgFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, jpgFile.location, jpgFile.name, '-my-');
Object.assign(jpgFile, jpgFileUploaded.entry);
let mp4FileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, mp4File.location, mp4File.name, '-my-');
Object.assign(mp4File, mp4FileUploaded.entry);
let pptFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, pptFile.location, pptFile.name, '-my-');
Object.assign(pptFile, pptFileUploaded.entry);
let unsupportedFileUploaded = await uploadActions.uploadFile(this.alfrescoJsApi, unsupportedFile.location, unsupportedFile.name, '-my-');
Object.assign(unsupportedFile, unsupportedFileUploaded.entry);
loginPage.loginToContentServicesUsingUserModel(acsUser);
contentServicesPage.goToDocumentList();
done();
});
/*afterAll((done) => {
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();
});
});*/
it('[C260038] Should display first page, toolbar and pagination when opening a .pdf file', () => {
contentServicesPage.checkAcsContainer();
viewerPage.viewFile(pdfFile.name);
browser.driver.sleep(3000); //wait open file
viewerPage.checkFileContent('1', pdfFile.firstPageText);
viewerPage.checkCloseButtonIsDisplayed();
viewerPage.checkFileNameIsDisplayed(pdfFile.name);
viewerPage.checkFileThumbnailIsDisplayed();
viewerPage.checkDownloadButtonIsDisplayed();
viewerPage.checkFullScreenButtonIsDisplayed();
viewerPage.checkInfoButtonIsDisplayed();
viewerPage.checkPreviousPageButtonIsDisplayed();
viewerPage.checkNextPageButtonIsDisplayed();
viewerPage.checkPageSelectorInputIsDisplayed('1');
viewerPage.checkPercentageIsDisplayed();
viewerPage.checkZoomInButtonIsDisplayed();
viewerPage.checkZoomOutButtonIsDisplayed();
viewerPage.checkScalePageButtonIsDisplayed();
});
it('[C260040] Should be able to change pages and zoom when .pdf file is open', () => {
viewerPage.clickNextPageButton();
viewerPage.checkFileContent('2', pdfFile.secondPageText);
viewerPage.checkPageSelectorInputIsDisplayed('2');
viewerPage.clickPreviousPageButton();
viewerPage.checkFileContent('1', pdfFile.firstPageText);
viewerPage.checkPageSelectorInputIsDisplayed('1');
viewerPage.clearPageNumber();
viewerPage.checkPageSelectorInputIsDisplayed('');
viewerPage.clickZoomOutButton();
zoom = viewerPage.getZoom();
viewerPage.clickZoomOutButton();
viewerPage.checkZoomedOut(zoom);
zoom = viewerPage.getZoom();
viewerPage.clickZoomInButton();
viewerPage.checkZoomedIn(zoom);
viewerPage.clickCloseButton();
});
it('[C260042] Should be able to download, open full-screen and Info container from the Viewer', () => {
viewerPage.viewFile(jpgFile.name);
viewerPage.checkImgContainerIsDisplayed();
viewerPage.checkFullScreenButtonIsDisplayed();
viewerPage.clickFullScreenButton();
viewerPage.exitFullScreen();
viewerPage.checkDownloadButtonIsDisplayed();
viewerPage.clickDownloadButton();
viewerPage.clickCloseButton();
});
it('[C260052] Should display image, toolbar and pagination when opening a .jpg file', () => {
viewerPage.viewFile(jpgFile.name);
viewerPage.checkImgContainerIsDisplayed();
viewerPage.checkCloseButtonIsDisplayed();
viewerPage.checkFileNameIsDisplayed(jpgFile.name);
viewerPage.checkFileThumbnailIsDisplayed();
viewerPage.checkDownloadButtonIsDisplayed();
viewerPage.checkFullScreenButtonIsDisplayed();
viewerPage.checkInfoButtonIsDisplayed();
viewerPage.checkZoomInButtonIsDisplayed();
viewerPage.checkZoomOutButtonIsDisplayed();
viewerPage.checkPercentageIsDisplayed();
viewerPage.checkRotateLeftButtonIsDisplayed();
viewerPage.checkRotateRightButtonIsDisplayed();
viewerPage.checkScaleImgButtonIsDisplayed();
});
it('[C260483] Should be able to zoom and rotate image when .jpg file is open', () => {
zoom = viewerPage.getZoom();
viewerPage.clickZoomInButton();
viewerPage.checkZoomedIn(zoom);
zoom = viewerPage.getZoom();
viewerPage.clickZoomOutButton();
viewerPage.checkZoomedOut(zoom);
viewerPage.clickRotateLeftButton();
viewerPage.checkRotation('transform: scale(1, 1) rotate(-90deg) translate(0px, 0px);');
viewerPage.clickScaleImgButton();
viewerPage.checkRotation('transform: scale(1, 1) rotate(0deg) translate(0px, 0px);');
viewerPage.clickRotateRightButton();
viewerPage.checkRotation('transform: scale(1, 1) rotate(90deg) translate(0px, 0px);');
viewerPage.clickCloseButton();
});
it('[C279922] Open viewer for a .ppt file', () => {
viewerPage.viewFile(pptFile.name);
viewerPage.checkFileContent('1', pptFile.firstPageText);
viewerPage.checkCloseButtonIsDisplayed();
viewerPage.checkFileThumbnailIsDisplayed();
viewerPage.checkFileNameIsDisplayed(pptFile.name);
viewerPage.checkDownloadButtonIsDisplayed();
viewerPage.checkInfoButtonIsDisplayed();
viewerPage.checkPreviousPageButtonIsDisplayed();
viewerPage.checkNextPageButtonIsDisplayed();
viewerPage.checkPageSelectorInputIsDisplayed('1');
viewerPage.checkZoomInButtonIsDisplayed();
viewerPage.checkZoomOutButtonIsDisplayed();
viewerPage.checkScalePageButtonIsDisplayed();
viewerPage.clickCloseButton();
});
it('[C260053] Should display first page, toolbar and pagination when opening a .docx file', () => {
viewerPage.viewFile(docxFile.name);
viewerPage.checkFileContent('1', docxFile.firstPageText);
viewerPage.checkCloseButtonIsDisplayed();
viewerPage.checkFileThumbnailIsDisplayed();
viewerPage.checkFileNameIsDisplayed(docxFile.name);
viewerPage.checkDownloadButtonIsDisplayed();
viewerPage.checkInfoButtonIsDisplayed();
viewerPage.checkPreviousPageButtonIsDisplayed();
viewerPage.checkNextPageButtonIsDisplayed();
viewerPage.checkPageSelectorInputIsDisplayed('1');
viewerPage.checkZoomInButtonIsDisplayed();
viewerPage.checkZoomOutButtonIsDisplayed();
viewerPage.checkScalePageButtonIsDisplayed();
viewerPage.clickCloseButton();
});
it('[C260054] Should display "Preview couldn\'t be loaded" and viewer toolbar when opening an unsupported file', () => {
viewerPage.viewFile(unsupportedFile.name);
viewerPage.checkCloseButtonIsDisplayed();
viewerPage.checkFileNameIsDisplayed(unsupportedFile.name);
viewerPage.checkFileThumbnailIsDisplayed();
viewerPage.checkDownloadButtonIsDisplayed();
viewerPage.checkInfoButtonIsDisplayed();
viewerPage.checkZoomInButtonIsNotDisplayed();
viewerPage.clickCloseButton();
});
it('[C260056] Should display video and viewer toolbar when opening a media file', () => {
viewerPage.viewFile(mp4File.name);
viewerPage.checkMediaPlayerContainerIsDisplayed();
viewerPage.checkCloseButtonIsDisplayed();
viewerPage.checkFileThumbnailIsDisplayed();
viewerPage.checkFileNameIsDisplayed(mp4File.name);
viewerPage.checkDownloadButtonIsDisplayed();
viewerPage.checkInfoButtonIsDisplayed();
viewerPage.checkFullScreenButtonIsNotDisplayed();
viewerPage.checkZoomInButtonIsNotDisplayed();
viewerPage.clickCloseButton();
});
it('[C261123] Should be able to preview all pages and navigate to a page when using thumbnails', () => {
viewerPage.viewFile(pdfFile.name);
browser.driver.sleep(3000); //wait open file
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);
browser.driver.sleep(3000); //wait open file
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);
});
});

77
e2e/core/z-finish.e2e.ts Normal file
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': 'core',
'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);
});
});