ソースを参照

Make api version a required value for session creation.

Alex Aitken 6 年 前
コミット
d41efbb7a7
3 ファイル変更49 行追加33 行削除
  1. 4 4
      lib/shopify_api/session.rb
  2. 2 2
      test/base_test.rb
  3. 43 27
      test/session_test.rb

+ 4 - 4
lib/shopify_api/session.rb

@@ -19,7 +19,7 @@ module ShopifyAPI
         params.each { |k,value| public_send("#{k}=", value) }
       end
 
-      def temp(domain, token, api_version = :no_version, &_block)
+      def temp(domain, token, api_version, &_block)
         session = new(domain, token, api_version)
         original_site = ShopifyAPI::Base.site.to_s
         original_token = ShopifyAPI::Base.headers['X-Shopify-Access-Token']
@@ -67,7 +67,7 @@ module ShopifyAPI
       end
     end
 
-    def initialize(url, token = nil, api_version = :no_version, extra = {})
+    def initialize(url, token, api_version, extra = {})
       self.url = self.class.prepare_url(url)
       self.api_version = api_version
       self.token = token
@@ -110,11 +110,11 @@ module ShopifyAPI
     end
 
     def api_version=(version)
-      @api_version = ApiVersion.coerce_to_version(version)
+      @api_version = version.nil? ? nil : ApiVersion.coerce_to_version(version)
     end
 
     def valid?
-      url.present? && token.present?
+      url.present? && token.present? && api_version.present?
     end
 
     def expires_in

+ 2 - 2
test/base_test.rb

@@ -3,8 +3,8 @@ require "active_support/log_subscriber/test_helper"
 
 class BaseTest < Test::Unit::TestCase
   def setup
-    @session1 = ShopifyAPI::Session.new('shop1.myshopify.com', 'token1')
-    @session2 = ShopifyAPI::Session.new('shop2.myshopify.com', 'token2')
+    @session1 = ShopifyAPI::Session.new('shop1.myshopify.com', 'token1', :no_version)
+    @session2 = ShopifyAPI::Session.new('shop2.myshopify.com', 'token2', :no_version)
   end
 
   def teardown

+ 43 - 27
test/session_test.rb

@@ -9,46 +9,51 @@ class SessionTest < Test::Unit::TestCase
   end
 
   test "not be valid without a url" do
-    session = ShopifyAPI::Session.new(nil, "any-token")
+    session = ShopifyAPI::Session.new(nil, "any-token", any_api_version)
     assert_not session.valid?
   end
 
   test "not be valid without token" do
-    session = ShopifyAPI::Session.new("testshop.myshopify.com")
+    session = ShopifyAPI::Session.new("testshop.myshopify.com", nil, any_api_version)
     assert_not session.valid?
   end
 
-  test "be valid with any token and any url" do
-    session = ShopifyAPI::Session.new("testshop.myshopify.com", "any-token")
+  test "not be valid without an api version" do
+    session = ShopifyAPI::Session.new("testshop.myshopify.com", "any-token", nil)
+    assert_not session.valid?
+  end
+
+  test "be valid with any token, any url and version" do
+    session = ShopifyAPI::Session.new("testshop.myshopify.com", "any-token", any_api_version)
     assert session.valid?
   end
 
   test "not raise error without params" do
     assert_nothing_raised do
-      session = ShopifyAPI::Session.new("testshop.myshopify.com", "any-token")
+      ShopifyAPI::Session.new("testshop.myshopify.com", "any-token", any_api_version)
     end
   end
 
   test "ignore everything but the subdomain in the shop" do
     assert_equal(
       "https://testshop.myshopify.com",
-      ShopifyAPI::Session.new("http://user:pass@testshop.notshopify.net/path", "any-token").site
+      ShopifyAPI::Session.new("http://user:pass@testshop.notshopify.net/path", "any-token", any_api_version).site
     )
   end
 
   test "append the myshopify domain if not given" do
-    assert_equal "https://testshop.myshopify.com", ShopifyAPI::Session.new("testshop", "any-token").site
+    assert_equal "https://testshop.myshopify.com", ShopifyAPI::Session.new("testshop", "any-token", any_api_version).site
   end
 
   test "not raise error without params" do
     assert_nothing_raised do
