Skip to content

Commit

Permalink
[qatl] added method named 'tl.getBuildsForTestPlan' + tests
Browse files Browse the repository at this point in the history
  • Loading branch information
crypto netzulo committed Dec 25, 2017
1 parent be6e479 commit 40c22e2
Show file tree
Hide file tree
Showing 5 changed files with 152 additions and 0 deletions.
6 changes: 6 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -166,3 +166,9 @@ Usage ( *XMLRPC* )

* **XMLRPC**: *call to method named* '*tl.getTestPlanPlatforms*'
* **Description** : get one test plan filtered by project and plan names

**api_tplan_builds**
+++++++++++++++++++++++

* **XMLRPC**: *call to method named* '*tl.getBuildsForTestPlan*'
* **Description** : get all builds for test project filtered by id
59 changes: 59 additions & 0 deletions qatestlink/core/models/tl_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,3 +229,62 @@ def __repr__(self):
self.id,
self.name,
self.notes)


class TBuild(ModelBase):
"""TODO: doc class"""

_res_members = None

# Testlink object properties
id = None
name = None
notes = None
testplan_id = None
active = None
is_open = None
release_date = None
closed_on_date = None
creation_ts = None


def __init__(self, res_members):
"""TODO: doc method"""
super(TBuild, self).__init__()
if res_members is None:
raise Exception('Bad param, res_member can\'t be None')
if len(res_members) <= 0:
raise Exception(
'Bad param, res_member can\'t be empty list')
self._res_members = res_members
self._load()

def _load(self):
for res_member in self._res_members:
name = res_member.name
value = res_member.value
if name == 'id':
self.id = value
if name == 'name':
self.name = value
if name == 'notes':
self.notes = value
if name == 'testplan_id':
self.testplan_id = value
if name == 'active':
self.active = value
if name == 'is_open':
self.is_open = value
if name == 'release_date':
self.release_date = value
if name == 'closed_on_date':
self.closed_on_date = value
if name == 'creation_ts':
self.creation_ts = value

def __repr__(self):
return "TBuild: id={}, name={}, notes={}, testplan_id={}".format(
self.id,
self.name,
self.notes,
self.testplan_id)
12 changes: 12 additions & 0 deletions qatestlink/core/testlink_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,3 +143,15 @@ def api_tplan_platforms(self, tplan_id, dev_key=None):
res_as_models = self._xml_manager.res_tplan_platforms(
res.status_code, res.text, as_models=True)
return res_as_models

def api_tplan_builds(self, tplan_id, dev_key=None):
"""Call to method named 'tl.getBuildsForTestPlan'"""
if dev_key is None:
dev_key = self._settings.get('dev_key')
req_data = self._xml_manager.req_tplan_builds(
dev_key, tplan_id)
res = self._conn.post(self._xml_manager.headers, req_data)
self._xml_manager.parse_errors(res.text)
res_as_models = self._xml_manager.res_tplan_builds(
res.status_code, res.text, as_models=True)
return res_as_models
50 changes: 50 additions & 0 deletions qatestlink/core/xmls/xmlrpc_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from qatestlink.core.models.tl_models import TPlan
from qatestlink.core.models.tl_models import TSuite
from qatestlink.core.models.tl_models import TPlatform
from qatestlink.core.models.tl_models import TBuild



Expand Down Expand Up @@ -349,3 +350,52 @@ def res_tplan_platforms(self, status_code, res_str, as_models=True):
tplatform = TPlatform(res_members)
tplatforms.append(tplatform)
return tplatforms

def req_tplan_builds(self, dev_key, tplan_id):
"""
Obtains all platforms asigned to test plan
created on remote testlink database,
can filter by test plan name
:return:
List of Tbuild objects containing all database
data loaded
"""
if tplan_id is None:
raise Exception("Can't call XMLRPC without param, tplan_id")
req = self._request_handler.create(
RouteType.TPLAN_BUILDS)
req = self._request_handler.create_param(
req, 'struct', 'devKey', dev_key)
req = self._request_handler.add_param(
req, 'testplanid', tplan_id)
return req

def res_tplan_builds(self, status_code, res_str, as_models=True):
"""
Parse and validate response for method
named 'tl.getBuildsForTestPlan', by default response list
of Tbuild objects, can response xml string too
:return:
if as_models is True
list of objects instanced with
Model classes
if as_models is False
string xml object ready to
parse/write/find/add Elements on it
"""
if status_code != 200:
raise Exception(
"status_code invalid: code={}".format(
status_code))
res = self._response_handler.create(
RouteType.TPLAN_BUILDS, res_str)
if not as_models:
return res
res_members_list = self._response_handler.get_response_members(
xml_str=res)
tbuilds = list()
for res_members in res_members_list:
tbuild = TBuild(res_members)
tbuilds.append(tbuild)
return tbuilds
25 changes: 25 additions & 0 deletions tests/unitaries/suite_002_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from qatestlink.core.models.tl_models import TPlan
from qatestlink.core.models.tl_models import TSuite
from qatestlink.core.models.tl_models import TPlatform
from qatestlink.core.models.tl_models import TBuild


API_DEV_KEY = 'ae2f4839476bea169f7461d74b0ed0ac'
Expand Down Expand Up @@ -97,6 +98,16 @@ def test_006_method_tplan_platforms(self):
self.testlink_manager.log.debug(repr(platform))
self.assertIsInstance(platform, TPlatform)

@skipIf(SKIP, 'Test SKIPPED')
def test_007_method_tplan_builds(self):
"""TODO: doc method"""
builds = self.testlink_manager.api_tplan_builds(
CONFIG['tplan_id'])
self.assertIsInstance(builds, list)
self.assertGreater(len(builds), 0)
for build in builds:
self.testlink_manager.log.debug(repr(build))
self.assertIsInstance(build, TBuild)

class TestMethodsRaises(TestCase):
"""TODO: doc class"""
Expand Down Expand Up @@ -200,3 +211,17 @@ def test_012_raises_tplan_platforms_emptyname(self):
ResponseException,
self.testlink_manager.api_tproject,
'')

@skipIf(SKIP, 'Test SKIPPED')
def test_012_raises_tplan_builds_notid(self):
"""TODO: doc method"""
self.assertRaises(
Exception, self.testlink_manager.api_tproject)

@skipIf(SKIP, 'Test SKIPPED')
def test_013_raises_tplan_builds_notfoundid(self):
"""TODO: doc method"""
self.assertRaises(
ResponseException,
self.testlink_manager.api_tproject,
-1)

0 comments on commit 40c22e2

Please sign in to comment.