From: Aleksey Maksimov Date: Thu, 20 Jun 2013 04:03:44 +0000 (+0800) Subject: Added tests for Job, reformatted Job code X-Git-Tag: v0.2.23~132^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=df802433d72df29aa448767214801dab954ab754;p=tools%2Fpython-jenkinsapi.git Added tests for Job, reformatted Job code --- diff --git a/jenkinsapi/job.py b/jenkinsapi/job.py index 9fe7925..9905875 100644 --- a/jenkinsapi/job.py +++ b/jenkinsapi/job.py @@ -147,7 +147,8 @@ class Job(JenkinsBase, MutableJenkinsThing): def _buildid_for_type(self, buildtype): """Gets a buildid for a given type of build""" - KNOWNBUILDTYPES=["lastSuccessfulBuild", "lastBuild", "lastCompletedBuild"] + KNOWNBUILDTYPES=["lastSuccessfulBuild", "lastBuild", + "lastCompletedBuild", "lastFailedBuild"] assert buildtype in KNOWNBUILDTYPES if self._data[buildtype] == None: return None @@ -161,6 +162,12 @@ class Job(JenkinsBase, MutableJenkinsThing): """ return self._buildid_for_type(buildtype="lastSuccessfulBuild") + def get_last_failed_buildnumber( self ): + """ + Get the numerical ID of the last good build. + """ + return self._buildid_for_type(buildtype="lastFailedBuild") + def get_last_buildnumber( self ): """ Get the numerical ID of the last build. @@ -174,9 +181,10 @@ class Job(JenkinsBase, MutableJenkinsThing): return self._buildid_for_type(buildtype="lastCompletedBuild") def get_build_dict(self): - if not self._data.has_key( "builds" ): - raise NoBuildData( repr(self) ) - return dict( ( a["number"], a["url"] ) for a in self._data["builds"] ) + if not self._data.has_key("builds"): + raise NoBuildData(repr(self)) + return dict((build["number"], build["url"]) + for build in self._data["builds"]) def get_revision_dict(self): """ @@ -193,7 +201,7 @@ class Job(JenkinsBase, MutableJenkinsThing): """ Return a sorted list of all good builds as ints. """ - return reversed( sorted( self.get_build_dict().keys() ) ) + return reversed(sorted(self.get_build_dict().keys())) def get_next_build_number(self): """ @@ -201,12 +209,12 @@ class Job(JenkinsBase, MutableJenkinsThing): """ return self._data.get('nextBuildNumber', 0) - def get_last_good_build( self ): + def get_last_good_build(self): """ Get the last good build """ bn = self.get_last_good_buildnumber() - return self.get_build( bn ) + return self.get_build(bn) def get_last_build( self ): """ @@ -249,10 +257,10 @@ class Job(JenkinsBase, MutableJenkinsThing): def get_build( self, buildnumber ): assert type(buildnumber) == int - url = self.get_build_dict()[ buildnumber ] - return Build( url, buildnumber, job=self ) + url = self.get_build_dict()[buildnumber] + return Build(url, buildnumber, job=self) - def __getitem__( self, buildnumber ): + def __getitem__(self, buildnumber): return self.get_build(buildnumber) def is_queued_or_running(self): diff --git a/jenkinsapi_tests/unittests/test_job.py b/jenkinsapi_tests/unittests/test_job.py index 2eff0ed..434f3e6 100644 --- a/jenkinsapi_tests/unittests/test_job.py +++ b/jenkinsapi_tests/unittests/test_job.py @@ -3,7 +3,7 @@ import unittest import datetime from jenkinsapi.job import Job - +from jenkinsapi.exceptions import NoBuildData class TestJob(unittest.TestCase): @@ -49,7 +49,7 @@ class TestJob(unittest.TestCase): def testRepr(self): # Can we produce a repr string for this object - repr(self.j) + self.assertEquals(repr(self.j), '') def testName(self): with self.assertRaises(AttributeError): @@ -66,5 +66,88 @@ class TestJob(unittest.TestCase): self.assertEquals(self.j.get_rename_url(), 'http://halob:8080/job/foo/doRename') + def test_get_description(self): + self.assertEquals(self.j.get_description(), 'test job') + + def test_get_build_triggerurl(self): + self.assertEquals(self.j.get_build_triggerurl(), 'http://halob:8080/job/foo/build') + + def test_wrong__mk_json_from_build_parameters(self): + with self.assertRaises(AssertionError) as ar: + self.j._mk_json_from_build_parameters(build_params='bad parameter') + + self.assertEquals(ar.exception.message, 'Build parameters must be a dict') + + def test__mk_json_from_build_parameters(self): + params = {'param1': 'value1', 'param2': 'value2'} + ret = self.j._mk_json_from_build_parameters(build_params=params) + self.assertTrue(isinstance(ret, dict)) + self.assertTrue(isinstance(ret.get('parameter'), list)) + self.assertEquals(len(ret.get('parameter')), 2) + + def test_wrong_mk_json_from_build_parameters(self): + with self.assertRaises(AssertionError) as ar: + self.j.mk_json_from_build_parameters(build_params='bad parameter') + + self.assertEquals(ar.exception.message, 'Build parameters must be a dict') + + def test__mk_json_from_build_parameters(self): + params = {'param1': 'value1', 'param2': 'value2'} + ret = self.j.mk_json_from_build_parameters(build_params=params) + self.assertTrue(isinstance(ret, str)) + self.assertEquals(ret, + '{"parameter": [{"name": "param2", "value": "value2"}, {"name": "param1", "value": "value1"}]}') + + def test_wrong_field__build_id_for_type(self): + with self.assertRaises(AssertionError) as ar: + self.j._buildid_for_type('wrong') + + def test_get_last_good_buildnumber(self): + ret = self.j.get_last_good_buildnumber() + self.assertTrue(ret, 3) + + def test_get_last_failed_buildnumber(self): + ret = self.j.get_last_failed_buildnumber() + self.assertEquals(ret, None) + + def test_get_last_buildnumber(self): + ret = self.j.get_last_buildnumber() + self.assertEquals(ret, 3) + + def test_get_last_completed_buildnumber(self): + ret = self.j.get_last_completed_buildnumber() + self.assertEquals(ret, 3) + + def test_get_build_dict(self): + ret = self.j.get_build_dict() + self.assertTrue(isinstance(ret, dict)) + self.assertEquals(len(ret), 3) + + @mock.patch.object(Job, '_poll') + def test_nobuilds_get_build_dict(self, _poll): + # Bare minimum build dict, we only testing dissapearance of 'builds' + _poll.return_value = {"name": "foo"} + + j = Job('http://halob:8080/job/foo/', 'foo', self.J) + with self.assertRaises(NoBuildData) as nbd: + ret = j.get_build_dict() + + def test_get_build_ids(self): + # We don't want to deal with listreverseiterator here + # So we convert result to a list + ret = list(self.j.get_build_ids()) + self.assertTrue(isinstance(ret, list)) + self.assertEquals(len(ret), 3) + + @mock.patch.object(Job, '_poll') + def test_nobuilds_get_revision_dict(self, _poll): + # Bare minimum build dict, we only testing dissapearance of 'builds' + _poll.return_value = {"name": "foo"} + + j = Job('http://halob:8080/job/foo/', 'foo', self.J) + with self.assertRaises(NoBuildData) as nbd: + ret = j.get_revision_dict() + + if __name__ == '__main__': unittest.main()