detailed_log_subscriber_test.rb 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. require 'test_helper'
  2. require "active_support/log_subscriber/test_helper"
  3. require 'json'
  4. class LogSubscriberTest < Test::Unit::TestCase
  5. include ActiveSupport::LogSubscriber::TestHelper
  6. attr_reader :request_headers
  7. def setup
  8. super
  9. @page = { page: { id: 1, title: 'Shopify API' } }.to_json
  10. @ua_header = "\"User-Agent\"=>\"ShopifyAPI/#{ShopifyAPI::VERSION} " \
  11. "ActiveResource/#{ActiveResource::VERSION::STRING} Ruby/#{RUBY_VERSION}\""
  12. @request_headers = "Headers: {\"Accept\"=>\"application/json\", " \
  13. "#{@ua_header}, \"X-Shopify-Access-Token\"=>\"access_token\"}"
  14. ShopifyAPI::Base.clear_session
  15. fake(
  16. "apis",
  17. url: "https://app.shopify.com/services/apis.json",
  18. method: :get,
  19. status: 200,
  20. api_version: :stub,
  21. body: load_fixture('apis')
  22. )
  23. ShopifyAPI::ApiVersion.fetch_known_versions
  24. session = ShopifyAPI::Session.new(
  25. domain: "https://this-is-my-test-shop.myshopify.com",
  26. token: "access_token",
  27. api_version: '2019-01'
  28. )
  29. ShopifyAPI::Base.activate_session(session)
  30. ActiveResource::LogSubscriber.attach_to(:active_resource)
  31. ActiveResource::DetailedLogSubscriber.attach_to(:active_resource_detailed)
  32. end
  33. def teardown
  34. super
  35. ShopifyAPI::ApiVersion.clear_known_versions
  36. ShopifyAPI::ApiVersion.version_lookup_mode = :raise_on_unknown
  37. end
  38. def set_logger(logger)
  39. ActiveResource::Base.logger = logger
  40. end
  41. test "logging on #find" do
  42. fake("pages/1", method: :get, body: @page)
  43. ShopifyAPI::Page.find(1)
  44. assert_equal(4, @logger.logged(:info).size)
  45. assert_equal(
  46. "GET https://this-is-my-test-shop.myshopify.com:443/admin/api/2019-01/pages/1.json",
  47. @logger.logged(:info)[0]
  48. )
  49. assert_match(/\-\-\> 200/, @logger.logged(:info)[1])
  50. assert_equal(request_headers, @logger.logged(:info)[2])
  51. assert_match(
  52. %r{(Response:\n\{\"page\"\:\{\"id\"\:1,\"title\"\:\"Shopify API\"\}\})|
  53. (Response:\n\{\"page\"\:\{\"title\"\:\"Shopify API\",\"id\"\:1\}\})},
  54. @logger.logged(:info)[3]
  55. )
  56. end
  57. test "logging on #find with an error" do
  58. fake("pages/2", method: :get, body: nil, status: 404)
  59. assert_raises(ActiveResource::ResourceNotFound) do
  60. ShopifyAPI::Page.find(2)
  61. end
  62. if ar_version_before?('5.1.0')
  63. assert_equal(4, @logger.logged(:info).size)
  64. assert_equal(
  65. "GET https://this-is-my-test-shop.myshopify.com:443/admin/api/2019-01/pages/2.json",
  66. @logger.logged(:info)[0]
  67. )
  68. assert_match(/\-\-\> 404/, @logger.logged(:info)[1])
  69. assert_equal(request_headers, @logger.logged(:info)[2])
  70. assert_equal("Response:", @logger.logged(:info)[3])
  71. else
  72. assert_equal(2, @logger.logged(:error).size)
  73. assert_equal(
  74. "GET https://this-is-my-test-shop.myshopify.com:443/admin/api/2019-01/pages/2.json",
  75. @logger.logged(:error)[0]
  76. )
  77. assert_match(/\-\-\> 404/, @logger.logged(:error)[1])
  78. assert_equal(2, @logger.logged(:info).size)
  79. assert_equal(request_headers, @logger.logged(:info)[0])
  80. assert_equal("Response:", @logger.logged(:info)[1])
  81. end
  82. end
  83. test "warns when the server responds with a x-shopify-api-deprecated-reason header" do
  84. fake(
  85. "pages/1",
  86. method: :get,
  87. body: @page,
  88. x_shopify_api_deprecated_reason: 'https://help.shopify.com/en/api/getting-started/api-deprecations'
  89. )
  90. ShopifyAPI::Page.find(1)
  91. assert_equal(1, @logger.logged(:warn).size)
  92. assert_match(
  93. %r{\[DEPRECATED\] ShopifyAPI made a call to GET /admin/api/2019-01/pages/1.json},
  94. @logger.logged(:warn).first
  95. )
  96. assert_match(
  97. %r{See https:\/\/help.shopify.com\/en\/api\/getting-started\/api-deprecations for more details.},
  98. @logger.logged(:warn).first
  99. )
  100. end
  101. test "warns when the server responds with a x-shopify-api-version-warning header" do
  102. fake(
  103. "pages/1",
  104. method: :get,
  105. body: @page,
  106. x_shopify_api_version_warning: 'https://shopify.dev/concepts/about-apis/versioning'
  107. )
  108. ShopifyAPI::Page.find(1)
  109. assert_equal(1, @logger.logged(:warn).size)
  110. assert_match(
  111. %r{\[API Version Warning\] ShopifyAPI made a call to GET /admin/api/2019-01/pages/1.json},
  112. @logger.logged(:warn).first
  113. )
  114. assert_match(
  115. %r{See https:\/\/shopify.dev\/concepts\/about-apis\/versioning for more details.},
  116. @logger.logged(:warn).first
  117. )
  118. end
  119. end