add unittests for testcase and refactor testcase related implementation
[releng.git] / utils / test / result_collection_api / tests / unit / test_testcase.py
1 import unittest
2
3 from test_base import TestBase
4 from resources.testcase_models import TestcaseCreateRequest, \
5     Testcase, Testcases, TestcaseUpdateRequest
6 from resources.project_models import ProjectCreateRequest, Project
7 from common.constants import HTTP_OK, HTTP_BAD_REQUEST, \
8     HTTP_FORBIDDEN, HTTP_NOT_FOUND
9
10
11 __author__ = '__serena__'
12
13
14 class TestCaseBase(TestBase):
15     def setUp(self):
16         super(TestCaseBase, self).setUp()
17         self.req_d = TestcaseCreateRequest('/cases/vping_1', 'vping_1', 'vping-ssh test')
18         self.req_e = TestcaseCreateRequest('/cases/doctor_1', 'doctor_1', 'create doctor')
19         self.update_d = TestcaseUpdateRequest('vping_1', 'vping-ssh test', 'functest')
20         self.update_e = TestcaseUpdateRequest('doctor_1', 'create doctor', 'functest')
21         self.get_res = Testcase
22         self.list_res = Testcases
23         self.update_res = Testcase
24         self.basePath = '/projects/%s/cases'
25         self.create_project()
26
27     def assert_body(self, case, req=None):
28         if not req:
29             req = self.req_d
30         self.assertEqual(case.name, req.name)
31         self.assertEqual(case.description, req.description)
32         self.assertEqual(case.url, req.url)
33         self.assertIsNotNone(case._id)
34         self.assertIsNotNone(case.creation_date)
35
36     def assert_update_body(self, old, new, req=None):
37         if not req:
38             req = self.req_d
39         self.assertEqual(new.name, req.name)
40         self.assertEqual(new.description, req.description)
41         self.assertEqual(new.url, old.url)
42         self.assertIsNotNone(new._id)
43         self.assertIsNotNone(new.creation_date)
44
45     def create_project(self):
46         req_p = ProjectCreateRequest('functest', 'vping-ssh test')
47         self.create_help('/projects', req_p, Project)
48         self.project = req_p.name
49
50     def create_d(self):
51         return super(TestCaseBase, self).create_d(self.project)
52
53     def create_e(self):
54         return super(TestCaseBase, self).create_e(self.project)
55
56     def get(self, case=None):
57         return super(TestCaseBase, self).get(self.project, case)
58
59     def update(self, new=None, case=None):
60         return super(TestCaseBase, self).update(new, self.project, case)
61
62     def delete(self, case):
63         return super(TestCaseBase, self).delete(self.project, case)
64
65
66 class TestCaseCreate(TestCaseBase):
67     def test_noBody(self):
68         (code, body) = self.create(None, 'vping')
69         self.assertEqual(code, HTTP_BAD_REQUEST)
70
71     def test_noProject(self):
72         code, body = self.create(self.req_d, 'noProject')
73         self.assertEqual(code, HTTP_FORBIDDEN)
74         self.assertIn('Could not find project', body)
75
76     def test_success(self):
77         code, body = self.create_d()
78         self.assertEqual(code, HTTP_OK)
79         self.assert_create_body(body, None, self.project)
80
81     def test_alreadyExist(self):
82         self.create_d()
83         code, body = self.create_d()
84         self.assertEqual(code, HTTP_FORBIDDEN)
85         self.assertIn('already exists', body)
86
87
88 class TestCaseGet(TestCaseBase):
89     def test_notExist(self):
90         code, body = self.get('notExist')
91         self.assertEqual(code, HTTP_NOT_FOUND)
92
93     def test_getOne(self):
94         self.create_d()
95         code, body = self.get(self.req_d.name)
96         self.assertEqual(code, HTTP_OK)
97         self.assert_body(body)
98
99     def test_list(self):
100         self.create_d()
101         self.create_e()
102         code, body = self.get()
103         for case in body.testcases:
104             if self.req_d.name == case.name:
105                 self.assert_body(case)
106             else:
107                 self.assert_body(case, self.req_e)
108
109
110 class TestCaseUpdate(TestCaseBase):
111     def test_noBody(self):
112         code, _ = self.update(case='noBody')
113         self.assertEqual(code, HTTP_BAD_REQUEST)
114
115     def test_notFound(self):
116         code, _ = self.update(self.update_e, 'notFound')
117         self.assertEqual(code, HTTP_NOT_FOUND)
118
119     def test_newNameExist(self):
120         self.create_d()
121         self.create_e()
122         code, body = self.update(self.update_e, self.req_d.name)
123         self.assertEqual(code, HTTP_FORBIDDEN)
124         self.assertIn("already exists", body)
125
126     def test_noUpdate(self):
127         self.create_d()
128         code, body = self.update(self.update_d, self.req_d.name)
129         self.assertEqual(code, HTTP_FORBIDDEN)
130         self.assertIn("Nothing to update", body)
131
132     def test_success(self):
133         self.create_d()
134         code, body = self.get(self.req_d.name)
135         _id = body._id
136
137         code, body = self.update(self.update_e, self.req_d.name)
138         self.assertEqual(code, HTTP_OK)
139         self.assertEqual(_id, body._id)
140         self.assert_update_body(self.req_d, body, self.update_e)
141
142         _, new_body = self.get(self.req_e.name)
143         self.assertEqual(_id, new_body._id)
144         self.assert_update_body(self.req_d, new_body, self.update_e)
145
146
147 class TestCaseDelete(TestCaseBase):
148     def test_notFound(self):
149         code, body = self.delete('notFound')
150         self.assertEqual(code, HTTP_NOT_FOUND)
151
152     def test_success(self):
153         self.create_d()
154         code, body = self.delete(self.req_d.name)
155         self.assertEqual(code, HTTP_OK)
156         self.assertEqual(body, '')
157
158         code, body = self.get(self.req_d.name)
159         self.assertEqual(code, HTTP_NOT_FOUND)
160
161
162 if __name__ == '__main__':
163     unittest.main()