diff --git a/app/serializers/topic_view_details_serializer.rb b/app/serializers/topic_view_details_serializer.rb index 16a28e40f59..2576bf7406e 100644 --- a/app/serializers/topic_view_details_serializer.rb +++ b/app/serializers/topic_view_details_serializer.rb @@ -163,7 +163,9 @@ class TopicViewDetailsSerializer < ApplicationSerializer end def allowed_users - object.topic.allowed_users.reject { |user| object.group_allowed_user_ids.include?(user.id) } + object.topic.allowed_users.reject do |user| + object.group_allowed_user_ids.include?(user.id) && user != scope.user + end end def include_allowed_users? diff --git a/spec/serializers/topic_view_details_serializer_spec.rb b/spec/serializers/topic_view_details_serializer_spec.rb new file mode 100644 index 00000000000..0705ee4e84e --- /dev/null +++ b/spec/serializers/topic_view_details_serializer_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe TopicViewDetailsSerializer do + describe '#allowed_users' do + it "add the current user to the allowed user's list even if they are an allowed group member" do + participant = Fabricate(:user) + another_participant = Fabricate(:user) + + participant_group = Fabricate(:group) + participant_group.add(participant) + participant_group.add(another_participant) + + pm = Fabricate(:private_message_topic, + topic_allowed_users: [ + Fabricate.build(:topic_allowed_user, user: participant), + Fabricate.build(:topic_allowed_user, user: another_participant) + ], + topic_allowed_groups: [Fabricate.build(:topic_allowed_group, group: participant_group)] + ) + + serializer = described_class.new(TopicView.new(pm, participant), scope: Guardian.new(participant)) + allowed_users = serializer.as_json.dig(:topic_view_details, :allowed_users).map { |u| u[:id] } + + expect(allowed_users).to contain_exactly(participant.id) + end + end +end