Add limited post tests
This commit is contained in:
parent
bcf90e03af
commit
083b5d32ae
3 changed files with 58 additions and 1 deletions
|
@ -47,11 +47,13 @@ RSpec.describe AccountStatusesFilter do
|
||||||
status!(:login)
|
status!(:login)
|
||||||
status!(:private)
|
status!(:private)
|
||||||
status!(:direct)
|
status!(:direct)
|
||||||
|
status!(:limited)
|
||||||
status_with_parent!(:public)
|
status_with_parent!(:public)
|
||||||
status_with_reblog!(:public)
|
status_with_reblog!(:public)
|
||||||
status_with_tag!(:public, tag)
|
status_with_tag!(:public, tag)
|
||||||
status_with_mention!(:direct)
|
status_with_mention!(:direct)
|
||||||
status_with_media_attachment!(:public)
|
status_with_media_attachment!(:public)
|
||||||
|
status_with_mention!(:limited)
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples 'filter params' do
|
shared_examples 'filter params' do
|
||||||
|
@ -123,7 +125,7 @@ RSpec.describe AccountStatusesFilter do
|
||||||
let(:current_account) { account }
|
let(:current_account) { account }
|
||||||
|
|
||||||
it 'returns everything' do
|
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
|
end
|
||||||
|
|
||||||
it 'returns replies' do
|
it 'returns replies' do
|
||||||
|
@ -164,6 +166,30 @@ RSpec.describe AccountStatusesFilter do
|
||||||
end
|
end
|
||||||
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'
|
it_behaves_like 'filter params'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ RSpec.describe PublicFeed do
|
||||||
let!(:unlisted_status) { Fabricate(:status, visibility: :unlisted) }
|
let!(:unlisted_status) { Fabricate(:status, visibility: :unlisted) }
|
||||||
let!(:private_status) { Fabricate(:status, visibility: :private) }
|
let!(:private_status) { Fabricate(:status, visibility: :private) }
|
||||||
let!(:direct_status) { Fabricate(:status, visibility: :direct) }
|
let!(:direct_status) { Fabricate(:status, visibility: :direct) }
|
||||||
|
let!(:limited_status) { Fabricate(:status, visibility: :limited) }
|
||||||
|
|
||||||
it 'without user' do
|
it 'without user' do
|
||||||
expect(subject).to include(public_status.id)
|
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(unlisted_status.id)
|
||||||
expect(subject).to_not include(private_status.id)
|
expect(subject).to_not include(private_status.id)
|
||||||
expect(subject).to_not include(direct_status.id)
|
expect(subject).to_not include(direct_status.id)
|
||||||
|
expect(subject).to_not include(limited_status.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with user' do
|
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(unlisted_status.id)
|
||||||
expect(subject).to_not include(private_status.id)
|
expect(subject).to_not include(private_status.id)
|
||||||
expect(subject).to_not include(direct_status.id)
|
expect(subject).to_not include(direct_status.id)
|
||||||
|
expect(subject).to_not include(limited_status.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -57,6 +57,34 @@ RSpec.describe StatusPolicy, type: :model do
|
||||||
expect(subject).to_not permit(viewer, status)
|
expect(subject).to_not permit(viewer, status)
|
||||||
end
|
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
|
it 'grants access when private and account is viewer' do
|
||||||
status.visibility = :private
|
status.visibility = :private
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue