From 804bdfc1468713f3de7b13c77877dc98aaf14eba Mon Sep 17 00:00:00 2001 From: Alex Sanford Date: Thu, 30 Nov 2023 16:47:21 -0400 Subject: [PATCH 1/3] Handle a string response from a WP REST API endpoint --- app/finders/users/wp_json_api.rb | 16 ++++++++++------ spec/app/finders/users/wp_json_api_spec.rb | 6 ++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/finders/users/wp_json_api.rb b/app/finders/users/wp_json_api.rb index 73b23f368..25c1a9f33 100644 --- a/app/finders/users/wp_json_api.rb +++ b/app/finders/users/wp_json_api.rb @@ -42,12 +42,16 @@ def aggressive(_opts = {}) def users_from_response(response) found = [] - JSON.parse(response.body)&.each do |user| - found << Model::User.new(user['slug'], - id: user['id'], - found_by: found_by, - confidence: 100, - interesting_entries: [response.effective_url]) + json = JSON.parse(response.body) + + if json.is_a? Enumerable + json.each do |user| + found << Model::User.new(user['slug'], + id: user['id'], + found_by: found_by, + confidence: 100, + interesting_entries: [response.effective_url]) + end end found diff --git a/spec/app/finders/users/wp_json_api_spec.rb b/spec/app/finders/users/wp_json_api_spec.rb index a9af123ec..64453dfb3 100644 --- a/spec/app/finders/users/wp_json_api_spec.rb +++ b/spec/app/finders/users/wp_json_api_spec.rb @@ -25,6 +25,12 @@ its(:aggressive) { should eql([]) } end + context 'when a string response' do + let(:body) { '404' } + + its(:aggressive) { should eql([]) } + end + context 'when a JSON response' do context 'when unauthorised' do let(:body) { File.read(fixtures.join('401.json')) } From c7d49556f1ad3d2e5c97ed01dbad71be0712c28d Mon Sep 17 00:00:00 2001 From: Alex Sanford Date: Thu, 30 Nov 2023 16:58:26 -0400 Subject: [PATCH 2/3] Add fix for oembed API --- app/finders/users/oembed_api.rb | 2 ++ app/finders/users/wp_json_api.rb | 2 +- spec/app/finders/users/oembed_api_spec.rb | 12 ++++++++++-- spec/app/finders/users/wp_json_api_spec.rb | 14 ++++++++------ 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/app/finders/users/oembed_api.rb b/app/finders/users/oembed_api.rb index f97813a6d..d34c96977 100644 --- a/app/finders/users/oembed_api.rb +++ b/app/finders/users/oembed_api.rb @@ -36,6 +36,8 @@ def user_details_from_oembed_data(oembed_data) oembed_data = oembed_data.first if oembed_data.is_a?(Array) + oembed_data = {} unless oembed_data.is_a?(Hash) + if oembed_data['author_url'] =~ %r{/author/([^/]+)/?\z} details = [Regexp.last_match[1], 'Author URL', 90] elsif oembed_data['author_name'] && !oembed_data['author_name'].empty? diff --git a/app/finders/users/wp_json_api.rb b/app/finders/users/wp_json_api.rb index 25c1a9f33..332ee41c7 100644 --- a/app/finders/users/wp_json_api.rb +++ b/app/finders/users/wp_json_api.rb @@ -44,7 +44,7 @@ def users_from_response(response) json = JSON.parse(response.body) - if json.is_a? Enumerable + if json.is_a?(Enumerable) json.each do |user| found << Model::User.new(user['slug'], id: user['id'], diff --git a/spec/app/finders/users/oembed_api_spec.rb b/spec/app/finders/users/oembed_api_spec.rb index 01d053575..c4a2dea5a 100644 --- a/spec/app/finders/users/oembed_api_spec.rb +++ b/spec/app/finders/users/oembed_api_spec.rb @@ -13,9 +13,17 @@ end context 'when not a JSON response' do - let(:body) { '' } + context 'when empty' do + let(:body) { '' } - its(:aggressive) { should eql([]) } + its(:aggressive) { should eql([]) } + end + + context 'when a string' do + let(:body) { '404' } + + its(:aggressive) { should eql([]) } + end end context 'when a JSON response' do diff --git a/spec/app/finders/users/wp_json_api_spec.rb b/spec/app/finders/users/wp_json_api_spec.rb index 64453dfb3..7f38a818f 100644 --- a/spec/app/finders/users/wp_json_api_spec.rb +++ b/spec/app/finders/users/wp_json_api_spec.rb @@ -20,15 +20,17 @@ end context 'when not a JSON response' do - let(:body) { '' } + context 'when empty' do + let(:body) { '' } - its(:aggressive) { should eql([]) } - end + its(:aggressive) { should eql([]) } + end - context 'when a string response' do - let(:body) { '404' } + context 'when a string' do + let(:body) { '404' } - its(:aggressive) { should eql([]) } + its(:aggressive) { should eql([]) } + end end context 'when a JSON response' do From d2841dbf5acd0ef58f4a9b76d4372db4900915b0 Mon Sep 17 00:00:00 2001 From: Alex Sanford Date: Thu, 30 Nov 2023 17:00:01 -0400 Subject: [PATCH 3/3] Formatting --- app/finders/users/wp_json_api.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/finders/users/wp_json_api.rb b/app/finders/users/wp_json_api.rb index 332ee41c7..8d9f9a1e9 100644 --- a/app/finders/users/wp_json_api.rb +++ b/app/finders/users/wp_json_api.rb @@ -47,10 +47,10 @@ def users_from_response(response) if json.is_a?(Enumerable) json.each do |user| found << Model::User.new(user['slug'], - id: user['id'], - found_by: found_by, - confidence: 100, - interesting_entries: [response.effective_url]) + id: user['id'], + found_by: found_by, + confidence: 100, + interesting_entries: [response.effective_url]) end end