From 08f2fcb72b6457b14fa7d2f9bbc9812f0de751c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= <tt@kmycode.net> Date: Fri, 15 Dec 2023 10:18:43 +0900 Subject: [PATCH] =?UTF-8?q?Test:=20=E3=82=B9=E3=82=BF=E3=83=B3=E3=83=97?= =?UTF-8?q?=E9=96=A2=E4=BF=82=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=92?= =?UTF-8?q?=E5=85=B1=E9=80=9A=E5=8C=96=20(#361)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/models/account_spec.rb | 184 ++++++++---------------------------- 1 file changed, 42 insertions(+), 142 deletions(-) diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index 80e27c6b36..60c964fee4 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -270,162 +270,62 @@ RSpec.describe Account do reactioned.follow!(mutual) end - context 'when policy is arrow' do - it 'allows anyone' do - expect(reactioned.allow_emoji_reaction?(anyone)).to be true - end + shared_examples 'with policy' do |override_policy, anyone_r, followee_r, follower_r, mutual_r, self_r| # rubocop:disable Metrics/ParameterLists + context "when policy is #{override_policy}" do + let(:policy) { override_policy } - it 'allows followee' do - expect(reactioned.allow_emoji_reaction?(followee)).to be true - end + it 'allows anyone' do + expect(reactioned.allow_emoji_reaction?(anyone)).to be anyone_r + end - it 'allows follower' do - expect(reactioned.allow_emoji_reaction?(follower)).to be true - end + it 'allows followee' do + expect(reactioned.allow_emoji_reaction?(followee)).to be followee_r + end - it 'allows mutual' do - expect(reactioned.allow_emoji_reaction?(mutual)).to be true - end + it 'allows follower' do + expect(reactioned.allow_emoji_reaction?(follower)).to be follower_r + end - it 'allows self' do - expect(reactioned.allow_emoji_reaction?(reactioned)).to be true + it 'allows mutual' do + expect(reactioned.allow_emoji_reaction?(mutual)).to be mutual_r + end + + it 'allows self' do + expect(reactioned.allow_emoji_reaction?(reactioned)).to be self_r + end end end - context 'when policy is following_only' do - let(:policy) { :following_only } + it_behaves_like 'with policy', :allow, true, true, true, true, true + it_behaves_like 'with policy', :outside_only, false, true, true, true, true + it_behaves_like 'with policy', :following_only, false, true, false, true, true + it_behaves_like 'with policy', :followers_only, false, false, true, true, true + it_behaves_like 'with policy', :mutuals_only, false, false, false, true, true + it_behaves_like 'with policy', :block, false, false, false, false, false - it 'allows anyone' do - expect(reactioned.allow_emoji_reaction?(anyone)).to be false - end + shared_examples 'allow local only' do |override_policy| + context "when policy is #{override_policy} but allow local only" do + let(:policy) { override_policy } + let(:allow_local) { true } + let(:local) { Fabricate(:user).account } + let(:remote) { Fabricate(:account, domain: 'example.com', uri: 'https://example.com/actor') } - it 'allows followee' do - expect(reactioned.allow_emoji_reaction?(followee)).to be true - end + before do + local.follow!(remote) if override_policy == :following_only + end - it 'allows follower' do - expect(reactioned.allow_emoji_reaction?(follower)).to be false - end + it 'does not allow remote' do + expect(reactioned.allow_emoji_reaction?(remote)).to be false + end - it 'allows mutual' do - expect(reactioned.allow_emoji_reaction?(mutual)).to be true - end - - it 'allows self' do - expect(reactioned.allow_emoji_reaction?(reactioned)).to be true + it 'allows local' do + expect(reactioned.allow_emoji_reaction?(local)).to be true + end end end - context 'when policy is followers_only' do - let(:policy) { :followers_only } - - it 'allows anyone' do - expect(reactioned.allow_emoji_reaction?(anyone)).to be false - end - - it 'allows followee' do - expect(reactioned.allow_emoji_reaction?(followee)).to be false - end - - it 'allows follower' do - expect(reactioned.allow_emoji_reaction?(follower)).to be true - end - - it 'allows mutual' do - expect(reactioned.allow_emoji_reaction?(mutual)).to be true - end - - it 'allows self' do - expect(reactioned.allow_emoji_reaction?(reactioned)).to be true - end - end - - context 'when policy is mutuals_only' do - let(:policy) { :mutuals_only } - - it 'allows anyone' do - expect(reactioned.allow_emoji_reaction?(anyone)).to be false - end - - it 'allows followee' do - expect(reactioned.allow_emoji_reaction?(followee)).to be false - end - - it 'allows follower' do - expect(reactioned.allow_emoji_reaction?(follower)).to be false - end - - it 'allows mutual' do - expect(reactioned.allow_emoji_reaction?(mutual)).to be true - end - - it 'allows self' do - expect(reactioned.allow_emoji_reaction?(reactioned)).to be true - end - end - - context 'when policy is outside_only' do - let(:policy) { :outside_only } - - it 'allows anyone' do - expect(reactioned.allow_emoji_reaction?(anyone)).to be false - end - - it 'allows followee' do - expect(reactioned.allow_emoji_reaction?(followee)).to be true - end - - it 'allows follower' do - expect(reactioned.allow_emoji_reaction?(follower)).to be true - end - - it 'allows mutual' do - expect(reactioned.allow_emoji_reaction?(mutual)).to be true - end - - it 'allows self' do - expect(reactioned.allow_emoji_reaction?(reactioned)).to be true - end - end - - context 'when policy is block' do - let(:policy) { :block } - - it 'allows anyone' do - expect(reactioned.allow_emoji_reaction?(anyone)).to be false - end - - it 'allows followee' do - expect(reactioned.allow_emoji_reaction?(followee)).to be false - end - - it 'allows follower' do - expect(reactioned.allow_emoji_reaction?(follower)).to be false - end - - it 'allows mutual' do - expect(reactioned.allow_emoji_reaction?(mutual)).to be false - end - - it 'allows self' do - expect(reactioned.allow_emoji_reaction?(reactioned)).to be false - end - end - - context 'when policy is block but allow local only' do - let(:policy) { :block } - let(:allow_local) { true } - let(:local) { Fabricate(:user).account } - let(:remote) { Fabricate(:account, domain: 'example.com', uri: 'https://example.com/actor') } - - it 'does not allow remote' do - expect(reactioned.allow_emoji_reaction?(remote)).to be false - end - - it 'allows local' do - expect(reactioned.allow_emoji_reaction?(local)).to be true - end - end + it_behaves_like 'allow local only', :following_only + it_behaves_like 'allow local only', :block context 'when reactioned is remote user' do let(:reactioned) { Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar/actor', settings: { emoji_reaction_policy: :following_only }) }