From 65249d90e9fc2cac8fbf8b745a5a7012eef90180 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Bodas Date: Mon, 3 May 2021 20:30:45 +0530 Subject: [PATCH] compose_typeahead: Exclude muted users from results. Hides muted users from PM recipients and compose box mention typeaheads. --- .../node_tests/composebox_typeahead.js | 24 +++++++++++++++++++ static/js/composebox_typeahead.js | 4 ++++ 2 files changed, 28 insertions(+) diff --git a/frontend_tests/node_tests/composebox_typeahead.js b/frontend_tests/node_tests/composebox_typeahead.js index 184f93320a..4413106726 100644 --- a/frontend_tests/node_tests/composebox_typeahead.js +++ b/frontend_tests/node_tests/composebox_typeahead.js @@ -39,6 +39,7 @@ const typeahead = zrequire("../shared/js/typeahead"); const compose_state = zrequire("compose_state"); zrequire("templates"); const typeahead_helper = zrequire("typeahead_helper"); +const muting = zrequire("muting"); const people = zrequire("people"); const user_groups = zrequire("user_groups"); const stream_data = zrequire("stream_data"); @@ -1543,3 +1544,26 @@ test("message people", (override) => { // harry is excluded since it has been deactivated. assert.deepEqual(results, [hamletcharacters, hal]); }); + +test("muted users excluded from results", () => { + // This logic is common to PM recipients as well as + // mentions typeaheads, so we need only test once. + let results; + const opts = { + want_groups: false, + want_broadcast: true, + }; + + // Nobody is muted + results = ct.get_person_suggestions("corde", opts); + assert.deepEqual(results, [cordelia]); + + // Mute Cordelia, and test that she's excluded from results. + muting.add_muted_user(cordelia.user_id); + results = ct.get_person_suggestions("corde", opts); + assert.deepEqual(results, []); + + // Make sure our muting logic doesn't break wildcard mentions. + results = ct.get_person_suggestions("all", opts); + assert.deepEqual(results, [mention_all]); +}); diff --git a/static/js/composebox_typeahead.js b/static/js/composebox_typeahead.js index 6343a378fa..b0464ac25e 100644 --- a/static/js/composebox_typeahead.js +++ b/static/js/composebox_typeahead.js @@ -14,6 +14,7 @@ import * as compose_state from "./compose_state"; import * as compose_ui from "./compose_ui"; import {$t} from "./i18n"; import * as message_store from "./message_store"; +import * as muting from "./muting"; import {page_params} from "./page_params"; import * as people from "./people"; import * as rows from "./rows"; @@ -445,10 +446,13 @@ export function get_person_suggestions(query, opts) { } else { persons = all_persons; } + // Exclude muted users from typeaheads. + persons = muting.filter_muted_users(persons); if (opts.want_broadcast) { persons = persons.concat(broadcast_mentions()); } + return persons.filter((item) => query_matches_person(query, item)); }