Mercurial > bzapi
view test.py @ 16:aa2e7f3731c1
test suite now uses a test db instead of a fake one
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Wed, 23 Dec 2009 21:25:29 -0800 |
parents | 07974aeffefe |
children | 5e68520b8d1f |
line wrap: on
line source
import unittest import StringIO import copy import simplejson as json import pymongo import bzapi FAKE_CONFIG = {'product': {}} 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 def add_header(self, name, value): pass class FakeUrllib2(object): def __init__(self): self._responses = {} def Request(self, url): return FakeRequest(url) def set_url(self, url, response): if not isinstance(response, basestring): response = json.dumps(response) self._responses[url] = response def urlopen(self, request): return StringIO.StringIO(self._responses[request.url]) connection = pymongo.Connection('localhost', 27017) testdb = connection.bzapi_testing_db class TimestampTests(unittest.TestCase): def test_datetime_from_iso(self): date = bzapi.datetime_from_iso('2009-06-11T22:31:24Z') self.assertEqual(str(date), '2009-06-11 22:31:24') def test_datetime_from_rfc1123(self): date = bzapi.datetime_from_rfc1123('Wed, 23 Dec 2009 20:42:59 GMT') self.assertEqual(str(date), '2009-12-23 20:42:59') class OpenUrlTests(unittest.TestCase): def test_open_url_works_without_query_args(self): urllib2 = FakeUrllib2() urllib2.set_url('http://foo/', 'boo') self.assertEqual( bzapi.open_url(url='http://foo/', headers={'Content-Type': 'text/plain'}, urllib2=urllib2).read(), 'boo' ) def test_open_url_works_with_query_args(self): urllib2 = FakeUrllib2() urllib2.set_url('http://foo/?blah=hi+there', 'meh') self.assertEqual( bzapi.open_url(url='http://foo/', query_args={'blah': 'hi there'}, headers={'Content-Type': 'text/plain'}, urllib2=urllib2).read(), 'meh' ) class ApiTests(unittest.TestCase): _collections = ['api', 'bugs'] def _reset_collections(self): for name in self._collections: testdb[name].remove({}) def setUp(self): self._reset_collections() def tearDown(self): self._reset_collections() def _get_basic_fake_api(self, config=FAKE_CONFIG, **kwargs): opener = FakeOpenUrl() opener.set('http://foo/latest/configuration', kwargs, config) api = bzapi.BugzillaApi('http://foo/latest', testdb.api, open_url=opener, **kwargs) 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): config = copy.deepcopy(FAKE_CONFIG) config['product']['Mozilla Labs'] = {'component': {'Jetpack': {}}} api = self._get_basic_fake_api(config=config) self.assertRaises(ValueError, api.get, '/blah', product='Mozilla Labs', component='nonexistent') def test_bzapi_raises_err_on_bad_product(self): api = self._get_basic_fake_api() self.assertRaises(ValueError, api.get, '/blah', product='nonexistent') def test_bzapi_validates_product_and_component(self): config = copy.deepcopy(FAKE_CONFIG) config['product']['Mozilla Labs'] = {'component': {'Jetpack': {}}} api = self._get_basic_fake_api(config=config) 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): config = copy.deepcopy(FAKE_CONFIG) config['product']['addons.mozilla.org'] = {} api = self._get_basic_fake_api(config=config) self.assertTrue('addons_DOT_mozilla_DOT_org' in api.config['product']) if __name__ == '__main__': unittest.main()