Explorar o código

Merge pull request #685 from Shopify/warn-on-warning-header

warning raised for version eol
toneymathews %!s(int64=5) %!d(string=hai) anos
pai
achega
8a9a28453c

+ 13 - 3
lib/active_resource/detailed_log_subscriber.rb

@@ -1,8 +1,10 @@
 module ActiveResource
   class DetailedLogSubscriber < ActiveSupport::LogSubscriber
+    VERSION_EOL_WARNING_HEADER = 'x-shopify-api-version-warning'
+    VERSION_DEPRECATION_HEADER = 'x-shopify-api-deprecated-reason'
     def request(event)
       log_request_response_details(event)
-      warn_on_deprecated_header(event)
+      warn_on_deprecated_header_or_version_eol_header(event)
     end
 
     def logger
@@ -21,17 +23,25 @@ module ActiveResource
       info "Response:\n#{event.payload[:response].body}"
     end
 
-    def warn_on_deprecated_header(event)
+    def warn_on_deprecated_header_or_version_eol_header(event)
       payload = event.payload
 
       payload[:response].each do |header_name, header_value|
         case header_name.downcase
-        when 'x-shopify-api-deprecated-reason'
+        when VERSION_DEPRECATION_HEADER
           warning_message = <<-MSG
           [DEPRECATED] ShopifyAPI made a call to #{payload[:method].upcase} #{payload[:path]}, and this call made
           use of a deprecated endpoint, behaviour, or parameter. See #{header_value} for more details.
           MSG
 
+          warn warning_message
+
+        when VERSION_EOL_WARNING_HEADER
+          warning_message = <<-MSG
+          [API Version Warning] ShopifyAPI made a call to #{payload[:method].upcase} #{payload[:path]}, and this call used
+          an API version that is unsupported or will become unsupported within 30 days. See #{header_value} for more details.
+          MSG
+
           warn warning_message
         end
       end

+ 22 - 0
test/detailed_log_subscriber_test.rb

@@ -114,4 +114,26 @@ class LogSubscriberTest < Test::Unit::TestCase
       @logger.logged(:warn).first
     )
   end
+
+  test "warns when the server responds with a x-shopify-api-version-warning header" do
+    fake(
+      "pages/1",
+      method: :get,
+      body: @page,
+      x_shopify_api_version_warning: 'https://shopify.dev/concepts/about-apis/versioning'
+    )
+
+    ShopifyAPI::Page.find(1)
+
+    assert_equal 1, @logger.logged(:warn).size
+
+    assert_match(
+      %r{\[API Version Warning\] ShopifyAPI made a call to GET /admin/api/2019-01/pages/1.json},
+      @logger.logged(:warn).first
+    )
+    assert_match(
+      %r{See https:\/\/shopify.dev\/concepts\/about-apis\/versioning for more details.},
+      @logger.logged(:warn).first
+    )
+  end
 end