Mercurial > bzapi
annotate 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 |
rev | line source |
---|---|
6 | 1 import unittest |
10
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
2 import StringIO |
15 | 3 import copy |
10
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
4 |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
5 import simplejson as json |
16
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
6 import pymongo |
10
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
7 import bzapi |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
8 |
15 | 9 FAKE_CONFIG = {'product': {}} |
10
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
10 |
14 | 11 class FakeOpenUrl(object): |
12 def __init__(self): | |
13 self._responses = {} | |
14 | |
15 def set(self, url, query_args, response): | |
16 if not isinstance(response, basestring): | |
17 response = json.dumps(response) | |
18 self._responses[url + json.dumps(query_args)] = response | |
19 | |
20 def __call__(self, url, headers, query_args=None): | |
21 response = self._responses[url + json.dumps(query_args)] | |
22 return StringIO.StringIO(response) | |
23 | |
10
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
24 class FakeRequest(object): |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
25 def __init__(self, url): |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
26 self.url = url |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
27 |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
28 def add_header(self, name, value): |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
29 pass |
6 | 30 |
10
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
31 class FakeUrllib2(object): |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
32 def __init__(self): |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
33 self._responses = {} |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
34 |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
35 def Request(self, url): |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
36 return FakeRequest(url) |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
37 |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
38 def set_url(self, url, response): |
13
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
39 if not isinstance(response, basestring): |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
40 response = json.dumps(response) |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
41 self._responses[url] = response |
10
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
42 |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
43 def urlopen(self, request): |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
44 return StringIO.StringIO(self._responses[request.url]) |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
45 |
16
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
46 connection = pymongo.Connection('localhost', 27017) |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
47 testdb = connection.bzapi_testing_db |
10
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
48 |
16
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
49 class TimestampTests(unittest.TestCase): |
6 | 50 def test_datetime_from_iso(self): |
51 date = bzapi.datetime_from_iso('2009-06-11T22:31:24Z') | |
52 self.assertEqual(str(date), '2009-06-11 22:31:24') | |
53 | |
54 def test_datetime_from_rfc1123(self): | |
55 date = bzapi.datetime_from_rfc1123('Wed, 23 Dec 2009 20:42:59 GMT') | |
56 self.assertEqual(str(date), '2009-12-23 20:42:59') | |
57 | |
16
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
58 class OpenUrlTests(unittest.TestCase): |
13
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
59 def test_open_url_works_without_query_args(self): |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
60 urllib2 = FakeUrllib2() |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
61 urllib2.set_url('http://foo/', 'boo') |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
62 self.assertEqual( |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
63 bzapi.open_url(url='http://foo/', |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
64 headers={'Content-Type': 'text/plain'}, |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
65 urllib2=urllib2).read(), |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
66 'boo' |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
67 ) |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
68 |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
69 def test_open_url_works_with_query_args(self): |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
70 urllib2 = FakeUrllib2() |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
71 urllib2.set_url('http://foo/?blah=hi+there', 'meh') |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
72 self.assertEqual( |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
73 bzapi.open_url(url='http://foo/', |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
74 query_args={'blah': 'hi there'}, |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
75 headers={'Content-Type': 'text/plain'}, |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
76 urllib2=urllib2).read(), |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
77 'meh' |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
78 ) |
942f278a9fff
refactored some stuff, added tests
Atul Varma <varmaa@toolness.com>
parents:
12
diff
changeset
|
79 |
16
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
80 class ApiTests(unittest.TestCase): |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
81 _collections = ['api', 'bugs'] |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
82 |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
83 def _reset_collections(self): |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
84 for name in self._collections: |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
85 testdb[name].remove({}) |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
86 |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
87 def setUp(self): |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
88 self._reset_collections() |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
89 |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
90 def tearDown(self): |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
91 self._reset_collections() |
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
92 |
15 | 93 def _get_basic_fake_api(self, config=FAKE_CONFIG, **kwargs): |
14 | 94 opener = FakeOpenUrl() |
95 opener.set('http://foo/latest/configuration', kwargs, | |
15 | 96 config) |
16
aa2e7f3731c1
test suite now uses a test db instead of a fake one
Atul Varma <varmaa@toolness.com>
parents:
15
diff
changeset
|
97 api = bzapi.BugzillaApi('http://foo/latest', testdb.api, |
14 | 98 open_url=opener, **kwargs) |
99 return api | |
10
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
100 |
14 | 101 def test_bzapi_uses_username_and_password(self): |
102 api = self._get_basic_fake_api(username='foo', | |
103 password='bar') | |
104 api._open_url.set('http://foo/latest/stuff', | |
105 {'username': 'foo', | |
106 'password': 'bar'}, | |
107 {}) | |
108 api.get('/stuff') | |
10
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
109 |
11 | 110 def test_bzapi_raises_err_on_bad_component(self): |
15 | 111 config = copy.deepcopy(FAKE_CONFIG) |
112 config['product']['Mozilla Labs'] = {'component': {'Jetpack': {}}} | |
113 api = self._get_basic_fake_api(config=config) | |
11 | 114 self.assertRaises(ValueError, |
115 api.get, | |
116 '/blah', | |
117 product='Mozilla Labs', | |
118 component='nonexistent') | |
119 | |
120 def test_bzapi_raises_err_on_bad_product(self): | |
121 api = self._get_basic_fake_api() | |
122 self.assertRaises(ValueError, | |
123 api.get, | |
124 '/blah', | |
125 product='nonexistent') | |
126 | |
127 def test_bzapi_validates_product_and_component(self): | |
15 | 128 config = copy.deepcopy(FAKE_CONFIG) |
129 config['product']['Mozilla Labs'] = {'component': {'Jetpack': {}}} | |
130 api = self._get_basic_fake_api(config=config) | |
14 | 131 api._open_url.set('http://foo/latest/stuff', |
132 {'product': 'Mozilla Labs', | |
133 'component': 'Jetpack'}, | |
134 {}) | |
11 | 135 api.get('/stuff', product='Mozilla Labs', component='Jetpack') |
136 | |
137 def test_bzapi_removes_dots_from_config(self): | |
15 | 138 config = copy.deepcopy(FAKE_CONFIG) |
139 config['product']['addons.mozilla.org'] = {} | |
140 api = self._get_basic_fake_api(config=config) | |
10
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
141 self.assertTrue('addons_DOT_mozilla_DOT_org' in api.config['product']) |
2731713f61a8
added more tests and a totally untested 'observer' mechanism
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
142 |
6 | 143 if __name__ == '__main__': |
144 unittest.main() |