5 import opnfv_testapi.resources.scenario_models as models
6 from opnfv_testapi.common import message
7 from opnfv_testapi.tests.unit.resources import test_base as base
10 class TestScenarioBase(base.TestBase):
12 super(TestScenarioBase, self).setUp()
13 self.get_res = models.Scenario
14 self.list_res = models.Scenarios
15 self.basePath = '/api/v1/scenarios'
16 self.req_d = self._load_request('scenario-c1.json')
17 self.req_2 = self._load_request('scenario-c2.json')
22 def assert_body(self, project, req=None):
26 def _load_request(f_req):
27 abs_file = os.path.join(os.path.dirname(__file__), f_req)
28 with open(abs_file, 'r') as f:
33 def create_return_name(self, req):
34 _, res = self.create(req)
35 return res.href.split('/')[-1]
37 def assert_res(self, code, scenario, req=None):
38 self.assertEqual(code, httplib.OK)
41 self.assertIsNotNone(scenario._id)
42 self.assertIsNotNone(scenario.creation_date)
44 scenario == models.Scenario.from_dict(req)
47 def _set_query(*args):
53 def _get_and_assert(self, name, req=None):
54 code, body = self.get(name)
55 self.assert_res(code, body, req)
58 class TestScenarioCreate(TestScenarioBase):
59 def test_withoutBody(self):
60 (code, body) = self.create()
61 self.assertEqual(code, httplib.BAD_REQUEST)
63 def test_emptyName(self):
64 req_empty = models.ScenarioCreateRequest('')
65 (code, body) = self.create(req_empty)
66 self.assertEqual(code, httplib.BAD_REQUEST)
67 self.assertIn(message.missing('name'), body)
69 def test_noneName(self):
70 req_none = models.ScenarioCreateRequest(None)
71 (code, body) = self.create(req_none)
72 self.assertEqual(code, httplib.BAD_REQUEST)
73 self.assertIn(message.missing('name'), body)
75 def test_success(self):
76 (code, body) = self.create_d()
77 self.assertEqual(code, httplib.OK)
78 self.assert_create_body(body)
80 def test_alreadyExist(self):
82 (code, body) = self.create_d()
83 self.assertEqual(code, httplib.FORBIDDEN)
84 self.assertIn(message.exist_base, body)
87 class TestScenarioGet(TestScenarioBase):
89 super(TestScenarioGet, self).setUp()
90 self.scenario_1 = self.create_return_name(self.req_d)
91 self.scenario_2 = self.create_return_name(self.req_2)
93 def test_getByName(self):
94 self._get_and_assert(self.scenario_1, self.req_d)
96 def test_getAll(self):
97 self._query_and_assert(query=None, reqs=[self.req_d, self.req_2])
99 def test_queryName(self):
100 query = self._set_query('name=nosdn-nofeature-ha')
101 self._query_and_assert(query, reqs=[self.req_d])
103 def test_queryInstaller(self):
104 query = self._set_query('installer=apex')
105 self._query_and_assert(query, reqs=[self.req_d])
107 def test_queryVersion(self):
108 query = self._set_query('version=master')
109 self._query_and_assert(query, reqs=[self.req_d])
111 def test_queryProject(self):
112 query = self._set_query('project=functest')
113 self._query_and_assert(query, reqs=[self.req_d, self.req_2])
115 # close due to random fail, open again after solve it in another patch
116 # def test_queryCombination(self):
117 # query = self._set_query('name=nosdn-nofeature-ha',
120 # 'project=functest')
122 # self._query_and_assert(query, reqs=[self.req_d])
124 def _query_and_assert(self, query, found=True, reqs=None):
125 code, body = self.query(query)
127 self.assertEqual(code, httplib.OK)
128 self.assertEqual(0, len(body.scenarios))
130 self.assertEqual(len(reqs), len(body.scenarios))
132 for scenario in body.scenarios:
133 if req['name'] == scenario.name:
134 self.assert_res(code, scenario, req)
137 class TestScenarioDelete(TestScenarioBase):
138 def test_notFound(self):
139 code, body = self.delete('notFound')
140 self.assertEqual(code, httplib.NOT_FOUND)
142 def test_success(self):
143 scenario = self.create_return_name(self.req_d)
144 code, _ = self.delete(scenario)
145 self.assertEqual(code, httplib.OK)
146 code, _ = self.get(scenario)
147 self.assertEqual(code, httplib.NOT_FOUND)
150 def _none_default(check, default):
151 return check if check else default