From: Aleksey Maksimov Date: Mon, 31 Mar 2014 14:34:00 +0000 (+0800) Subject: Small changes in jobs classes X-Git-Tag: v0.2.23~28^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=438a2678880b88a6e03653f28d3b6463d0352260;p=tools%2Fpython-jenkinsapi.git Small changes in jobs classes --- diff --git a/jenkinsapi/jenkins.py b/jenkinsapi/jenkins.py index 1d4b2a7..9abf2a9 100644 --- a/jenkinsapi/jenkins.py +++ b/jenkinsapi/jenkins.py @@ -130,6 +130,9 @@ class Jenkins(JenkinsBase): def create_job(self, jobname, config_): """ Create a job + + alternatively you can create job using Jobs object: + self.jobs['job_name'] = config :param jobname: name of new job, str :param config: configuration of new job, xml :return: new Job obj diff --git a/jenkinsapi/job.py b/jenkinsapi/job.py index 6d490e6..586b031 100644 --- a/jenkinsapi/job.py +++ b/jenkinsapi/job.py @@ -127,7 +127,7 @@ class Job(JenkinsBase, MutableJenkinsThing): return self._element_tree def get_build_triggerurl(self): - if not self.get_params_list(): + if not self.has_params(): return "%s/build" % self.baseurl return "%s/buildWithParameters" % self.baseurl @@ -603,10 +603,10 @@ class Job(JenkinsBase, MutableJenkinsThing): """ Gets the list of parameter names for this job. """ - params = [] - for param in self.get_params(): - params.append(param['name']) - return params + return [param['name'] for param in self.get_params()] + + def has_params(self): + return len(self._data['actions']) > 0 def has_queued_build(self, build_params): """Returns True if a build with build_params is currently queued.""" diff --git a/jenkinsapi/jobs.py b/jenkinsapi/jobs.py index 1e560d0..de87a79 100644 --- a/jenkinsapi/jobs.py +++ b/jenkinsapi/jobs.py @@ -37,7 +37,7 @@ class Jobs(object): self.jenkins.poll() def __setitem__(self, key, value): - raise NotImplementedError() + return self.create(key, value) def __getitem__(self, job_name): for row in self.jenkins._data.get('jobs', []): diff --git a/jenkinsapi_tests/systests/test_jenkins.py b/jenkinsapi_tests/systests/test_jenkins.py index 5ffbdb5..92a44a0 100644 --- a/jenkinsapi_tests/systests/test_jenkins.py +++ b/jenkinsapi_tests/systests/test_jenkins.py @@ -16,6 +16,11 @@ class JobTests(BaseSystemTest): self.jenkins.create_job(job_name, EMPTY_JOB) self.assertJobIsPresent(job_name) + def test_create_job_through_jobs_dict(self): + job_name = 'create_%s' % random_string() + self.jenkins.jobs[job_name] = EMPTY_JOB + self.assertJobIsPresent(job_name) + def test_enable_disable_job(self): job_name = 'create_%s' % random_string() self.jenkins.create_job(job_name, EMPTY_JOB) diff --git a/jenkinsapi_tests/unittests/test_job.py b/jenkinsapi_tests/unittests/test_job.py index 82e7e21..b4f2a28 100644 --- a/jenkinsapi_tests/unittests/test_job.py +++ b/jenkinsapi_tests/unittests/test_job.py @@ -9,7 +9,28 @@ from jenkinsapi.custom_exceptions import NoBuildData class TestJob(unittest.TestCase): JOB_DATA = { - "actions": [], + "actions": [{ + "parameterDefinitions": [ + { + "defaultParameterValue": { + "name": "param1", + "value": "test1" + }, + "description": "", + "name": "param1", + "type": "StringParameterDefinition" + }, + { + "defaultParameterValue": { + "name": "param2", + "value": "" + }, + "description": "", + "name": "param2", + "type": "StringParameterDefinition" + } + ] + }], "description": "test job", "displayName": "foo", "displayNameOrNull": None, @@ -84,7 +105,7 @@ class TestJob(unittest.TestCase): def test_get_build_triggerurl(self): self.assertEquals( - self.j.get_build_triggerurl(), 'http://halob:8080/job/foo/build') + self.j.get_build_triggerurl(), 'http://halob:8080/job/foo/buildWithParameters') def test_wrong__mk_json_from_build_parameters(self): with self.assertRaises(AssertionError) as ar: @@ -187,5 +208,25 @@ class TestJob(unittest.TestCase): j._add_missing_builds(data) self.assertEquals(get_data.call_count, initial_call_count) + @mock.patch.object(JenkinsBase, 'get_data') + def test_get_params(self, get_data): + url = 'http://halob:8080/job/foo/%s' % config.JENKINS_API + get_data.return_value = TestJob.URL_DATA[url].copy() + j = Job('http://halob:8080/job/foo/', 'foo', self.J) + params = list(j.get_params()) + self.assertEquals(len(params), 2) + + @mock.patch.object(JenkinsBase, 'get_data') + def test_get_params_list(self, get_data): + url = 'http://halob:8080/job/foo/%s' % config.JENKINS_API + get_data.return_value = TestJob.URL_DATA[url].copy() + j = Job('http://halob:8080/job/foo/', 'foo', self.J) + + params = j.get_params_list() + + self.assertIsInstance(params, list) + self.assertEquals(len(params), 2) + self.assertEquals(params, ['param1', 'param2']) + if __name__ == '__main__': unittest.main()