spec/faraday_spec.rb in ey-hmac-2.0.0 vs spec/faraday_spec.rb in ey-hmac-2.0.1
- old
+ new
@@ -1,27 +1,58 @@
require 'spec_helper'
describe "faraday" do
before(:all) { Bundler.require(:faraday) }
- let!(:key_id) { (0...8).map{ 65.+(rand(26)).chr}.join }
- let!(:key_secret) { (0...16).map{ 65.+(rand(26)).chr}.join }
+ let!(:key_id) { SecureRandom.hex(8) }
+ let!(:key_secret) { SecureRandom.hex(16) }
+
describe "adapter" do
- let!(:adapter) { Ey::Hmac::Adapter::Faraday }
+ let!(:adapter) { Ey::Hmac::Adapter::Faraday }
- it "should sign and read request" do
- request = Faraday::Request.new.tap do |r|
- r.method = :get
- r.path = "/auth"
- r.body = "{1: 2}"
+ it "signs a multipart post" do
+ app = lambda do |env|
+ authenticated = Ey::Hmac.authenticate!(env, adapter: Ey::Hmac::Adapter::Rack) do |auth_id|
+ (auth_id == key_id) && key_secret
+ end
+ [(authenticated ? 200 : 401), {"Content-Type" => "text/plain"}, []]
+ end
+
+ require 'ey-hmac/faraday'
+
+ connection = Faraday.new do |c|
+ c.request :multipart
+ c.request :json
+
+ c.use :hmac, key_id, key_secret
+
+ c.adapter(:rack, app)
+ end
+
+ tempfile = Tempfile.new("hmac")
+ tempfile.write SecureRandom.hex(512)
+ tempfile.close
+
+ expect(
+ connection.post { |req| req.body = {"output" => Faraday::UploadIO.new(tempfile.path, "text/plain")} }.status
+ ).to eq(200)
+ end
+
+ it "signs and reads a request" do
+ request = Faraday::Request.new.tap { |r|
+ r.method = :get
+ r.path = "/auth"
+ r.body = "{1: 2}"
r.headers = {"Content-Type" => "application/xml"}
- end.to_env(Faraday::Connection.new("http://localhost"))
+ }.to_env(
+ Faraday::Connection.new("http://localhost")
+ )
Ey::Hmac.sign!(request, key_id, key_secret, adapter: adapter)
- expect(request[:request_headers]['Authorization']).to start_with("EyHmac")
- expect(request[:request_headers]['Content-Digest']).to eq(Digest::MD5.hexdigest(request[:body]))
+ expect(request[:request_headers]['Authorization']).to start_with("EyHmac")
+ expect(request[:request_headers]['Content-Digest']).to eq(Digest::MD5.hexdigest(request[:body]))
expect(Time.parse(request[:request_headers]['Date'])).not_to be_nil
yielded = false
expect(Ey::Hmac.authenticated?(request, adapter: adapter) do |key_id|
@@ -31,17 +62,19 @@
end).to be_truthy
expect(yielded).to be_truthy
end
- it "should not set Content-Digest if body is nil" do
- request = Faraday::Request.new.tap do |r|
- r.method = :get
- r.path = "/auth"
- r.body = nil
+ it "does not set Content-Digest if body is nil" do
+ request = Faraday::Request.new.tap { |r|
+ r.method = :get
+ r.path = "/auth"
+ r.body = nil
r.headers = {"Content-Type" => "application/xml"}
- end.to_env(Faraday::Connection.new("http://localhost"))
+ }.to_env(
+ Faraday::Connection.new("http://localhost")
+ )
Ey::Hmac.sign!(request, key_id, key_secret, adapter: adapter)
expect(request[:request_headers]['Authorization']).to start_with("EyHmac")
expect(request[:request_headers]).not_to have_key('Content-Digest')
@@ -56,23 +89,23 @@
end).to be_truthy
expect(yielded).to be_truthy
end
- it "should not set Content-Digest if body is empty" do
+ it "does not set Content-Digest if body is empty" do
request = Faraday::Request.new.tap do |r|
r.method = :get
r.path = "/auth"
r.body = ""
r.headers = {"Content-Type" => "application/xml"}
- end.to_env(Faraday::Connection.new("http://localhost"))
+ end.to_env(Faraday::Connection.new("http://localhost"))
Ey::Hmac.sign!(request, key_id, key_secret, adapter: adapter)
- expect(request[:request_headers]['Authorization']).to start_with("EyHmac")
- expect(request[:request_headers]).not_to have_key('Content-Digest')
- expect(Time.parse(request[:request_headers]['Date'])).not_to be_nil
+ expect(request[:request_headers]['Authorization']).to start_with("EyHmac")
+ expect(request[:request_headers]).not_to have_key('Content-Digest')
+ #expect(Time.parse(request[:request_headers]['Date'])).not_to be_nil
yielded = false
expect(Ey::Hmac.authenticated?(request, adapter: adapter) do |key_id|
expect(key_id).to eq(key_id)
@@ -82,24 +115,24 @@
expect(yielded).to be_truthy
end
context "with a request" do
- let!(:request) do
- Faraday::Request.new.tap do |r|
- r.method = :get
- r.path = "/auth"
- r.body = "{1: 2}"
- r.headers = {"Content-Type" => "application/xml"}
- end.to_env(Faraday::Connection.new("http://localhost"))
- end
+ let!(:request) do
+ Faraday::Request.new.tap do |r|
+ r.method = :get
+ r.path = "/auth"
+ r.body = "{1: 2}"
+ r.headers = {"Content-Type" => "application/xml"}
+ end.to_env(Faraday::Connection.new("http://localhost"))
+ end
include_examples "authentication"
end
end
describe "middleware" do
- it "should accept a SHA1 signature" do
+ it "accepts a SHA1 signature" do
require 'ey-hmac/faraday'
Bundler.require(:rack)
app = lambda do |env|
authenticated = Ey::Hmac.authenticated?(env, accept_digests: :sha1, adapter: Ey::Hmac::Adapter::Rack) do |auth_id|
@@ -114,11 +147,11 @@
end
expect(connection.get("/resources").status).to eq(200)
end
- it "should accept a SHA256 signature" do # default
+ it "accepts a SHA256 signature" do # default
require 'ey-hmac/faraday'
Bundler.require(:rack)
app = lambda do |env|
authenticated = Ey::Hmac.authenticated?(env, adapter: Ey::Hmac::Adapter::Rack) do |auth_id|
@@ -133,11 +166,11 @@
end
expect(connection.get("/resources").status).to eq(200)
end
- it "should accept multiple digest signatures" do # default
+ it "accepts multiple digest signatures" do # default
require 'ey-hmac/faraday'
Bundler.require(:rack)
app = lambda do |env|
authenticated = Ey::Hmac.authenticated?(env, accept_digests: [:sha1, :sha256], adapter: Ey::Hmac::Adapter::Rack) do |auth_id|
@@ -152,11 +185,11 @@
end
expect(connection.get("/resources").status).to eq(200)
end
- it "should sign empty request" do
+ it "signs empty request" do
require 'ey-hmac/faraday'
Bundler.require(:rack)
_key_id, _key_secret = key_id, key_secret
app = Rack::Builder.new do
@@ -175,12 +208,12 @@
c.use :hmac, key_id, key_secret
c.adapter(:rack, app)
end
expect(connection.get do |req|
- req.path = "/resource"
- req.body = nil
- req.params = {"a" => "1"}
+ req.path = "/resource"
+ req.body = nil
+ req.params = {"a" => "1"}
req.headers = {"Content-Type" => "application/x-www-form-urlencoded"}
end.status).to eq(200)
end
end
end