swagger-ize result-apis of testAPI
[releng.git] / utils / test / result_collection_api / tests / unit / test_project.py
1 import unittest
2
3 from test_base import TestBase
4 from resources.project_models import ProjectCreateRequest, Project, Projects
5 from common.constants import HTTP_OK, HTTP_BAD_REQUEST, \
6     HTTP_FORBIDDEN, HTTP_NOT_FOUND
7
8
9 class TestProjectBase(TestBase):
10     def setUp(self):
11         super(TestProjectBase, self).setUp()
12         self.req_d = ProjectCreateRequest('vping', 'vping-ssh test')
13         self.req_e = ProjectCreateRequest('doctor', 'doctor test')
14         self.get_res = Project
15         self.list_res = Projects
16         self.update_res = Project
17         self.basePath = '/api/v1/projects'
18
19     def assert_body(self, project, req=None):
20         if not req:
21             req = self.req_d
22         self.assertEqual(project.name, req.name)
23         self.assertEqual(project.description, req.description)
24         self.assertIsNotNone(project._id)
25         self.assertIsNotNone(project.creation_date)
26
27
28 class TestProjectCreate(TestProjectBase):
29     def test_withoutBody(self):
30         (code, body) = self.create()
31         self.assertEqual(code, HTTP_BAD_REQUEST)
32
33     def test_emptyName(self):
34         req_empty = ProjectCreateRequest('')
35         (code, body) = self.create(req_empty)
36         self.assertEqual(code, HTTP_BAD_REQUEST)
37         self.assertIn('name missing', body)
38
39     def test_noneName(self):
40         req_none = ProjectCreateRequest(None)
41         (code, body) = self.create(req_none)
42         self.assertEqual(code, HTTP_BAD_REQUEST)
43         self.assertIn('name missing', body)
44
45     def test_success(self):
46         (code, body) = self.create_d()
47         self.assertEqual(code, HTTP_OK)
48         self.assert_create_body(body)
49
50     def test_alreadyExist(self):
51         self.create_d()
52         (code, body) = self.create_d()
53         self.assertEqual(code, HTTP_FORBIDDEN)
54         self.assertIn('already exists', body)
55
56
57 class TestProjectGet(TestProjectBase):
58     def test_notExist(self):
59         code, body = self.get('notExist')
60         self.assertEqual(code, HTTP_NOT_FOUND)
61
62     def test_getOne(self):
63         self.create_d()
64         code, body = self.get(self.req_d.name)
65         self.assertEqual(code, HTTP_OK)
66         self.assert_body(body)
67
68     def test_list(self):
69         self.create_d()
70         self.create_e()
71         code, body = self.get()
72         for project in body.projects:
73             if self.req_d.name == project.name:
74                 self.assert_body(project)
75             else:
76                 self.assert_body(project, self.req_e)
77
78
79 class TestProjectUpdate(TestProjectBase):
80     def test_withoutBody(self):
81         code, _ = self.update(None, 'noBody')
82         self.assertEqual(code, HTTP_BAD_REQUEST)
83
84     def test_notFound(self):
85         code, _ = self.update(self.req_e, 'notFound')
86         self.assertEqual(code, HTTP_NOT_FOUND)
87
88     def test_newNameExist(self):
89         self.create_d()
90         self.create_e()
91         code, body = self.update(self.req_e, self.req_d.name)
92         self.assertEqual(code, HTTP_FORBIDDEN)
93         self.assertIn("already exists", body)
94
95     def test_noUpdate(self):
96         self.create_d()
97         code, body = self.update(self.req_d, self.req_d.name)
98         self.assertEqual(code, HTTP_FORBIDDEN)
99         self.assertIn("Nothing to update", body)
100
101     def test_success(self):
102         self.create_d()
103         code, body = self.get(self.req_d.name)
104         _id = body._id
105
106         req = ProjectCreateRequest('newName', 'new description')
107         code, body = self.update(req, self.req_d.name)
108         self.assertEqual(code, HTTP_OK)
109         self.assertEqual(_id, body._id)
110         self.assert_body(body, req)
111
112         _, new_body = self.get(req.name)
113         self.assertEqual(_id, new_body._id)
114         self.assert_body(new_body, req)
115
116
117 class TestProjectDelete(TestProjectBase):
118     def test_notFound(self):
119         code, body = self.delete('notFound')
120         self.assertEqual(code, HTTP_NOT_FOUND)
121
122     def test_success(self):
123         self.create_d()
124         code, body = self.delete(self.req_d.name)
125         self.assertEqual(code, HTTP_OK)
126         self.assertEqual(body, '')
127
128         code, body = self.get(self.req_d.name)
129         self.assertEqual(code, HTTP_NOT_FOUND)
130
131 if __name__ == '__main__':
132     unittest.main()