snl-peddler 0.1.0

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.
data/peddler.gemspec ADDED
@@ -0,0 +1,78 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{peddler}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Hakan Senol Ensari"]
12
+ s.date = %q{2009-08-15}
13
+ s.description = %q{Peddler is a Ruby wrapper to the Amazon Inventory Management API.}
14
+ s.email = %q{hakan.ensari@papercavalier.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "History.txt",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION.yml",
26
+ "lib/peddler.rb",
27
+ "lib/peddler/client.rb",
28
+ "lib/peddler/feeds.rb",
29
+ "lib/peddler/handlers.rb",
30
+ "lib/peddler/inventory.rb",
31
+ "lib/peddler/legacy_reports.rb",
32
+ "lib/peddler/refunds.rb",
33
+ "lib/peddler/reports.rb",
34
+ "lib/peddler/transport.rb",
35
+ "peddler.gemspec",
36
+ "spec/peddler/client_spec.rb",
37
+ "spec/peddler/feeds_spec.rb",
38
+ "spec/peddler/handlers_spec.rb",
39
+ "spec/peddler/inventory_spec.rb",
40
+ "spec/peddler/legacy_reports_spec.rb",
41
+ "spec/peddler/refunds_spec.rb",
42
+ "spec/peddler/reports_spec.rb",
43
+ "spec/peddler/transport_spec.rb",
44
+ "spec/spec_helper.rb"
45
+ ]
46
+ s.homepage = %q{http://github.com/snl/peddler}
47
+ s.rdoc_options = ["--charset=UTF-8"]
48
+ s.require_paths = ["lib"]
49
+ s.rubygems_version = %q{1.3.3}
50
+ s.summary = %q{Peddler is a Ruby wrapper to the Amazon Inventory Management API.}
51
+ s.test_files = [
52
+ "spec/peddler/client_spec.rb",
53
+ "spec/peddler/feeds_spec.rb",
54
+ "spec/peddler/handlers_spec.rb",
55
+ "spec/peddler/inventory_spec.rb",
56
+ "spec/peddler/legacy_reports_spec.rb",
57
+ "spec/peddler/refunds_spec.rb",
58
+ "spec/peddler/reports_spec.rb",
59
+ "spec/peddler/transport_spec.rb",
60
+ "spec/spec_helper.rb"
61
+ ]
62
+
63
+ if s.respond_to? :specification_version then
64
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
65
+ s.specification_version = 3
66
+
67
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
68
+ s.add_runtime_dependency(%q<xmlsimple>, [">= 0"])
69
+ s.add_development_dependency(%q<rspec>, [">= 0"])
70
+ else
71
+ s.add_dependency(%q<xmlsimple>, [">= 0"])
72
+ s.add_dependency(%q<rspec>, [">= 0"])
73
+ end
74
+ else
75
+ s.add_dependency(%q<xmlsimple>, [">= 0"])
76
+ s.add_dependency(%q<rspec>, [">= 0"])
77
+ end
78
+ end
@@ -0,0 +1,47 @@
1
+ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
+
3
+ module Peddler
4
+
5
+ describe Client do
6
+
7
+ before(:each) do
8
+ @client = Peddler::Client.new :username => "seller@example.com",
9
+ :password => "secret",
10
+ :region => "us"
11
+ end
12
+
13
+ it "should return a new inventory batch" do
14
+ @client.new_inventory_batch.should be_an_instance_of(Peddler::Inventory::Batch)
15
+ end
16
+
17
+ it "should return a new inventory item" do
18
+ @client.new_inventory_item.should be_an_instance_of(Peddler::Inventory::Item)
19
+ end
20
+
21
+ it "should return a new order fulfillment feed" do
22
+ @client.new_order_fulfillment_feed.should be_an_instance_of(Peddler::Feeds::OrderFulfillment::Batch)
23
+ end
24
+
25
+ it "should return a new fulfilled order" do
26
+ @client.new_fulfilled_order.should be_an_instance_of(Peddler::Feeds::OrderFulfillment::Item)
27
+ end
28
+
29
+ it "should return a new order cancellation feed" do
30
+ @client.new_order_cancellation_feed.should be_an_instance_of(Peddler::Feeds::OrderCancellation::Batch)
31
+ end
32
+
33
+ it "should return a new cancelled order" do
34
+ @client.new_cancelled_order.should be_an_instance_of(Peddler::Feeds::OrderCancellation::Item)
35
+ end
36
+
37
+ it "should return a new refund batch" do
38
+ @client.new_refund_batch.should be_an_instance_of(Peddler::Refunds::Batch)
39
+ end
40
+
41
+ it "should return a new report" do
42
+ @client.new_report(:foo).should be_an_instance_of(Peddler::LegacyReports::Report)
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,70 @@
1
+ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
+
3
+ module Peddler
4
+ module Feeds
5
+ module OrderFulfillment
6
+ describe Batch do
7
+ before(:each) do
8
+ @transport = Peddler::Transport.new
9
+ @transport.modernize_request
10
+ @feed = Peddler::Feeds::OrderFulfillment::Batch.new(@transport)
11
+ @fulfilled_order = Peddler::Feeds::OrderFulfillment::Item.new :order_id => "123-1234567-1234567",
12
+ :ship_date => Date.parse("2009-08-11").to_s
13
+ end
14
+
15
+ it "should add items to batch" do
16
+ @feed.batch.size.should == 0
17
+ @feed << @fulfilled_order
18
+ @feed.batch.size.should == 1
19
+ end
20
+
21
+ it "should create content for upload" do
22
+ @feed << @fulfilled_order
23
+ @feed.file_content.should == "order-id\torder-item-id\tquantity\tship-date\tcarrier-code\tcarrier-name\ttracking-number\tship-method\r\n123-1234567-1234567\t\t\t2009-08-11\t\t\t\t\r\n"
24
+ end
25
+
26
+ it "should upload" do
27
+ @feed.id.should == nil
28
+ @transport.stub!(:execute_request).and_return('<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://merchant-query.amazon.com/query/schema/MerchantQueryResponses.xsd"><Upload> <UploadId>130895733</UploadId><UploadType>_POST_FLAT_FILE_FULFILLMENT_DATA_</UploadType><UploadStatus>_SUBMITTED_</UploadStatus><SubmittedDate>2007-04-05T00:34:00+0000</SubmittedDate></Upload></Response>')
29
+ @feed.upload
30
+ @feed.id.should == "130895733"
31
+ @feed.status.should == "_SUBMITTED_"
32
+ end
33
+
34
+ it "should refresh status" do
35
+ @transport.stub!(:execute_request).and_return('<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://merchant-query.amazon.com/query/schema/MerchantQueryResponses.xsd"><Upload> <UploadId>130895733</UploadId><UploadType>_POST_FLAT_FILE_FULFILLMENT_DATA_</UploadType><UploadStatus>_SUBMITTED_</UploadStatus><SubmittedDate>2007-04-05T00:34:00+0000</SubmittedDate></Upload></Response>')
36
+ @feed.upload
37
+ @transport.stub!(:execute_request).and_return('<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://merchant-query.amazon.com/query/schema/MerchantQueryResponses.xsd"><UploadsStatusList><Upload><UploadId>130895733</UploadId><UploadType>_POST_FLAT_FILE_FULFILLMENT_DATA_</UploadType><UploadStatus>_IN_PROGRESS_</UploadStatus><SubmittedDate>2007-04-05T00:34:00+0000</SubmittedDate><StartedProcessingDate>2007-04-05T00:39:00+0000</StartedProcessingDate></Upload></UploadsStatusList></Response>')
38
+ @feed.status.should == "_SUBMITTED_"
39
+ @feed.status!.should == "_IN_PROGRESS_"
40
+ @transport.stub!(:execute_request).and_return('<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://merchant-query.amazon.com/query/schema/MerchantQueryResponses.xsd"><UploadsStatusList><Upload><UploadId>130895733</UploadId><UploadType>_POST_FLAT_FILE_FULFILLMENT_DATA_</UploadType><UploadStatus>_DONE_</UploadStatus><SubmittedDate>2007-04-05T00:34:00+0000</SubmittedDate><StartedProcessingDate>2007-04-05T00:39:00+0000</StartedProcessingDate><CompletedProcessingDate>2007-04-05T01:02:00+0000</CompletedProcessingDate><MessagesProcessed>2</MessagesProcessed><MessagesSuccessful>2</MessagesSuccessful><MessagesWithErrors>0</MessagesWithErrors><MessagesWithWarnings>0</MessagesWithWarnings><RelatedDownloadsList><Download><DownloadId>3404021</DownloadId><DownloadType>FeedSummaryReport</DownloadType><RelatedReferenceId>4307285844</RelatedReferenceId><AvailableDate>2009-04-24T23:47:24+00:00</AvailableDate><Acknowledged>FALSE</Acknowledged></Download></RelatedDownloadsList></Upload></UploadsStatusList></Response>')
41
+ @feed.status!.should == "_DONE_"
42
+ @feed.download.id.should == "3404021"
43
+ @feed.download.available_at.to_s.should == "Sat Apr 25 00:47:24 +0100 2009"
44
+ end
45
+ end
46
+ end
47
+
48
+ module OrderCancellation
49
+ describe Batch do
50
+ before(:each) do
51
+ @transport = Peddler::Transport.new
52
+ @transport.modernize_request
53
+ @feed = Peddler::Feeds::OrderCancellation::Batch.new(@transport)
54
+ @cancelled_order = Peddler::Feeds::OrderCancellation::Item.new :order_id => "123-1234567-1234567"
55
+ end
56
+
57
+ it "should add items to batch" do
58
+ @feed.batch.size.should == 0
59
+ @feed << @cancelled_order
60
+ @feed.batch.size.should == 1
61
+ end
62
+
63
+ it "should create content for upload" do
64
+ @feed << @cancelled_order
65
+ @feed.file_content.should == "TemplateType=OrderCancellation Version=1.0/1.0.3 This row for Amazon.com use only. Do not modify or delete.\r\norder-id\tcancellation-reason-code\tamazon-order-item-code\r\n123-1234567-1234567\t\t\r\n"
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,15 @@
1
+ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
+ module Peddler
3
+ module Handlers
4
+ describe XMLHandler do
5
+ it "should parse a legacy report" do
6
+ xml = Peddler::Handlers::XMLHandler.decode_response("<Reports> <Report>reportstarttime=08-13-2009:06-16-06 reportendtime=12-31-1969:16-00-00 reportid=2599221990 </Report></Reports>")
7
+ statuses = Peddler::Handlers::XMLHandler.parse_legacy(xml)
8
+ statuses[0].id.should == "2599221990"
9
+ end
10
+ end
11
+
12
+ describe TabDelimitedHandler do
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,74 @@
1
+ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
+
3
+ module Peddler
4
+
5
+ module Inventory
6
+
7
+ describe Queue do
8
+
9
+ it "should show queue count" do
10
+ transport = Peddler::Transport.new
11
+ transport.legacize_request
12
+ transport.stub!(:execute_request).and_return("<PendingUploadsCount>1</PendingUploadsCount>")
13
+ Peddler::Inventory::Queue.count(transport).should == 1
14
+ end
15
+
16
+ end
17
+
18
+ describe Batch do
19
+
20
+ before(:each) do
21
+ @transport = Peddler::Transport.new
22
+ @transport.legacize_request
23
+ @inventory = Peddler::Inventory::Batch.new(@transport)
24
+ @item = Peddler::Inventory::Item.new :product_id => "1234567890",
25
+ :price => 100.00,
26
+ :sku => "FOO-SKU",
27
+ :quantity => 10
28
+ end
29
+
30
+ it "should add items to batch" do
31
+ @inventory.batch.size.should == 0
32
+ @inventory << @item
33
+ @inventory.batch.size.should == 1
34
+ end
35
+
36
+ it "should generate an upload file" do
37
+ @inventory << @item
38
+ @inventory.file_content.should == "product-id\tproduct-id-type\titem-condition\tprice\tsku\tquantity\tadd-delete\twill-ship-internationally\texpedited-shipping\titem-note\titem-is-marketplace\tfulfillment-center-id\titem-name\titem-description\tcategory1\timage-url\tshipping-fee\tbrowse-path\tstorefront-feature\tboldface\tasin1\tasin2\tasin3\r\n1234567890\t\t\t100.0\tFOO-SKU\t10\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n"
39
+ end
40
+
41
+ it "should generate a modify-only upload file" do
42
+ @inventory << @item
43
+ @inventory.file_content(:short).should == "sku\tprice\tquantity\r\nFOO-SKU\t100.0\t10\r\n"
44
+ end
45
+
46
+ it "should generate default headers for uploading" do
47
+ params = @inventory.defaultize :file_format => "UIEE",
48
+ :enable_expedited_shipping => "N"
49
+ params[:method].should be_nil
50
+ params[:upload_for].should == "Marketplace"
51
+ params[:email].should == "Y"
52
+ params[:file_format].should == "UIEE"
53
+ params["enable-expedited-shipping"].should == "N"
54
+ params[:enable_expedited_shipping].should be_nil
55
+ end
56
+
57
+ it "should upload batch" do
58
+ @transport.stub!(:execute_request).and_return("<BatchID>2585199250</BatchID>")
59
+ @inventory.upload.should == true
60
+ @inventory.id.should == "2585199250"
61
+ end
62
+
63
+ it "should raise error if a subsequent upload is attempted" do
64
+ @transport.stub!(:execute_request).and_return("<BatchID>2585199250</BatchID>")
65
+ @inventory.upload.should == true
66
+ @inventory.id.should_not == nil
67
+ lambda { @inventory.upload }.should raise_error(PeddlerError)
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+
74
+ end
@@ -0,0 +1,86 @@
1
+ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
+
3
+ module Peddler
4
+ describe LegacyReports do
5
+ before(:each) do
6
+ @transport = Peddler::Transport.new
7
+ @transport.legacize_request
8
+ end
9
+
10
+ it "should generate an order report" do
11
+ @transport.stub!(:execute_request).and_return("<Status>SUCCESS</Status>")
12
+ res = Peddler::LegacyReports.generate(@transport, :order, :number_of_days => 30)
13
+ res.should be_an_instance_of(Peddler::LegacyReports::Report)
14
+ end
15
+
16
+ it "should show most recent order reports" do
17
+ @transport.stub!(:execute_request).and_return("<Reports> <Report>reportstarttime=07-23-2009:08-33-48 reportendtime=08-07-2009:08-33-48 reportid=1234567890 </Report></Reports>")
18
+ report_status = Peddler::LegacyReports.latest(@transport, :order, :count => 1)[0]
19
+ report_status.starts_at.should == "07-23-2009:08-33-48"
20
+ report_status.id.should == "1234567890"
21
+ end
22
+
23
+ it "should show most recent uploads" do
24
+ @transport.stub!(:execute_request).and_return("<Batches> <Batch>batchid=2586376232 status=Done dateandtime=08/07/2009 01:48:23 PDT activateditems=1020 numberofwarnings=0 itemsnotacivated=0 </Batch></Batches>")
25
+ upload = Peddler::LegacyReports.latest(@transport, :upload, :count => 1)[0]
26
+ upload.id.should == "2586376232"
27
+ upload.status.should == "Done"
28
+ upload.datetime.should == "08/07/2009 01:48:23 PDT"
29
+ upload.activated_items.should == "1020"
30
+ upload.number_of_warnings.should == "0"
31
+ upload.items_not_activated.should == "0"
32
+ end
33
+ end
34
+
35
+ module LegacyReports
36
+ describe Report do
37
+ before(:each) do
38
+ @transport = Peddler::Transport.new
39
+ @transport.legacize_request
40
+ @report = Peddler::LegacyReports::Report.new(@transport)
41
+ end
42
+
43
+ it "should download an inventory upload error log" do
44
+ @transport.stub!(:execute_request).and_return("Feed Processing Summary:\n\tNumber of records processed\t\t82\n\tNumber of records successful\t\t81\n\noriginal-record-number\tsku\terror-code\terror-type\terror-message\n27\t1111111111\t8026\tError\tSeller is not authorized to list products in this category. For more details, see http://sellercentral.amazon.com/gp/errorcode/8026\n")
45
+
46
+ @report.name = :upload
47
+ @report.id = "1234567890"
48
+ end
49
+
50
+ it "should download an inventory upload error log" do
51
+ @transport.stub!(:execute_request).and_return("Feed Processing Summary:\n\tNumber of records processed\t\t82\n\tNumber of records successful\t\t81\n\noriginal-record-number\tsku\terror-code\terror-type\terror-message\n27\t1111111111\t8026\tError\tSeller is not authorized to list products in this category. For more details, see http://sellercentral.amazon.com/gp/errorcode/8026\n")
52
+ @report.name = :upload
53
+ @report.id = "1234567890"
54
+ @report.body.should =~ /Feed Processing Summary/
55
+ end
56
+
57
+ it "should retrieve an order report by id" do
58
+ @transport.stub!(:execute_request).and_return("payments-status\torder-id\torder-item-id\tpayments-date\tpayments-transaction-id\titem-name\tlisting-id\tsku\tprice\tshipping-fee\tquantity-purchased\ttotal-price\tpurchase-date\tbatch-id\tbuyer-email\tbuyer-name\trecipient-name\tship-address-1\tship-address-2\tship-city\tship-state\tship-zip\tship-country\tspecial-comments\tupc\tship-method\n\t001-1234567-1234567\t12345678901234\t2009-07-23 08:59:03 PST\t\tFoo Bar\t000000000000\t1234567890\t10.00\t3.99\t1\t13.99\t2009-07-23 08:59:03 PST\t\tfoo@bar.com\tJOHN DOE\tJohn Doe\t1 MAIN ST\t\tNEW YORK\tNY\t10001-1000\tUS\t\t\tstandard\n")
59
+ @report.name = :order
60
+ @report.id = "1234567890"
61
+ res = Peddler::Handlers::TabDelimitedHandler.decode_response(@report.body)
62
+ res.size.should == 1
63
+ res[0].order_id.should == "001-1234567-1234567"
64
+ res[0].buyer_name.should == "JOHN DOE"
65
+ end
66
+
67
+ it "should retrieve an order report by report name" do
68
+ @transport.stub!(:execute_request).and_return("payments-status\torder-id\torder-item-id\tpayments-date\tpayments-transaction-id\titem-name\tlisting-id\tsku\tprice\tshipping-fee\tquantity-purchased\ttotal-price\tpurchase-date\tbatch-id\tbuyer-email\tbuyer-name\trecipient-name\tship-address-1\tship-address-2\tship-city\tship-state\tship-zip\tship-country\tspecial-comments\tupc\tship-method\n\t001-1234567-1234567\t12345678901234\t2009-07-23 08:59:03 PST\t\tFoo Bar\t000000000000\t1234567890\t10.00\t3.99\t1\t13.99\t2009-07-23 08:59:03 PST\t\tfoo@bar.com\tJOHN DOE\tJohn Doe\t1 MAIN ST\t\tNEW YORK\tNY\t10001-1000\tUS\t\t\tstandard\n")
69
+ @report.name = :order
70
+ res = Peddler::Handlers::TabDelimitedHandler.decode_response(@report.body)
71
+ res.size.should == 1
72
+ res[0].order_id.should == "001-1234567-1234567"
73
+ res[0].buyer_name.should == "JOHN DOE"
74
+ end
75
+
76
+ it "should retrieve an open listings liter report by id" do
77
+ @transport.stub!(:execute_request).and_return("seller-sku\tquantity\nSKU-FOO\t14\n")
78
+ @report.name = :open_listings_liter
79
+ @report.id = "1234567890"
80
+ res = Peddler::Handlers::TabDelimitedHandler.decode_response(@report.body)
81
+ res.size.should == 1
82
+ res[0].seller_sku.should == "SKU-FOO"
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,35 @@
1
+ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
+
3
+ module Peddler
4
+ module Refunds
5
+ describe Batch do
6
+ before(:each) do
7
+ @transport = Peddler::Transport.new
8
+ @transport.legacize_request
9
+ @refunds = Peddler::Refunds::Batch.new(@transport)
10
+ @refund = Peddler::Refunds::Item.new :order_id => "123-1234567-1234567",
11
+ :payments_transaction_id => "12341234567890",
12
+ :refund_amount => 10.00,
13
+ :reason => "CouldNotShip",
14
+ :message => "With our apologies"
15
+ end
16
+
17
+ it "should add items to batch" do
18
+ @refunds.batch.size.should == 0
19
+ @refunds << @refund
20
+ @refunds.batch.size.should == 1
21
+ end
22
+
23
+ it "should generate an upload file" do
24
+ @refunds << @refund
25
+ @refunds.file_content.should == "order-id\tpayments-transaction-id\trefund-amount\treason\tmessage\r\n123-1234567-1234567\t12341234567890\t10.0\tCouldNotShip\tWith our apologies\r\n"
26
+ end
27
+
28
+ it "should upload batch" do
29
+ @transport.stub!(:execute_request).and_return("<Success>SUCCESS</Success>")
30
+ @refunds << @refund
31
+ @refunds.upload.should == true
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,19 @@
1
+ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
+
3
+ module Peddler
4
+ module Reports
5
+ describe UnshippedOrdersReport do
6
+ before(:each) do
7
+ @transport = Peddler::Transport.new
8
+ @transport.modernize_request
9
+ @transport.stub!(:execute_request).and_return("<?xml version=\"1.0\"?>\n<Response xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"http://merchant-query.amazon.com/query/schema/MerchantQueryResponses.xsd\"><Report><ReportID>2597613290</ReportID><DownloadType>_GET_FLAT_FILE_ACTIONABLE_ORDER_DATA_</DownloadType><StartDate>2009-08-05T19:54:31+00:00</StartDate><EndDate>2009-08-12T19:54:31+00:00</EndDate><Scheduled>false</Scheduled><ReportStatus>_SUBMITTED_</ReportStatus><SubmittedDate>2009-08-12T19:54:31+00:00</SubmittedDate></Report></Response>")
10
+ @report = Peddler::Reports::UnshippedOrdersReport.new(@transport)
11
+ end
12
+
13
+ it "should add generate a request" do
14
+ @report.id.should == "2597613290"
15
+ @report.status.should == "_SUBMITTED_"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,58 @@
1
+ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
+
3
+ module Peddler
4
+
5
+ describe Transport do
6
+
7
+ before(:each) do
8
+ @transport = Peddler::Transport.new
9
+ @transport.username = "user"
10
+ @transport.password = "secret"
11
+ @transport.region = "us"
12
+ end
13
+
14
+ it "should switch regions" do
15
+ @transport.legacize_request
16
+ @transport.region = "uk"
17
+ @transport.url.host.should == "secure.amazon.co.uk"
18
+ end
19
+
20
+ it "should raise error when region is invalid" do
21
+ lambda { @transport.region = "foo" }.should raise_error(PeddlerError)
22
+ end
23
+
24
+ it "should add path to legacy URL" do
25
+ @transport.legacize_request
26
+ @transport.path << "foo"
27
+ @transport.url.to_s.should == "https://secure.amazon.com/exec/panama/seller-admin/foo/"
28
+ end
29
+
30
+ it "should add path to modern URL" do
31
+ @transport.modernize_request
32
+ @transport.path << "foo"
33
+ @transport.url.to_s.should == "https://secure.amazon.com/query/foo/?Service=MerchantQueryService"
34
+ end
35
+
36
+ it "should add query parameters to the modern URL" do
37
+ @transport.modernize_request
38
+ @transport.query_params["key1"] = "val1"
39
+ @transport.query_params["key2"] = "val2"
40
+ @transport.url.to_s.should == "https://secure.amazon.com/query/?key1=val1&key2=val2&Service=MerchantQueryService"
41
+ end
42
+
43
+ it "should url_encode query parameters" do
44
+ @transport.modernize_request
45
+ @transport.query_params["key"] = "!@#"
46
+ @transport.url.to_s.should == "https://secure.amazon.com/query/?key=%21%40%23&Service=MerchantQueryService"
47
+ end
48
+
49
+ it "should authenticate request" do
50
+ @transport.legacize_request
51
+ req = @transport.request
52
+ req["authorization"].should_not be(nil)
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+