From a0fb0296a163d33375ec844a60d06c2dbe07dac8 Mon Sep 17 00:00:00 2001 From: Viet Hoang <1300077+vietqhoang@users.noreply.github.com> Date: Tue, 13 Feb 2024 16:05:43 -0800 Subject: [PATCH 1/4] Add breaking test See https://github.com/rails/importmap-rails/issues/245 for context. The TL;DR is the response sometimes returns a String instead of Hash object. This should be handled properly. The way to handle this is up for discussion. To start addressing the issue the String response will just be surfaced as `latest_version`. --- test/npm_test.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/npm_test.rb b/test/npm_test.rb index fd6f122..cf37878 100644 --- a/test/npm_test.rb +++ b/test/npm_test.rb @@ -94,4 +94,17 @@ def code() "200" end end end end + + test "return response is a String type" do + response = "version not found".to_json + + @npm.stub(:get_json, response) do + outdated_packages = @npm.outdated_packages + + assert_equal(1, outdated_packages.size) + assert_equal('md5', outdated_packages[0].name) + assert_equal('2.2.0', outdated_packages[0].current_version) + assert_equal('version not found', outdated_packages[0].latest_version) + end + end end From 41b84fbe4a764ddc953688225735f4919ee8df8f Mon Sep 17 00:00:00 2001 From: Viet Hoang <1300077+vietqhoang@users.noreply.github.com> Date: Tue, 13 Feb 2024 16:08:57 -0800 Subject: [PATCH 2/4] Surface String response --- lib/importmap/npm.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/importmap/npm.rb b/lib/importmap/npm.rb index b47f39e..4a54f85 100644 --- a/lib/importmap/npm.rb +++ b/lib/importmap/npm.rb @@ -86,7 +86,7 @@ def get_json(uri) end def find_latest_version(response) - latest_version = response.dig('dist-tags', 'latest') + latest_version = response.is_a?(String) ? response : response.dig('dist-tags', 'latest') return latest_version if latest_version return unless response['versions'] From 40df2530eab1a6d14487dab4bc3b3d65cde5dbb1 Mon Sep 17 00:00:00 2001 From: Viet Hoang <1300077+vietqhoang@users.noreply.github.com> Date: Tue, 13 Feb 2024 16:47:48 -0800 Subject: [PATCH 3/4] Use a better test description --- test/npm_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/npm_test.rb b/test/npm_test.rb index cf37878..66dc484 100644 --- a/test/npm_test.rb +++ b/test/npm_test.rb @@ -95,7 +95,7 @@ def code() "200" end end end - test "return response is a String type" do + test "return latest version response is a String type" do response = "version not found".to_json @npm.stub(:get_json, response) do From 38fb11631709e44f7a850dd5717cb527355420d7 Mon Sep 17 00:00:00 2001 From: Viet Hoang <1300077+vietqhoang@users.noreply.github.com> Date: Tue, 13 Feb 2024 16:48:43 -0800 Subject: [PATCH 4/4] Reduce the number of assertions We only care to assert on the `latest_version` since this is what we care about. Can revert the change if it is desired to assert the rest. --- test/npm_test.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/npm_test.rb b/test/npm_test.rb index 66dc484..a53f8b0 100644 --- a/test/npm_test.rb +++ b/test/npm_test.rb @@ -101,9 +101,6 @@ def code() "200" end @npm.stub(:get_json, response) do outdated_packages = @npm.outdated_packages - assert_equal(1, outdated_packages.size) - assert_equal('md5', outdated_packages[0].name) - assert_equal('2.2.0', outdated_packages[0].current_version) assert_equal('version not found', outdated_packages[0].latest_version) end end