Small changes in jobs classes
authorAleksey Maksimov <ctpeko3a@gmail.com>
Mon, 31 Mar 2014 14:34:00 +0000 (22:34 +0800)
committerAleksey Maksimov <ctpeko3a@gmail.com>
Mon, 31 Mar 2014 14:34:00 +0000 (22:34 +0800)
jenkinsapi/jenkins.py
jenkinsapi/job.py
jenkinsapi/jobs.py
jenkinsapi_tests/systests/test_jenkins.py
jenkinsapi_tests/unittests/test_job.py

index 1d4b2a708d000953acea9fbff817586a85d01859..9abf2a9e67faa99e2e9b73f9fb402525a43dbfb3 100644 (file)
@@ -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
index 6d490e638050f414cf6012a7beefc07331ccb877..586b031401fcdfe089640ee3d15a0bb5b68d8bf2 100644 (file)
@@ -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."""
index 1e560d0a43c65d3d79204efad361316803b933e1..de87a799d36339603625ed0be7f6efd86b4d4973 100644 (file)
@@ -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', []):
index 5ffbdb5b93df880bc3465e90d9ba3888cf46a086..92a44a0d9738422c76f3bb65c85b18ee7404fedd 100644 (file)
@@ -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)
index 82e7e21c0b4ed74a64c17a0c244181def62f947c..b4f2a28f7f56a379ff9f97427b39aeb0aa82636c 100644 (file)
@@ -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()