Reduce extra factories in FanOutOnWriteService spec (#31053)

This commit is contained in:
Matt Jankowski 2024-07-18 03:45:59 -04:00 committed by GitHub
parent aa4d8987a0
commit c5f8256801
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -34,21 +34,14 @@ RSpec.describe FanOutOnWriteService do
context 'when status is public' do context 'when status is public' do
let(:visibility) { 'public' } let(:visibility) { 'public' }
it 'is added to the home feed of its author' do it 'adds status to home feed of author and followers and broadcasts', :inline_jobs do
expect(home_feed_of(alice)).to include status.id expect(status.id)
end .to be_in(home_feed_of(alice))
.and be_in(home_feed_of(bob))
.and be_in(home_feed_of(tom))
it 'is added to the home feed of a follower', :inline_jobs do
expect(home_feed_of(bob)).to include status.id
expect(home_feed_of(tom)).to include status.id
end
it 'is broadcast to the hashtag stream' do
expect(redis).to have_received(:publish).with('timeline:hashtag:hoge', anything) expect(redis).to have_received(:publish).with('timeline:hashtag:hoge', anything)
expect(redis).to have_received(:publish).with('timeline:hashtag:hoge:local', anything) expect(redis).to have_received(:publish).with('timeline:hashtag:hoge:local', anything)
end
it 'is broadcast to the public stream' do
expect(redis).to have_received(:publish).with('timeline:public', anything) expect(redis).to have_received(:publish).with('timeline:public', anything)
expect(redis).to have_received(:publish).with('timeline:public:local', anything) expect(redis).to have_received(:publish).with('timeline:public:local', anything)
expect(redis).to have_received(:publish).with('timeline:public:media', anything) expect(redis).to have_received(:publish).with('timeline:public:media', anything)
@ -58,60 +51,41 @@ RSpec.describe FanOutOnWriteService do
context 'when status is limited' do context 'when status is limited' do
let(:visibility) { 'limited' } let(:visibility) { 'limited' }
it 'is added to the home feed of its author' do it 'adds status to home feed of author and mentioned followers and does not broadcast', :inline_jobs do
expect(home_feed_of(alice)).to include status.id expect(status.id)
end .to be_in(home_feed_of(alice))
.and be_in(home_feed_of(bob))
expect(status.id)
.to_not be_in(home_feed_of(tom))
it 'is added to the home feed of the mentioned follower', :inline_jobs do expect_no_broadcasting
expect(home_feed_of(bob)).to include status.id
end
it 'is not added to the home feed of the other follower' do
expect(home_feed_of(tom)).to_not include status.id
end
it 'is not broadcast publicly' do
expect(redis).to_not have_received(:publish).with('timeline:hashtag:hoge', anything)
expect(redis).to_not have_received(:publish).with('timeline:public', anything)
end end
end end
context 'when status is private' do context 'when status is private' do
let(:visibility) { 'private' } let(:visibility) { 'private' }
it 'is added to the home feed of its author' do it 'adds status to home feed of author and followers and does not broadcast', :inline_jobs do
expect(home_feed_of(alice)).to include status.id expect(status.id)
end .to be_in(home_feed_of(alice))
.and be_in(home_feed_of(bob))
.and be_in(home_feed_of(tom))
it 'is added to the home feed of a follower', :inline_jobs do expect_no_broadcasting
expect(home_feed_of(bob)).to include status.id
expect(home_feed_of(tom)).to include status.id
end
it 'is not broadcast publicly' do
expect(redis).to_not have_received(:publish).with('timeline:hashtag:hoge', anything)
expect(redis).to_not have_received(:publish).with('timeline:public', anything)
end end
end end
context 'when status is direct' do context 'when status is direct' do
let(:visibility) { 'direct' } let(:visibility) { 'direct' }
it 'is added to the home feed of its author' do it 'is added to the home feed of its author and mentioned followers and does not broadcast', :inline_jobs do
expect(home_feed_of(alice)).to include status.id expect(status.id)
end .to be_in(home_feed_of(alice))
.and be_in(home_feed_of(bob))
expect(status.id)
.to_not be_in(home_feed_of(tom))
it 'is added to the home feed of the mentioned follower', :inline_jobs do expect_no_broadcasting
expect(home_feed_of(bob)).to include status.id
end
it 'is not added to the home feed of the other follower' do
expect(home_feed_of(tom)).to_not include status.id
end
it 'is not broadcast publicly' do
expect(redis).to_not have_received(:publish).with('timeline:hashtag:hoge', anything)
expect(redis).to_not have_received(:publish).with('timeline:public', anything)
end end
context 'when handling status updates' do context 'when handling status updates' do
@ -131,4 +105,13 @@ RSpec.describe FanOutOnWriteService do
end end
end end
end end
def expect_no_broadcasting
expect(redis)
.to_not have_received(:publish)
.with('timeline:hashtag:hoge', anything)
expect(redis)
.to_not have_received(:publish)
.with('timeline:public', anything)
end
end end