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
9 class TestProjectBase(TestBase):
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'
19 def assert_body(self, project, req=None):
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)
28 class TestProjectCreate(TestProjectBase):
29 def test_withoutBody(self):
30 (code, body) = self.create()
31 self.assertEqual(code, HTTP_BAD_REQUEST)
33 def test_success(self):
34 (code, body) = self.create_d()
35 self.assertEqual(code, HTTP_OK)
36 self.assert_create_body(body)
38 def test_alreadyExist(self):
40 (code, body) = self.create_d()
41 self.assertEqual(code, HTTP_FORBIDDEN)
42 self.assertIn('already exists', body)
45 class TestProjectGet(TestProjectBase):
46 def test_notExist(self):
47 code, body = self.get('notExist')
48 self.assertEqual(code, HTTP_NOT_FOUND)
50 def test_getOne(self):
52 code, body = self.get(self.req_d.name)
53 self.assertEqual(code, HTTP_OK)
54 self.assert_body(body)
59 code, body = self.get()
60 for project in body.projects:
61 if self.req_d.name == project.name:
62 self.assert_body(project)
64 self.assert_body(project, self.req_e)
67 class TestProjectUpdate(TestProjectBase):
68 def test_withoutBody(self):
69 code, _ = self.update(None, 'noBody')
70 self.assertEqual(code, HTTP_BAD_REQUEST)
72 def test_notFound(self):
73 code, _ = self.update(self.req_e, 'notFound')
74 self.assertEqual(code, HTTP_NOT_FOUND)
76 def test_newNameExist(self):
79 code, body = self.update(self.req_e, self.req_d.name)
80 self.assertEqual(code, HTTP_FORBIDDEN)
81 self.assertIn("already exists", body)
83 def test_noUpdate(self):
85 code, body = self.update(self.req_d, self.req_d.name)
86 self.assertEqual(code, HTTP_FORBIDDEN)
87 self.assertIn("Nothing to update", body)
89 def test_success(self):
91 code, body = self.get(self.req_d.name)
94 req = ProjectCreateRequest('newName', 'new description')
95 code, body = self.update(req, self.req_d.name)
96 self.assertEqual(code, HTTP_OK)
97 self.assertEqual(_id, body._id)
98 self.assert_body(body, req)
100 _, new_body = self.get(req.name)
101 self.assertEqual(_id, new_body._id)
102 self.assert_body(new_body, req)
105 class TestProjectDelete(TestProjectBase):
106 def test_notFound(self):
107 code, body = self.delete('notFound')
108 self.assertEqual(code, HTTP_NOT_FOUND)
110 def test_success(self):
112 code, body = self.delete(self.req_d.name)
113 self.assertEqual(code, HTTP_OK)
114 self.assertEqual(body, '')
116 code, body = self.get(self.req_d.name)
117 self.assertEqual(code, HTTP_NOT_FOUND)
119 if __name__ == '__main__':