Browse Source

added tests for create permission url

Kevin Hughes 11 years ago
parent
commit
a30bb4ab1d
2 changed files with 50 additions and 14 deletions
  1. 18 14
      lib/shopify_api/session.rb
  2. 32 0
      test/session_test.rb

+ 18 - 14
lib/shopify_api/session.rb

@@ -70,27 +70,18 @@ module ShopifyAPI
     end
 
     def create_permission_url(scope, redirect_uri = nil)
-      params = {:client_id => self.api_key, :scope => scope.join(',')}
+      params = {:client_id => api_key, :scope => scope.join(',')}
       params[:redirect_uri] = redirect_uri if redirect_uri
-      "#{self.protocol}://#{url}/admin/oauth/authorize?#{parameterize(params)}"
-    end
-
-    def parameterize(params)
-      URI.escape(params.collect{|k,v| "#{k}=#{v}"}.join('&'))
+      "#{protocol}://#{url}/admin/oauth/authorize?#{parameterize(params)}"
     end
 
     def request_token(code)
-      return self.token if self.token
+      return token if token
       
-      uri = URI.parse("#{self.protocol}://#{self.url}/admin/oauth/access_token")      
-      https = Net::HTTP.new(uri.host, uri.port)
-      https.use_ssl = true
-      request = Net::HTTP::Post.new(uri.request_uri)
-      request.set_form_data({"client_id" => self.api_key, "client_secret" => self.secret, "code" => code})
-      response = https.request(request)
+      response = access_token_request(code)
 
       if response.code == "200"
-        self.token = JSON.parse(response.body)['access_token']
+        token = JSON.parse(response.body)['access_token']
       else
         raise RuntimeError, response.msg
       end
@@ -108,5 +99,18 @@ module ShopifyAPI
       url.present? && token.present?
     end
   
+    private
+      def parameterize(params)
+        URI.escape(params.collect{|k,v| "#{k}=#{v}"}.join('&'))
+      end
+
+      def access_token_request(code)
+        uri = URI.parse("#{protocol}://#{url}/admin/oauth/access_token")      
+        https = Net::HTTP.new(uri.host, uri.port)
+        https.use_ssl = true
+        request = Net::HTTP::Post.new(uri.request_uri)
+        request.set_form_data({"client_id" => api_key, "client_secret" => secret, "code" => code})
+        https.request(request)
+      end
   end
 end

+ 32 - 0
test/session_test.rb

@@ -53,6 +53,38 @@ class SessionTest < Test::Unit::TestCase
       assert_equal 'https://fakeshop.myshopify.com/admin', ShopifyAPI::Base.site.to_s
     end
 
+    should "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')
+      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
+    end
+
+    should "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')
+      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
+    end
+
+    should "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')
+      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
+    end
+
+    should "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')
+      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
+    end
+
     should "request token should get token" do
       ShopifyAPI::Session.setup(:api_key => "My test key", :secret => "My test secret")
       session = ShopifyAPI::Session.new('http://localhost.myshopify.com')