Mercurial > bzapi
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):