Skip to content

Commit

Permalink
[qatl] added method named tl.getTestCase
Browse files Browse the repository at this point in the history
  • Loading branch information
crypto netzulo committed Mar 16, 2018
1 parent 0168672 commit 7bfff68
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 2 deletions.
6 changes: 4 additions & 2 deletions qatestlink/core/models/tl_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,10 +256,12 @@ def _load(self):
for res_property in self._properties:
name = self.convert_name(res_property['name'])
value = res_property['value']
if name == 'tcase_id':
if name == 'testcase_id':
setattr(self, 'id', int(value['string']))
if name == 'tcase_name':
if name == 'testcase_name':
setattr(self, 'name', value['string'])
if name == 'full_tc_external_id':
setattr(self, 'external_id', value['string'])

def __repr__(self):
"""Show basic properties for this object
Expand Down
14 changes: 14 additions & 0 deletions qatestlink/core/testlink_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,3 +355,17 @@ def api_tsuite(self, tsuite_id, dev_key=None):
'methodResponse')['params']['param']['value']
properties = res_param.get('struct')['member']
return TSuite(properties)

def api_tcase(self, tcase_id=None, external_id=None, dev_key=None):
"""TODO: doc"""
if dev_key is None:
dev_key = self._settings.get('dev_key')
req_data = self._xml_manager.req_tcase_by_id_or_external(
dev_key, tcase_id=tcase_id, external_id=external_id)
res = self._conn.post(self._xml_manager.headers, req_data)
res_dict = self._xml_manager.parse_response(res)
res_param = res_dict.get(
'methodResponse')['params']['param']['value']
properties = res_param.get(
'array')['data']['value']['struct']['member']
return TCase(properties)
49 changes: 49 additions & 0 deletions qatestlink/core/xmls/xmlrpc_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -439,3 +439,52 @@ def req_tsuite_by_id(self, dev_key, tsuite_id):
xml = dicttoxml(
self.req_dict, custom_root='methodCall', attr_type=False)
return xml

def req_tcase_by_id_or_external(self, dev_key,
tcase_id=None, external_id=None):
"""Obtains one test case created on remote testlink database, can
filter by test case id (int) or external id (str)
Arguments:
dev_key {str} -- string of developer key provided by Testlink
(default: {value obtained from JSON settings file})
tcase_id {int} -- ID of Testlink Test Case data (default: None)
external_id {str} -- tc_full_external_id of Testlink Test Case
data (default: None)
Raises:
Exception -- Bad params
Returns:
str -- string xml object ready to use on API call
"""
if tcase_id and external_id:
raise Exception(
("Can't call XMLRPC without both params,"
"choose one of : [tcase_id, external_id]"))
if not tcase_id and not external_id:
raise Exception(
("Can't call XMLRPC without any params,"
"choose one of : [tcase_id, external_id]"))
self.req_dict.update({
"methodName": RouteType.TCASE_BY_IDS.value
})
data = {
"params": {
"struct": {
"member": [
{"name": "devKey", "value": dev_key}
]
}
}
}
if isinstance(tcase_id, int):
data['params']['struct']['member'].append(
{"name": "testcaseid", "value": int(tcase_id)})
if isinstance(external_id, str):
data['params']['struct']['member'].append(
{"name": "testcaseexternalid", "value": str(external_id)})
self.req_dict.update(data)
xml = dicttoxml(
self.req_dict, custom_root='methodCall', attr_type=False)
return xml
17 changes: 17 additions & 0 deletions tests/unitaries/suite_002_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,23 @@ def test_010_method_tsuite(self):
self.assertIsInstance(tsuite, TSuite)
self.assertEquals(tsuite.name, DATA['tsuite_name'])

@skipIf(False, SKIP_MESSAGE)
def test_011_method_tcase_byid(self):
"""TODO: doc method"""
tcase = self.testlink_manager.api_tcase(
tcase_id=DATA['tcase_id'])
self.assertIsInstance(tcase, TCase)
self.assertEquals(tcase.id, DATA['tcase_id'])

@skipIf(False, SKIP_MESSAGE)
def test_012_method_tcase_byexternalid(self):
"""TODO: doc method"""
tcase = self.testlink_manager.api_tcase(
external_id=DATA['tcase_full_external_id'])
self.assertIsInstance(tcase, TCase)
self.assertEquals(
tcase.external_id, DATA['tcase_full_external_id'])


class TestMethodsRaises(TestCase):
"""Test suite for tests methods
Expand Down

0 comments on commit 7bfff68

Please sign in to comment.