4 from opnfv_testapi.common import message
5 from opnfv_testapi.resources import project_models
6 from opnfv_testapi.tests.unit import executor
7 from opnfv_testapi.tests.unit import test_base as base
10 class TestProjectBase(base.TestBase):
12 super(TestProjectBase, self).setUp()
13 self.req_d = project_models.ProjectCreateRequest('vping',
15 self.req_e = project_models.ProjectCreateRequest('doctor',
17 self.get_res = project_models.Project
18 self.list_res = project_models.Projects
19 self.update_res = project_models.Project
20 self.basePath = '/api/v1/projects'
22 def assert_body(self, project, req=None):
25 self.assertEqual(project.name, req.name)
26 self.assertEqual(project.description, req.description)
27 self.assertIsNotNone(project._id)
28 self.assertIsNotNone(project.creation_date)
31 class TestProjectCreate(TestProjectBase):
32 @executor.create(httplib.BAD_REQUEST, message.no_body())
33 def test_withoutBody(self):
36 @executor.create(httplib.BAD_REQUEST, message.missing('name'))
37 def test_emptyName(self):
38 return project_models.ProjectCreateRequest('')
40 @executor.create(httplib.BAD_REQUEST, message.missing('name'))
41 def test_noneName(self):
42 return project_models.ProjectCreateRequest(None)
44 @executor.create(httplib.OK, 'assert_create_body')
45 def test_success(self):
48 @executor.create(httplib.FORBIDDEN, message.exist_base)
49 def test_alreadyExist(self):
54 class TestProjectGet(TestProjectBase):
56 super(TestProjectGet, self).setUp()
60 @executor.get(httplib.NOT_FOUND, message.not_found_base)
61 def test_notExist(self):
64 @executor.get(httplib.OK, 'assert_body')
65 def test_getOne(self):
66 return self.req_d.name
68 @executor.get(httplib.OK, '_assert_list')
72 def _assert_list(self, body):
73 for project in body.projects:
74 if self.req_d.name == project.name:
75 self.assert_body(project)
77 self.assert_body(project, self.req_e)
80 class TestProjectUpdate(TestProjectBase):
82 super(TestProjectUpdate, self).setUp()
83 _, d_body = self.create_d()
84 _, get_res = self.get(self.req_d.name)
85 self.index_d = get_res._id
88 @executor.update(httplib.BAD_REQUEST, message.no_body())
89 def test_withoutBody(self):
92 @executor.update(httplib.NOT_FOUND, message.not_found_base)
93 def test_notFound(self):
94 return self.req_e, 'notFound'
96 @executor.update(httplib.FORBIDDEN, message.exist_base)
97 def test_newNameExist(self):
98 return self.req_e, self.req_d.name
100 @executor.update(httplib.FORBIDDEN, message.no_update())
101 def test_noUpdate(self):
102 return self.req_d, self.req_d.name
104 @executor.update(httplib.OK, '_assert_update')
105 def test_success(self):
106 req = project_models.ProjectUpdateRequest('newName', 'new description')
107 return req, self.req_d.name
109 def _assert_update(self, req, body):
110 self.assertEqual(self.index_d, body._id)
111 self.assert_body(body, req)
112 _, new_body = self.get(req.name)
113 self.assertEqual(self.index_d, new_body._id)
114 self.assert_body(new_body, req)
117 class TestProjectDelete(TestProjectBase):
119 super(TestProjectDelete, self).setUp()
122 @executor.delete(httplib.NOT_FOUND, message.not_found_base)
123 def test_notFound(self):
126 @executor.delete(httplib.OK, '_assert_delete')
127 def test_success(self):
128 return self.req_d.name
130 def _assert_delete(self, body):
131 self.assertEqual(body, '')
132 code, body = self.get(self.req_d.name)
133 self.assertEqual(code, httplib.NOT_FOUND)
135 if __name__ == '__main__':