Fix temporary network/remote server error prevent from interactions with remote accounts (#18161)
* Fix temporary network/remote server error prevent from interactions with remote accounts * Fix and add tests
This commit is contained in:
parent
8284110c55
commit
84d991988e
|
@ -30,6 +30,11 @@ class ResolveURLService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def process_url_from_db
|
def process_url_from_db
|
||||||
|
if [500, 502, 503, 504, nil].include?(fetch_resource_service.response_code)
|
||||||
|
account = Account.find_by(uri: @url)
|
||||||
|
return account unless account.nil?
|
||||||
|
end
|
||||||
|
|
||||||
return unless @on_behalf_of.present? && [401, 403, 404].include?(fetch_resource_service.response_code)
|
return unless @on_behalf_of.present? && [401, 403, 404].include?(fetch_resource_service.response_code)
|
||||||
|
|
||||||
# It may happen that the resource is a private toot, and thus not fetchable,
|
# It may happen that the resource is a private toot, and thus not fetchable,
|
||||||
|
|
|
@ -7,15 +7,29 @@ describe ResolveURLService, type: :service do
|
||||||
|
|
||||||
describe '#call' do
|
describe '#call' do
|
||||||
it 'returns nil when there is no resource url' do
|
it 'returns nil when there is no resource url' do
|
||||||
url = 'http://example.com/missing-resource'
|
url = 'http://example.com/missing-resource'
|
||||||
|
known_account = Fabricate(:account, uri: url)
|
||||||
service = double
|
service = double
|
||||||
|
|
||||||
allow(FetchResourceService).to receive(:new).and_return service
|
allow(FetchResourceService).to receive(:new).and_return service
|
||||||
|
allow(service).to receive(:response_code).and_return(404)
|
||||||
allow(service).to receive(:call).with(url).and_return(nil)
|
allow(service).to receive(:call).with(url).and_return(nil)
|
||||||
|
|
||||||
expect(subject.call(url)).to be_nil
|
expect(subject.call(url)).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'returns known account on temporary error' do
|
||||||
|
url = 'http://example.com/missing-resource'
|
||||||
|
known_account = Fabricate(:account, uri: url)
|
||||||
|
service = double
|
||||||
|
|
||||||
|
allow(FetchResourceService).to receive(:new).and_return service
|
||||||
|
allow(service).to receive(:response_code).and_return(500)
|
||||||
|
allow(service).to receive(:call).with(url).and_return(nil)
|
||||||
|
|
||||||
|
expect(subject.call(url)).to eq known_account
|
||||||
|
end
|
||||||
|
|
||||||
context 'searching for a remote private status' do
|
context 'searching for a remote private status' do
|
||||||
let(:account) { Fabricate(:account) }
|
let(:account) { Fabricate(:account) }
|
||||||
let(:poster) { Fabricate(:account, domain: 'example.com') }
|
let(:poster) { Fabricate(:account, domain: 'example.com') }
|
||||||
|
|
Loading…
Reference in a new issue