spec/unit/sucker/request_spec.rb in sucker-1.0.0.beta.4 vs spec/unit/sucker/request_spec.rb in sucker-1.0.0
- old
+ new
@@ -1,89 +1,111 @@
require "spec_helper"
module Sucker
+
describe Request do
+
use_vcr_cassette "unit/sucker/request", :record => :new_episodes
let(:worker) do
Sucker.new(
:locale => "us",
:key => "key",
:secret => "secret")
end
- context ".new" do
+ describe ".new" do
+
it "sets default parameters" do
default_parameters = {
"Service" => "AWSECommerceService",
"Version" => Sucker::CURRENT_AMAZON_API_VERSION }
worker.parameters.should include default_parameters
end
+
end
- context "#<<" do
+ describe "#<<" do
+
it "merges a hash into the parameters" do
worker << { "foo" => "bar" }
worker.parameters["foo"].should eql "bar"
end
+
end
- context "#version=" do
+ describe "#version=" do
+
it "sets the Amazon API version" do
worker.version = "foo"
worker.parameters["Version"].should eql "foo"
end
+
end
- context "#associate_tag=" do
+ describe "#associate_tag=" do
+
it "sets the associate tag in the parameters" do
worker.associate_tag = "foo"
worker.parameters["AssociateTag"].should eql "foo"
end
+
end
- context "#curl" do
- it "returns a cURL object" do
+ describe "#curl" do
+
+ it "returns curl" do
worker.curl.should be_an_instance_of Curl::Easy
end
- it "configures the cURL object" do
- worker.curl.interface.should be_nil
+ context "when given a block" do
- worker.curl do |curl|
- curl.interface = "eth1"
+ it "yields curl" do
+ worker.curl.interface.should be_nil
+
+ worker.curl { |curl| curl.interface = "eth1" }
+
+ worker.curl.interface.should eql "eth1"
end
- worker.curl.interface.should eql "eth1"
end
- end
- context "#get" do
- it "returns a response" do
- worker.get.class.ancestors.should include Response
- end
end
- context "#get!" do
+ describe "#get!" do
+
it "raises if response is not valid" do
worker << {
"Operation" => "ItemLookup",
"IdType" => "ASIN",
"ItemId" => "0816614024" }
lambda { worker.get! }.should raise_error ResponseError
end
+
end
- context "#key=" do
+ describe "#get" do
+
+ it "returns a response" do
+ worker.get.class.ancestors.should include Response
+ end
+
+ end
+
+ describe "#key=" do
+
it "sets the Amazon AWS access key in the parameters" do
worker.key = "foo"
worker.parameters["AWSAccessKeyId"].should eql "foo"
end
+
end
context "private methods" do
- context "#build_query" do
+
+ describe "#build_query" do
+
it "canonicalizes parameters" do
query = worker.send(:build_query)
query.should match /Service=([^&]+)&Timestamp=([^&]+)&Version=([^&]+)/
end
@@ -108,35 +130,47 @@
it "handles floating-point parameter values" do
worker.parameters["Foo"] = 1.0
query = worker.send(:build_query)
query.should match /Foo=1/
end
+
end
- context "#host" do
+ describe "#host" do
+
it "returns a host" do
worker.locale = "fr"
worker.send(:host).should eql "ecs.amazonaws.fr"
end
+
end
- context "#build_signed_query" do
+ describe "#build_signed_query" do
+
it "returns a signed query string" do
query = worker.send :build_signed_query
query.should match /&Signature=.*/
end
+
end
- context "#timestamp" do
+ describe "#timestamp" do
+
it "returns a timestamp" do
worker.send(:timestamp)["Timestamp"].should match /^\d+-\d+-\d+T\d+:\d+:\d+Z$/
end
+
end
- context "#uri" do
+ describe "#uri" do
+
it "returns the URI with which to query Amazon" do
worker.send(:uri).should be_an_instance_of URI::HTTP
end
+
end
+
end
+
end
+
end