From 083b5d32aefe2910f5db3492f233e8bb85d9a366 Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 22 Aug 2023 11:44:12 +0900 Subject: [PATCH] Add limited post tests --- spec/models/account_statuses_filter_spec.rb | 28 ++++++++++++++++++++- spec/models/public_feed_spec.rb | 3 +++ spec/policies/status_policy_spec.rb | 28 +++++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/spec/models/account_statuses_filter_spec.rb b/spec/models/account_statuses_filter_spec.rb index 8f388dc67f..e6fd64acef 100644 --- a/spec/models/account_statuses_filter_spec.rb +++ b/spec/models/account_statuses_filter_spec.rb @@ -47,11 +47,13 @@ RSpec.describe AccountStatusesFilter do status!(:login) status!(:private) status!(:direct) + status!(:limited) status_with_parent!(:public) status_with_reblog!(:public) status_with_tag!(:public, tag) status_with_mention!(:direct) status_with_media_attachment!(:public) + status_with_mention!(:limited) end shared_examples 'filter params' do @@ -123,7 +125,7 @@ RSpec.describe AccountStatusesFilter do let(:current_account) { account } it 'returns everything' do - expect(subject.results.pluck(:visibility).uniq).to match_array %w(direct private login unlisted public_unlisted public) + expect(subject.results.pluck(:visibility).uniq).to match_array %w(direct private login unlisted public_unlisted public limited) end it 'returns replies' do @@ -164,6 +166,30 @@ RSpec.describe AccountStatusesFilter do end end + context 'when there is a direct status mentioning other user' do + let!(:direct_status) { status_with_mention!(:direct) } + + it 'not returns the direct status' do + expect(subject.results.pluck(:id)).to_not include(direct_status.id) + end + end + + context 'when there is a limited status mentioning the non-follower' do + let!(:limited_status) { status_with_mention!(:limited, current_account) } + + it 'returns the limited status' do + expect(subject.results.pluck(:id)).to include(limited_status.id) + end + end + + context 'when there is a limited status mentioning other user' do + let!(:limited_status) { status_with_mention!(:limited) } + + it 'not returns the limited status' do + expect(subject.results.pluck(:id)).to_not include(limited_status.id) + end + end + it_behaves_like 'filter params' end diff --git a/spec/models/public_feed_spec.rb b/spec/models/public_feed_spec.rb index 6107bc3ed0..965e293c5e 100644 --- a/spec/models/public_feed_spec.rb +++ b/spec/models/public_feed_spec.rb @@ -16,6 +16,7 @@ RSpec.describe PublicFeed do let!(:unlisted_status) { Fabricate(:status, visibility: :unlisted) } let!(:private_status) { Fabricate(:status, visibility: :private) } let!(:direct_status) { Fabricate(:status, visibility: :direct) } + let!(:limited_status) { Fabricate(:status, visibility: :limited) } it 'without user' do expect(subject).to include(public_status.id) @@ -23,6 +24,7 @@ RSpec.describe PublicFeed do expect(subject).to_not include(unlisted_status.id) expect(subject).to_not include(private_status.id) expect(subject).to_not include(direct_status.id) + expect(subject).to_not include(limited_status.id) end context 'with user' do @@ -34,6 +36,7 @@ RSpec.describe PublicFeed do expect(subject).to_not include(unlisted_status.id) expect(subject).to_not include(private_status.id) expect(subject).to_not include(direct_status.id) + expect(subject).to_not include(limited_status.id) end end end diff --git a/spec/policies/status_policy_spec.rb b/spec/policies/status_policy_spec.rb index 36ac8d8027..271c70804b 100644 --- a/spec/policies/status_policy_spec.rb +++ b/spec/policies/status_policy_spec.rb @@ -57,6 +57,34 @@ RSpec.describe StatusPolicy, type: :model do expect(subject).to_not permit(viewer, status) end + it 'grants access when limited and account is viewer' do + status.visibility = :limited + + expect(subject).to permit(status.account, status) + end + + it 'grants access when limited and viewer is mentioned' do + status.visibility = :limited + status.mentions = [Fabricate(:mention, account: alice)] + + expect(subject).to permit(alice, status) + end + + it 'grants access when limited and non-owner viewer is mentioned and mentions are loaded' do + status.visibility = :limited + status.mentions = [Fabricate(:mention, account: bob)] + status.mentions.load + + expect(subject).to permit(bob, status) + end + + it 'denies access when limited and viewer is not mentioned' do + viewer = Fabricate(:account) + status.visibility = :limited + + expect(subject).to_not permit(viewer, status) + end + it 'grants access when private and account is viewer' do status.visibility = :private