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_emptyName(self):
34 req_empty = ProjectCreateRequest('')
35 (code, body) = self.create(req_empty)
36 self.assertEqual(code, HTTP_BAD_REQUEST)
37 self.assertIn('project name missing', body)
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('project name missing', body)
45 def test_success(self):
46 (code, body) = self.create_d()
47 self.assertEqual(code, HTTP_OK)
48 self.assert_create_body(body)
50 def test_alreadyExist(self):
52 (code, body) = self.create_d()
53 self.assertEqual(code, HTTP_FORBIDDEN)
54 self.assertIn('already exists', body)
57 class TestProjectGet(TestProjectBase):
58 def test_notExist(self):
59 code, body = self.get('notExist')
60 self.assertEqual(code, HTTP_NOT_FOUND)
62 def test_getOne(self):
64 code, body = self.get(self.req_d.name)
65 self.assertEqual(code, HTTP_OK)
66 self.assert_body(body)
71 code, body = self.get()
72 for project in body.projects:
73 if self.req_d.name == project.name:
74 self.assert_body(project)
76 self.assert_body(project, self.req_e)
79 class TestProjectUpdate(TestProjectBase):
80 def test_withoutBody(self):
81 code, _ = self.update(None, 'noBody')
82 self.assertEqual(code, HTTP_BAD_REQUEST)
84 def test_notFound(self):
85 code, _ = self.update(self.req_e, 'notFound')
86 self.assertEqual(code, HTTP_NOT_FOUND)
88 def test_newNameExist(self):
91 code, body = self.update(self.req_e, self.req_d.name)
92 self.assertEqual(code, HTTP_FORBIDDEN)
93 self.assertIn("already exists", body)
95 def test_noUpdate(self):
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)
101 def test_success(self):
103 code, body = self.get(self.req_d.name)
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)
112 _, new_body = self.get(req.name)
113 self.assertEqual(_id, new_body._id)
114 self.assert_body(new_body, req)
117 class TestProjectDelete(TestProjectBase):
118 def test_notFound(self):
119 code, body = self.delete('notFound')
120 self.assertEqual(code, HTTP_NOT_FOUND)
122 def test_success(self):
124 code, body = self.delete(self.req_d.name)
125 self.assertEqual(code, HTTP_OK)
126 self.assertEqual(body, '')
128 code, body = self.get(self.req_d.name)
129 self.assertEqual(code, HTTP_NOT_FOUND)
131 if __name__ == '__main__':