Add configuration option to filter replies in lists (#9205)
* Add database support for list show-reply preferences * Add backend support to read and update list-specific show_replies settings * Add basic UI to set list replies setting * Add specs for list replies policy * Switch "cycling" reply policy link to a set of radio inputs * Capitalize replies_policy strings * Change radio button design to be consistent with that of the directory explorer
This commit is contained in:
parent
1c308af84c
commit
79305428a7
10 changed files with 165 additions and 14 deletions
|
@ -309,14 +309,109 @@ RSpec.describe FeedManager do
|
|||
end
|
||||
|
||||
describe '#push_to_list' do
|
||||
let(:owner) { Fabricate(:account, username: 'owner') }
|
||||
let(:alice) { Fabricate(:account, username: 'alice') }
|
||||
let(:bob) { Fabricate(:account, username: 'bob') }
|
||||
let(:eve) { Fabricate(:account, username: 'eve') }
|
||||
let(:list) { Fabricate(:list, account: owner) }
|
||||
|
||||
before do
|
||||
owner.follow!(alice)
|
||||
owner.follow!(bob)
|
||||
owner.follow!(eve)
|
||||
|
||||
list.accounts << alice
|
||||
list.accounts << bob
|
||||
end
|
||||
|
||||
it "does not push when the given status's reblog is already inserted" do
|
||||
list = Fabricate(:list)
|
||||
reblog = Fabricate(:status)
|
||||
status = Fabricate(:status, reblog: reblog)
|
||||
FeedManager.instance.push_to_list(list, status)
|
||||
|
||||
expect(FeedManager.instance.push_to_list(list, reblog)).to eq false
|
||||
end
|
||||
|
||||
context 'when replies policy is set to no replies' do
|
||||
before do
|
||||
list.replies_policy = :no_replies
|
||||
end
|
||||
|
||||
it 'pushes statuses that are not replies' do
|
||||
status = Fabricate(:status, text: 'Hello world', account: bob)
|
||||
expect(FeedManager.instance.push_to_list(list, status)).to eq true
|
||||
end
|
||||
|
||||
it 'pushes statuses that are replies to list owner' do
|
||||
status = Fabricate(:status, text: 'Hello world', account: owner)
|
||||
reply = Fabricate(:status, text: 'Nay', thread: status, account: bob)
|
||||
expect(FeedManager.instance.push_to_list(list, reply)).to eq true
|
||||
end
|
||||
|
||||
it 'does not push replies to another member of the list' do
|
||||
status = Fabricate(:status, text: 'Hello world', account: alice)
|
||||
reply = Fabricate(:status, text: 'Nay', thread: status, account: bob)
|
||||
expect(FeedManager.instance.push_to_list(list, reply)).to eq false
|
||||
end
|
||||
end
|
||||
|
||||
context 'when replies policy is set to list-only replies' do
|
||||
before do
|
||||
list.replies_policy = :list_replies
|
||||
end
|
||||
|
||||
it 'pushes statuses that are not replies' do
|
||||
status = Fabricate(:status, text: 'Hello world', account: bob)
|
||||
expect(FeedManager.instance.push_to_list(list, status)).to eq true
|
||||
end
|
||||
|
||||
it 'pushes statuses that are replies to list owner' do
|
||||
status = Fabricate(:status, text: 'Hello world', account: owner)
|
||||
reply = Fabricate(:status, text: 'Nay', thread: status, account: bob)
|
||||
expect(FeedManager.instance.push_to_list(list, reply)).to eq true
|
||||
end
|
||||
|
||||
it 'pushes replies to another member of the list' do
|
||||
status = Fabricate(:status, text: 'Hello world', account: alice)
|
||||
reply = Fabricate(:status, text: 'Nay', thread: status, account: bob)
|
||||
expect(FeedManager.instance.push_to_list(list, reply)).to eq true
|
||||
end
|
||||
|
||||
it 'does not push replies to someone not a member of the list' do
|
||||
status = Fabricate(:status, text: 'Hello world', account: eve)
|
||||
reply = Fabricate(:status, text: 'Nay', thread: status, account: bob)
|
||||
expect(FeedManager.instance.push_to_list(list, reply)).to eq false
|
||||
end
|
||||
end
|
||||
|
||||
context 'when replies policy is set to any reply' do
|
||||
before do
|
||||
list.replies_policy = :all_replies
|
||||
end
|
||||
|
||||
it 'pushes statuses that are not replies' do
|
||||
status = Fabricate(:status, text: 'Hello world', account: bob)
|
||||
expect(FeedManager.instance.push_to_list(list, status)).to eq true
|
||||
end
|
||||
|
||||
it 'pushes statuses that are replies to list owner' do
|
||||
status = Fabricate(:status, text: 'Hello world', account: owner)
|
||||
reply = Fabricate(:status, text: 'Nay', thread: status, account: bob)
|
||||
expect(FeedManager.instance.push_to_list(list, reply)).to eq true
|
||||
end
|
||||
|
||||
it 'pushes replies to another member of the list' do
|
||||
status = Fabricate(:status, text: 'Hello world', account: alice)
|
||||
reply = Fabricate(:status, text: 'Nay', thread: status, account: bob)
|
||||
expect(FeedManager.instance.push_to_list(list, reply)).to eq true
|
||||
end
|
||||
|
||||
it 'pushes replies to someone not a member of the list' do
|
||||
status = Fabricate(:status, text: 'Hello world', account: eve)
|
||||
reply = Fabricate(:status, text: 'Nay', thread: status, account: bob)
|
||||
expect(FeedManager.instance.push_to_list(list, reply)).to eq true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#merge_into_timeline' do
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue