|  | @@ -9,51 +9,62 @@ class SessionTest < Test::Unit::TestCase
 | 
	
		
			
				|  |  |    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    test "not be valid without a url" do
 | 
	
		
			
				|  |  | -    session = ShopifyAPI::Session.new(nil, "any-token", any_api_version)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(domain: nil, token: "any-token", api_version: any_api_version)
 | 
	
		
			
				|  |  |      assert_not session.valid?
 | 
	
		
			
				|  |  |    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    test "not be valid without token" do
 | 
	
		
			
				|  |  | -    session = ShopifyAPI::Session.new("testshop.myshopify.com", nil, any_api_version)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(domain: "testshop.myshopify.com", token: nil, api_version: any_api_version)
 | 
	
		
			
				|  |  |      assert_not session.valid?
 | 
	
		
			
				|  |  |    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    test "not be valid without an api version" do
 | 
	
		
			
				|  |  | -    session = ShopifyAPI::Session.new("testshop.myshopify.com", "any-token", nil)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(domain: "testshop.myshopify.com", token: "any-token", api_version: 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)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(
 | 
	
		
			
				|  |  | +      domain: "testshop.myshopify.com",
 | 
	
		
			
				|  |  | +      token: "any-token",
 | 
	
		
			
				|  |  | +      api_version: any_api_version
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  |      assert session.valid?
 | 
	
		
			
				|  |  |    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    test "not raise error without params" do
 | 
	
		
			
				|  |  |      assert_nothing_raised do
 | 
	
		
			
				|  |  | -      ShopifyAPI::Session.new("testshop.myshopify.com", "any-token", any_api_version)
 | 
	
		
			
				|  |  | +      ShopifyAPI::Session.new(domain: "testshop.myshopify.com", token: "any-token", api_version: 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", any_api_version).site
 | 
	
		
			
				|  |  | +      ShopifyAPI::Session.new(
 | 
	
		
			
				|  |  | +        domain: "http://user:pass@testshop.notshopify.net/path",
 | 
	
		
			
				|  |  | +        token: "any-token",
 | 
	
		
			
				|  |  | +        api_version: 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", any_api_version).site
 | 
	
		
			
				|  |  | +    assert_equal(
 | 
	
		
			
				|  |  | +      "https://testshop.myshopify.com",
 | 
	
		
			
				|  |  | +      ShopifyAPI::Session.new(domain: "testshop", token: "any-token", api_version: any_api_version).site
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  |    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    test "not raise error without params" do
 | 
	
		
			
				|  |  |      assert_nothing_raised do
 | 
	
		
			
				|  |  | -      ShopifyAPI::Session.new("testshop.myshopify.com", "any-token", any_api_version)
 | 
	
		
			
				|  |  | +      ShopifyAPI::Session.new(domain: "testshop.myshopify.com", token: "any-token", api_version: 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", nil, any_api_version)
 | 
	
		
			
				|  |  | +      session = ShopifyAPI::Session.new(domain: "testshop.myshopify.com", token: nil, api_version: any_api_version)
 | 
	
		
			
				|  |  |        session.request_token({'code' => 'any-code'})
 | 
	
		
			
				|  |  |      end
 | 
	
		
			
				|  |  |    end
 | 
	
	
		
			
				|  | @@ -67,13 +78,14 @@ 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', :no_version)
 | 
	
		
			
				|  |  | +    session1 = ShopifyAPI::Session.new(domain: 'fakeshop.myshopify.com', token: 'token1', api_version: :no_version)
 | 
	
		
			
				|  |  |      ShopifyAPI::Base.activate_session(session1)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    ShopifyAPI::Session.temp("testshop.myshopify.com", "any-token", :unstable) {
 | 
	
		
			
				|  |  | +    ShopifyAPI::Session.temp(domain: "testshop.myshopify.com", token: "any-token", api_version: :unstable) do
 | 
	
		
			
				|  |  |        @assigned_site = ShopifyAPI::Base.site
 | 
	
		
			
				|  |  |        @assigned_version = ShopifyAPI::Base.api_version
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    end
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      assert_equal('https://testshop.myshopify.com', @assigned_site.to_s)
 | 
	
		
			
				|  |  |      assert_equal('https://fakeshop.myshopify.com', ShopifyAPI::Base.site.to_s)
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -83,7 +95,11 @@ class SessionTest < Test::Unit::TestCase
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    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', 'any-token', any_api_version)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(
 | 
	
		
			
				|  |  | +      domain: 'http://localhost.myshopify.com',
 | 
	
		
			
				|  |  | +      token: 'any-token',
 | 
	
		
			
				|  |  | +      api_version: 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
 | 
	
	
		
			
				|  | @@ -91,7 +107,11 @@ 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', 'any-token', any_api_version)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(
 | 
	
		
			
				|  |  | +      domain: 'http://localhost.myshopify.com',
 | 
	
		
			
				|  |  | +      token: 'any-token',
 | 
	
		
			
				|  |  | +      api_version: 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
 | 
	
	
		
			
				|  | @@ -99,7 +119,11 @@ 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', 'any-token', any_api_version)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(
 | 
	
		
			
				|  |  | +      domain: 'http://localhost.myshopify.com',
 | 
	
		
			
				|  |  | +      token: 'any-token',
 | 
	
		
			
				|  |  | +      api_version: 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
 | 
	
	
		
			
				|  | @@ -107,7 +131,11 @@ 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', 'any-token', any_api_version)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(
 | 
	
		
			
				|  |  | +      domain: 'http://localhost.myshopify.com',
 | 
	
		
			
				|  |  | +      token: 'any-token',
 | 
	
		
			
				|  |  | +      api_version: 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
 | 
	
	
		
			
				|  | @@ -115,16 +143,30 @@ 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', nil, any_api_version)
 | 
	
		
			
				|  |  | -    fake nil, :url => 'https://localhost.myshopify.com/admin/oauth/access_token',:method => :post, :status => 404, :body => '{"error" : "invalid_request"}'
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(
 | 
	
		
			
				|  |  | +      domain: 'http://localhost.myshopify.com',
 | 
	
		
			
				|  |  | +      token: nil,
 | 
	
		
			
				|  |  | +      api_version: 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"})
 | 
	
		
			
				|  |  | +      session.request_token(code: "bad-code")
 | 
	
		
			
				|  |  |      end
 | 
	
		
			
				|  |  |      assert_equal false, session.valid?
 | 
	
		
			
				|  |  |    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    test "return site for session" do
 | 
	
		
			
				|  |  | -    session = ShopifyAPI::Session.new("testshop.myshopify.com", "any-token", any_api_version)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(
 | 
	
		
			
				|  |  | +      domain: "testshop.myshopify.com",
 | 
	
		
			
				|  |  | +      token: "any-token",
 | 
	
		
			
				|  |  | +      api_version: any_api_version
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  |      assert_equal "https://testshop.myshopify.com", session.site
 | 
	
		
			
				|  |  |    end
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -134,7 +176,7 @@ class SessionTest < Test::Unit::TestCase
 | 
	
		
			
				|  |  |        url: "https://testshop.myshopify.com/admin/oauth/access_token",
 | 
	
		
			
				|  |  |        method: :post,
 | 
	
		
			
				|  |  |        body: '{"access_token":"any-token"}'
 | 
	
		
			
				|  |  | -    session = ShopifyAPI::Session.new("testshop.myshopify.com", nil, api_version)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(domain: "testshop.myshopify.com", token: nil, api_version: api_version)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      params = { code: 'any-code', timestamp: Time.now }
 | 
	
		
			
				|  |  |      token = session.request_token(params.merge(hmac: generate_signature(params)))
 | 
	
	
		
			
				|  | @@ -149,7 +191,7 @@ class SessionTest < Test::Unit::TestCase
 | 
	
		
			
				|  |  |        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", nil, api_version)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(domain: "testshop.myshopify.com", token: nil, api_version: api_version)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      params = { code: 'any-code', timestamp: Time.now }
 | 
	
		
			
				|  |  |      assert session.request_token(params.merge(hmac: generate_signature(params)))
 | 
	
	
		
			
				|  | @@ -163,7 +205,7 @@ class SessionTest < Test::Unit::TestCase
 | 
	
		
			
				|  |  |        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", nil, api_version)
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(domain: "testshop.myshopify.com", token: nil, api_version: api_version)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      Timecop.freeze do
 | 
	
		
			
				|  |  |        params = { code: 'any-code', timestamp: Time.now }
 | 
	
	
		
			
				|  | @@ -187,7 +229,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", nil, any_api_version)
 | 
	
		
			
				|  |  | +      session = ShopifyAPI::Session.new(domain: "testshop.myshopify.com", token: nil, api_version: any_api_version)
 | 
	
		
			
				|  |  |        session.request_token(params.merge(:hmac => signature))
 | 
	
		
			
				|  |  |      end
 | 
	
		
			
				|  |  |    end
 | 
	
	
		
			
				|  | @@ -197,7 +239,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", nil, any_api_version)
 | 
	
		
			
				|  |  | +      session = ShopifyAPI::Session.new(domain: "testshop.myshopify.com", token: nil, api_version: any_api_version)
 | 
	
		
			
				|  |  |        session.request_token(params.merge(:hmac => signature))
 | 
	
		
			
				|  |  |      end
 | 
	
		
			
				|  |  |    end
 | 
	
	
		
			
				|  | @@ -224,6 +266,16 @@ class SessionTest < Test::Unit::TestCase
 | 
	
		
			
				|  |  |      assert_equal true, ShopifyAPI::Session.validate_signature(params)
 | 
	
		
			
				|  |  |    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  test "url is aliased to domain to minimize the upgrade changes" do
 | 
	
		
			
				|  |  | +    session = ShopifyAPI::Session.new(
 | 
	
		
			
				|  |  | +      domain: "http://testshop.myshopify.com",
 | 
	
		
			
				|  |  | +      token: "any-token",
 | 
	
		
			
				|  |  | +      api_version: any_api_version
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    assert_equal('testshop.myshopify.com', session.url)
 | 
	
		
			
				|  |  | +  end
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    private
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    def make_sorted_params(params)
 |