Fix handling of temporary failures in ProcessMentionsService (#5842)
* Add test for temporary account resolving failures in ProcessMentionsService * Fix processing of mentions to already-known remote accounts on temporary failures
This commit is contained in:
		
							parent
							
								
									2b3b44ebbc
								
							
						
					
					
						commit
						b8efb5daed
					
				@ -18,7 +18,7 @@ class ProcessMentionsService < BaseService
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if mentioned_account.nil?
 | 
					      if mentioned_account.nil?
 | 
				
			||||||
        username, domain  = match.first.split('@')
 | 
					        username, domain  = $1.split('@')
 | 
				
			||||||
        mentioned_account = Account.find_remote(username, domain)
 | 
					        mentioned_account = Account.find_remote(username, domain)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -41,4 +41,25 @@ RSpec.describe ProcessMentionsService do
 | 
				
			|||||||
      expect(a_request(:post, remote_user.inbox_url)).to have_been_made.once
 | 
					      expect(a_request(:post, remote_user.inbox_url)).to have_been_made.once
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  context 'Temporarily-unreachable ActivityPub user' do
 | 
				
			||||||
 | 
					    let(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox', last_webfingered_at: nil) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    subject { ProcessMentionsService.new }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    before do
 | 
				
			||||||
 | 
					      stub_request(:get, "https://example.com/.well-known/host-meta").to_return(status: 404)
 | 
				
			||||||
 | 
					      stub_request(:get, "https://example.com/.well-known/webfinger?resource=acct:remote_user@example.com").to_return(status: 500)
 | 
				
			||||||
 | 
					      stub_request(:post, remote_user.inbox_url)
 | 
				
			||||||
 | 
					      subject.call(status)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'creates a mention' do
 | 
				
			||||||
 | 
					      expect(remote_user.mentions.where(status: status).count).to eq 1
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it 'sends activity to the inbox' do
 | 
				
			||||||
 | 
					      expect(a_request(:post, remote_user.inbox_url)).to have_been_made.once
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user