Fix undefined method error in sidekiq (#9807)
* Fix undefined method error in sidekiq Body can be not nil but still be empty, which causes a `NoMethodError: undefined method `[]' for nil:NilClass` further in the code. This checks for an empty body to avoid the issue. * Fix codeclimate issuegh/stable
parent
b4e6384aea
commit
5c5e14c816
|
@ -43,7 +43,7 @@ class FetchOEmbedService
|
||||||
res.code != 200 ? nil : res.body_with_limit
|
res.code != 200 ? nil : res.body_with_limit
|
||||||
end
|
end
|
||||||
|
|
||||||
validate(parse_for_format(body)) unless body.nil?
|
validate(parse_for_format(body)) if body.present?
|
||||||
rescue Oj::ParseError, Ox::ParseError
|
rescue Oj::ParseError, Ox::ParseError
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link href='https://host.test/empty_provider.json' rel='alternate' type='application/json+oembed'>
|
||||||
|
</head>
|
||||||
|
<body></body>
|
||||||
|
</html>
|
|
@ -8,6 +8,7 @@ describe FetchOEmbedService, type: :service do
|
||||||
before do
|
before do
|
||||||
stub_request(:get, "https://host.test/provider.json").to_return(status: 404)
|
stub_request(:get, "https://host.test/provider.json").to_return(status: 404)
|
||||||
stub_request(:get, "https://host.test/provider.xml").to_return(status: 404)
|
stub_request(:get, "https://host.test/provider.xml").to_return(status: 404)
|
||||||
|
stub_request(:get, "https://host.test/empty_provider.json").to_return(status: 200)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'discover_provider' do
|
describe 'discover_provider' do
|
||||||
|
@ -93,6 +94,23 @@ describe FetchOEmbedService, type: :service do
|
||||||
expect(subject.call('https://host.test/oembed.html')).to be_nil
|
expect(subject.call('https://host.test/oembed.html')).to be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'Empty JSON provider is discoverable' do
|
||||||
|
before do
|
||||||
|
stub_request(:get, 'https://host.test/oembed.html').to_return(
|
||||||
|
status: 200,
|
||||||
|
headers: { 'Content-Type': 'text/html' },
|
||||||
|
body: request_fixture('oembed_json_empty.html')
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns new OEmbed::Provider for JSON provider' do
|
||||||
|
subject.call('https://host.test/oembed.html')
|
||||||
|
expect(subject.endpoint_url).to eq 'https://host.test/empty_provider.json'
|
||||||
|
expect(subject.format).to eq :json
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when status code is not 200' do
|
context 'when status code is not 200' do
|
||||||
|
|
Reference in New Issue