-      session = ShopifyAPI::Session.new("testshop.myshopify.com", "any-token")
+      ShopifyAPI::Session.new("testshop.myshopify.com", "any-token", any_api_version)
     end
   end
 
   test "raise error if params passed but signature omitted" do
     assert_raises(ShopifyAPI::ValidationException) do
-      session = ShopifyAPI::Session.new("testshop.myshopify.com")
+      session = ShopifyAPI::Session.new("testshop.myshopify.com", nil, any_api_version)
       session.request_token({'code' => 'any-code'})
     end
   end
@@ -62,19 +67,23 @@ class SessionTest < Test::Unit::TestCase
   test "#temp reset ShopifyAPI::Base.site to original value" do
 
     ShopifyAPI::Session.setup(:api_key => "key", :secret => "secret")
-    session1 = ShopifyAPI::Session.new('fakeshop.myshopify.com', 'token1')
+    session1 = ShopifyAPI::Session.new('fakeshop.myshopify.com', 'token1', :no_version)
     ShopifyAPI::Base.activate_session(session1)
 
-    ShopifyAPI::Session.temp("testshop.myshopify.com", "any-token") {
+    ShopifyAPI::Session.temp("testshop.myshopify.com", "any-token", :unstable) {
       @assigned_site = ShopifyAPI::Base.site
+      @assigned_version = ShopifyAPI::Base.api_version
     }
-    assert_equal 'https://testshop.myshopify.com', @assigned_site.to_s
-    assert_equal 'https://fakeshop.myshopify.com', ShopifyAPI::Base.site.to_s
+    assert_equal('https://testshop.myshopify.com', @assigned_site.to_s)
+    assert_equal('https://fakeshop.myshopify.com', ShopifyAPI::Base.site.to_s)
+
+    assert_equal(ShopifyAPI::ApiVersion::Unstable.new, @assigned_version)
+    assert_equal(ShopifyAPI::ApiVersion::NoVersion.new, ShopifyAPI::Base.api_version)
   end
 
   test "create_permission_url returns correct url with single scope no redirect uri" do
     ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
-    session = ShopifyAPI::Session.new('http://localhost.myshopify.com')
+    session = ShopifyAPI::Session.new('http://localhost.myshopify.com', 'any-token', any_api_version)
     scope = ["write_products"]
     permission_url = session.create_permission_url(scope)
     assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=write_products", permission_url
@@ -82,7 +91,7 @@ class SessionTest < Test::Unit::TestCase
 
   test "create_permission_url returns correct url with single scope and redirect uri" do
     ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
-    session = ShopifyAPI::Session.new('http://localhost.myshopify.com')
+    session = ShopifyAPI::Session.new('http://localhost.myshopify.com', 'any-token', any_api_version)
     scope = ["write_products"]
     permission_url = session.create_permission_url(scope, "http://my_redirect_uri.com")
     assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=write_products&redirect_uri=http://my_redirect_uri.com", permission_url
@@ -90,7 +99,7 @@ class SessionTest < Test::Unit::TestCase
 
   test "create_permission_url returns correct url with dual scope no redirect uri" do
     ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
-    session = ShopifyAPI::Session.new('http://localhost.myshopify.com')
+    session = ShopifyAPI::Session.new('http://localhost.myshopify.com', 'any-token', any_api_version)
     scope = ["write_products","write_customers"]
     permission_url = session.create_permission_url(scope)
     assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=write_products,write_customers", permission_url
@@ -98,7 +107,7 @@ class SessionTest < Test::Unit::TestCase
 
   test "create_permission_url returns correct url with no scope no redirect uri" do
     ShopifyAPI::Session.setup(:api_key => "My_test_key", :secret => "My test secret")
-    session = ShopifyAPI::Session.new('http://localhost.myshopify.com')
+    session = ShopifyAPI::Session.new('http://localhost.myshopify.com', 'any-token', any_api_version)
     scope = []
     permission_url = session.create_permission_url(scope)
     assert_equal "https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&scope=", permission_url
@@ -106,7 +115,7 @@ class SessionTest < Test::Unit::TestCase
 
   test "raise exception if code invalid in request token" do
     ShopifyAPI::Session.setup(:api_key => "My test key", :secret => "My test secret")
-    session = ShopifyAPI::Session.new('http://localhost.myshopify.com')
+    session = ShopifyAPI::Session.new('http://localhost.myshopify.com', nil, any_api_version)
     fake nil, :url => 'https://localhost.myshopify.com/admin/oauth/access_token',:method => :post, :status => 404, :body => '{"error" : "invalid_request"}'
     assert_raises(ShopifyAPI::ValidationException) do
       session.request_token(params={:code => "bad-code"})
@@ -115,16 +124,17 @@ class SessionTest < Test::Unit::TestCase
   end
 
   test "return site for session" do
-    session = ShopifyAPI::Session.new("testshop.myshopify.com", "any-token")
+    session = ShopifyAPI::Session.new("testshop.myshopify.com", "any-token", any_api_version)
     assert_equal "https://testshop.myshopify.com", session.site
   end
 
   test "return_token_if_signature_is_valid" do
+    api_version = any_api_version
     fake nil,
-      url: 'https://testshop.myshopify.com/admin/oauth/access_token',
+      url: "https://testshop.myshopify.com/admin/oauth/access_token",
       method: :post,
       body: '{"access_token":"any-token"}'
-    session = ShopifyAPI::Session.new("testshop.myshopify.com")
+    session = ShopifyAPI::Session.new("testshop.myshopify.com", nil, api_version)
 
     params = { code: 'any-code', timestamp: Time.now }
     token = session.request_token(params.merge(hmac: generate_signature(params)))
@@ -134,11 +144,12 @@ class SessionTest < Test::Unit::TestCase
   end
 
   test "extra parameters are stored in session" do
+    api_version = ShopifyAPI::ApiVersion::Unstable.new
     fake nil,
-      url: 'https://testshop.myshopify.com/admin/oauth/access_token',
+      url: "https://testshop.myshopify.com/admin/oauth/access_token",
       method: :post,
       body: '{"access_token":"any-token","foo":"example"}'
-    session = ShopifyAPI::Session.new("testshop.myshopify.com")
+    session = ShopifyAPI::Session.new("testshop.myshopify.com", nil, api_version)
 
     params = { code: 'any-code', timestamp: Time.now }
     assert session.request_token(params.merge(hmac: generate_signature(params)))
@@ -147,11 +158,12 @@ class SessionTest < Test::Unit::TestCase
   end
 
   test "expires_in is automatically converted in expires_at" do
+    api_version = any_api_version
     fake nil,
-      url: 'https://testshop.myshopify.com/admin/oauth/access_token',
+      url: "https://testshop.myshopify.com/admin/oauth/access_token",
       method: :post,
       body: '{"access_token":"any-token","expires_in":86393}'
-    session = ShopifyAPI::Session.new("testshop.myshopify.com")
+    session = ShopifyAPI::Session.new("testshop.myshopify.com", nil, api_version)
 
     Timecop.freeze do
       params = { code: 'any-code', timestamp: Time.now }
@@ -175,7 +187,7 @@ class SessionTest < Test::Unit::TestCase
     signature = generate_signature(params)
     params[:foo] = 'world'
     assert_raises(ShopifyAPI::ValidationException) do
-      session = ShopifyAPI::Session.new("testshop.myshopify.com")
+      session = ShopifyAPI::Session.new("testshop.myshopify.com", nil, any_api_version)
       session.request_token(params.merge(:hmac => signature))
     end
   end
@@ -185,7 +197,7 @@ class SessionTest < Test::Unit::TestCase
     signature = generate_signature(params)
     params[:foo] = 'world'
     assert_raises(ShopifyAPI::ValidationException) do
-      session = ShopifyAPI::Session.new("testshop.myshopify.com")
+      session = ShopifyAPI::Session.new("testshop.myshopify.com", nil, any_api_version)
       session.request_token(params.merge(:hmac => signature))
     end
   end
@@ -224,4 +236,8 @@ class SessionTest < Test::Unit::TestCase
     params = make_sorted_params(params) if params.is_a?(Hash)
     OpenSSL::HMAC.hexdigest(OpenSSL::Digest::SHA256.new, ShopifyAPI::Session.secret, params)
   end
+
+  def any_api_version
+    [ShopifyAPI::ApiVersion::NoVersion.new, ShopifyAPI::ApiVersion::Unstable.new].sample(1).first
+  end
 end