diff --git a/frontend_tests/node_tests/activity.js b/frontend_tests/node_tests/activity.js index 8db3d3db58..ad778da7f5 100644 --- a/frontend_tests/node_tests/activity.js +++ b/frontend_tests/node_tests/activity.js @@ -85,6 +85,7 @@ zrequire('people'); zrequire('buddy_data'); zrequire('buddy_list'); zrequire('user_search'); +zrequire('user_status'); zrequire('list_cursor'); zrequire('activity'); @@ -864,3 +865,11 @@ run_test('initialize', () => { activity.initialize(); }); + +run_test('away_status', () => { + assert(!user_status.is_away(alice.user_id)); + activity.on_set_away(alice.user_id); + assert(user_status.is_away(alice.user_id)); + activity.on_revoke_away(alice.user_id); + assert(!user_status.is_away(alice.user_id)); +}); diff --git a/frontend_tests/node_tests/dispatch.js b/frontend_tests/node_tests/dispatch.js index 96fd5792ff..73df31dc6d 100644 --- a/frontend_tests/node_tests/dispatch.js +++ b/frontend_tests/node_tests/dispatch.js @@ -634,6 +634,16 @@ var event_fixtures = { description: 'All Frontend people', }, }, + user_status__revoke_away: { + type: 'user_status', + user_id: 63, + away: false, + }, + user_status__set_away: { + type: 'user_status', + user_id: 55, + away: true, + }, }; function assert_same(actual, expected) { @@ -1374,3 +1384,22 @@ with_overrides(function (override) { assert_same(args.opts.topic_name, 'topic1'); }); }); + +with_overrides(function (override) { + // attachements + var event = event_fixtures.user_status__set_away; + global.with_stub(function (stub) { + override('activity.on_set_away', stub.f); + dispatch(event); + var args = stub.get_args('user_id'); + assert_same(args.user_id, 55); + }); + + event = event_fixtures.user_status__revoke_away; + global.with_stub(function (stub) { + override('activity.on_revoke_away', stub.f); + dispatch(event); + var args = stub.get_args('user_id'); + assert_same(args.user_id, 63); + }); +}); diff --git a/static/js/activity.js b/static/js/activity.js index 95ddd4d004..025aec7b5b 100644 --- a/static/js/activity.js +++ b/static/js/activity.js @@ -392,6 +392,16 @@ exports.update_presence_info = function (email, info, server_time) { exports.update_huddles(); }; +exports.on_set_away = function (user_id) { + user_status.set_away(user_id); + exports.insert_user_into_list(user_id); +}; + +exports.on_revoke_away = function (user_id) { + user_status.revoke_away(user_id); + exports.insert_user_into_list(user_id); +}; + exports.redraw = function () { exports.build_user_sidebar(); exports.user_cursor.redraw(); diff --git a/static/js/server_events_dispatch.js b/static/js/server_events_dispatch.js index de466d3eae..1f179981a9 100644 --- a/static/js/server_events_dispatch.js +++ b/static/js/server_events_dispatch.js @@ -455,7 +455,16 @@ exports.dispatch_normal_event = function dispatch_normal_event(event) { } settings_user_groups.reload(); break; + + case 'user_status': + if (event.away) { + activity.on_set_away(event.user_id); + } else { + activity.on_revoke_away(event.user_id); + } + break; } + }; return exports;