From e8455948780d4c4b8d2d42fa1115fa7f7df87f7f Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 26 Apr 2024 14:42:06 +0200 Subject: [PATCH] Fix moderator account being exposed in account moderation notification (#30082) --- app/models/notification.rb | 4 ++-- spec/models/notification_spec.rb | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/models/notification.rb b/app/models/notification.rb index 7e0e62683a..7cbab4dc8c 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -184,13 +184,13 @@ class Notification < ApplicationRecord return unless new_record? case activity_type - when 'Status', 'Follow', 'Favourite', 'FollowRequest', 'Poll', 'Report', 'AccountWarning' + when 'Status', 'Follow', 'Favourite', 'FollowRequest', 'Poll', 'Report' self.from_account_id = activity&.account_id when 'Mention' self.from_account_id = activity&.status&.account_id when 'Account' self.from_account_id = activity&.id - when 'AccountRelationshipSeveranceEvent' + when 'AccountRelationshipSeveranceEvent', 'AccountWarning' # These do not really have an originating account, but this is mandatory # in the data model, and the recipient's account will by definition # always exist diff --git a/spec/models/notification_spec.rb b/spec/models/notification_spec.rb index 172d1c65b9..3c7d51ae1a 100644 --- a/spec/models/notification_spec.rb +++ b/spec/models/notification_spec.rb @@ -138,6 +138,17 @@ RSpec.describe Notification do expect(notification.account).to eq(account) end end + + context 'when activity_type is an AccountWarning' do + it 'sets the notification from_account to the recipient of the notification' do + account = Fabricate(:account) + account_warning = Fabricate(:account_warning, target_account: account) + + notification = Fabricate.build(:notification, activity_type: 'AccountWarning', activity: account_warning, account: account) + + expect(notification.from_account).to eq(account) + end + end end describe '.preload_cache_collection_target_statuses' do