This repository has been archived by the owner on Dec 21, 2023. It is now read-only.
forked from mastodon/mastodon
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix Undo Announce sometimes inlining the originally Announced status (m…
…astodon#17516) * Change tests to have more specific expectations on sent ActivityPub payloads * Check that payload doesn't actually contain the contents of the boosted toot * Fix Undo Announce sometimes inlining the originally Announced status
- Loading branch information
1 parent
6f38765
commit d4e6774
Showing
3 changed files
with
87 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -15,35 +15,97 @@ | |
|
||
jeff.follow!(alice) | ||
hank.follow!(alice) | ||
|
||
@status = PostStatusService.new.call(alice, text: 'Hello @[email protected]') | ||
FavouriteService.new.call(jeff, @status) | ||
Fabricate(:status, account: bill, reblog: @status, uri: 'hoge') | ||
end | ||
|
||
it 'removes status from author\'s home feed' do | ||
subject.call(@status) | ||
expect(HomeFeed.new(alice).get(10)).to_not include(@status.id) | ||
end | ||
context 'when removed status is not a reblog' do | ||
before do | ||
@status = PostStatusService.new.call(alice, text: 'Hello @[email protected] ThisIsASecret') | ||
FavouriteService.new.call(jeff, @status) | ||
Fabricate(:status, account: bill, reblog: @status, uri: 'hoge') | ||
end | ||
|
||
it 'removes status from local follower\'s home feed' do | ||
subject.call(@status) | ||
expect(HomeFeed.new(jeff).get(10)).to_not include(@status.id) | ||
end | ||
it 'removes status from author\'s home feed' do | ||
subject.call(@status) | ||
expect(HomeFeed.new(alice).get(10)).to_not include(@status.id) | ||
end | ||
|
||
it 'removes status from local follower\'s home feed' do | ||
subject.call(@status) | ||
expect(HomeFeed.new(jeff).get(10)).to_not include(@status.id) | ||
end | ||
|
||
it 'sends delete activity to followers' do | ||
subject.call(@status) | ||
expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.twice | ||
it 'sends Delete activity to followers' do | ||
subject.call(@status) | ||
expect(a_request(:post, 'http://example.com/inbox').with( | ||
body: hash_including({ | ||
'type' => 'Delete', | ||
'object' => { | ||
'type' => 'Tombstone', | ||
'id' => ActivityPub::TagManager.instance.uri_for(@status), | ||
'atomUri' => OStatus::TagManager.instance.uri_for(@status), | ||
}, | ||
}) | ||
)).to have_been_made.once | ||
end | ||
|
||
it 'sends Delete activity to rebloggers' do | ||
subject.call(@status) | ||
expect(a_request(:post, 'http://example2.com/inbox').with( | ||
body: hash_including({ | ||
'type' => 'Delete', | ||
'object' => { | ||
'type' => 'Tombstone', | ||
'id' => ActivityPub::TagManager.instance.uri_for(@status), | ||
'atomUri' => OStatus::TagManager.instance.uri_for(@status), | ||
}, | ||
}) | ||
)).to have_been_made.once | ||
end | ||
|
||
it 'remove status from notifications' do | ||
expect { subject.call(@status) }.to change { | ||
Notification.where(activity_type: 'Favourite', from_account: jeff, account: alice).count | ||
}.from(1).to(0) | ||
end | ||
end | ||
|
||
it 'sends delete activity to rebloggers' do | ||
subject.call(@status) | ||
expect(a_request(:post, 'http://example2.com/inbox')).to have_been_made | ||
context 'when removed status is a private self-reblog' do | ||
before do | ||
@original_status = Fabricate(:status, account: alice, text: 'Hello ThisIsASecret', visibility: :private) | ||
@status = ReblogService.new.call(alice, @original_status) | ||
end | ||
|
||
it 'sends Undo activity to followers' do | ||
subject.call(@status) | ||
expect(a_request(:post, 'http://example.com/inbox').with( | ||
body: hash_including({ | ||
'type' => 'Undo', | ||
'object' => hash_including({ | ||
'type' => 'Announce', | ||
'object' => ActivityPub::TagManager.instance.uri_for(@original_status), | ||
}), | ||
}) | ||
)).to have_been_made.once | ||
end | ||
end | ||
|
||
it 'remove status from notifications' do | ||
expect { subject.call(@status) }.to change { | ||
Notification.where(activity_type: 'Favourite', from_account: jeff, account: alice).count | ||
}.from(1).to(0) | ||
context 'when removed status is public self-reblog' do | ||
before do | ||
@original_status = Fabricate(:status, account: alice, text: 'Hello ThisIsASecret', visibility: :public) | ||
@status = ReblogService.new.call(alice, @original_status) | ||
end | ||
|
||
it 'sends Undo activity to followers' do | ||
subject.call(@status) | ||
expect(a_request(:post, 'http://example.com/inbox').with( | ||
body: hash_including({ | ||
'type' => 'Undo', | ||
'object' => hash_including({ | ||
'type' => 'Announce', | ||
'object' => ActivityPub::TagManager.instance.uri_for(@original_status), | ||
}), | ||
}) | ||
)).to have_been_made.once | ||
end | ||
end | ||
end |