mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[ADF-3762] Automated tests for tree view component (#3999)
* Automated tests for tree view component * Finalising the original commit * Adding extra test for files not displaying scenario
This commit is contained in:
139
e2e/content-services/tree_view_component.e2e.ts
Normal file
139
e2e/content-services/tree_view_component.e2e.ts
Normal file
@@ -0,0 +1,139 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { LoginPage } from '../pages/adf/loginPage';
|
||||
import { NavigationBarPage } from '../pages/adf/navigationBarPage';
|
||||
import { TreeViewPage } from '../pages/adf/content_services/treeViewPage';
|
||||
|
||||
import AcsUserModel = require('../models/ACS/acsUserModel');
|
||||
|
||||
import TestConfig = require('../test.config');
|
||||
|
||||
import AlfrescoApi = require('alfresco-js-api-node');
|
||||
import { UploadActions } from '../actions/ACS/upload.actions';
|
||||
|
||||
describe('Tree View Component', () => {
|
||||
|
||||
const loginPage = new LoginPage();
|
||||
const navigationBarPage = new NavigationBarPage();
|
||||
const treeViewPage = new TreeViewPage();
|
||||
|
||||
let acsUser = new AcsUserModel();
|
||||
let uploadActions = new UploadActions();
|
||||
|
||||
let treeFolder, secondTreeFolder, thirdTreeFolder;
|
||||
|
||||
let nodeNames = {
|
||||
folder: 'Folder1',
|
||||
secondFolder: 'Folder2',
|
||||
thirdFolder: 'Folder3',
|
||||
parentFolder: '-my-',
|
||||
document: 'MyFile'
|
||||
};
|
||||
|
||||
beforeAll(async (done) => {
|
||||
|
||||
this.alfrescoJsApi = new AlfrescoApi({
|
||||
provider: 'ECM',
|
||||
hostEcm: TestConfig.adf.url
|
||||
});
|
||||
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await this.alfrescoJsApi.core.peopleApi.addPerson(acsUser);
|
||||
|
||||
await this.alfrescoJsApi.login(acsUser.id, acsUser.password);
|
||||
|
||||
treeFolder = await this.alfrescoJsApi.nodes.addNode(nodeNames.parentFolder, {name: nodeNames.folder, nodeType: 'cm:folder'});
|
||||
secondTreeFolder = await this.alfrescoJsApi.nodes.addNode(nodeNames.parentFolder, {name: nodeNames.secondFolder, nodeType: 'cm:folder'});
|
||||
thirdTreeFolder = await this.alfrescoJsApi.nodes.addNode(secondTreeFolder.entry.id, {name: nodeNames.thirdFolder, nodeType: 'cm:folder'});
|
||||
await this.alfrescoJsApi.nodes.addNode(thirdTreeFolder.entry.id, {name: nodeNames.document, nodeType: 'cm:content'});
|
||||
|
||||
loginPage.loginToContentServicesUsingUserModel(acsUser);
|
||||
|
||||
navigationBarPage.clickTreeViewButton();
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
afterAll(async (done) => {
|
||||
await this.alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword);
|
||||
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, treeFolder.entry.id);
|
||||
await uploadActions.deleteFilesOrFolder(this.alfrescoJsApi, secondTreeFolder.entry.id);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('[C289972] Should be able to show folders and sub-folders of a node as a tree view', () => {
|
||||
treeViewPage.checkTreeViewTitleIsDisplayed();
|
||||
|
||||
expect(treeViewPage.getNodeId()).toEqual(nodeNames.parentFolder);
|
||||
|
||||
treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.folder);
|
||||
treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder);
|
||||
|
||||
treeViewPage.clickNode(nodeNames.secondFolder);
|
||||
|
||||
treeViewPage.checkClickedNodeName(nodeNames.secondFolder);
|
||||
treeViewPage.checkNodeIsDisplayedAsOpen(nodeNames.secondFolder);
|
||||
treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder);
|
||||
|
||||
treeViewPage.clickNode(nodeNames.thirdFolder);
|
||||
|
||||
treeViewPage.checkClickedNodeName(nodeNames.thirdFolder);
|
||||
treeViewPage.checkNodeIsDisplayedAsOpen(nodeNames.thirdFolder);
|
||||
|
||||
treeViewPage.clickNode(nodeNames.secondFolder);
|
||||
|
||||
treeViewPage.checkClickedNodeName(nodeNames.secondFolder);
|
||||
treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder);
|
||||
treeViewPage.checkNodeIsNotDisplayed(nodeNames.thirdFolder);
|
||||
});
|
||||
|
||||
it('[C289973] Should be able to change the default nodeId', () => {
|
||||
treeViewPage.clearNodeIdInput();
|
||||
|
||||
treeViewPage.checkNoNodeIdMessageIsDisplayed();
|
||||
treeViewPage.addNodeId(secondTreeFolder.entry.id);
|
||||
|
||||
treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder);
|
||||
|
||||
treeViewPage.addNodeId('ThisIdDoesNotExist');
|
||||
treeViewPage.checkErrorMessageIsDisplayed();
|
||||
|
||||
treeViewPage.addNodeId(nodeNames.parentFolder);
|
||||
|
||||
treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.folder);
|
||||
treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.secondFolder);
|
||||
|
||||
treeViewPage.clickNode(nodeNames.secondFolder);
|
||||
|
||||
treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder);
|
||||
});
|
||||
|
||||
it('[C290071] Should not be able to display files', () => {
|
||||
treeViewPage.addNodeId(secondTreeFolder.entry.id);
|
||||
|
||||
treeViewPage.checkNodeIsDisplayedAsClosed(nodeNames.thirdFolder);
|
||||
|
||||
treeViewPage.clickNode(nodeNames.thirdFolder);
|
||||
|
||||
expect(treeViewPage.getTotalNodes()).toEqual(1);
|
||||
});
|
||||
|
||||
});
|
92
e2e/pages/adf/content_services/treeViewPage.ts
Normal file
92
e2e/pages/adf/content_services/treeViewPage.ts
Normal file
@@ -0,0 +1,92 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import Util = require('../../../util/util');
|
||||
import { element, by, protractor } from 'protractor';
|
||||
|
||||
export class TreeViewPage {
|
||||
|
||||
treeViewTitle = element(by.cssContainingText('app-tree-view div', 'TREE VIEW TEST'));
|
||||
nodeIdInput = element(by.css('input[placeholder="Node Id"]'));
|
||||
noNodeMessage = element(by.id('adf-tree-view-missing-node'));
|
||||
nodesOnPage = element.all(by.css('mat-tree-node'));
|
||||
|
||||
checkTreeViewTitleIsDisplayed() {
|
||||
return Util.waitUntilElementIsVisible(this.treeViewTitle);
|
||||
}
|
||||
|
||||
getNodeId() {
|
||||
Util.waitUntilElementIsVisible(this.nodeIdInput);
|
||||
return this.nodeIdInput.getAttribute('value');
|
||||
}
|
||||
|
||||
clickNode(nodeName) {
|
||||
let node = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"] button'));
|
||||
Util.waitUntilElementIsClickable(node);
|
||||
return node.click();
|
||||
}
|
||||
|
||||
checkNodeIsDisplayedAsClosed(nodeName) {
|
||||
let node = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"][aria-expanded="false"]'));
|
||||
return Util.waitUntilElementIsVisible(node);
|
||||
}
|
||||
|
||||
checkNodeIsDisplayedAsOpen(nodeName) {
|
||||
let node = element(by.css('mat-tree-node[id="' + nodeName + '-tree-child-node"][aria-expanded="true"]'));
|
||||
return Util.waitUntilElementIsVisible(node);
|
||||
}
|
||||
|
||||
checkClickedNodeName(nodeName) {
|
||||
let clickedNode = element(by.cssContainingText('span', ' CLICKED NODE: ' + nodeName + ''));
|
||||
return Util.waitUntilElementIsVisible(clickedNode);
|
||||
}
|
||||
|
||||
checkNodeIsNotDisplayed(nodeName) {
|
||||
let node = element(by.id('' + nodeName + '-tree-child-node'));
|
||||
return Util.waitUntilElementIsNotVisible(node);
|
||||
}
|
||||
|
||||
clearNodeIdInput() {
|
||||
Util.waitUntilElementIsVisible(this.nodeIdInput);
|
||||
this.nodeIdInput.getAttribute('value').then((value) => {
|
||||
for (let i = value.length; i >= 0; i--) {
|
||||
this.nodeIdInput.sendKeys(protractor.Key.BACK_SPACE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
checkNoNodeIdMessageIsDisplayed() {
|
||||
return Util.waitUntilElementIsVisible(this.noNodeMessage);
|
||||
}
|
||||
|
||||
addNodeId(nodeId) {
|
||||
Util.waitUntilElementIsVisible(this.nodeIdInput);
|
||||
this.nodeIdInput.click();
|
||||
this.nodeIdInput.clear();
|
||||
this.nodeIdInput.sendKeys(nodeId + ' ');
|
||||
this.nodeIdInput.sendKeys(protractor.Key.BACK_SPACE);
|
||||
}
|
||||
|
||||
checkErrorMessageIsDisplayed() {
|
||||
let clickedNode = element(by.cssContainingText('span', 'An Error Occurred '));
|
||||
return Util.waitUntilElementIsVisible(clickedNode);
|
||||
}
|
||||
|
||||
getTotalNodes() {
|
||||
return this.nodesOnPage.count();
|
||||
}
|
||||
}
|
@@ -17,7 +17,7 @@
|
||||
|
||||
import Util = require('../../util/util');
|
||||
import TestConfig = require('../../test.config');
|
||||
import { element, by } from 'protractor';
|
||||
import { element, by, browser } from 'protractor';
|
||||
import { ProcessServicesPage } from './process_services/processServicesPage';
|
||||
import { AppListCloudComponent } from './process_cloud/appListCloudComponent';
|
||||
|
||||
@@ -40,6 +40,7 @@ export class NavigationBarPage {
|
||||
headerDataButton = element(by.css('a[data-automation-id="Header Data"]'));
|
||||
menuButton = element(by.css('button[data-automation-id="adf-menu-icon"]'));
|
||||
formButton = element(by.css('a[data-automation-id="Form"]'));
|
||||
treeViewButton = element(by.css('a[data-automation-id="Tree View"]'));
|
||||
|
||||
clickContentServicesButton() {
|
||||
Util.waitUntilElementIsVisible(this.contentServicesButton);
|
||||
@@ -157,8 +158,8 @@ export class NavigationBarPage {
|
||||
return this.formButton.click();
|
||||
};
|
||||
|
||||
checkLogoTooltip(logoTooltip) {
|
||||
let logoTooltip = element(by.css('a[title="' + logoTooltip + '"]'));
|
||||
checkLogoTooltip(logoTooltipTitle) {
|
||||
let logoTooltip = element(by.css('a[title="' + logoTooltipTitle + '"]'));
|
||||
Util.waitUntilElementIsVisible(logoTooltip);
|
||||
}
|
||||
|
||||
@@ -174,4 +175,9 @@ export class NavigationBarPage {
|
||||
checkContentServicesButtonIsDisplayed() {
|
||||
Util.waitUntilElementIsVisible(this.contentServicesButton);
|
||||
}
|
||||
|
||||
clickTreeViewButton() {
|
||||
Util.waitUntilElementIsVisible(this.treeViewButton);
|
||||
this.treeViewButton.click();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user