Mercurial > bzapi
changeset 10:2731713f61a8
added more tests and a totally untested 'observer' mechanism
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Wed, 23 Dec 2009 16:12:27 -0800 |
parents | bac306ebd2da |
children | f7a14f8868e9 |
files | bzapi.py example.py test.py |
diffstat | 3 files changed, 62 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/bzapi.py Wed Dec 23 15:14:22 2009 -0800 +++ b/bzapi.py Wed Dec 23 16:12:27 2009 -0800 @@ -35,8 +35,12 @@ sanitize(item) class CachedSearch(object): - def __init__(self, api, collection, **kwargs): + def __init__(self, api, collection, observers=None, **kwargs): + if observers is None: + observers = [] + self.options = kwargs + self.observers = observers self.bugs = collection self.api = api @@ -62,6 +66,8 @@ normalize_bug(bug) bug['retrieved_time'] = response['date'] self.bugs.save(bug) + for observer in self.observers: + observer.notify({'bug': bug['id']}) def update(self): params = {} @@ -85,7 +91,11 @@ self._update_last_update() class BugzillaApi(object): - def __init__(self, base_url, collection, username=None, password=None): + def __init__(self, base_url, collection, username=None, password=None, + urllib2=urllib2, utcnow=datetime.utcnow): + self._urllib2 = urllib2 + self._utcnow = utcnow + self.base_url = base_url self.username = username self.password = password @@ -109,7 +119,7 @@ raise ValueError(msg) def get(self, url, **kwargs): - now = datetime.utcnow().replace(microsecond=0) + now = self._utcnow().replace(microsecond=0) for name, value in kwargs.items(): if isinstance(value, datetime): @@ -130,11 +140,11 @@ urllib.urlencode(params)) logging.debug('retrieving %s' % full_url) - request = urllib2.Request(full_url) + request = self._urllib2.Request(full_url) request.add_header('Accept', 'application/json') request.add_header('Content-Type', 'application/json') - response = urllib2.urlopen(request) + response = self._urllib2.urlopen(request) # TODO: instead of 'now', we'd like to use the 'Date' # HTTP header, but it's actually completely wrong in
--- a/example.py Wed Dec 23 15:14:22 2009 -0800 +++ b/example.py Wed Dec 23 16:12:27 2009 -0800 @@ -26,7 +26,7 @@ ) search.update() -#print search.bugs.find_one({'id': '530169'}) +#print search.bugs.find_one({'id': '536619'}) #print len([bug for bug in search.bugs.itervalues()])
--- a/test.py Wed Dec 23 15:14:22 2009 -0800 +++ b/test.py Wed Dec 23 16:12:27 2009 -0800 @@ -1,6 +1,42 @@ import unittest +import StringIO + +import simplejson as json +import bzapi + +FAKE_CONFIG = { + 'product': { + 'Mozilla Labs': { 'component': { 'Jetpack': {} } }, + 'addons.mozilla.org': {} + } + } + +class FakeRequest(object): + def __init__(self, url): + self.url = url + + def add_header(self, name, value): + pass -import bzapi +class FakeUrllib2(object): + def __init__(self): + self._responses = {} + + def Request(self, url): + return FakeRequest(url) + + def set_url(self, url, response): + self._responses[url] = json.dumps(response) + + def urlopen(self, request): + return StringIO.StringIO(self._responses[request.url]) + +class FakeCollection(object): + def find_one(self, *args, **kwargs): + return None + + def insert(self, obj): + pass class Tests(unittest.TestCase): def test_datetime_from_iso(self): @@ -11,5 +47,14 @@ date = bzapi.datetime_from_rfc1123('Wed, 23 Dec 2009 20:42:59 GMT') self.assertEqual(str(date), '2009-12-23 20:42:59') + def test_bzapi_removes_dots_from_config(self): + urllib2 = FakeUrllib2() + urllib2.set_url('http://foo/latest/configuration?', FAKE_CONFIG) + + api = bzapi.BugzillaApi('http://foo/latest', FakeCollection(), + urllib2=urllib2) + + self.assertTrue('addons_DOT_mozilla_DOT_org' in api.config['product']) + if __name__ == '__main__': unittest.main()