Add limited post tests

This commit is contained in:
KMY 2023-08-22 11:44:12 +09:00
parent bcf90e03af
commit 083b5d32ae
3 changed files with 58 additions and 1 deletions

View file

@ -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

View file

@ -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

View file

@ -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