diff --git a/api.py b/api.py index 3b5a7e6..e6aeff1 100644 --- a/api.py +++ b/api.py @@ -77,9 +77,9 @@ def Subscribe(google_user, client, args): 'events': models.Subscription.FindOrCreate(subject, client, messages), } for key in keys: - message = models.Subject.GetKey(key) + message = subject.GetKey(key) if message: - ret['events'].append(message) + ret['events'].append(message.ToEvent()) return ret diff --git a/static/test.js b/static/test.js index ec40aa3..49d11a9 100644 --- a/static/test.js +++ b/static/test.js @@ -199,6 +199,38 @@ asyncTest('subscribe/unsubscribe Promise', function() { }); }); +asyncTest('Duplicate message suppression', function() { + expect(3); + + var subject = randstring(); + var key = randstring(); + var message1 = randstring(); + var message2 = randstring(); + + var callbacks = { + 'onMessage': function (msg) { + equal(msg['subject'], subject, 'subject matches'); + equal(msg['key'], key, 'key matches'); + equal(msg['message'], message1, 'message matches'); + cosmo.shutdown(); + start(); + }, + }; + + var cosmo = new Cosmopolite(callbacks, null, randstring()); + // Break cosmo's UUID generator so that it generates duplicate values. + cosmo.uuid_ = function() { + return '4'; + // chosen by fair dice roll. + // guaranteed to be random. + }; + cosmo.sendMessage(subject, message1, key).then(function() { + cosmo.sendMessage(subject, message2, key).then(function() { + cosmo.subscribe(subject, 0, [key]); + }); + }); +}); + module('dev_appserver only');