Mercurial > bzapi
changeset 26:057f6f0eac22
added more tests
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Thu, 24 Dec 2009 06:45:30 -0800 |
parents | 73756a9e87a6 |
children | f717ecd3ede1 |
files | test.py |
diffstat | 1 files changed, 41 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/test.py Wed Dec 23 22:51:41 2009 -0800 +++ b/test.py Thu Dec 24 06:45:30 2009 -0800 @@ -1,7 +1,7 @@ import unittest import StringIO from copy import deepcopy -from datetime import datetime +from datetime import datetime, timedelta import simplejson as json import pymongo @@ -77,14 +77,30 @@ self._reset_collections() class CachedSearchTests(_MongoTestCase): + class ImpartialObserver(object): + def __init__(self): + self.history = [] + + def notify(self, info): + self.history.append(info) + class FakeApi(object): def __init__(self): self._bugs = {} + self._time = bzapi.datetime_from_iso('2009-01-01T00:00:00Z') + + def fake_time_travel(self, **kwargs): + self._time += timedelta(**kwargs) + + def update_fake_bug(self, **info): + bug = self._bugs[info['id']] + bug.update(info) + bug['last_change_time'] = bzapi.datetime_to_iso(self._time) def add_fake_bug(self, **info): for name in ['last_change_time', 'creation_time']: if name not in info: - info[name] = '2009-06-11T22:31:24Z' + info[name] = bzapi.datetime_to_iso(self._time) self._bugs[info['id']] = info def get(self, url, **kwargs): @@ -101,7 +117,7 @@ if 'comments' in info: del info['comments'] return {'data': {'bugs': bugs}, - 'date': datetime.utcnow()} + 'date': self._time} _collections = ['bugs'] @@ -109,34 +125,41 @@ _MongoTestCase.setUp(self) self.api = self.FakeApi() self.search = bzapi.CachedSearch(self.api, testdb.bugs) + self.observer = self.ImpartialObserver() + self.search.add_observer(self.observer) - def test_update_with_no_bugs(self): + def test_update_with_no_bugs_does_not_crash(self): self.search.update() self.assertEqual(testdb.bugs.find().count(), 0) - def test_update_with_bug(self): + def test_update_with_one_bug_adds_it_to_collection(self): self.api.add_fake_bug(id='1034', comments='blah') self.search.update() self.assertEqual(testdb.bugs.find({'comments': 'blah'}).count(), 1) - def test_observers_are_notified(self): - notifications = [] + def test_one_bug_update_notifies_observers(self): + self.api.add_fake_bug(id='1034') + self.search.update() + self.api.fake_time_travel(days=1) + self.api.update_fake_bug(id='1034', comments='yo') + self.search.update() + self.assertEqual(len(self.observer.history), 2) - class Observer(object): - def notify(self, info): - notifications.append(info) - + def test_one_bug_addition_notifies_observers(self): self.api.add_fake_bug(id='1034') - self.search.add_observer(Observer()) - + self.assertEqual(len(self.observer.history), 0) self.search.update() - self.assertEqual(len(notifications), 1) - self.assertEqual(notifications[0]['bug'], '1034') + self.assertEqual(len(self.observer.history), 1) + self.assertEqual(self.observer.history[0]['bug'], '1034') - # Ensure updating w/o state change doesn't trigger - # observers. + def test_no_bug_changes_do_not_notify_observers(self): + self.api.add_fake_bug(id='1034') self.search.update() - self.assertEqual(len(notifications), 1) + self.assertEqual(len(self.observer.history), 1) + + self.api.fake_time_travel(days=1) + self.search.update() + self.assertEqual(len(self.observer.history), 1) class ApiTests(_MongoTestCase): class FakeOpenUrl(object):