diff --git a/app/assets/javascripts/discourse/lib/link-mentions.js.es6 b/app/assets/javascripts/discourse/lib/link-mentions.js.es6 index f3bbbe37972..30bdcdda95f 100644 --- a/app/assets/javascripts/discourse/lib/link-mentions.js.es6 +++ b/app/assets/javascripts/discourse/lib/link-mentions.js.es6 @@ -51,6 +51,8 @@ function updateFound($mentions, usernames) { group: true, mentionable: mentionableGroups[username] }); + } else if (foundGroups[username]) { + replaceSpan($e, username, { group: true }); } else if (checked[username]) { $e.addClass("mention-tested"); } diff --git a/app/assets/stylesheets/common/base/topic-post.scss b/app/assets/stylesheets/common/base/topic-post.scss index a3471995f42..5d87827b887 100644 --- a/app/assets/stylesheets/common/base/topic-post.scss +++ b/app/assets/stylesheets/common/base/topic-post.scss @@ -760,12 +760,15 @@ blockquote > *:last-child { a.mention, a.mention-group { - padding: 2px 4px; - color: dark-light-choose($primary-high, $secondary-low); - background: $primary-low; - border-radius: 8px; font-weight: bold; font-size: 0.93em; + color: $primary; + &.notify { + color: dark-light-choose($primary-high, $secondary-low); + padding: 2px 4px; + background: $primary-low; + border-radius: 8px; + } } .popup-menu { diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 64b1152a1f7..4fd276da5bf 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -308,7 +308,7 @@ class UsersController < ApplicationController groups = Group.where(name: usernames).pluck(:name) mentionable_groups = if current_user - Group.mentionable(current_user) + Group.mentionable(current_user, include_public: false) .where(name: usernames) .pluck(:name, :user_count) .map do |name, user_count| diff --git a/spec/requests/users_controller_spec.rb b/spec/requests/users_controller_spec.rb index 9869ce538fe..a452f4e897e 100644 --- a/spec/requests/users_controller_spec.rb +++ b/spec/requests/users_controller_spec.rb @@ -2402,7 +2402,10 @@ describe UsersController do describe '#is_local_username' do fab!(:user) { Fabricate(:user) } - fab!(:group) { Fabricate(:group, name: "Discourse") } + fab!(:group) { Fabricate(:group, name: "Discourse", mentionable_level: Group::ALIAS_LEVELS[:everyone]) } + let(:unmentionable) { + Fabricate(:group, name: "Unmentionable", mentionable_level: Group::ALIAS_LEVELS[:nobody]) + } fab!(:topic) { Fabricate(:topic) } fab!(:allowed_user) { Fabricate(:user) } let(:private_topic) { Fabricate(:private_message_topic, user: allowed_user) } @@ -2416,11 +2419,21 @@ describe UsersController do end it "finds the group" do + sign_in(user) get "/u/is_local_username.json", params: { username: group.name } - expect(response.status).to eq(200) json = JSON.parse(response.body) - expect(json["valid_groups"][0]).to eq(group.name) + expect(json["valid_groups"]).to include(group.name) + expect(json["mentionable_groups"].find { |g| g['name'] == group.name }).to be_present + end + + it "finds unmentionable groups" do + sign_in(user) + get "/u/is_local_username.json", params: { username: unmentionable.name } + expect(response.status).to eq(200) + json = JSON.parse(response.body) + expect(json["valid_groups"]).to include(unmentionable.name) + expect(json["mentionable_groups"]).to be_blank end it "supports multiples usernames" do diff --git a/test/javascripts/lib/link-mentions-test.js.es6 b/test/javascripts/lib/link-mentions-test.js.es6 index ae5a83c5cff..46bdefa4237 100644 --- a/test/javascripts/lib/link-mentions-test.js.es6 +++ b/test/javascripts/lib/link-mentions-test.js.es6 @@ -55,7 +55,7 @@ QUnit.test("linkSeenMentions replaces users and groups", async assert => { }); assert.equal($("a", $root)[0].text, "@valid_user"); - assert.equal($("a", $root)[1].text, "@mentionable_group"); + assert.equal($("a", $root)[1].text, "@valid_group"); + assert.equal($("a.notify", $root).text(), "@mentionable_group"); assert.equal($("span.mention", $root)[0].innerHTML, "@invalid"); - assert.equal($("span.mention", $root)[1].innerHTML, "@valid_group"); });