From 3f6e53db6e616fdf65af0e3f709b48180efee64f Mon Sep 17 00:00:00 2001 From: Jason Michalski Date: Wed, 26 Feb 2014 18:01:18 -0500 Subject: [PATCH] Add bot_data module that updated with events (imported from commit b0bd714258132fc81db763d316a15f5a81b1f4ff) --- static/js/bot_data.js | 39 +++++++++++++++++++++ static/js/server_events.js | 9 +++++ tools/jslint/check-all.js | 2 +- zerver/lib/actions.py | 2 ++ zerver/models.py | 5 +-- zerver/tests.py | 3 ++ zerver/tests/frontend/node/bot_data.js | 48 ++++++++++++++++++++++++++ zproject/settings.py | 1 + 8 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 static/js/bot_data.js create mode 100644 zerver/tests/frontend/node/bot_data.js diff --git a/static/js/bot_data.js b/static/js/bot_data.js new file mode 100644 index 0000000000..dd88c66808 --- /dev/null +++ b/static/js/bot_data.js @@ -0,0 +1,39 @@ +var bot_data = (function () { + var exports = {}; + + var bots = {}; + var bot_fields = ['api_key', 'avatar_url', 'default_all_public_streams', + 'default_events_register_stream', + 'default_sending_stream', 'email', 'full_name']; + + exports.add = function bot_data__add(bot) { + bots[bot.email] = _.pick(bot, bot_fields); + }; + + exports.remove = function bot_data__remove(email) { + delete bots[email]; + }; + + exports.update = function bot_data__update(email, bot_update) { + _.extend(bots[email], _.pick(bot_update, bot_fields)); + }; + + exports.get_all = function bots_data__get_all() { + return bots; + }; + + exports.get = function bots_data__get(email) { + return bots[email]; + }; + + $(function init() { + _.each(page_params.bot_list, function (bot) { + exports.add(bot); + }); + }); + + return exports; +}()); +if (typeof module !== 'undefined') { + module.exports = bot_data; +} diff --git a/static/js/server_events.js b/static/js/server_events.js index 1b5b8e8975..e1d0fb2a13 100644 --- a/static/js/server_events.js +++ b/static/js/server_events.js @@ -87,6 +87,15 @@ function get_events_success(events) { people.update(event.person); } break; + case 'realm_bot': + if (event.op === 'add') { + bot_data.add(event.bot); + } else if (event.op === 'remove') { + bot_data.remove(event.bot.email); + } else if (event.op === 'update') { + bot_data.update(event.bot.email, event.bot); + } + break; case 'stream': if (event.op === 'update') { // Legacy: Stream properties are still managed by subs.js on the client side. diff --git a/tools/jslint/check-all.js b/tools/jslint/check-all.js index 9bd2a500a8..083e99bb6b 100644 --- a/tools/jslint/check-all.js +++ b/tools/jslint/check-all.js @@ -28,7 +28,7 @@ var globals = + ' message_edit tab_bar emoji popovers navigate people settings alert_words_ui message_store' + ' avatar feature_flags search_suggestion referral stream_color Dict' + ' Filter summary admin stream_data muting WinChan muting_ui Socket channel' - + ' message_flags' + + ' message_flags bot_data' // colorspace.js + ' colorspace' diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index 88e28657f1..34b4b753be 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -132,6 +132,7 @@ def notify_created_bot(user_profile): default_events_register_stream=default_events_register_stream_name, default_all_public_streams=user_profile.default_all_public_streams, avatar_url=avatar_url(user_profile), + owner=user_profile.bot_owner.email, )) send_event(event, bot_owner_userids(user_profile)) @@ -2237,6 +2238,7 @@ def get_realm_bot_dicts(user_profile): 'default_sending_stream': botdict['default_sending_stream__name'], 'default_events_register_stream': botdict['default_events_register_stream__name'], 'default_all_public_streams': botdict['default_all_public_streams'], + 'owner': botdict['bot_owner__email'], 'avatar_url': get_avatar_url(botdict['avatar_source'], botdict['email']), } for botdict in get_active_bot_dicts_in_realm(user_profile.realm)] diff --git a/zerver/models.py b/zerver/models.py index 6522eb585b..c2afad1e48 100644 --- a/zerver/models.py +++ b/zerver/models.py @@ -1042,9 +1042,10 @@ def get_active_bot_dicts_in_realm(realm): 'email', 'default_sending_stream__name', 'default_events_register_stream__name', 'default_all_public_streams', 'api_key', - 'avatar_source') \ + 'bot_owner__email', 'avatar_source') \ .select_related('default_sending_stream', - 'default_events_register_stream') + 'default_events_register_stream', + 'bot_owner') def get_prereg_user_by_email(email): # A user can be invited many times, so only return the result of the latest diff --git a/zerver/tests.py b/zerver/tests.py index bb2bcf214a..413fc2b9d1 100644 --- a/zerver/tests.py +++ b/zerver/tests.py @@ -378,6 +378,7 @@ class BotTest(AuthedTestCase): default_sending_stream=None, default_events_register_stream=None, default_all_public_streams=False, + owner='hamlet@zulip.com', ) ), event['event'] @@ -432,6 +433,7 @@ class BotTest(AuthedTestCase): default_sending_stream='Denmark', default_events_register_stream=None, default_all_public_streams=False, + owner='hamlet@zulip.com', ) ), event['event'] @@ -492,6 +494,7 @@ class BotTest(AuthedTestCase): default_sending_stream=None, default_events_register_stream='Denmark', default_all_public_streams=False, + owner='hamlet@zulip.com', ) ), event['event'] diff --git a/zerver/tests/frontend/node/bot_data.js b/zerver/tests/frontend/node/bot_data.js new file mode 100644 index 0000000000..7a9199a7ff --- /dev/null +++ b/zerver/tests/frontend/node/bot_data.js @@ -0,0 +1,48 @@ +set_global('$', function () {}); + +var bot_data = require('js/bot_data.js'); + +(function () { + var test_bot = { + email: 'bot1@zulip.com', + avatar_url: '', + default_all_public_streams: '', + default_events_register_stream: '', + default_sending_stream: '', + full_name: 'Bot 1', + extra: 'Not in data' + }; + + (function test_add() { + bot_data.add(test_bot); + + var bot = bot_data.get('bot1@zulip.com'); + assert.equal('Bot 1', bot.full_name); + assert.equal(undefined, bot.extra); + }()); + + (function test_update() { + var bot; + + bot_data.add(test_bot); + + bot = bot_data.get('bot1@zulip.com'); + assert.equal('Bot 1', bot.full_name); + bot_data.update('bot1@zulip.com', {full_name: 'New Bot 1'}); + bot = bot_data.get('bot1@zulip.com'); + assert.equal('New Bot 1', bot.full_name); + }()); + + (function test_remove() { + var bot; + + bot_data.add(test_bot); + + bot = bot_data.get('bot1@zulip.com'); + assert.equal('Bot 1', bot.full_name); + bot_data.remove('bot1@zulip.com'); + bot = bot_data.get('bot1@zulip.com'); + assert.equal(undefined, bot); + }()); + +}()); diff --git a/zproject/settings.py b/zproject/settings.py index 8ee64786f8..ebe86d8ac4 100644 --- a/zproject/settings.py +++ b/zproject/settings.py @@ -571,6 +571,7 @@ JS_SPECS = { 'js/emoji.js', 'js/referral.js', 'js/custom_markdown.js', + 'js/bot_data.js', ], 'output_filename': 'min/app.js' },