@ -15,35 +15,97 @@ RSpec.describe RemoveStatusService, type: :service do
jeff . follow! ( alice )
hank . follow! ( alice )
@status = PostStatusService . new . call ( alice , text : 'Hello @bob@example.com' )
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 @bob@example.com 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