Merge "Support opera test in functest releng"
[releng.git] / utils / test / testapi / opnfv_testapi / tests / unit / test_project.py
1 ##############################################################################
2 # Copyright (c) 2016 ZTE Corporation
3 # feng.xiaowei@zte.com.cn
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9 import httplib
10 import unittest
11
12 from opnfv_testapi.common import message
13 from opnfv_testapi.resources import project_models
14 from opnfv_testapi.tests.unit import test_base as base
15
16
17 class TestProjectBase(base.TestBase):
18     def setUp(self):
19         super(TestProjectBase, self).setUp()
20         self.req_d = project_models.ProjectCreateRequest('vping',
21                                                          'vping-ssh test')
22         self.req_e = project_models.ProjectCreateRequest('doctor',
23                                                          'doctor test')
24         self.get_res = project_models.Project
25         self.list_res = project_models.Projects
26         self.update_res = project_models.Project
27         self.basePath = '/api/v1/projects'
28
29     def assert_body(self, project, req=None):
30         if not req:
31             req = self.req_d
32         self.assertEqual(project.name, req.name)
33         self.assertEqual(project.description, req.description)
34         self.assertIsNotNone(project._id)
35         self.assertIsNotNone(project.creation_date)
36
37
38 class TestProjectCreate(TestProjectBase):
39     def test_withoutBody(self):
40         (code, body) = self.create()
41         self.assertEqual(code, httplib.BAD_REQUEST)
42
43     def test_emptyName(self):
44         req_empty = project_models.ProjectCreateRequest('')
45         (code, body) = self.create(req_empty)
46         self.assertEqual(code, httplib.BAD_REQUEST)
47         self.assertIn(message.missing('name'), body)
48
49     def test_noneName(self):
50         req_none = project_models.ProjectCreateRequest(None)
51         (code, body) = self.create(req_none)
52         self.assertEqual(code, httplib.BAD_REQUEST)
53         self.assertIn(message.missing('name'), body)
54
55     def test_success(self):
56         (code, body) = self.create_d()
57         self.assertEqual(code, httplib.OK)
58         self.assert_create_body(body)
59
60     def test_alreadyExist(self):
61         self.create_d()
62         (code, body) = self.create_d()
63         self.assertEqual(code, httplib.FORBIDDEN)
64         self.assertIn(message.exist_base, body)
65
66
67 class TestProjectGet(TestProjectBase):
68     def test_notExist(self):
69         code, body = self.get('notExist')
70         self.assertEqual(code, httplib.NOT_FOUND)
71
72     def test_getOne(self):
73         self.create_d()
74         code, body = self.get(self.req_d.name)
75         self.assertEqual(code, httplib.OK)
76         self.assert_body(body)
77
78     def test_list(self):
79         self.create_d()
80         self.create_e()
81         code, body = self.get()
82         for project in body.projects:
83             if self.req_d.name == project.name:
84                 self.assert_body(project)
85             else:
86                 self.assert_body(project, self.req_e)
87
88
89 class TestProjectUpdate(TestProjectBase):
90     def test_withoutBody(self):
91         code, _ = self.update(None, 'noBody')
92         self.assertEqual(code, httplib.BAD_REQUEST)
93
94     def test_notFound(self):
95         code, _ = self.update(self.req_e, 'notFound')
96         self.assertEqual(code, httplib.NOT_FOUND)
97
98     def test_newNameExist(self):
99         self.create_d()
100         self.create_e()
101         code, body = self.update(self.req_e, self.req_d.name)
102         self.assertEqual(code, httplib.FORBIDDEN)
103         self.assertIn(message.exist_base, body)
104
105     def test_noUpdate(self):
106         self.create_d()
107         code, body = self.update(self.req_d, self.req_d.name)
108         self.assertEqual(code, httplib.FORBIDDEN)
109         self.assertIn(message.no_update(), body)
110
111     def test_success(self):
112         self.create_d()
113         code, body = self.get(self.req_d.name)
114         _id = body._id
115
116         req = project_models.ProjectUpdateRequest('newName', 'new description')
117         code, body = self.update(req, self.req_d.name)
118         self.assertEqual(code, httplib.OK)
119         self.assertEqual(_id, body._id)
120         self.assert_body(body, req)
121
122         _, new_body = self.get(req.name)
123         self.assertEqual(_id, new_body._id)
124         self.assert_body(new_body, req)
125
126
127 class TestProjectDelete(TestProjectBase):
128     def test_notFound(self):
129         code, body = self.delete('notFound')
130         self.assertEqual(code, httplib.NOT_FOUND)
131
132     def test_success(self):
133         self.create_d()
134         code, body = self.delete(self.req_d.name)
135         self.assertEqual(code, httplib.OK)
136         self.assertEqual(body, '')
137
138         code, body = self.get(self.req_d.name)
139         self.assertEqual(code, httplib.NOT_FOUND)
140
141 if __name__ == '__main__':
142     unittest.main()