summaryrefslogtreecommitdiffstats
path: root/testapi/opnfv_testapi/tests
diff options
context:
space:
mode:
Diffstat (limited to 'testapi/opnfv_testapi/tests')
-rw-r--r--testapi/opnfv_testapi/tests/UI/e2e/podsControllerSpec.js23
-rw-r--r--testapi/opnfv_testapi/tests/UI/e2e/projectControllerSpec.js224
-rw-r--r--testapi/opnfv_testapi/tests/unit/handlers/test_base.py8
-rw-r--r--testapi/opnfv_testapi/tests/unit/handlers/test_project.py30
-rw-r--r--testapi/opnfv_testapi/tests/unit/handlers/test_result.py6
-rw-r--r--testapi/opnfv_testapi/tests/unit/handlers/test_testcase.py11
6 files changed, 278 insertions, 24 deletions
diff --git a/testapi/opnfv_testapi/tests/UI/e2e/podsControllerSpec.js b/testapi/opnfv_testapi/tests/UI/e2e/podsControllerSpec.js
index 66a57f2..8cf7467 100644
--- a/testapi/opnfv_testapi/tests/UI/e2e/podsControllerSpec.js
+++ b/testapi/opnfv_testapi/tests/UI/e2e/podsControllerSpec.js
@@ -12,7 +12,9 @@ describe('testing the Pods page for anonymous user', function () {
},
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"}]
+ pods: [{role: "community-ci", name: "test", owner: "testUser",
+ details: "DemoDetails", mode: "metal", _id: "59f02f099a07c84bfc5c7aed",
+ creation_date: "2017-10-25 11:58:25.926168"}]
}
}
}]);
@@ -73,7 +75,8 @@ describe('testing the Pods page for anonymous user', function () {
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);
+ expect(element(by.css('.alert.alert-danger.ng-binding.ng-scope'))
+ .isDisplayed()).toBe(true);
});
});
@@ -116,7 +119,9 @@ describe('testing the Pods page for authorized user', function () {
},
response: {
data: {
- "fullname": "Test User", "_id": "79f82eey9a00c84bfhc7aed", "user": "testUser", "groups": ["opnfv-testapi-users"], "email": "testuser@test.com"
+ "fullname": "Test User", "_id": "79f82eey9a00c84bfhc7aed",
+ "user": "testUser", "groups": ["opnfv-testapi-users",
+ "opnfv-gerrit-functest-submitters"], "email": "testuser@test.com"
}
}
}
@@ -136,7 +141,8 @@ describe('testing the Pods page for authorized user', function () {
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);
+ expect(element(by.css('.alert.alert-danger.ng-binding.ng-scope'))
+ .isDisplayed()).toBe(false);
});
});
@@ -170,7 +176,9 @@ describe('testing the Pods page for authorized user', function () {
},
response: {
data: {
- "fullname": "Test User", "_id": "79f82eey9a00c84bfhc7aed", "user": "testUser", "groups": ["opnfv-testapi-users"], "email": "testuser@test.com"
+ "fullname": "Test User", "_id": "79f82eey9a00c84bfhc7aed",
+ "user": "testUser", "groups": ["opnfv-testapi-users"],
+ "email": "testuser@test.com"
}
}
}
@@ -182,7 +190,8 @@ describe('testing the Pods page for authorized user', function () {
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);
+ expect(element(by.css('.alert.alert-danger.ng-binding.ng-scope'))
+ .isDisplayed()).toBe(true);
});
- })
+ });
}); \ No newline at end of file
diff --git a/testapi/opnfv_testapi/tests/UI/e2e/projectControllerSpec.js b/testapi/opnfv_testapi/tests/UI/e2e/projectControllerSpec.js
new file mode 100644
index 0000000..921625d
--- /dev/null
+++ b/testapi/opnfv_testapi/tests/UI/e2e/projectControllerSpec.js
@@ -0,0 +1,224 @@
+'use strict';
+
+var mock = require('protractor-http-mock');
+var baseURL = "http://localhost:8000"
+
+describe('testing the Project Link for anonymous user', function () {
+
+ it( 'should not show the Project Link for anonymous user', function() {
+ mock.teardown();
+ browser.get(baseURL);
+ var projectslink = element(by.linkText('Projects'));
+ expect(projectslink.isPresent()).toBe(true);
+ });
+
+ it( 'navigate anonymous user to project page', function() {
+ browser.get(baseURL+'#/projects');
+ var EC = browser.ExpectedConditions;
+ browser.wait(EC.urlContains(baseURL+ '/#/projects'), 10000);
+ });
+
+ it('create button is not visible for anonymous user ', function () {
+ browser.get(baseURL+'#/projects');
+ var buttonCreate = element(by.buttonText('Create'));
+ expect(buttonCreate.isDisplayed()).toBeFalsy();
+ });
+
+});
+
+describe('testing the Project Link for user who is not in submitter group', function () {
+ beforeEach(function(){
+ 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"
+ }
+ }
+ }
+ ]);
+ });
+
+ it( 'should show the Project Link for user', function() {
+ browser.get(baseURL);
+ var projectslink = element(by.linkText('Projects'));
+ expect(projectslink.isPresent()).toBe(true);
+ });
+
+ it( 'should navigate the user to the Project page', function() {
+ browser.get(baseURL);
+ var projectslink = element(by.linkText('Projects')).click();
+ var EC = browser.ExpectedConditions;
+ browser.wait(EC.urlContains(baseURL+ '/#/projects'), 10000);
+ });
+
+ it('create button is not visible for user', function () {
+ browser.get(baseURL+'#/projects');
+ var buttonCreate = element(by.buttonText('Create'));
+ expect(buttonCreate.isDisplayed()).toBeFalsy();
+ });
+})
+
+describe('testing the Project Link for user who is in submitter group', function () {
+ beforeEach(function(){
+ mock([
+ {
+ request: {
+ path: '/api/v1/profile',
+ method: 'GET'
+ },
+ response: {
+ data: {
+ "fullname": "Test User", "_id": "79f82eey9a00c84bfhc7aed",
+ "user": "testUser", "groups": ["opnfv-testapi-users",
+ "opnfv-gerrit-testProject1-submitters",
+ "opnfv-gerrit-testProject2-submitters" ],
+ "email": "testuser@test.com"
+ }
+ }
+ },
+ {
+ request: {
+ path: '/api/v1/projects',
+ method: 'POST'
+ },
+ response: {
+ data: {
+ href: baseURL+"/api/v1/projects/testProject1"
+ }
+ }
+ },
+ {
+ request: {
+ path: '/api/v1/projects',
+ method: 'POST',
+ data: {
+ name: 'testProject2',
+ description : 'demoDescription',
+ }
+ },
+ response: {
+ status : 403
+ }
+ },
+ {
+ request: {
+ path: '/api/v1/projects',
+ method: 'POST',
+ data: {
+ name: 'testProject3',
+ description : 'demoDescription',
+ }
+ },
+ response: {
+ status : 403,
+ data : 'You do not have permission to perform this action'
+ }
+ }
+ ]);
+ });
+
+ it( 'should show the Project Link for user', function() {
+ browser.get(baseURL);
+ var projectslink = element(by.linkText('Projects'));
+ expect(projectslink.isPresent()).toBe(true);
+ });
+
+ it( 'should navigate the user to the Project page', function() {
+ browser.get(baseURL);
+ var projectslink = element(by.linkText('Projects')).click();
+ var EC = browser.ExpectedConditions;
+ browser.wait(EC.urlContains(baseURL+ '/#/projects'), 10000);
+ });
+
+ it('create button is visible for user', function () {
+ browser.get(baseURL+'#/projects');
+ var buttonCreate = element(by.buttonText('Create'));
+ expect(buttonCreate.isDisplayed()).toBe(true);
+ });
+
+ it('Show error when user click the create button with a empty name', function () {
+ browser.get(baseURL+ '/#/projects');
+ var description = element(by.model('ctrl.description'));
+ description.sendKeys('DemoDescription');
+ 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+ '/#/projects');
+ var name = element(by.model('ctrl.name'));
+ var details = element(by.model('ctrl.description'));
+ name.sendKeys('testProject2');
+ details.sendKeys('demoDescription');
+ var buttonCreate = element(by.buttonText('Create'));
+ buttonCreate.click();
+ expect(element(by.cssContainingText(".alert",
+ "Error creating the new Project from server:undefined"))
+ .isDisplayed()).toBe(true);
+ });
+
+ it('Show error when user try to create a project which he is not belonged to ', function () {
+ browser.get(baseURL+ '/#/projects');
+ var name = element(by.model('ctrl.name'));
+ var details = element(by.model('ctrl.description'));
+ name.sendKeys('testProject3');
+ details.sendKeys('demoDescription');
+ var buttonCreate = element(by.buttonText('Create'));
+ buttonCreate.click();
+ expect(element(by.cssContainingText(".alert",
+ 'Error creating the new Project from server:"You do not have permission to perform this action"')).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.description'));
+ name.sendKeys('testProject1');
+ details.sendKeys('demoDescription');
+ var buttonCreate = element(by.buttonText('Create'));
+ buttonCreate.click().then(function(){
+ expect(element(by.cssContainingText(".alert",
+ "Create Success"))
+ .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",
+ "opnfv-gerrit-testProject1-submitters",
+ "opnfv-gerrit-testProject2-submitters" ],
+ "email": "testuser@test.com"
+ }
+ }
+ }
+ ]);
+ browser.get(baseURL+ '/#/projects');
+ var name = element(by.model('ctrl.name'));
+ var details = element(by.model('ctrl.description'));
+ name.sendKeys('testProject1');
+ details.sendKeys('demoDescription');
+ var buttonCreate = element(by.buttonText('Create'));
+ buttonCreate.click().then(function(){
+ expect(element(by.css(".alert.alert-danger.ng-binding.ng-scope")).isDisplayed()).toBe(true);
+ });
+ });
+})
diff --git a/testapi/opnfv_testapi/tests/unit/handlers/test_base.py b/testapi/opnfv_testapi/tests/unit/handlers/test_base.py
index b7fabb9..eb147cc 100644
--- a/testapi/opnfv_testapi/tests/unit/handlers/test_base.py
+++ b/testapi/opnfv_testapi/tests/unit/handlers/test_base.py
@@ -16,6 +16,7 @@ from tornado import testing
from opnfv_testapi.models import base_models
from opnfv_testapi.models import pod_models
+from opnfv_testapi.models import project_models
from opnfv_testapi.tests.unit import fake_pymongo
@@ -43,6 +44,12 @@ class TestBase(testing.AsyncHTTPTestCase):
_id=str(ObjectId()),
owner='ValidUser',
create_date=str(datetime.now()))
+ self.project_e = project_models.Project(
+ name='functest',
+ description='functest test',
+ _id=str(ObjectId()),
+ create_date=str(datetime.now()))
+
self.req_d = None
self.req_e = None
self.addCleanup(self._clear)
@@ -53,6 +60,7 @@ class TestBase(testing.AsyncHTTPTestCase):
'groups': [
'opnfv-testapi-users',
'opnfv-gerrit-functest-submitters',
+ 'opnfv-gerrit-qtip-submitters',
'opnfv-gerrit-qtip-contributors']
})
diff --git a/testapi/opnfv_testapi/tests/unit/handlers/test_project.py b/testapi/opnfv_testapi/tests/unit/handlers/test_project.py
index 939cc0d..2873ab0 100644
--- a/testapi/opnfv_testapi/tests/unit/handlers/test_project.py
+++ b/testapi/opnfv_testapi/tests/unit/handlers/test_project.py
@@ -1,3 +1,11 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corporation
+# feng.xiaowei@zte.com.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
import httplib
import unittest
@@ -10,10 +18,10 @@ from opnfv_testapi.tests.unit.handlers import test_base as base
class TestProjectBase(base.TestBase):
def setUp(self):
super(TestProjectBase, self).setUp()
- self.req_d = project_models.ProjectCreateRequest('vping',
- 'vping-ssh test')
- self.req_e = project_models.ProjectCreateRequest('doctor',
- 'doctor test')
+ self.req_d = project_models.ProjectCreateRequest('qtip',
+ 'qtip-ssh test')
+ self.req_e = project_models.ProjectCreateRequest('functest',
+ 'functest test')
self.get_res = project_models.Project
self.list_res = project_models.Projects
self.update_res = project_models.Project
@@ -29,22 +37,32 @@ class TestProjectBase(base.TestBase):
class TestProjectCreate(TestProjectBase):
+
+ @executor.create(httplib.BAD_REQUEST, message.not_login())
+ def test_notlogin(self):
+ return self.req_d
+
+ @executor.mock_valid_lfid()
@executor.create(httplib.BAD_REQUEST, message.no_body())
def test_withoutBody(self):
return None
+ @executor.mock_valid_lfid()
@executor.create(httplib.BAD_REQUEST, message.missing('name'))
def test_emptyName(self):
return project_models.ProjectCreateRequest('')
+ @executor.mock_valid_lfid()
@executor.create(httplib.BAD_REQUEST, message.missing('name'))
def test_noneName(self):
return project_models.ProjectCreateRequest(None)
+ @executor.mock_valid_lfid()
@executor.create(httplib.OK, 'assert_create_body')
def test_success(self):
return self.req_d
+ @executor.mock_valid_lfid()
@executor.create(httplib.FORBIDDEN, message.exist_base)
def test_alreadyExist(self):
self.create_d()
@@ -52,6 +70,8 @@ class TestProjectCreate(TestProjectBase):
class TestProjectGet(TestProjectBase):
+
+ @executor.mock_valid_lfid()
def setUp(self):
super(TestProjectGet, self).setUp()
self.create_d()
@@ -78,6 +98,7 @@ class TestProjectGet(TestProjectBase):
class TestProjectUpdate(TestProjectBase):
+ @executor.mock_valid_lfid()
def setUp(self):
super(TestProjectUpdate, self).setUp()
_, d_body = self.create_d()
@@ -115,6 +136,7 @@ class TestProjectUpdate(TestProjectBase):
class TestProjectDelete(TestProjectBase):
+ @executor.mock_valid_lfid()
def setUp(self):
super(TestProjectDelete, self).setUp()
self.create_d()
diff --git a/testapi/opnfv_testapi/tests/unit/handlers/test_result.py b/testapi/opnfv_testapi/tests/unit/handlers/test_result.py
index b9f9ede..bd482a6 100644
--- a/testapi/opnfv_testapi/tests/unit/handlers/test_result.py
+++ b/testapi/opnfv_testapi/tests/unit/handlers/test_result.py
@@ -15,7 +15,6 @@ import urllib
import unittest
from opnfv_testapi.common import message
-from opnfv_testapi.models import project_models
from opnfv_testapi.models import result_models
from opnfv_testapi.models import testcase_models
from opnfv_testapi.tests.unit import executor
@@ -86,15 +85,12 @@ class TestResultBase(base.TestBase):
self.list_res = result_models.TestResults
self.update_res = result_models.TestResult
self.basePath = '/api/v1/results'
- self.req_project = project_models.ProjectCreateRequest(
- self.project,
- 'vping test')
+ fake_pymongo.projects.insert(self.project_e.format())
self.req_testcase = testcase_models.TestcaseCreateRequest(
self.case,
'/cases/vping',
'vping-ssh test')
fake_pymongo.pods.insert(self.pod_d.format())
- self.create_help('/api/v1/projects', self.req_project)
self.create_help('/api/v1/projects/%s/cases',
self.req_testcase,
self.project)
diff --git a/testapi/opnfv_testapi/tests/unit/handlers/test_testcase.py b/testapi/opnfv_testapi/tests/unit/handlers/test_testcase.py
index e4c668e..d5e32e3 100644
--- a/testapi/opnfv_testapi/tests/unit/handlers/test_testcase.py
+++ b/testapi/opnfv_testapi/tests/unit/handlers/test_testcase.py
@@ -11,15 +11,16 @@ import httplib
import unittest
from opnfv_testapi.common import message
-from opnfv_testapi.models import project_models
from opnfv_testapi.models import testcase_models
from opnfv_testapi.tests.unit import executor
+from opnfv_testapi.tests.unit import fake_pymongo
from opnfv_testapi.tests.unit.handlers import test_base as base
class TestCaseBase(base.TestBase):
def setUp(self):
super(TestCaseBase, self).setUp()
+ self.project = 'functest'
self.req_d = testcase_models.TestcaseCreateRequest('vping_1',
'/cases/vping_1',
'vping-ssh test')
@@ -36,7 +37,7 @@ class TestCaseBase(base.TestBase):
self.list_res = testcase_models.Testcases
self.update_res = testcase_models.Testcase
self.basePath = '/api/v1/projects/%s/cases'
- self.create_project()
+ fake_pymongo.projects.insert(self.project_e.format())
def assert_body(self, case, req=None):
if not req:
@@ -56,12 +57,6 @@ class TestCaseBase(base.TestBase):
self.assertIsNotNone(new._id)
self.assertIsNotNone(new.creation_date)
- def create_project(self):
- req_p = project_models.ProjectCreateRequest('functest',
- 'vping-ssh test')
- self.create_help('/api/v1/projects', req_p)
- self.project = req_p.name
-
def create_d(self):
return super(TestCaseBase, self).create_d(self.project)