e793111974e27c0c1923e018b264bea495589571
[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 = '/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_success(self):
34         (code, body) = self.create_d()
35         self.assertEqual(code, HTTP_OK)
36         self.assert_create_body(body)
37
38     def test_alreadyExist(self):
39         self.create_d()
40         (code, body) = self.create_d()
41         self.assertEqual(code, HTTP_FORBIDDEN)
42         self.assertIn('already exists', body)
43
44
45 class TestProjectGet(TestProjectBase):
46     def test_notExist(self):
47         code, body = self.get('notExist')
48         self.assertEqual(code, HTTP_NOT_FOUND)
49
50     def test_getOne(self):
51         self.create_d()
52         code, body = self.get(self.req_d.name)
53         self.assertEqual(code, HTTP_OK)
54         self.assert_body(body)
55
56     def test_list(self):
57         self.create_d()
58         self.create_e()
59         code, body = self.get()
60         for project in body.projects:
61             if self.req_d.name == project.name:
62                 self.assert_body(project)
63             else:
64                 self.assert_body(project, self.req_e)
65
66
67 class TestProjectUpdate(TestProjectBase):
68     def test_withoutBody(self):
69         code, _ = self.update('noBody')
70         self.assertEqual(code, HTTP_BAD_REQUEST)
71
72     def test_notFound(self):
73         code, _ = self.update('notFound', self.req_e)
74         self.assertEqual(code, HTTP_NOT_FOUND)
75
76     def test_newNameExist(self):
77         self.create_d()
78         self.create_e()
79         code, body = self.update(self.req_d.name, self.req_e)
80         self.assertEqual(code, HTTP_FORBIDDEN)
81         self.assertIn("already exists", body)
82
83     def test_noUpdate(self):
84         self.create_d()
85         code, body = self.update(self.req_d.name, self.req_d)
86         self.assertEqual(code, HTTP_FORBIDDEN)
87         self.assertIn("Nothing to update", body)
88
89     def test_success(self):
90         self.create_d()
91         code, body = self.get(self.req_d.name)
92         _id = body._id
93
94         req = ProjectCreateRequest('newName', 'new description')
95         code, body = self.update(self.req_d.name, req)
96         self.assertEqual(code, HTTP_OK)
97         self.assertEqual(_id, body._id)
98         self.assert_body(body, req)
99
100         _, new_body = self.get(req.name)
101         self.assertEqual(_id, new_body._id)
102         self.assert_body(new_body, req)
103
104
105 class TestProjectDelete(TestProjectBase):
106     def test_notFound(self):
107         code = self.delete('notFound')
108         self.assertEqual(code, HTTP_NOT_FOUND)
109
110     def test_success(self):
111         self.create_d()
112         code = self.delete(self.req_d.name)
113         self.assertEqual(code, HTTP_OK)
114
115 if __name__ == '__main__':
116     unittest.main()