3 from test_base import TestBase
4 from resources.testcase_models import TestcaseCreateRequest, \
5 Testcase, Testcases, TestcaseUpdateRequest
6 from resources.project_models import ProjectCreateRequest
7 from common.constants import HTTP_OK, HTTP_BAD_REQUEST, \
8 HTTP_FORBIDDEN, HTTP_NOT_FOUND
11 __author__ = '__serena__'
14 class TestCaseBase(TestBase):
16 super(TestCaseBase, self).setUp()
17 self.req_d = TestcaseCreateRequest('/cases/vping_1',
20 self.req_e = TestcaseCreateRequest('/cases/doctor_1',
23 self.update_d = TestcaseUpdateRequest('vping_1',
26 self.update_e = TestcaseUpdateRequest('doctor_1',
29 self.get_res = Testcase
30 self.list_res = Testcases
31 self.update_res = Testcase
32 self.basePath = '/api/v1/projects/%s/cases'
35 def assert_body(self, case, req=None):
38 self.assertEqual(case.name, req.name)
39 self.assertEqual(case.description, req.description)
40 self.assertEqual(case.url, req.url)
41 self.assertIsNotNone(case._id)
42 self.assertIsNotNone(case.creation_date)
44 def assert_update_body(self, old, new, req=None):
47 self.assertEqual(new.name, req.name)
48 self.assertEqual(new.description, req.description)
49 self.assertEqual(new.url, old.url)
50 self.assertIsNotNone(new._id)
51 self.assertIsNotNone(new.creation_date)
53 def create_project(self):
54 req_p = ProjectCreateRequest('functest', 'vping-ssh test')
55 self.create_help('/api/v1/projects', req_p)
56 self.project = req_p.name
59 return super(TestCaseBase, self).create_d(self.project)
62 return super(TestCaseBase, self).create_e(self.project)
64 def get(self, case=None):
65 return super(TestCaseBase, self).get(self.project, case)
67 def update(self, new=None, case=None):
68 return super(TestCaseBase, self).update(new, self.project, case)
70 def delete(self, case):
71 return super(TestCaseBase, self).delete(self.project, case)
74 class TestCaseCreate(TestCaseBase):
75 def test_noBody(self):
76 (code, body) = self.create(None, 'vping')
77 self.assertEqual(code, HTTP_BAD_REQUEST)
79 def test_noProject(self):
80 code, body = self.create(self.req_d, 'noProject')
81 self.assertEqual(code, HTTP_FORBIDDEN)
82 self.assertIn('Could not find project', body)
84 def test_success(self):
85 code, body = self.create_d()
86 self.assertEqual(code, HTTP_OK)
87 self.assert_create_body(body, None, self.project)
89 def test_alreadyExist(self):
91 code, body = self.create_d()
92 self.assertEqual(code, HTTP_FORBIDDEN)
93 self.assertIn('already exists', body)
96 class TestCaseGet(TestCaseBase):
97 def test_notExist(self):
98 code, body = self.get('notExist')
99 self.assertEqual(code, HTTP_NOT_FOUND)
101 def test_getOne(self):
103 code, body = self.get(self.req_d.name)
104 self.assertEqual(code, HTTP_OK)
105 self.assert_body(body)
110 code, body = self.get()
111 for case in body.testcases:
112 if self.req_d.name == case.name:
113 self.assert_body(case)
115 self.assert_body(case, self.req_e)
118 class TestCaseUpdate(TestCaseBase):
119 def test_noBody(self):
120 code, _ = self.update(case='noBody')
121 self.assertEqual(code, HTTP_BAD_REQUEST)
123 def test_notFound(self):
124 code, _ = self.update(self.update_e, 'notFound')
125 self.assertEqual(code, HTTP_NOT_FOUND)
127 def test_newNameExist(self):
130 code, body = self.update(self.update_e, self.req_d.name)
131 self.assertEqual(code, HTTP_FORBIDDEN)
132 self.assertIn("already exists", body)
134 def test_noUpdate(self):
136 code, body = self.update(self.update_d, self.req_d.name)
137 self.assertEqual(code, HTTP_FORBIDDEN)
138 self.assertIn("Nothing to update", body)
140 def test_success(self):
142 code, body = self.get(self.req_d.name)
145 code, body = self.update(self.update_e, self.req_d.name)
146 self.assertEqual(code, HTTP_OK)
147 self.assertEqual(_id, body._id)
148 self.assert_update_body(self.req_d, body, self.update_e)
150 _, new_body = self.get(self.req_e.name)
151 self.assertEqual(_id, new_body._id)
152 self.assert_update_body(self.req_d, new_body, self.update_e)
155 class TestCaseDelete(TestCaseBase):
156 def test_notFound(self):
157 code, body = self.delete('notFound')
158 self.assertEqual(code, HTTP_NOT_FOUND)
160 def test_success(self):
162 code, body = self.delete(self.req_d.name)
163 self.assertEqual(code, HTTP_OK)
164 self.assertEqual(body, '')
166 code, body = self.get(self.req_d.name)
167 self.assertEqual(code, HTTP_NOT_FOUND)
170 if __name__ == '__main__':