From d257157276d832758d6bbea0c2ace8799fae6586 Mon Sep 17 00:00:00 2001 From: KMY Date: Wed, 20 Sep 2023 10:35:24 +0900 Subject: [PATCH] Hide private post reference notification --- app/services/process_references_service.rb | 6 ++--- .../process_references_service_spec.rb | 23 ++++++++++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/services/process_references_service.rb b/app/services/process_references_service.rb index 05aa5ef345..faf5965a7a 100644 --- a/app/services/process_references_service.rb +++ b/app/services/process_references_service.rb @@ -58,11 +58,11 @@ class ProcessReferencesService < BaseService private def references - @references = @reference_parameters + scan_text! + @references ||= @reference_parameters + scan_text! end def old_references - @old_references = @status.references.pluck(:id) + @old_references ||= @status.references.pluck(:id) end def added_references @@ -112,7 +112,7 @@ class ProcessReferencesService < BaseService def create_notifications! return if @added_objects.blank? - local_reference_objects = @added_objects.filter { |ref| ref.target_status.account.local? } + local_reference_objects = @added_objects.filter { |ref| ref.target_status.account.local? && StatusPolicy.new(ref.target_status.account, ref.status).show? } return if local_reference_objects.empty? LocalNotificationWorker.push_bulk(local_reference_objects) do |ref| diff --git a/spec/services/process_references_service_spec.rb b/spec/services/process_references_service_spec.rb index e9099fb935..61def42034 100644 --- a/spec/services/process_references_service_spec.rb +++ b/spec/services/process_references_service_spec.rb @@ -6,8 +6,9 @@ RSpec.describe ProcessReferencesService, type: :service do let(:text) { 'Hello' } let(:account) { Fabricate(:user).account } let(:visibility) { :public } + let(:target_status_visibility) { :public } let(:status) { Fabricate(:status, account: account, text: text, visibility: visibility) } - let(:target_status) { Fabricate(:status, account: Fabricate(:user).account) } + let(:target_status) { Fabricate(:status, account: Fabricate(:user).account, visibility: target_status_visibility) } let(:target_status_uri) { ActivityPub::TagManager.instance.uri_for(target_status) } describe 'posting new status' do @@ -42,6 +43,26 @@ RSpec.describe ProcessReferencesService, type: :service do end end + context 'when private post' do + let(:text) { "Hello RT #{target_status_uri}" } + let(:visibility) { :private } + + it 'post status' do + expect(subject.size).to eq 1 + expect(subject.pluck(0)).to include target_status.id + expect(subject.pluck(1)).to include 'RT' + end + end + + context 'when cannot show private post' do + let(:text) { "Hello RT #{target_status_uri}" } + let(:target_status_visibility) { :private } + + it 'post status' do + expect(subject.size).to eq 0 + end + end + context 'when url only' do let(:text) { "Hello #{target_status_uri}" }