fix a bunch of tests
authorSalim Fadhley <sal@stodge.org>
Sat, 2 Aug 2014 15:09:55 +0000 (16:09 +0100)
committerSalim Fadhley <sal@stodge.org>
Sat, 2 Aug 2014 15:09:55 +0000 (16:09 +0100)
jenkinsapi/queue.py
jenkinsapi_tests/unittests/test_queue.py

index 967ccf0f6bb56dec9c4cda8a0f553288261c0890..388697c4f0fd92d0012bf4a65ed2745da9baed60 100644 (file)
@@ -60,15 +60,17 @@ class Queue(JenkinsBase):
         else:
             raise UnknownQueueItem(item_id)
 
-    def get_queue_items_for_job(self, job_name=''):
-        if not job_name:
-            return [QueueItem(self.jenkins, **item)
-                    for item in self._data['items']]
-        else:
-            return [QueueItem(self.jenkins, **item)
-                    for item in self._data['items']
-                    if item['task']['name'] == job_name]
-
+    def _get_queue_items_for_job(self, job_name):
+        for item in self._data["items"]:
+            if item['task']['name'] == job_name:
+                yield QueueItem(self.get_queue_item_url(item), jenkins_obj=self.jenkins)
+            
+    def get_queue_items_for_job(self, job_name):
+        return list(self._get_queue_items_for_job(job_name))
+    
+    def get_queue_item_url(self, item):
+        return "%s/item/%i" % (self.baseurl, item["id"])
+            
     def delete_item(self, queue_item):
         self.delete_item_by_id(queue_item.id)
 
@@ -97,11 +99,11 @@ class QueueItem(JenkinsBase):
         """
         Return the job associated with this queue item
         """
-        return self.jenkins[self.task['name']]
+        return self.jenkins[self._data['task']['name']]
 
     def get_parameters(self):
         """returns parameters of queue item"""
-        actions = getattr(self, 'actions', [])
+        actions = self._data.get('actions', [])
         for action in actions:
             if type(action) is dict and 'parameters' in action:
                 parameters = action['parameters']
index d473cbbb392003541fe81746bd1eef33fd975623..8ace52fb5d2f98ad91b07fb1db1a23ad95b537b3 100644 (file)
@@ -13,35 +13,14 @@ from jenkinsapi.job import Job
 
 
 class FourOhFourError(Exception):
+
     """
     Missing fake data
     """
 
 
 class TestQueue(unittest.TestCase):
-
-    @classmethod
-    def mockGetData(self, url):
-        try:
-            return TestQueue.URL_DATA[url]
-        except KeyError:
-            raise FourOhFourError(url)
-
-    URL_DATA = {}
-
-    URL_DATA['http://localhost:8080/%s' % config.JENKINS_API] = {
-        'jobs': [
-            {
-                'name': 'utmebvpxrw',
-                'color': 'blue',
-                'url': 'http://localhost/job/utmebvpxrw'
-            }
-        ]
-    }
-
-    URL_DATA['http://localhost/job/utmebvpxrw/%s' % config.JENKINS_API] = {}
-
-    URL_DATA['http://localhost:8080/queue/%s' % config.JENKINS_API] = {
+    QUEUE_DATA = {
         'items': [
             {
                 'actions': [
@@ -52,7 +31,10 @@ class TestQueue(unittest.TestCase):
                                 'userId': None,
                                 'userName': 'anonymous'
                             }
-                        ]
+                        ],
+                        'parameters':
+                        [{'name': 'name1', 'value': 'value1'},
+                         {'name': 'node'}]
                     }
                 ],
                 'blocked': False,
@@ -124,6 +106,36 @@ class TestQueue(unittest.TestCase):
         ]
     }
 
+    @classmethod
+    def mockGetData(self, url):
+        try:
+            return TestQueue.URL_DATA[url]
+        except KeyError:
+            raise FourOhFourError(url)
+
+    URL_DATA = {}
+
+    URL_DATA['http://localhost:8080/%s' % config.JENKINS_API] = {
+        'jobs': [
+            {
+                'name': 'utmebvpxrw',
+                'color': 'blue',
+                'url': 'http://localhost/job/utmebvpxrw'
+            }
+        ]
+    }
+
+    URL_DATA['http://localhost/job/utmebvpxrw/%s' % config.JENKINS_API] = {}
+
+    URL_DATA['http://localhost:8080/queue/%s' %
+             config.JENKINS_API] = QUEUE_DATA
+
+    for item in QUEUE_DATA['items']:
+        url = 'http://localhost:8080/queue/item/%i/%s' % (
+            item['id'], config.JENKINS_API)
+        print(url)
+        URL_DATA[url] = item
+
     @mock.patch.object(JenkinsBase, 'get_data', mockGetData)
     def setUp(self):
         self.J = Jenkins('http://localhost:8080')  # Jenkins
@@ -138,6 +150,7 @@ class TestQueue(unittest.TestCase):
     def test_list_items(self):
         self.assertEquals(set(self.q.keys()), set([40, 41, 42]))
 
+    @mock.patch.object(JenkinsBase, 'get_data', mockGetData)
     def test_getitem(self):
         item40 = self.q[40]
         self.assertIsInstance(item40, QueueItem)
@@ -155,16 +168,10 @@ class TestQueue(unittest.TestCase):
         self.assertEquals(len(item40), 1)
         self.assertIsInstance(item40[0], QueueItem)
 
-        item40 = self.q.get_queue_items_for_job()
-        self.assertIsInstance(item40, list)
-        self.assertEquals(len(item40), 3)
 
+    @mock.patch.object(JenkinsBase, 'get_data', mockGetData)
     def test_qi_get_parameters(self):
-        act =  [{'parameters':
-                [{'name': 'name1', 'value': 'value1'},
-                {'name': 'node'}]}]
-        qi = QueueItem(jenkins=None, actions=act)
-
+        qi = self.q[42]
         self.assertEquals(qi.get_parameters(), {'name1': 'value1',
                                                 'node': None})