UX: use existing guardian method to check messageable group. (#14174)

We should display "Message" button only if personal messages are enabled. Currently, it's not respecting that site setting.
This commit is contained in:
Vinoth Kannan 2021-08-30 10:38:33 +05:30 committed by GitHub
parent 465774cf2c
commit 08dce4f477
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 2 deletions

View File

@ -449,7 +449,7 @@ class GroupsController < ApplicationController
group = find_group(:group_id, ensure_can_see: false) group = find_group(:group_id, ensure_can_see: false)
if group if group
render json: { messageable: Group.messageable(current_user).where(id: group.id).present? } render json: { messageable: guardian.can_send_private_message?(group) }
else else
raise Discourse::InvalidAccess.new raise Discourse::InvalidAccess.new
end end

View File

@ -95,7 +95,7 @@ class GroupShowSerializer < BasicGroupSerializer
end end
def messageable def messageable
Group.messageable(scope.user).exists?(id: object.id) scope.can_send_private_message?(object)
end end
def include_flair_icon? def include_flair_icon?

View File

@ -384,6 +384,23 @@ describe GroupsController do
expect(response.headers['X-Robots-Tag']).to eq('noindex') expect(response.headers['X-Robots-Tag']).to eq('noindex')
end end
it "returns the right response for 'messageable' field" do
sign_in(user)
group.update!(messageable_level: Group::ALIAS_LEVELS[:everyone])
get "/groups/#{group.name}.json"
expect(response.status).to eq(200)
expect(response.parsed_body['group']['messageable']).to eq(true)
SiteSetting.enable_personal_messages = false
get "/groups/#{group.name}.json"
expect(response.status).to eq(200)
expect(response.parsed_body['group']['messageable']).to eq(false)
end
context 'as an admin' do context 'as an admin' do
it "returns the right response" do it "returns the right response" do
sign_in(Fabricate(:admin)) sign_in(Fabricate(:admin))
@ -624,6 +641,14 @@ describe GroupsController do
body = response.parsed_body body = response.parsed_body
expect(body["messageable"]).to eq(true) expect(body["messageable"]).to eq(true)
SiteSetting.enable_personal_messages = false
get "/groups/#{group.name}/messageable.json"
expect(response.status).to eq(200)
body = response.parsed_body
expect(body["messageable"]).to eq(false)
end end
end end