spec/headers_spec.rb in api-auth-1.5.0 vs spec/headers_spec.rb in api-auth-2.0.0

- old
+ new

@@ -1,28 +1,27 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper') describe ApiAuth::Headers do - describe '#canonical_string' do - context "uri edge cases" do + context 'uri edge cases' do let(:request) { RestClient::Request.new(:url => uri, :method => :get) } subject(:headers) { described_class.new(request) } let(:uri) { '' } context 'empty uri' do let(:uri) { ''.freeze } it 'adds / to canonical string' do - expect(subject.canonical_string).to eq(',,/,') + expect(subject.canonical_string).to eq('GET,,,/,') end end context 'uri with just host without /' do let(:uri) { 'http://google.com'.freeze } it 'return / as canonical string path' do - expect(subject.canonical_string).to eq(',,/,') + expect(subject.canonical_string).to eq('GET,,,/,') end it 'does not change request url (by removing host)' do expect(request.url).to eq(uri) end @@ -30,151 +29,137 @@ context 'uri with host and /' do let(:uri) { 'http://google.com/'.freeze } it 'return / as canonical string path' do - expect(subject.canonical_string).to eq(',,/,') + expect(subject.canonical_string).to eq('GET,,,/,') end it 'does not change request url (by removing host)' do expect(request.url).to eq(uri) end end end - context "string construction" do - let(:request){ RestClient::Request.new(:url => "http://google.com", :method => :get) } - subject(:headers) { described_class.new(request) } - let(:driver){ headers.instance_variable_get("@request")} + context 'string construction' do + context 'with a driver that supplies http_method' do + let(:request) { RestClient::Request.new(:url => 'http://google.com', :method => :get) } + subject(:headers) { described_class.new(request) } + let(:driver) { headers.instance_variable_get('@request') } - it "puts the canonical string together correctly" do - allow(driver).to receive(:content_type).and_return "text/html" - allow(driver).to receive(:content_md5).and_return "12345" - allow(driver).to receive(:request_uri).and_return "/foo" - allow(driver).to receive(:timestamp).and_return "Mon, 23 Jan 1984 03:29:56 GMT" - expect(headers.canonical_string).to eq "text/html,12345,/foo,Mon, 23 Jan 1984 03:29:56 GMT" - end - end - end + before do + allow(driver).to receive(:http_method).and_return 'GET' + allow(driver).to receive(:content_type).and_return 'text/html' + allow(driver).to receive(:content_md5).and_return '12345' + allow(driver).to receive(:request_uri).and_return '/foo' + allow(driver).to receive(:timestamp).and_return 'Mon, 23 Jan 1984 03:29:56 GMT' + end - describe "#canonical_string_with_http_method" do - context "with a driver that supplies http_method" do - let(:request){ RestClient::Request.new(:url => "http://google.com", :method => :get) } - subject(:headers) { described_class.new(request) } - let(:driver){ headers.instance_variable_get("@request")} + context 'when not passed an override' do + it "constructs the canonical_string with the driver's http method" do + expect(headers.canonical_string).to eq 'GET,text/html,12345,/foo,Mon, 23 Jan 1984 03:29:56 GMT' + end + end - before do - allow(driver).to receive(:http_method).and_return "GET" - allow(driver).to receive(:content_type).and_return "text/html" - allow(driver).to receive(:content_md5).and_return "12345" - allow(driver).to receive(:request_uri).and_return "/foo" - allow(driver).to receive(:timestamp).and_return "Mon, 23 Jan 1984 03:29:56 GMT" - end - - context "when not passed an override" do - it "constructs the canonical_string with the driver's http method" do - expect(headers.canonical_string_with_http_method).to eq "GET,text/html,12345,/foo,Mon, 23 Jan 1984 03:29:56 GMT" + context 'when passed an override' do + it 'constructs the canonical_string with the overridden http method' do + expect(headers.canonical_string('put')).to eq 'PUT,text/html,12345,/foo,Mon, 23 Jan 1984 03:29:56 GMT' + end end end - context "when passed an override" do - it "constructs the canonical_string with the overridden http method" do - expect(headers.canonical_string_with_http_method("put")).to eq "PUT,text/html,12345,/foo,Mon, 23 Jan 1984 03:29:56 GMT" + context "when a driver that doesn't supply http_method" do + let(:request) do + Curl::Easy.new('/resource.xml?foo=bar&bar=foo') do |curl| + curl.headers = { 'Content-Type' => 'text/plain' } + end end - end - end + subject(:headers) { described_class.new(request) } + let(:driver) { headers.instance_variable_get('@request') } - context "when a driver that doesn't supply http_method" do - let(:request) do - Curl::Easy.new("/resource.xml?foo=bar&bar=foo") do |curl| - curl.headers = { 'Content-Type' => "text/plain" } + before do + allow(driver).to receive(:http_method).and_return nil + allow(driver).to receive(:content_type).and_return 'text/html' + allow(driver).to receive(:content_md5).and_return '12345' + allow(driver).to receive(:request_uri).and_return '/foo' + allow(driver).to receive(:timestamp).and_return 'Mon, 23 Jan 1984 03:29:56 GMT' end - end - subject(:headers) { described_class.new(request) } - let(:driver){ headers.instance_variable_get("@request")} - before do - allow(driver).to receive(:http_method).and_return nil - allow(driver).to receive(:content_type).and_return "text/html" - allow(driver).to receive(:content_md5).and_return "12345" - allow(driver).to receive(:request_uri).and_return "/foo" - allow(driver).to receive(:timestamp).and_return "Mon, 23 Jan 1984 03:29:56 GMT" - end - - context "when not passed an override" do - it "raises an error" do - expect{ headers.canonical_string_with_http_method }.to raise_error(ArgumentError) + context 'when not passed an override' do + it 'raises an error' do + expect { headers.canonical_string }.to raise_error(ArgumentError) + end end - end - context "when passed an override" do - it "constructs the canonical_string with the overridden http method" do - expect(headers.canonical_string_with_http_method("put")).to eq "PUT,text/html,12345,/foo,Mon, 23 Jan 1984 03:29:56 GMT" + context 'when passed an override' do + it 'constructs the canonical_string with the overridden http method' do + expect(headers.canonical_string('put')).to eq 'PUT,text/html,12345,/foo,Mon, 23 Jan 1984 03:29:56 GMT' + end end end end end describe '#calculate_md5' do - subject(:headers){ described_class.new(request) } - let(:driver){ headers.instance_variable_get("@request")} + subject(:headers) { described_class.new(request) } + let(:driver) { headers.instance_variable_get('@request') } - context "no md5 already calculated" do - let(:request) { + context 'no md5 already calculated' do + let(:request) do RestClient::Request.new( :url => 'http://google.com', :method => :post, :payload => "hello\nworld" ) - } + end - it "populates the md5 header" do + it 'populates the md5 header' do expect(driver).to receive(:populate_content_md5) headers.calculate_md5 end end - context "md5 already calculated" do - let(:request) { + context 'md5 already calculated' do + let(:request) do RestClient::Request.new( :url => 'http://google.com', :method => :post, :payload => "hello\nworld", - :headers => {:content_md5 => "abcd"} + :headers => { :content_md5 => 'abcd' } ) - } + end it "doesn't populate the md5 header" do expect(driver).not_to receive(:populate_content_md5) headers.calculate_md5 end end end - describe "#md5_mismatch?" do - let(:request){ RestClient::Request.new(:url => "http://google.com", :method => :get) } - subject(:headers){ described_class.new(request) } - let(:driver){ headers.instance_variable_get("@request") } + describe '#md5_mismatch?' do + let(:request) { RestClient::Request.new(:url => 'http://google.com', :method => :get) } + subject(:headers) { described_class.new(request) } + let(:driver) { headers.instance_variable_get('@request') } - context "when request has md5 header" do - it "asks the driver" do - allow(driver).to receive(:content_md5).and_return "1234" + context 'when request has md5 header' do + it 'asks the driver' do + allow(driver).to receive(:content_md5).and_return '1234' expect(driver).to receive(:md5_mismatch?).and_call_original headers.md5_mismatch? end end - context "when request has no md5" do + context 'when request has no md5' do it "doesn't ask the driver" do - allow(driver).to receive(:content_md5).and_return "" + allow(driver).to receive(:content_md5).and_return '' expect(driver).not_to receive(:md5_mismatch?).and_call_original headers.md5_mismatch? end - it "returns false" do - allow(driver).to receive(:content_md5).and_return "" + it 'returns false' do + allow(driver).to receive(:content_md5).and_return '' expect(headers.md5_mismatch?).to be false end end end