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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
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
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
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
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
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
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
11 class FakeOpenUrl(object):
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
12 def __init__(self):
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
13 self._responses = {}
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
14
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
15 def set(self, url, query_args, response):
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
16 if not isinstance(response, basestring):
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
17 response = json.dumps(response)
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
18 self._responses[url + json.dumps(query_args)] = response
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
19
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
20 def __call__(self, url, headers, query_args=None):
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
21 response = self._responses[url + json.dumps(query_args)]
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
22 return StringIO.StringIO(response)
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
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
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
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
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
50 def test_datetime_from_iso(self):
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
51 date = bzapi.datetime_from_iso('2009-06-11T22:31:24Z')
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
52 self.assertEqual(str(date), '2009-06-11 22:31:24')
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
53
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
54 def test_datetime_from_rfc1123(self):
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
55 date = bzapi.datetime_from_rfc1123('Wed, 23 Dec 2009 20:42:59 GMT')
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
56 self.assertEqual(str(date), '2009-12-23 20:42:59')
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
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
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
93 def _get_basic_fake_api(self, config=FAKE_CONFIG, **kwargs):
14
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
94 opener = FakeOpenUrl()
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
95 opener.set('http://foo/latest/configuration', kwargs,
15
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
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
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
98 open_url=opener, **kwargs)
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
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
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
101 def test_bzapi_uses_username_and_password(self):
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
102 api = self._get_basic_fake_api(username='foo',
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
103 password='bar')
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
104 api._open_url.set('http://foo/latest/stuff',
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
105 {'username': 'foo',
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
106 'password': 'bar'},
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
107 {})
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
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
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
110 def test_bzapi_raises_err_on_bad_component(self):
15
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
111 config = copy.deepcopy(FAKE_CONFIG)
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
112 config['product']['Mozilla Labs'] = {'component': {'Jetpack': {}}}
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
113 api = self._get_basic_fake_api(config=config)
11
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
114 self.assertRaises(ValueError,
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
115 api.get,
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
116 '/blah',
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
117 product='Mozilla Labs',
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
118 component='nonexistent')
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
119
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
120 def test_bzapi_raises_err_on_bad_product(self):
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
121 api = self._get_basic_fake_api()
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
122 self.assertRaises(ValueError,
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
123 api.get,
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
124 '/blah',
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
125 product='nonexistent')
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
126
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
127 def test_bzapi_validates_product_and_component(self):
15
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
128 config = copy.deepcopy(FAKE_CONFIG)
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
129 config['product']['Mozilla Labs'] = {'component': {'Jetpack': {}}}
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
130 api = self._get_basic_fake_api(config=config)
14
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
131 api._open_url.set('http://foo/latest/stuff',
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
132 {'product': 'Mozilla Labs',
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
133 'component': 'Jetpack'},
3ebc043d9ff7 refactored and added test
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
134 {})
11
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
135 api.get('/stuff', product='Mozilla Labs', component='Jetpack')
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
136
f7a14f8868e9 added more tests
Atul Varma <varmaa@toolness.com>
parents: 10
diff changeset
137 def test_bzapi_removes_dots_from_config(self):
15
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
138 config = copy.deepcopy(FAKE_CONFIG)
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
139 config['product']['addons.mozilla.org'] = {}
07974aeffefe refactored tests a bit
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
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
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
143 if __name__ == '__main__':
c9a268d0fa74 added pathetic test suite
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
144 unittest.main()