mws-rb 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +73 -0
  4. data/Guardfile +8 -0
  5. data/LICENSE +20 -0
  6. data/README.markdown +90 -0
  7. data/Rakefile +1 -0
  8. data/lib/mws-rb.rb +50 -0
  9. data/lib/mws-rb/api/base.rb +48 -0
  10. data/lib/mws-rb/api/feeds.rb +29 -0
  11. data/lib/mws-rb/api/feeds/envelope.rb +61 -0
  12. data/lib/mws-rb/api/feeds/xsd/AdditionalProductInformation.xsd +23 -0
  13. data/lib/mws-rb/api/feeds/xsd/Amazon.xsd +94 -0
  14. data/lib/mws-rb/api/feeds/xsd/Arts.xsd +144 -0
  15. data/lib/mws-rb/api/feeds/xsd/AutoAccessory.xsd +1714 -0
  16. data/lib/mws-rb/api/feeds/xsd/Baby.xsd +206 -0
  17. data/lib/mws-rb/api/feeds/xsd/Beauty.xsd +170 -0
  18. data/lib/mws-rb/api/feeds/xsd/Books.xsd +135 -0
  19. data/lib/mws-rb/api/feeds/xsd/CE.xsd +2878 -0
  20. data/lib/mws-rb/api/feeds/xsd/CameraPhoto.xsd +2612 -0
  21. data/lib/mws-rb/api/feeds/xsd/ClothingAccessories.xsd +128 -0
  22. data/lib/mws-rb/api/feeds/xsd/Computers.xsd +2347 -0
  23. data/lib/mws-rb/api/feeds/xsd/EUCompliance.xsd +24 -0
  24. data/lib/mws-rb/api/feeds/xsd/EntertainmentCollectibles.xsd +99 -0
  25. data/lib/mws-rb/api/feeds/xsd/FBA.xsd +28 -0
  26. data/lib/mws-rb/api/feeds/xsd/FoodAndBeverages.xsd +1000 -0
  27. data/lib/mws-rb/api/feeds/xsd/FoodServiceAndJanSan.xsd +216 -0
  28. data/lib/mws-rb/api/feeds/xsd/FulfillmentCenter.xsd +57 -0
  29. data/lib/mws-rb/api/feeds/xsd/GiftCards.xsd +97 -0
  30. data/lib/mws-rb/api/feeds/xsd/Gourmet.xsd +85 -0
  31. data/lib/mws-rb/api/feeds/xsd/Health.xsd +335 -0
  32. data/lib/mws-rb/api/feeds/xsd/Home.xsd +1362 -0
  33. data/lib/mws-rb/api/feeds/xsd/HomeImprovement.xsd +1065 -0
  34. data/lib/mws-rb/api/feeds/xsd/Industrial.xsd +315 -0
  35. data/lib/mws-rb/api/feeds/xsd/Inventory.xsd +49 -0
  36. data/lib/mws-rb/api/feeds/xsd/Jewelry.xsd +916 -0
  37. data/lib/mws-rb/api/feeds/xsd/LabSupplies.xsd +178 -0
  38. data/lib/mws-rb/api/feeds/xsd/LargeAppliances.xsd +646 -0
  39. data/lib/mws-rb/api/feeds/xsd/Lighting.xsd +243 -0
  40. data/lib/mws-rb/api/feeds/xsd/Listings.xsd +32 -0
  41. data/lib/mws-rb/api/feeds/xsd/Luggage.xsd +93 -0
  42. data/lib/mws-rb/api/feeds/xsd/MechanicalFasteners.xsd +172 -0
  43. data/lib/mws-rb/api/feeds/xsd/Miscellaneous.xsd +157 -0
  44. data/lib/mws-rb/api/feeds/xsd/Motorcycles.xsd +348 -0
  45. data/lib/mws-rb/api/feeds/xsd/Music.xsd +251 -0
  46. data/lib/mws-rb/api/feeds/xsd/MusicalInstruments.xsd +853 -0
  47. data/lib/mws-rb/api/feeds/xsd/Office.xsd +586 -0
  48. data/lib/mws-rb/api/feeds/xsd/OrderAcknowledgement.xsd +55 -0
  49. data/lib/mws-rb/api/feeds/xsd/OrderAdjustment.xsd +175 -0
  50. data/lib/mws-rb/api/feeds/xsd/OrderFulfillment.xsd +57 -0
  51. data/lib/mws-rb/api/feeds/xsd/Override.xsd +48 -0
  52. data/lib/mws-rb/api/feeds/xsd/PetSupplies.xsd +197 -0
  53. data/lib/mws-rb/api/feeds/xsd/PowerTransmission.xsd +87 -0
  54. data/lib/mws-rb/api/feeds/xsd/Price.xsd +59 -0
  55. data/lib/mws-rb/api/feeds/xsd/ProcessingReport.xsd +87 -0
  56. data/lib/mws-rb/api/feeds/xsd/Product.xsd +399 -0
  57. data/lib/mws-rb/api/feeds/xsd/ProductClothing.xsd +285 -0
  58. data/lib/mws-rb/api/feeds/xsd/ProductImage.xsd +39 -0
  59. data/lib/mws-rb/api/feeds/xsd/RawMaterials.xsd +125 -0
  60. data/lib/mws-rb/api/feeds/xsd/Relationship.xsd +47 -0
  61. data/lib/mws-rb/api/feeds/xsd/SWVG.xsd +345 -0
  62. data/lib/mws-rb/api/feeds/xsd/SettlementReport.xsd +158 -0
  63. data/lib/mws-rb/api/feeds/xsd/Shoes.xsd +213 -0
  64. data/lib/mws-rb/api/feeds/xsd/Sports.xsd +772 -0
  65. data/lib/mws-rb/api/feeds/xsd/SportsMemorabilia.xsd +55 -0
  66. data/lib/mws-rb/api/feeds/xsd/TiresAndWheels.xsd +159 -0
  67. data/lib/mws-rb/api/feeds/xsd/Tools.xsd +82 -0
  68. data/lib/mws-rb/api/feeds/xsd/Toys.xsd +272 -0
  69. data/lib/mws-rb/api/feeds/xsd/ToysBaby.xsd +335 -0
  70. data/lib/mws-rb/api/feeds/xsd/Video.xsd +406 -0
  71. data/lib/mws-rb/api/feeds/xsd/WineAndAlcohol.xsd +181 -0
  72. data/lib/mws-rb/api/feeds/xsd/Wireless.xsd +128 -0
  73. data/lib/mws-rb/api/feeds/xsd/amzn-base.xsd +4350 -0
  74. data/lib/mws-rb/api/feeds/xsd/amzn-envelope.xsd +98 -0
  75. data/lib/mws-rb/api/feeds/xsd/amzn-header.xsd +45 -0
  76. data/lib/mws-rb/api/fulfillment_inbound_shipment.rb +15 -0
  77. data/lib/mws-rb/api/fulfillment_inventory.rb +13 -0
  78. data/lib/mws-rb/api/fulfillment_outbound_shipment.rb +11 -0
  79. data/lib/mws-rb/api/orders.rb +15 -0
  80. data/lib/mws-rb/api/products.rb +18 -0
  81. data/lib/mws-rb/api/recommendations.rb +13 -0
  82. data/lib/mws-rb/api/reports.rb +16 -0
  83. data/lib/mws-rb/api/sellers.rb +14 -0
  84. data/lib/mws-rb/connection.rb +53 -0
  85. data/lib/mws-rb/query.rb +94 -0
  86. data/lib/mws-rb/version.rb +3 -0
  87. data/mws-rb.gemspec +28 -0
  88. data/spec/mws-rb/api/base_spec.rb +51 -0
  89. data/spec/mws-rb/api/feeds/envelope_spec.rb +29 -0
  90. data/spec/mws-rb/api/feeds_spec.rb +23 -0
  91. data/spec/mws-rb/api/fulfillment_inbound_shipment_spec.rb +23 -0
  92. data/spec/mws-rb/api/fulfillment_inventory_spec.rb +23 -0
  93. data/spec/mws-rb/api/fulfillment_outbound_shipment_spec.rb +23 -0
  94. data/spec/mws-rb/api/orders_spec.rb +24 -0
  95. data/spec/mws-rb/api/products_spec.rb +24 -0
  96. data/spec/mws-rb/api/recommendations_spec.rb +24 -0
  97. data/spec/mws-rb/api/reports_spec.rb +24 -0
  98. data/spec/mws-rb/api/sellers_spec.rb +28 -0
  99. data/spec/mws-rb/connection_spec.rb +58 -0
  100. data/spec/mws-rb/mws_spec.rb +11 -0
  101. data/spec/mws-rb/query_spec.rb +110 -0
  102. data/spec/spec_helper.rb +7 -0
  103. metadata +260 -0
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::API::Base do
4
+ let(:connection) {MWS::Connection.new({
5
+ aws_access_key_id: "access key",
6
+ aws_secret_access_key: "secret key",
7
+ seller_id: "seller id"
8
+ })}
9
+
10
+ let(:base) {MWS::API::Base.new(connection)}
11
+
12
+ it "hould receive a connection object" do
13
+ base.connection.should eq(connection)
14
+ end
15
+
16
+ it "should respond to .call" do
17
+ base.should respond_to(:call)
18
+ end
19
+
20
+ it "should respond to :uri and :version and :verb" do
21
+ base.should respond_to(:uri)
22
+ base.should respond_to(:version)
23
+ base.should respond_to(:verb)
24
+ end
25
+
26
+ it "should set :verb to :get as default" do
27
+ base.verb.should eq(:get)
28
+ end
29
+
30
+ describe "method_missing to call actions" do
31
+ class TestApi < MWS::API::Base
32
+ Actions = [:test_action]
33
+ def initialize(connection)
34
+ @uri = "/Products/2011-10-01"
35
+ @version = "2011-10-01"
36
+ super(connection)
37
+ end
38
+ end
39
+
40
+ let(:test_api) {TestApi.new(connection)}
41
+ before(:each) {HTTParty.stub(:get).and_return({})}
42
+
43
+ it "should not raise exception if Actions contain the action name" do
44
+ expect {test_api.test_action}.to_not raise_error
45
+ end
46
+
47
+ it "should raise exception if Actions do not contain the action name" do
48
+ expect {test_api.action_not_found}.to raise_error
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::API::Feeds::Envelope do
4
+ it "should validate the envelope" do
5
+ expect {
6
+ MWS::API::Feeds::Envelope.new(message_type: "InvalidMessageType", message:{"InvalidItem" => "Invalid"})
7
+ }.to raise_error
8
+ end
9
+
10
+ it "should skip validation when param skip_schema_validation is true" do
11
+ expect {
12
+ MWS::API::Feeds::Envelope.new(message_type: "InvalidMessageType", message:{"InvalidItem" => "Invalid"}, skip_schema_validation: true)
13
+ }.to_not raise_error
14
+ end
15
+
16
+ it "should remove array items" do
17
+ envelope = MWS::API::Feeds::Envelope.new(
18
+ message_type: "InvalidMessageType",
19
+ message:{
20
+ "Items" => [{item_1: "1"}, {item_2: "2"}],
21
+ "Inventories" => [{inventory_1: "1"}]
22
+ },
23
+ skip_schema_validation: true)
24
+
25
+ envelope.to_s.include?("Items").should == false
26
+ envelope.to_s.include?("Inventories").should == false
27
+ envelope.to_s.include?("array").should == false
28
+ end
29
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::API::Feeds do
4
+ let(:connection) {MWS::Connection.new({
5
+ aws_access_key_id: "access key",
6
+ aws_secret_access_key: "secret key",
7
+ seller_id: "seller id"
8
+ })}
9
+
10
+ let(:feeds) {MWS::API::Feeds.new(connection)}
11
+
12
+ it "should inheritance from MWS::API::Base" do
13
+ MWS::API::Feeds.superclass.should eq(MWS::API::Base)
14
+ end
15
+
16
+ it "should set the right :uri" do
17
+ feeds.uri.should eq("/")
18
+ end
19
+
20
+ it "should set the right :version" do
21
+ feeds.version.should eq("2009-01-01")
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::API::FulfillmentInboundShipment do
4
+ let(:connection) {MWS::Connection.new({
5
+ aws_access_key_id: "access key",
6
+ aws_secret_access_key: "secret key",
7
+ seller_id: "seller id"
8
+ })}
9
+
10
+ let(:fulfillment_inbound_shipment) {MWS::API::FulfillmentInboundShipment.new(connection)}
11
+
12
+ it "should inheritance from MWS::API::Base" do
13
+ MWS::API::Feeds.superclass.should eq(MWS::API::Base)
14
+ end
15
+
16
+ it "should set the right :uri" do
17
+ fulfillment_inbound_shipment.uri.should eq("/FulfillmentInboundShipment/2010-10-01")
18
+ end
19
+
20
+ it "should set the right :version" do
21
+ fulfillment_inbound_shipment.version.should eq("2010-10-01")
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::API::FulfillmentInventory do
4
+ let(:connection) {MWS::Connection.new({
5
+ aws_access_key_id: "access key",
6
+ aws_secret_access_key: "secret key",
7
+ seller_id: "seller id"
8
+ })}
9
+
10
+ let(:fulfillment_inventory) {MWS::API::FulfillmentInventory.new(connection)}
11
+
12
+ it "should inheritance from MWS::API::Base" do
13
+ MWS::API::FulfillmentInventory.superclass.should eq(MWS::API::Base)
14
+ end
15
+
16
+ it "should set the right :uri" do
17
+ fulfillment_inventory.uri.should eq("/FulfillmentInventory/2010-10-01")
18
+ end
19
+
20
+ it "should set the right :version" do
21
+ fulfillment_inventory.version.should eq("2010-10-01")
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::API::FulfillmentOutboundShipment do
4
+ let(:connection) {MWS::Connection.new({
5
+ aws_access_key_id: "access key",
6
+ aws_secret_access_key: "secret key",
7
+ seller_id: "seller id"
8
+ })}
9
+
10
+ let(:fulfillment_outbound_shipment) {MWS::API::FulfillmentOutboundShipment.new(connection)}
11
+
12
+ it "should inheritance from MWS::API::Base" do
13
+ MWS::API::FulfillmentOutboundShipment.superclass.should eq(MWS::API::Base)
14
+ end
15
+
16
+ it "should set the right :uri" do
17
+ fulfillment_outbound_shipment.uri.should eq("/FulfillmentOutboundShipment/2010-10-01")
18
+ end
19
+
20
+ it "should set the right :version" do
21
+ fulfillment_outbound_shipment.version.should eq("2010-10-01")
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::API::Orders do
4
+
5
+ let(:connection) {MWS::Connection.new({
6
+ aws_access_key_id: "access key",
7
+ aws_secret_access_key: "secret key",
8
+ seller_id: "seller id"
9
+ })}
10
+
11
+ let(:orders) {MWS::API::Orders.new(connection)}
12
+
13
+ it "should inheritance from MWS::API::Base" do
14
+ MWS::API::Orders.superclass.should eq(MWS::API::Base)
15
+ end
16
+
17
+ it "should set the right :uri" do
18
+ orders.uri.should eq("/Orders/2011-01-01")
19
+ end
20
+
21
+ it "should set the right :version" do
22
+ orders.version.should eq("2011-01-01")
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::API::Products do
4
+
5
+ let(:connection) {MWS::Connection.new({
6
+ aws_access_key_id: "access key",
7
+ aws_secret_access_key: "secret key",
8
+ seller_id: "seller id"
9
+ })}
10
+
11
+ let(:orders) {MWS::API::Products.new(connection)}
12
+
13
+ it "should inheritance from MWS::API::Base" do
14
+ MWS::API::Products.superclass.should eq(MWS::API::Base)
15
+ end
16
+
17
+ it "should set the right :uri" do
18
+ orders.uri.should eq("/Products/2011-10-01")
19
+ end
20
+
21
+ it "should set the right :version" do
22
+ orders.version.should eq("2011-10-01")
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::API::Recommendations do
4
+
5
+ let(:connection) {MWS::Connection.new({
6
+ aws_access_key_id: "access key",
7
+ aws_secret_access_key: "secret key",
8
+ seller_id: "seller id"
9
+ })}
10
+
11
+ let(:recommendations) {MWS::API::Recommendations.new(connection)}
12
+
13
+ it "should inheritance from MWS::API::Base" do
14
+ MWS::API::Recommendations.superclass.should eq(MWS::API::Base)
15
+ end
16
+
17
+ it "should set the right :uri" do
18
+ recommendations.uri.should eq("/Recommendations/2013-04-01")
19
+ end
20
+
21
+ it "should set the right :version" do
22
+ recommendations.version.should eq("2013-04-01")
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::API::Reports do
4
+
5
+ let(:connection) {MWS::Connection.new({
6
+ aws_access_key_id: "access key",
7
+ aws_secret_access_key: "secret key",
8
+ seller_id: "seller id"
9
+ })}
10
+
11
+ let(:reports) {MWS::API::Reports.new(connection)}
12
+
13
+ it "should inheritance from MWS::API::Base" do
14
+ MWS::API::Reports.superclass.should eq(MWS::API::Base)
15
+ end
16
+
17
+ it "should set the right :uri" do
18
+ reports.uri.should eq("/")
19
+ end
20
+
21
+ it "should set the right :version" do
22
+ reports.version.should eq("2009-01-01")
23
+ end
24
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::API::Sellers do
4
+
5
+ let(:connection) {MWS::Connection.new({
6
+ aws_access_key_id: "access key",
7
+ aws_secret_access_key: "secret key",
8
+ seller_id: "seller id"
9
+ })}
10
+
11
+ let(:sellers) {MWS::API::Sellers.new(connection)}
12
+
13
+ it "should inheritance from MWS::API::Base" do
14
+ MWS::API::Sellers.superclass.should eq(MWS::API::Base)
15
+ end
16
+
17
+ it "should set the right :uri" do
18
+ sellers.uri.should eq("/Sellers/2011-07-01")
19
+ end
20
+
21
+ it "should set the right :version" do
22
+ sellers.version.should eq("2011-07-01")
23
+ end
24
+
25
+ it "should set the right :version" do
26
+ sellers.verb.should eq(:post)
27
+ end
28
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::Connection do
4
+
5
+ let(:subject) {MWS::Connection.new({
6
+ aws_access_key_id: "access key",
7
+ aws_secret_access_key: "secret key",
8
+ seller_id: "seller id"
9
+ })}
10
+
11
+ it "should have a default host" do
12
+ subject.host.should eq("mws.amazonservices.com")
13
+ end
14
+
15
+ describe "call the right apis" do
16
+ it "should return Feeds when calling .feeds" do
17
+ subject.feeds.instance_of?(MWS::API::Feeds).should == true
18
+ end
19
+
20
+ it "should return FulfillmentInboundShipment when calling .fulfillment_inbound_shipment" do
21
+ subject.fulfillment_inbound_shipment.instance_of?(MWS::API::FulfillmentInboundShipment).should == true
22
+ end
23
+
24
+ it "should return FulfillmentInventory when calling .fulfillment_inventory" do
25
+ subject.fulfillment_inventory.instance_of?(MWS::API::FulfillmentInventory).should == true
26
+ end
27
+
28
+ it "should return FulfillmentOutboundShipment when calling .fulfillment_outbound_shipment" do
29
+ subject.fulfillment_outbound_shipment.instance_of?(MWS::API::FulfillmentOutboundShipment).should == true
30
+ end
31
+
32
+ it "should return Orders when calling .orders" do
33
+ subject.orders.instance_of?(MWS::API::Orders).should == true
34
+ end
35
+
36
+ it "should return Products when calling .products" do
37
+ subject.products.instance_of?(MWS::API::Products).should == true
38
+ end
39
+
40
+ it "should return Recommendations when calling .recommendations" do
41
+ subject.recommendations.instance_of?(MWS::API::Recommendations).should == true
42
+ end
43
+
44
+ it "should return Reports when calling .reports" do
45
+ subject.reports.instance_of?(MWS::API::Reports).should == true
46
+ end
47
+
48
+ it "should return Sellers when calling .sellers" do
49
+ subject.sellers.instance_of?(MWS::API::Sellers).should == true
50
+ end
51
+ end
52
+
53
+ describe "Validations" do
54
+ it "should raise argument error if key, secret or seller_id is not provided" do
55
+ expect {MWS::Connection.new}.to raise_error(ArgumentError)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS do
4
+ it "should return a connection on initializer" do
5
+ subject.new(
6
+ aws_access_key_id: "access key",
7
+ aws_secret_access_key: "secret key",
8
+ seller_id: "seller id"
9
+ ).class.should eq(MWS::Connection)
10
+ end
11
+ end
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ describe MWS::Query do
4
+ let(:query_params) {{
5
+ verb: "GET",
6
+ uri: "/",
7
+ host: "mws-eu.amazonservices.com",
8
+ aws_access_key_id: "key",
9
+ aws_secret_access_key: "secret",
10
+ action: "ListOrders",
11
+ seller_id: "Seller ID",
12
+ version: "2010-01-01",
13
+ timestamp: "2013-01-01T00:00:00-02:00"
14
+ }}
15
+
16
+ let(:query) {MWS::Query.new(query_params)}
17
+
18
+ describe "Initialization" do
19
+ it "should create a MWS::Query object" do
20
+ subject.class.should eq(MWS::Query)
21
+ end
22
+
23
+ it "should have some default params" do
24
+ subject.uri.should eq("/")
25
+ subject.verb.should eq("GET")
26
+ subject.signature_method.should eq("HmacSHA256")
27
+ subject.signature_version.should eq(2)
28
+ subject.timestamp.class.should eq(Time)
29
+ end
30
+ end
31
+
32
+ describe "Build query" do
33
+ it "should build a simple query" do
34
+ generated_query = "AWSAccessKeyId=key&Action=ListOrders&SellerId=Seller+ID&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-01-01T00%3A00%3A00-02%3A00&Version=2010-01-01"
35
+ query.build_query.should eq(generated_query)
36
+ end
37
+
38
+ it "should build a query with a signature" do
39
+ query.build_query("signature").include?("Signature=signature").should eq true
40
+ end
41
+
42
+ it "should be a query with custom params" do
43
+ builded_query = MWS::Query.new(query_params.merge(params: {custom_param: "custom"})).build_query
44
+ builded_query.should include("CustomParam=custom")
45
+ end
46
+ end
47
+
48
+ describe "canonical string" do
49
+ it "should generate a canonical string" do
50
+ canonical = "GET\nmws-eu.amazonservices.com\n/\nAWSAccessKeyId=key&Action=ListOrders&SellerId=Seller+ID&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-01-01T00%3A00%3A00-02%3A00&Version=2010-01-01"
51
+ query.canonical.should eq(canonical)
52
+ end
53
+ end
54
+
55
+ describe "signature" do
56
+ it "should generate a valid signature" do
57
+ query.signature.should eq("7XZO1dSv7BHElkee33Rt7L5PNFiBET13pg3pOWKeoo0=")
58
+ end
59
+ end
60
+
61
+ describe "request_uri" do
62
+ it "should generate a valid request uri" do
63
+ request_uri = "https://mws-eu.amazonservices.com/?AWSAccessKeyId=key&Action=ListOrders&SellerId=Seller+ID&Signature=7XZO1dSv7BHElkee33Rt7L5PNFiBET13pg3pOWKeoo0%3D&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-01-01T00%3A00%3A00-02%3A00&Version=2010-01-01"
64
+ query.request_uri.should eq(request_uri)
65
+ end
66
+ end
67
+
68
+ describe MWS::Query::Helpers do
69
+ subject {MWS::Query::Helpers}
70
+
71
+ describe "escape_date_time_params(params={})" do
72
+ let(:time) {Time.new(2013, 01, 01)}
73
+
74
+ it "should escape a simple hash" do
75
+ subject.escape_date_time_params(time: time).should eq({time: time.iso8601})
76
+ end
77
+
78
+ it "should escape a nested hash" do
79
+ subject.escape_date_time_params(time: {time: time}).should eq({time: {time: time.iso8601}})
80
+ end
81
+ end
82
+
83
+ describe "camelize_keys(parmas={})" do
84
+ it "should camelize a simple hash" do
85
+ subject.camelize_keys(new_key: "value").should eq("NewKey" => "value")
86
+ end
87
+
88
+ it "should camelize a nested hash" do
89
+ subject.camelize_keys(key: {key: "value"}).should eq("Key" => {"Key" => "value"})
90
+ end
91
+ end
92
+
93
+ describe "make_structured_lists" do
94
+ it "should return a new structured list" do
95
+ structured_list = subject.make_structured_lists(ids_list: {label: "Id.id", values: [1,2]})
96
+ structured_list.should eq("Id.id.1" => 1, "Id.id.2" => 2)
97
+ end
98
+
99
+ it "should return the same hash if there's no list params" do
100
+ structured_list = subject.make_structured_lists(test: "test")
101
+ structured_list.should eq(test: "test")
102
+ end
103
+
104
+ it "should return a hash with structured lists and normal values" do
105
+ structured_list = subject.make_structured_lists(test: "test", id_list: {label: "Id.id", values: [1]})
106
+ structured_list.should eq(test: "test", "Id.id.1" => 1)
107
+ end
108
+ end
109
+ end
110
+ end