changeset 14:3ebc043d9ff7

refactored and added test
author Atul Varma <varmaa@toolness.com>
date Wed, 23 Dec 2009 20:51:15 -0800
parents 942f278a9fff
children 07974aeffefe
files bzapi.py test.py
diffstat 2 files changed, 35 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/bzapi.py	Wed Dec 23 20:38:57 2009 -0800
+++ b/bzapi.py	Wed Dec 23 20:51:15 2009 -0800
@@ -106,8 +106,8 @@
 
 class BugzillaApi(object):
     def __init__(self, base_url, collection, username=None, password=None,
-                 urllib2=urllib2, utcnow=datetime.utcnow):
-        self._urllib2 = urllib2
+                 open_url=open_url, utcnow=datetime.utcnow):
+        self._open_url = open_url
         self._utcnow = utcnow
 
         self.base_url = base_url
@@ -149,12 +149,11 @@
             self._validate_component(params['product'],
                                      params.get('component'))
 
-        response = open_url(
+        response = self._open_url(
             url=self.base_url + url,
             query_args=params,
             headers={'Accept': 'application/json',
                      'Content-Type': 'application/json'},
-            urllib2=self._urllib2
             )
 
         # TODO: instead of 'now', we'd like to use the 'Date'
--- a/test.py	Wed Dec 23 20:38:57 2009 -0800
+++ b/test.py	Wed Dec 23 20:51:15 2009 -0800
@@ -11,6 +11,19 @@
         }
     }
 
+class FakeOpenUrl(object):
+    def __init__(self):
+        self._responses = {}
+
+    def set(self, url, query_args, response):
+        if not isinstance(response, basestring):
+            response = json.dumps(response)
+        self._responses[url + json.dumps(query_args)] = response
+
+    def __call__(self, url, headers, query_args=None):
+        response = self._responses[url + json.dumps(query_args)]
+        return StringIO.StringIO(response)
+
 class FakeRequest(object):
     def __init__(self, url):
         self.url = url
@@ -70,13 +83,22 @@
             'meh'
             )
 
-    def _get_basic_fake_api(self):
-        urllib2 = FakeUrllib2()
-        urllib2.set_url('http://foo/latest/configuration', FAKE_CONFIG)
+    def _get_basic_fake_api(self, **kwargs):
+        opener = FakeOpenUrl()
+        opener.set('http://foo/latest/configuration', kwargs,
+                   FAKE_CONFIG)
+        api = bzapi.BugzillaApi('http://foo/latest', FakeCollection(),
+                                open_url=opener, **kwargs)
+        return api
 
-        api = bzapi.BugzillaApi('http://foo/latest', FakeCollection(),
-                                urllib2=urllib2)
-        return api
+    def test_bzapi_uses_username_and_password(self):
+        api = self._get_basic_fake_api(username='foo',
+                                       password='bar')
+        api._open_url.set('http://foo/latest/stuff',
+                          {'username': 'foo',
+                           'password': 'bar'},
+                          {})
+        api.get('/stuff')
 
     def test_bzapi_raises_err_on_bad_component(self):
         api = self._get_basic_fake_api()
@@ -95,9 +117,10 @@
 
     def test_bzapi_validates_product_and_component(self):
         api = self._get_basic_fake_api()
-        api._urllib2.set_url('http://foo/latest/stuff?product=Mozilla+Labs&'
-                             'component=Jetpack',
-                             {})
+        api._open_url.set('http://foo/latest/stuff',
+                          {'product': 'Mozilla Labs',
+                           'component': 'Jetpack'},
+                          {})
         api.get('/stuff', product='Mozilla Labs', component='Jetpack')
 
     def test_bzapi_removes_dots_from_config(self):