Merge "Add qtip job to pod zte-virtual6"
[releng.git] / utils / test / testapi / opnfv_testapi / tests / unit / handlers / test_project.py
1 import httplib
2 import unittest
3
4 from opnfv_testapi.common import message
5 from opnfv_testapi.models import project_models
6 from opnfv_testapi.tests.unit import executor
7 from opnfv_testapi.tests.unit.handlers import test_base as base
8
9
10 class TestProjectBase(base.TestBase):
11     def setUp(self):
12         super(TestProjectBase, self).setUp()
13         self.req_d = project_models.ProjectCreateRequest('vping',
14                                                          'vping-ssh test')
15         self.req_e = project_models.ProjectCreateRequest('doctor',
16                                                          'doctor test')
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'
21
22     def assert_body(self, project, req=None):
23         if not req:
24             req = self.req_d
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)
29
30
31 class TestProjectCreate(TestProjectBase):
32     @executor.create(httplib.BAD_REQUEST, message.no_body())
33     def test_withoutBody(self):
34         return None
35
36     @executor.create(httplib.BAD_REQUEST, message.missing('name'))
37     def test_emptyName(self):
38         return project_models.ProjectCreateRequest('')
39
40     @executor.create(httplib.BAD_REQUEST, message.missing('name'))
41     def test_noneName(self):
42         return project_models.ProjectCreateRequest(None)
43
44     @executor.create(httplib.OK, 'assert_create_body')
45     def test_success(self):
46         return self.req_d
47
48     @executor.create(httplib.FORBIDDEN, message.exist_base)
49     def test_alreadyExist(self):
50         self.create_d()
51         return self.req_d
52
53
54 class TestProjectGet(TestProjectBase):
55     def setUp(self):
56         super(TestProjectGet, self).setUp()
57         self.create_d()
58         self.create_e()
59
60     @executor.get(httplib.NOT_FOUND, message.not_found_base)
61     def test_notExist(self):
62         return 'notExist'
63
64     @executor.get(httplib.OK, 'assert_body')
65     def test_getOne(self):
66         return self.req_d.name
67
68     @executor.get(httplib.OK, '_assert_list')
69     def test_list(self):
70         return None
71
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)
76             else:
77                 self.assert_body(project, self.req_e)
78
79
80 class TestProjectUpdate(TestProjectBase):
81     def setUp(self):
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
86         self.create_e()
87
88     @executor.update(httplib.BAD_REQUEST, message.no_body())
89     def test_withoutBody(self):
90         return None, 'noBody'
91
92     @executor.update(httplib.NOT_FOUND, message.not_found_base)
93     def test_notFound(self):
94         return self.req_e, 'notFound'
95
96     @executor.update(httplib.FORBIDDEN, message.exist_base)
97     def test_newNameExist(self):
98         return self.req_e, self.req_d.name
99
100     @executor.update(httplib.FORBIDDEN, message.no_update())
101     def test_noUpdate(self):
102         return self.req_d, self.req_d.name
103
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
108
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)
115
116
117 class TestProjectDelete(TestProjectBase):
118     def setUp(self):
119         super(TestProjectDelete, self).setUp()
120         self.create_d()
121
122     @executor.delete(httplib.NOT_FOUND, message.not_found_base)
123     def test_notFound(self):
124         return 'notFound'
125
126     @executor.delete(httplib.OK, '_assert_delete')
127     def test_success(self):
128         return self.req_d.name
129
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)
134
135
136 if __name__ == '__main__':
137     unittest.main()