Fix / prune tests of get_updates

The assertion-checking callbacks were never called before.  Now they will at
least get called when the view invokes handler.finish() before returning, i.e.
the return_messages_immediately case.

I fixed up the assertion-checking callback for one of the test cases.  For the
other two it wasn't clear what to do -- one has been known-broken for a long
time -- so I just removed them.

"Fixes" #277 in as much as that test case is gone now.

(imported from commit 82d1db26f36f82f24aa5b7ff9e5aa65ce24c9a8f)
This commit is contained in:
Keegan McAllister
2012-11-28 01:59:57 -05:00
parent b5dccbfa87
commit 07ff10e308

View File

@@ -420,14 +420,20 @@ class MessagePOSTTest(AuthedTestCase):
self.assert_json_error(result, "Invalid message type") self.assert_json_error(result, "Invalid message type")
class DummyHandler(object): class DummyHandler(object):
def __init__(self, callback): def __init__(self, assert_callback):
self.callback = callback self.assert_callback = assert_callback
def async_callback(self, _): # Mocks RequestHandler.async_callback, which wraps a callback to
return self.callback # handle exceptions. We return the callback as-is.
def async_callback(self, cb):
return cb
def finish(self, _): def write(self, response):
return raise NotImplemented
def finish(self, response):
if self.assert_callback:
self.assert_callback(response)
class DummySession(object): class DummySession(object):
session_key = "0" session_key = "0"
@@ -435,7 +441,7 @@ class DummySession(object):
class POSTRequestMock(object): class POSTRequestMock(object):
method = "POST" method = "POST"
def __init__(self, post_data, user, assert_callback): def __init__(self, post_data, user, assert_callback=None):
self.POST = post_data self.POST = post_data
self.user = user self.user = user
self._tornado_handler = DummyHandler(assert_callback) self._tornado_handler = DummyHandler(assert_callback)
@@ -448,11 +454,12 @@ class GetUpdatesTest(AuthedTestCase):
def common_test_get_updates(self, view_func, extra_post_data = {}): def common_test_get_updates(self, view_func, extra_post_data = {}):
user = User.objects.get(email="hamlet@humbughq.com") user = User.objects.get(email="hamlet@humbughq.com")
def callback(messages): def callback(response):
correct_messages = filter_by_subscriptions(Message.objects.all(), user) correct_message_ids = [m.id for m in
for message in messages: filter_by_subscriptions(Message.objects.all(), user)]
self.assertTrue(message in correct_messages) for message in response['messages']:
self.assertTrue(message.id > 1) self.assertGreater(message['id'], 1)
self.assertIn(message['id'], correct_message_ids)
post_data = {"last": str(1), "first": str(1)} post_data = {"last": str(1), "first": str(1)}
post_data.update(extra_post_data) post_data.update(extra_post_data)
@@ -475,28 +482,6 @@ class GetUpdatesTest(AuthedTestCase):
api_key = self.get_api_key(email) api_key = self.get_api_key(email)
self.common_test_get_updates(api_get_messages, {'email': email, 'api-key': api_key}) self.common_test_get_updates(api_get_messages, {'email': email, 'api-key': api_key})
def test_beyond_last_message(self):
"""
If your last_received message is greater than the greatest Message ID, you
don't get any new messages.
"""
self.login("hamlet@humbughq.com")
user = User.objects.get(email="hamlet@humbughq.com")
last_received = max(message.id for message in Message.objects.all()) + 100
messages = []
def callback(data):
# We can't make asserts in this nested function, so save the data
# and assert in the parent.
#
# TODO: Find out how to make this blocking so assertEquals below
# runs after us.
messages.extend(data)
request = POSTRequestMock({"last": str(last_received), "first": "1"}, user, callback)
self.assertEquals(json_get_updates(request), RespondAsynchronously)
self.assertEquals(len(messages), 0)
def test_missing_last_received(self): def test_missing_last_received(self):
""" """
Calling json_get_updates without any arguments should work Calling json_get_updates without any arguments should work
@@ -504,13 +489,7 @@ class GetUpdatesTest(AuthedTestCase):
self.login("hamlet@humbughq.com") self.login("hamlet@humbughq.com")
user = User.objects.get(email="hamlet@humbughq.com") user = User.objects.get(email="hamlet@humbughq.com")
def callback(messages): request = POSTRequestMock({}, user)
correct_messages = filter_by_subscriptions(Message.objects.all(), user)
for message in messages:
self.assertTrue(message in correct_messages)
self.assertTrue(message.id > 1)
request = POSTRequestMock({}, user, callback)
self.assertEquals(json_get_updates(request), RespondAsynchronously) self.assertEquals(json_get_updates(request), RespondAsynchronously)
class Runner(DjangoTestSuiteRunner): class Runner(DjangoTestSuiteRunner):