summaryrefslogtreecommitdiffstats
path: root/utils/test/testapi/opnfv_testapi/tests/UI
diff options
context:
space:
mode:
authorSerena Feng <feng.xiaowei@zte.com.cn>2017-11-03 01:06:59 +0000
committerGerrit Code Review <gerrit@opnfv.org>2017-11-03 01:06:59 +0000
commitb3daaaf3d9cf201c37f68f47011fd73ac069fd1a (patch)
treeb1c80af7e2b7b9805b4beaefba95946bb544db6e /utils/test/testapi/opnfv_testapi/tests/UI
parent31ce289ac966e8ed104a431e659c1a98dcb54de6 (diff)
parentb0529cab5597a1b34cec0ea845ceb1ad749e0c0a (diff)
Merge "add simple e2e tests for PodsCotroller"
Diffstat (limited to 'utils/test/testapi/opnfv_testapi/tests/UI')
-rw-r--r--utils/test/testapi/opnfv_testapi/tests/UI/e2e/podsControllerSpec.js188
-rw-r--r--utils/test/testapi/opnfv_testapi/tests/UI/karma.conf.js14
-rw-r--r--utils/test/testapi/opnfv_testapi/tests/UI/protractor-conf.js18
3 files changed, 220 insertions, 0 deletions
diff --git a/utils/test/testapi/opnfv_testapi/tests/UI/e2e/podsControllerSpec.js b/utils/test/testapi/opnfv_testapi/tests/UI/e2e/podsControllerSpec.js
new file mode 100644
index 000000000..66a57f2f2
--- /dev/null
+++ b/utils/test/testapi/opnfv_testapi/tests/UI/e2e/podsControllerSpec.js
@@ -0,0 +1,188 @@
+'use strict';
+
+var mock = require('protractor-http-mock');
+var baseURL = "http://localhost:8000"
+describe('testing the Pods page for anonymous user', function () {
+
+ beforeEach(function(){
+ mock([{
+ request: {
+ path: '/api/v1/pods',
+ method: 'GET'
+ },
+ response: {
+ data: {
+ pods: [{role: "community-ci", name: "test", owner: "testUser", details: "DemoDetails", mode: "metal", _id: "59f02f099a07c84bfc5c7aed", creation_date: "2017-10-25 11:58:25.926168"}]
+ }
+ }
+ }]);
+ });
+
+ it( 'should navigate to pods link ', function() {
+ browser.get(baseURL);
+ var podslink = element(by.linkText('Pods')).click();
+ var EC = browser.ExpectedConditions;
+ browser.wait(EC.urlContains(baseURL+ '/#/pods'), 10000);
+ });
+
+ it('create button is not visible for anonymous user', function () {
+ browser.get(baseURL+'#/pods');
+ var buttonCreate = element(by.buttonText('Create'));
+ expect(buttonCreate.isDisplayed()).toBeFalsy();
+ });
+
+ it('filter button is visible for anonymous user', function () {
+ var buttonFilter = element(by.buttonText('Filter'));
+ expect(buttonFilter.isDisplayed()).toBe(true)
+ });
+
+ it('clear button is visible for anonymous user', function () {
+ var buttonClear = element(by.buttonText('Clear'));
+ expect(buttonClear.isDisplayed()).toBe(true)
+ });
+
+ it('Show results when click filter button', function () {
+ var buttonFilter = element(by.buttonText('Filter'));
+ buttonFilter.click();
+ var pod = element(by.css('.show-pod'));
+ expect(pod.isPresent()).toBe(true);
+ });
+
+ it('Show results when click clear button', function () {
+ browser.get(baseURL+'#/pods');
+ var buttonClear = element(by.buttonText('Clear'));
+ buttonClear.click();
+ var pod = element(by.css('.show-pod'));
+ expect(pod.isPresent()).toBe(true);
+ });
+
+ it('If details is not shown then show details when click the link',function() {
+ expect(element(by.css('.show-pod.hidden')).isPresent()).toBe(true);
+ var podslink = element(by.linkText('test')).click();
+ expect(element(by.css('.show-pod.hidden')).isPresent()).toBe(false);
+ });
+
+ it('If details is shown then hide details when click the link',function() {
+ expect(element(by.css('.show-pod.hidden')).isPresent()).toBe(false);
+ var podslink = element(by.linkText('test')).click();
+ expect(element(by.css('.show-pod.hidden')).isPresent()).toBe(true);
+ });
+
+ it('If backend is not responding then show error when click filter button', function () {
+ browser.get(baseURL + '/#/pods');
+ mock.teardown();
+ var buttonFilter = element(by.buttonText('Filter'));
+ buttonFilter.click().then(function(){
+ expect(element(by.css('.alert.alert-danger.ng-binding.ng-scope')).isDisplayed()).toBe(true);
+ });
+ });
+
+});
+
+describe('testing the Pods page for authorized user', function () {
+
+ beforeEach(function(){
+ mock([
+ {
+ request: {
+ path: '/api/v1/pods',
+ method: 'POST'
+ },
+ response: {
+ data: {
+ href: baseURL+"/api/v1/pods/test"
+ }
+ }
+ },
+ {
+ request: {
+ path: '/api/v1/pods',
+ method: 'POST',
+ data: {
+ name: 'test1',
+ details : 'DemoDetails',
+ role : 'community-ci',
+ mode : 'metal'
+ }
+ },
+ response: {
+ status : 403
+ }
+ },
+ {
+ request: {
+ path: '/api/v1/profile',
+ method: 'GET'
+ },
+ response: {
+ data: {
+ "fullname": "Test User", "_id": "79f82eey9a00c84bfhc7aed", "user": "testUser", "groups": ["opnfv-testapi-users"], "email": "testuser@test.com"
+ }
+ }
+ }
+ ]);
+ });
+
+ it('create button is visible for authorized user', function () {
+ browser.get(baseURL + '/#/pods');
+ var buttonCreate = element(by.buttonText('Create'));
+ expect(buttonCreate.isDisplayed()).toBe(true);
+ });
+
+ it('Do not show error if input is acceptable', function () {
+ var name = element(by.model('ctrl.name'));
+ var details = element(by.model('ctrl.details'));
+ name.sendKeys('test');
+ details.sendKeys('DemoDetails');
+ var buttonCreate = element(by.buttonText('Create'));
+ buttonCreate.click().then(function(){
+ expect(element(by.css('.alert.alert-danger.ng-binding.ng-scope')).isDisplayed()).toBe(false);
+ });
+ });
+
+ it('Show error when user click the create button with a empty name', function () {
+ browser.get(baseURL+ '/#/pods');
+ var details = element(by.model('ctrl.details'));
+ details.sendKeys('DemoDetails');
+ var buttonCreate = element(by.buttonText('Create'));
+ buttonCreate.click();
+ expect(element(by.cssContainingText(".alert","Name is missing.")).isDisplayed()).toBe(true);
+ });
+
+ it('Show error when user click the create button with an already existing name', function () {
+ browser.get(baseURL+ '/#/pods');
+ var name = element(by.model('ctrl.name'));
+ var details = element(by.model('ctrl.details'));
+ name.sendKeys('test1');
+ details.sendKeys('DemoDetails');
+ var buttonCreate = element(by.buttonText('Create'));
+ buttonCreate.click();
+ expect(element(by.cssContainingText(".alert","Error creating the new pod from server: Pod's name already exists")).isDisplayed()).toBe(true);
+ });
+
+ it('If backend is not responding then show error when user click the create button',function(){
+ mock.teardown();
+ mock([
+ {
+ request: {
+ path: '/api/v1/profile',
+ method: 'GET'
+ },
+ response: {
+ data: {
+ "fullname": "Test User", "_id": "79f82eey9a00c84bfhc7aed", "user": "testUser", "groups": ["opnfv-testapi-users"], "email": "testuser@test.com"
+ }
+ }
+ }
+ ]);
+ browser.get(baseURL+ '/#/pods');
+ var name = element(by.model('ctrl.name'));
+ var details = element(by.model('ctrl.details'));
+ name.sendKeys('test');
+ details.sendKeys('DemoDetails');
+ var buttonCreate = element(by.buttonText('Create'));
+ buttonCreate.click().then(function(){
+ expect(element(by.css('.alert.alert-danger.ng-binding.ng-scope')).isDisplayed()).toBe(true);
+ });
+ })
+}); \ No newline at end of file
diff --git a/utils/test/testapi/opnfv_testapi/tests/UI/karma.conf.js b/utils/test/testapi/opnfv_testapi/tests/UI/karma.conf.js
new file mode 100644
index 000000000..eaded5a1d
--- /dev/null
+++ b/utils/test/testapi/opnfv_testapi/tests/UI/karma.conf.js
@@ -0,0 +1,14 @@
+module.exports = function (config) {
+ config.set({
+ frameworks: ['jasmine'],
+ files: [
+ "assets/lib/angular/angular.js",
+ "assets/lib/angular-mocks/angular-mocks.js",
+ ],
+ autoWatch: true,
+ browsers: ['Chrome'],
+ singleRun: true,
+ reporters: ['progress', 'coverage'],
+ preprocessors: { 'src/*.js': ['coverage'] }
+ });
+};
diff --git a/utils/test/testapi/opnfv_testapi/tests/UI/protractor-conf.js b/utils/test/testapi/opnfv_testapi/tests/UI/protractor-conf.js
new file mode 100644
index 000000000..affbe5d26
--- /dev/null
+++ b/utils/test/testapi/opnfv_testapi/tests/UI/protractor-conf.js
@@ -0,0 +1,18 @@
+exports.config = {
+ seleniumAddress: 'http://localhost:4444/wd/hub',
+ capabilities: {
+ 'browserName': 'chrome',
+ 'chromeOptions': {
+ 'args': ['show-fps-counter=true', '--disable-web-security', "no-sandbox", "--headless", "--disable-gpu"]
+ }
+ },
+ jasmineNodeOpts: {
+ showColors: true,
+ defaultTimeoutInterval: 30000
+ },
+ onPrepare: function(){
+ require('protractor-http-mock').config = {
+ rootDirectory: __dirname
+ };
+ }
+};