fuel-ui/static/tests/functional/pages/common.js

135 lines
4.5 KiB
JavaScript

/*
* Copyright 2015 Mirantis, Inc.
*
* 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.
**/
define([
'intern/dojo/node!lodash',
'intern/chai!assert',
'tests/functional/helpers',
'intern/dojo/node!leadfoot/helpers/pollUntil',
'tests/functional/pages/login',
'tests/functional/pages/welcome',
'tests/functional/pages/cluster',
'tests/functional/pages/clusters'
],
function(_, assert, Helpers, pollUntil, LoginPage, WelcomePage, ClusterPage, ClustersPage) {
'use strict';
function CommonMethods(remote) {
this.remote = remote;
this.loginPage = new LoginPage(remote);
this.welcomePage = new WelcomePage(remote);
this.clusterPage = new ClusterPage(remote);
this.clustersPage = new ClustersPage(remote);
}
CommonMethods.prototype = {
constructor: CommonMethods,
pickRandomName: function(prefix) {
return _.uniqueId((prefix || 'Item') + ' #');
},
getOut: function() {
var self = this;
return this.remote
.then(function() {
return self.welcomePage.skip();
})
.then(function() {
return self.loginPage.logout();
});
},
getIn: function() {
var self = this;
return this.remote
.then(function() {
return self.loginPage.logout();
})
.then(function() {
return self.loginPage.login();
})
.waitForElementDeletion('.login-btn', 2000)
.then(function() {
return self.welcomePage.skip();
})
.waitForCssSelector('.navbar-nav', 1000)
.clickByCssSelector('.global-alert.alert-warning .close');
},
createCluster: function(clusterName, stepsMethods) {
var self = this;
return this.remote
.clickLinkByText('Environments')
.waitForCssSelector('.clusters-page', 2000)
.then(function() {
return self.clustersPage.createCluster(clusterName, stepsMethods);
});
},
removeCluster: function(clusterName, suppressErrors) {
var self = this;
return this.remote
.clickLinkByText('Environments')
.waitForCssSelector('.clusters-page', 2000)
.then(function() {
return self.clustersPage.goToEnvironment(clusterName);
})
.then(function() {
return self.clusterPage.removeCluster(clusterName);
})
.catch(function(e) {
if (!suppressErrors) throw new Error('Unable to delete cluster ' + clusterName + ': ' + e);
});
},
doesClusterExist: function(clusterName) {
var self = this;
return this.remote
.clickLinkByText('Environments')
.waitForCssSelector('.clusters-page', 2000)
.findAllByCssSelector(self.clustersPage.clusterSelector)
.then(function(divs) {
return divs.reduce(function(matchFound, element) {
return element.getVisibleText().then(
function(name) {
return (name === clusterName) || matchFound;
}
);
}, false);
});
},
addNodesToCluster: function(nodesAmount, nodesRoles, nodeStatus, nodeNameFilter) {
var self = this;
return this.remote
.then(function() {
return self.clusterPage.goToTab('Nodes');
})
.waitForCssSelector('button.btn-add-nodes', 3000)
.clickByCssSelector('button.btn-add-nodes')
.waitForCssSelector('.node', 3000)
.then(pollUntil(function() {
return window.$('.node-list-management-buttons').is(':visible') && window.$('.role-panel').is(':visible') || null;
}, 3000))
.then(function() {
if (nodeNameFilter) return self.clusterPage.searchForNode(nodeNameFilter);
})
.then(function() {
return self.clusterPage.checkNodeRoles(nodesRoles);
})
.then(function() {
return self.clusterPage.checkNodes(nodesAmount, nodeStatus);
})
.clickByCssSelector('.btn-apply')
.waitForElementDeletion('.btn-apply', 3000);
}
};
return CommonMethods;
});