Add public_unlisted/login visibilities to public_feed_spec
This commit is contained in:
parent
c090b20f39
commit
daa0f170c6
2 changed files with 61 additions and 17 deletions
|
@ -19,13 +19,12 @@ class PublicFeed
|
|||
# @param [Integer] min_id
|
||||
# @return [Array<Status>]
|
||||
def get(limit, max_id = nil, since_id = nil, min_id = nil)
|
||||
scope = public_scope
|
||||
scope = local_only? ? public_scope : global_timeline_only_scope
|
||||
|
||||
scope.merge!(without_replies_scope) unless with_replies?
|
||||
scope.merge!(without_reblogs_scope) unless with_reblogs?
|
||||
scope.merge!(local_only_scope) if local_only?
|
||||
scope.merge!(remote_only_scope) if remote_only? || hide_local_users?
|
||||
scope.merge!(global_timeline_only_scope) if global_timeline?
|
||||
scope.merge!(account_filters_scope) if account?
|
||||
scope.merge!(media_only_scope) if media_only?
|
||||
scope.merge!(language_scope) if account&.chosen_languages.present?
|
||||
|
@ -58,10 +57,6 @@ class PublicFeed
|
|||
@account.nil? && Setting.hide_local_users_for_anonymous
|
||||
end
|
||||
|
||||
def global_timeline?
|
||||
!options[:remote] && !options[:local]
|
||||
end
|
||||
|
||||
def account?
|
||||
account.present?
|
||||
end
|
||||
|
@ -74,6 +69,10 @@ class PublicFeed
|
|||
Status.with_public_visibility.joins(:account).merge(Account.without_suspended.without_silenced)
|
||||
end
|
||||
|
||||
def global_timeline_only_scope
|
||||
Status.with_global_timeline_visibility.joins(:account).merge(Account.without_suspended.without_silenced)
|
||||
end
|
||||
|
||||
def public_search_scope
|
||||
Status.with_public_search_visibility.joins(:account).merge(Account.without_suspended.without_silenced)
|
||||
end
|
||||
|
@ -86,10 +85,6 @@ class PublicFeed
|
|||
Status.remote
|
||||
end
|
||||
|
||||
def global_timeline_only_scope
|
||||
Status.with_global_timeline_visibility.joins(:account).merge(Account.without_suspended.without_silenced)
|
||||
end
|
||||
|
||||
def without_replies_scope
|
||||
Status.without_replies
|
||||
end
|
||||
|
@ -107,7 +102,7 @@ class PublicFeed
|
|||
end
|
||||
|
||||
def anonymous_scope
|
||||
Status.where(visibility: [:public, :public_unlisted])
|
||||
local_only? ? Status.where(visibility: [:public, :public_unlisted]) : Status.where(visibility: :public)
|
||||
end
|
||||
|
||||
def account_filters_scope
|
||||
|
|
|
@ -6,14 +6,36 @@ RSpec.describe PublicFeed do
|
|||
let(:account) { Fabricate(:account) }
|
||||
|
||||
describe '#get' do
|
||||
subject { described_class.new(nil).get(20).map(&:id) }
|
||||
subject { described_class.new(viewer).get(20).map(&:id) }
|
||||
|
||||
it 'only includes statuses with public visibility' do
|
||||
public_status = Fabricate(:status, visibility: :public)
|
||||
private_status = Fabricate(:status, visibility: :private)
|
||||
let(:viewer) { nil }
|
||||
|
||||
expect(subject).to include(public_status.id)
|
||||
expect(subject).to_not include(private_status.id)
|
||||
context 'with only includes statuses with public visibility' do
|
||||
let!(:public_status) { Fabricate(:status, visibility: :public) }
|
||||
let!(:login_status) { Fabricate(:status, visibility: :login) }
|
||||
let!(:unlisted_status) { Fabricate(:status, visibility: :unlisted) }
|
||||
let!(:private_status) { Fabricate(:status, visibility: :private) }
|
||||
let!(:direct_status) { Fabricate(:status, visibility: :direct) }
|
||||
|
||||
it 'without user' do
|
||||
expect(subject).to include(public_status.id)
|
||||
expect(subject).to_not include(login_status.id)
|
||||
expect(subject).to_not include(unlisted_status.id)
|
||||
expect(subject).to_not include(private_status.id)
|
||||
expect(subject).to_not include(direct_status.id)
|
||||
end
|
||||
|
||||
context 'with user' do
|
||||
let(:viewer) { account }
|
||||
|
||||
it 'on global timeline' do
|
||||
expect(subject).to include(public_status.id)
|
||||
expect(subject).to include(login_status.id)
|
||||
expect(subject).to_not include(unlisted_status.id)
|
||||
expect(subject).to_not include(private_status.id)
|
||||
expect(subject).to_not include(direct_status.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it 'does not include replies' do
|
||||
|
@ -50,6 +72,7 @@ RSpec.describe PublicFeed do
|
|||
let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
|
||||
let!(:local_status) { Fabricate(:status, account: local_account) }
|
||||
let!(:remote_status) { Fabricate(:status, account: remote_account) }
|
||||
let!(:public_unlisted_status) { Fabricate(:status, account: local_account, visibility: :public_unlisted) }
|
||||
|
||||
context 'without a viewer' do
|
||||
let(:viewer) { nil }
|
||||
|
@ -61,6 +84,10 @@ RSpec.describe PublicFeed do
|
|||
it 'includes local statuses' do
|
||||
expect(subject).to include(local_status.id)
|
||||
end
|
||||
|
||||
it 'excludes public_unlisted statuses' do
|
||||
expect(subject).to_not include(public_unlisted_status.id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with a viewer' do
|
||||
|
@ -73,6 +100,10 @@ RSpec.describe PublicFeed do
|
|||
it 'includes local statuses' do
|
||||
expect(subject).to include(local_status.id)
|
||||
end
|
||||
|
||||
it 'excludes public_unlisted statuses' do
|
||||
expect(subject).to_not include(public_unlisted_status.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -83,6 +114,7 @@ RSpec.describe PublicFeed do
|
|||
let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
|
||||
let!(:local_status) { Fabricate(:status, account: local_account) }
|
||||
let!(:remote_status) { Fabricate(:status, account: remote_account) }
|
||||
let!(:public_unlisted_status) { Fabricate(:status, account: local_account, visibility: :public_unlisted) }
|
||||
|
||||
context 'without a viewer' do
|
||||
let(:viewer) { nil }
|
||||
|
@ -91,6 +123,10 @@ RSpec.describe PublicFeed do
|
|||
expect(subject).to include(local_status.id)
|
||||
expect(subject).to_not include(remote_status.id)
|
||||
end
|
||||
|
||||
it 'includes public_unlisted statuses' do
|
||||
expect(subject).to include(public_unlisted_status.id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with a viewer' do
|
||||
|
@ -106,6 +142,10 @@ RSpec.describe PublicFeed do
|
|||
expect(subject).to include(local_status.id)
|
||||
expect(subject).to_not include(remote_status.id)
|
||||
end
|
||||
|
||||
it 'includes public_unlisted statuses' do
|
||||
expect(subject).to include(public_unlisted_status.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -116,6 +156,7 @@ RSpec.describe PublicFeed do
|
|||
let!(:remote_account) { Fabricate(:account, domain: 'test.com') }
|
||||
let!(:local_status) { Fabricate(:status, account: local_account) }
|
||||
let!(:remote_status) { Fabricate(:status, account: remote_account) }
|
||||
let!(:public_unlisted_status) { Fabricate(:status, account: local_account, visibility: :public_unlisted) }
|
||||
|
||||
context 'without a viewer' do
|
||||
let(:viewer) { nil }
|
||||
|
@ -124,6 +165,10 @@ RSpec.describe PublicFeed do
|
|||
expect(subject).to_not include(local_status.id)
|
||||
expect(subject).to include(remote_status.id)
|
||||
end
|
||||
|
||||
it 'excludes public_unlisted statuses' do
|
||||
expect(subject).to_not include(public_unlisted_status.id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with a viewer' do
|
||||
|
@ -133,6 +178,10 @@ RSpec.describe PublicFeed do
|
|||
expect(subject).to_not include(local_status.id)
|
||||
expect(subject).to include(remote_status.id)
|
||||
end
|
||||
|
||||
it 'excludes public_unlisted statuses' do
|
||||
expect(subject).to_not include(public_unlisted_status.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue