peddler 0.6.5 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +62 -81
  4. data/lib/mws/cart_information.rb +13 -0
  5. data/lib/mws/customer_information.rb +16 -0
  6. data/lib/mws/feeds.rb +110 -1
  7. data/lib/mws/fulfillment_inbound_shipment.rb +13 -1
  8. data/lib/mws/fulfillment_inventory.rb +15 -1
  9. data/lib/mws/fulfillment_outbound_shipment.rb +17 -1
  10. data/lib/mws/off_amazon_payments.rb +15 -1
  11. data/lib/mws/orders.rb +100 -1
  12. data/lib/mws/products.rb +238 -1
  13. data/lib/mws/recommendations.rb +13 -1
  14. data/lib/mws/reports.rb +221 -1
  15. data/lib/mws/sellers.rb +40 -1
  16. data/lib/mws/subscriptions.rb +175 -1
  17. data/lib/peddler/client.rb +77 -37
  18. data/lib/peddler/csv_parser.rb +42 -0
  19. data/lib/peddler/operation.rb +44 -0
  20. data/lib/peddler/parser.rb +21 -0
  21. data/lib/peddler/structured_list.rb +22 -0
  22. data/lib/peddler/version.rb +1 -1
  23. data/lib/peddler/xml_parser.rb +25 -0
  24. data/lib/peddler.rb +2 -0
  25. data/test/helper.rb +1 -1
  26. data/test/integration/test_feeds.rb +18 -0
  27. data/test/integration/test_orders.rb +22 -0
  28. data/test/integration/test_products.rb +53 -0
  29. data/test/integration/test_reports.rb +47 -0
  30. data/test/integration/test_sellers.rb +18 -0
  31. data/test/integration/test_subscriptions.rb +26 -0
  32. data/test/integration_helper.rb +41 -8
  33. data/test/mws.yml +32 -0
  34. data/test/mws.yml.example +4 -0
  35. data/test/unit/peddler/test_client.rb +97 -0
  36. data/test/unit/peddler/test_csv_parser.rb +24 -0
  37. data/test/unit/peddler/test_operation.rb +34 -0
  38. data/test/{peddler/request → unit/peddler}/test_structured_list.rb +5 -5
  39. data/test/unit/peddler/test_xml_parser.rb +19 -0
  40. data/test/{test_peddler.rb → unit/test_peddler.rb} +2 -2
  41. data/test/vcr_cassettes/Feeds.yml +695 -0
  42. data/test/vcr_cassettes/Orders.yml +29855 -0
  43. data/test/vcr_cassettes/Products.yml +8597 -0
  44. data/test/vcr_cassettes/Reports.yml +1881 -0
  45. data/test/vcr_cassettes/Sellers.yml +697 -0
  46. data/test/vcr_cassettes/Subscriptions.yml +1369 -0
  47. metadata +91 -297
  48. data/lib/mws/feeds/client.rb +0 -116
  49. data/lib/mws/feeds/parsers/feed.rb +0 -14
  50. data/lib/mws/feeds/parsers/feed_submission_count.rb +0 -10
  51. data/lib/mws/feeds/parsers/feed_submission_info.rb +0 -25
  52. data/lib/mws/feeds/parsers/feed_submission_list.rb +0 -23
  53. data/lib/mws/feeds/parsers/feed_submission_result.rb +0 -10
  54. data/lib/mws/feeds/parsers/feed_submissions.rb +0 -18
  55. data/lib/mws/feeds/requests/feed.rb +0 -38
  56. data/lib/mws/feeds/requests/feed_submission_count.rb +0 -20
  57. data/lib/mws/feeds/requests/feed_submission_list.rb +0 -30
  58. data/lib/mws/feeds/requests/feed_submission_result.rb +0 -18
  59. data/lib/mws/feeds/requests/feed_submissions.rb +0 -20
  60. data/lib/mws/fulfillment_inbound_shipment/client.rb +0 -7
  61. data/lib/mws/fulfillment_inventory/client.rb +0 -7
  62. data/lib/mws/fulfillment_outbound_shipment/client.rb +0 -7
  63. data/lib/mws/off_amazon_payments/client.rb +0 -7
  64. data/lib/mws/orders/client.rb +0 -98
  65. data/lib/mws/orders/parsers/invoice_data.rb +0 -25
  66. data/lib/mws/orders/parsers/order.rb +0 -113
  67. data/lib/mws/orders/parsers/order_item.rb +0 -110
  68. data/lib/mws/orders/parsers/order_items.rb +0 -23
  69. data/lib/mws/orders/parsers/orders.rb +0 -23
  70. data/lib/mws/orders/parsers/payment_execution_detail.rb +0 -20
  71. data/lib/mws/orders/parsers/payment_execution_detail_item.rb +0 -17
  72. data/lib/mws/orders/parsers/service_status.rb +0 -36
  73. data/lib/mws/orders/parsers/service_status_message.rb +0 -17
  74. data/lib/mws/orders/parsers/shipping_address.rb +0 -37
  75. data/lib/mws/orders/requests/order_items.rb +0 -28
  76. data/lib/mws/orders/requests/orders.rb +0 -41
  77. data/lib/mws/orders/requests/service_status.rb +0 -15
  78. data/lib/mws/products/client.rb +0 -7
  79. data/lib/mws/recommendations/client.rb +0 -7
  80. data/lib/mws/reports/client.rb +0 -249
  81. data/lib/mws/reports/parsers/report.rb +0 -10
  82. data/lib/mws/reports/parsers/report_acknowledgements.rb +0 -20
  83. data/lib/mws/reports/parsers/report_count.rb +0 -10
  84. data/lib/mws/reports/parsers/report_info.rb +0 -29
  85. data/lib/mws/reports/parsers/report_list.rb +0 -23
  86. data/lib/mws/reports/parsers/report_request.rb +0 -14
  87. data/lib/mws/reports/parsers/report_request_count.rb +0 -10
  88. data/lib/mws/reports/parsers/report_request_info.rb +0 -49
  89. data/lib/mws/reports/parsers/report_request_list.rb +0 -23
  90. data/lib/mws/reports/parsers/report_requests.rb +0 -18
  91. data/lib/mws/reports/parsers/report_schedule.rb +0 -21
  92. data/lib/mws/reports/parsers/report_schedule_count.rb +0 -10
  93. data/lib/mws/reports/parsers/report_schedule_list.rb +0 -23
  94. data/lib/mws/reports/parsers/report_scheduler.rb +0 -19
  95. data/lib/mws/reports/requests/report.rb +0 -18
  96. data/lib/mws/reports/requests/report_acknowledgements.rb +0 -27
  97. data/lib/mws/reports/requests/report_count.rb +0 -20
  98. data/lib/mws/reports/requests/report_list.rb +0 -30
  99. data/lib/mws/reports/requests/report_request.rb +0 -21
  100. data/lib/mws/reports/requests/report_request_count.rb +0 -20
  101. data/lib/mws/reports/requests/report_request_list.rb +0 -30
  102. data/lib/mws/reports/requests/report_requests.rb +0 -20
  103. data/lib/mws/reports/requests/report_schedule_count.rb +0 -19
  104. data/lib/mws/reports/requests/report_schedule_list.rb +0 -23
  105. data/lib/mws/reports/requests/report_scheduler.rb +0 -29
  106. data/lib/mws/sellers/client.rb +0 -53
  107. data/lib/mws/sellers/parsers/marketplace.rb +0 -33
  108. data/lib/mws/sellers/parsers/marketplace_participations.rb +0 -32
  109. data/lib/mws/sellers/parsers/participation.rb +0 -21
  110. data/lib/mws/sellers/parsers/service_status.rb +0 -36
  111. data/lib/mws/sellers/parsers/service_status_message.rb +0 -17
  112. data/lib/mws/sellers/requests/marketplace_participations.rb +0 -27
  113. data/lib/mws/sellers/requests/service_status.rb +0 -15
  114. data/lib/mws/subscriptions/client.rb +0 -7
  115. data/lib/peddler/parsers/base.rb +0 -15
  116. data/lib/peddler/parsers/collection.rb +0 -23
  117. data/lib/peddler/parsers/counter.rb +0 -13
  118. data/lib/peddler/parsers/model.rb +0 -42
  119. data/lib/peddler/parsers/text.rb +0 -8
  120. data/lib/peddler/parsers/tokenable.rb +0 -13
  121. data/lib/peddler/parsers/xml.rb +0 -30
  122. data/lib/peddler/request/parameters.rb +0 -57
  123. data/lib/peddler/request/structured_list.rb +0 -48
  124. data/lib/peddler/request.rb +0 -52
  125. data/lib/peddler/response/base.rb +0 -0
  126. data/lib/peddler/response/payload/base.rb +0 -0
  127. data/lib/peddler/response/payload/csv.rb +0 -0
  128. data/lib/peddler/response/payload/xml.rb +0 -0
  129. data/lib/peddler/response.rb +0 -27
  130. data/test/fixtures/feeds/feed_submission.xml +0 -14
  131. data/test/fixtures/feeds/feed_submission_count.xml +0 -9
  132. data/test/fixtures/feeds/feed_submission_list.xml +0 -17
  133. data/test/fixtures/feeds/feed_submissions.xml +0 -15
  134. data/test/fixtures/mws.yml +0 -12
  135. data/test/fixtures/mws.yml.example +0 -4
  136. data/test/fixtures/orders/order_items.xml +0 -83
  137. data/test/fixtures/orders/orders.xml +0 -109
  138. data/test/fixtures/orders/service_status.xml +0 -19
  139. data/test/fixtures/reports/report.xml +0 -8
  140. data/test/fixtures/reports/report_acknowledgements.xml +0 -18
  141. data/test/fixtures/reports/report_count.xml +0 -9
  142. data/test/fixtures/reports/report_list.xml +0 -17
  143. data/test/fixtures/reports/report_request_count.xml +0 -9
  144. data/test/fixtures/reports/report_request_list.xml +0 -24
  145. data/test/fixtures/reports/report_requests.xml +0 -19
  146. data/test/fixtures/reports/report_schedule_count.xml +0 -10
  147. data/test/fixtures/reports/report_schedule_list.xml +0 -16
  148. data/test/fixtures/reports/report_scheduler.xml +0 -15
  149. data/test/fixtures/sellers/market_participations.xml +0 -27
  150. data/test/fixtures/sellers/service_status.xml +0 -9
  151. data/test/integration/feeds/test_feed_submission_count.rb +0 -13
  152. data/test/integration/feeds/test_feed_submission_list.rb +0 -17
  153. data/test/integration/feeds/test_feed_submission_result.rb +0 -15
  154. data/test/integration/orders/test_order_items.rb +0 -19
  155. data/test/integration/orders/test_orders.rb +0 -23
  156. data/test/integration/orders/test_service_status.rb +0 -12
  157. data/test/integration/reports/test_report.rb +0 -15
  158. data/test/integration/reports/test_report_count.rb +0 -13
  159. data/test/integration/reports/test_report_list.rb +0 -17
  160. data/test/integration/reports/test_report_request_count.rb +0 -13
  161. data/test/integration/reports/test_report_request_list.rb +0 -17
  162. data/test/integration/reports/test_report_schedule_count.rb +0 -13
  163. data/test/integration/reports/test_report_schedule_list.rb +0 -13
  164. data/test/integration/reports/test_report_scheduler.rb +0 -16
  165. data/test/integration/sellers/test_marketplace_participations.rb +0 -13
  166. data/test/integration/sellers/test_service_status.rb +0 -12
  167. data/test/mws/feeds/parsers/test_feed.rb +0 -13
  168. data/test/mws/feeds/parsers/test_feed_submission_count.rb +0 -13
  169. data/test/mws/feeds/parsers/test_feed_submission_info.rb +0 -25
  170. data/test/mws/feeds/parsers/test_feed_submission_list.rb +0 -18
  171. data/test/mws/feeds/parsers/test_feed_submission_result.rb +0 -13
  172. data/test/mws/feeds/parsers/test_feed_submissions.rb +0 -17
  173. data/test/mws/feeds/requests/test_feed.rb +0 -63
  174. data/test/mws/feeds/requests/test_feed_submission_count.rb +0 -23
  175. data/test/mws/feeds/requests/test_feed_submission_list.rb +0 -37
  176. data/test/mws/feeds/requests/test_feed_submissions.rb +0 -29
  177. data/test/mws/orders/parsers/test_order.rb +0 -86
  178. data/test/mws/orders/parsers/test_order_item.rb +0 -69
  179. data/test/mws/orders/parsers/test_order_items.rb +0 -18
  180. data/test/mws/orders/parsers/test_orders.rb +0 -18
  181. data/test/mws/orders/parsers/test_payment_execution_detail.rb +0 -14
  182. data/test/mws/orders/parsers/test_payment_execution_detail_item.rb +0 -17
  183. data/test/mws/orders/parsers/test_service_status.rb +0 -39
  184. data/test/mws/orders/parsers/test_service_status_message.rb +0 -17
  185. data/test/mws/orders/parsers/test_shipping_address.rb +0 -36
  186. data/test/mws/orders/requests/test_order_items.rb +0 -36
  187. data/test/mws/orders/requests/test_orders.rb +0 -46
  188. data/test/mws/orders/requests/test_service_status.rb +0 -25
  189. data/test/mws/reports/parsers/test_report_acknowledgments.rb +0 -14
  190. data/test/mws/reports/parsers/test_report_count.rb +0 -13
  191. data/test/mws/reports/parsers/test_report_info.rb +0 -29
  192. data/test/mws/reports/parsers/test_report_list.rb +0 -18
  193. data/test/mws/reports/parsers/test_report_request.rb +0 -13
  194. data/test/mws/reports/parsers/test_report_request_count.rb +0 -13
  195. data/test/mws/reports/parsers/test_report_request_info.rb +0 -49
  196. data/test/mws/reports/parsers/test_report_request_list.rb +0 -18
  197. data/test/mws/reports/parsers/test_report_requests.rb +0 -17
  198. data/test/mws/reports/parsers/test_report_schedule_count.rb +0 -13
  199. data/test/mws/reports/parsers/test_report_schedule_list.rb +0 -18
  200. data/test/mws/reports/parsers/test_report_scheduler.rb +0 -17
  201. data/test/mws/reports/requests/test_acknowledgements.rb +0 -36
  202. data/test/mws/reports/requests/test_report_count.rb +0 -23
  203. data/test/mws/reports/requests/test_report_list.rb +0 -39
  204. data/test/mws/reports/requests/test_report_request.rb +0 -31
  205. data/test/mws/reports/requests/test_report_request_count.rb +0 -23
  206. data/test/mws/reports/requests/test_report_request_list.rb +0 -44
  207. data/test/mws/reports/requests/test_report_requests.rb +0 -29
  208. data/test/mws/reports/requests/test_report_schedule_count.rb +0 -22
  209. data/test/mws/reports/requests/test_report_schedule_list.rb +0 -36
  210. data/test/mws/reports/requests/test_report_scheduler.rb +0 -33
  211. data/test/mws/sellers/parsers/test_market_participations.rb +0 -19
  212. data/test/mws/sellers/parsers/test_service_status.rb +0 -35
  213. data/test/mws/sellers/requests/test_marketplace_participation_list.rb +0 -39
  214. data/test/mws/sellers/requests/test_service_status.rb +0 -25
  215. data/test/parser_helper.rb +0 -11
  216. data/test/peddler/parsers/test_collection.rb +0 -8
  217. data/test/peddler/parsers/test_model.rb +0 -70
  218. data/test/peddler/request/test_parameters.rb +0 -35
  219. data/test/peddler/test_client.rb +0 -42
  220. data/test/request_helper.rb +0 -20
@@ -0,0 +1,97 @@
1
+ require 'helper'
2
+ require 'excon'
3
+ require 'peddler/client'
4
+
5
+ class ClientTest < MiniTest::Test
6
+ module Parser
7
+ def self.parse(res); res; end
8
+ end
9
+
10
+ def setup
11
+ @body = 'foo'
12
+ Excon.defaults[:mock] = true
13
+ Excon.stub({}, body: @body, status: 200)
14
+
15
+ @klass = Class.new(Peddler::Client)
16
+ @client = @klass.new
17
+ @client.marketplace_id = 'A1F83G8C2ARO7P'
18
+ @client.operation('Foo')
19
+ end
20
+
21
+ def teardown
22
+ Excon.stubs.clear
23
+ Excon.defaults.delete(:mock)
24
+ end
25
+
26
+ def test_configures_path
27
+ @klass.path('Foo')
28
+ assert @client.aws_endpoint.match(/Foo$/)
29
+ end
30
+
31
+ def test_has_user_agent
32
+ assert @client.connection.data[:headers].has_key?('User-Agent')
33
+ end
34
+
35
+ def test_inherits_parents_params
36
+ assert_equal Peddler::Client.params, @klass.params
37
+ end
38
+
39
+ def test_configures
40
+ @client.configure do |config|
41
+ config.aws_access_key_id = '123'
42
+ end
43
+
44
+ assert_equal '123', @client.aws_access_key_id
45
+ end
46
+
47
+ def test_guards_against_bad_marketplace_id
48
+ assert_raises(Peddler::Client::BadMarketplaceId) do
49
+ client = Peddler::Client.new
50
+ client.marketplace_id = '123'
51
+ client.get
52
+ end
53
+ end
54
+
55
+ def test_sets_content_type_header_for_latin_flat_file_body
56
+ @client.body = 'foo'
57
+ content_type = @client.headers.fetch('Content-Type')
58
+
59
+ assert_equal 'text/tab-separated-values; charset=ISO-8859-1', content_type
60
+ end
61
+
62
+ def test_sets_content_type_header_for_chinese_flat_file_body
63
+ @client.marketplace_id = 'AAHKV2X7AFYLW'
64
+ @client.body = 'foo'
65
+ content_type = @client.headers.fetch('Content-Type')
66
+
67
+ assert_equal 'text/tab-separated-values; charset=UTF-16', content_type
68
+ end
69
+
70
+ def test_sets_content_type_header_for_japanese_flat_file_body
71
+ @client.marketplace_id = 'A1VC38T7YXB528'
72
+ @client.body = 'foo'
73
+ content_type = @client.headers.fetch('Content-Type')
74
+
75
+ assert_equal 'text/tab-separated-values; charset=Shift_JIS', content_type
76
+ end
77
+
78
+ def test_sets_content_type_header_for_xml_body
79
+ @client.body = '<?xml version="1.0"?><Foo></Foo>'
80
+ content_type = @client.headers.fetch('Content-Type')
81
+
82
+ assert_equal 'text/xml', content_type
83
+ end
84
+
85
+ def test_runs_a_request
86
+ res = @client.run(Parser)
87
+ assert_equal @body, res.body
88
+ end
89
+
90
+ def test_streams_response
91
+ chunks = ''
92
+ streamer = -> (chunk, _, _) { chunks << chunk }
93
+ @client.run(Parser, &streamer)
94
+
95
+ assert_equal @body, chunks
96
+ end
97
+ end
@@ -0,0 +1,24 @@
1
+ require 'helper'
2
+ require 'peddler/parser'
3
+
4
+ class CSVParserTest < MiniTest::Test
5
+ def setup
6
+ body = "Feed Processing Summary:\n\tNumber of records processed\t\t11006\n\tNumber of records successful\t\t11006\n\noriginal-record-number\tsku\terror-code\terror-type\terror-message\n1822\t85da472e-ba6c-11e3-95af-002590a74356\t5000\tWarning\tThe update for Sku '85da472e-ba6c-11e3-95af-002590a74356' was skipped because it is identical to the update in feed '9518995390'.\n"
7
+ headers = { 'Content-Type' => 'application/octet-stream', 'Content-MD5' => 'SmZIMTs2mCO8u8QzR5LE7Q==' }
8
+ res = OpenStruct.new(body: body, headers: headers)
9
+
10
+ @parser = Peddler::Parser.parse(res)
11
+ end
12
+
13
+ def test_parses_data
14
+ assert_kind_of CSV::Table, @parser.parse
15
+ end
16
+
17
+ def test_summarises
18
+ refute_empty @parser.records_count
19
+ end
20
+
21
+ def test_validates
22
+ assert @parser.valid?
23
+ end
24
+ end
@@ -0,0 +1,34 @@
1
+ require 'helper'
2
+ require 'peddler/operation'
3
+
4
+ class OperationTest < MiniTest::Test
5
+ def setup
6
+ @operation = Peddler::Operation.new('Foo')
7
+ end
8
+
9
+ def test_converts_key_to_structured_list
10
+ @operation.store('FooStatus', [1, 2])
11
+ @operation.structure!('FooStatus', 'Foo')
12
+ refute @operation.has_key?('FooStatus')
13
+ assert_equal 1, @operation['FooStatus.Foo.1']
14
+ assert_equal 2, @operation['FooStatus.Foo.2']
15
+ end
16
+
17
+ def test_store_camelizes_key
18
+ @operation.store(:foo_bar, 'baz')
19
+ assert @operation.has_key?('FooBar')
20
+ refute @operation.has_key?(:foo_bar)
21
+ end
22
+
23
+ def test_store_timestamps_time_values
24
+ ts = Minitest::Mock.new
25
+ ts.expect(:iso8601, 'foo')
26
+ @operation.store('time', ts)
27
+
28
+ assert_equal 'foo', @operation.fetch('time')
29
+ end
30
+
31
+ def test_update_returns_delegator
32
+ assert_kind_of Peddler::Operation, @operation.add(foo: 'bar')
33
+ end
34
+ end
@@ -1,18 +1,18 @@
1
1
  require 'helper'
2
- require 'peddler/request/structured_list'
2
+ require 'peddler/structured_list'
3
3
 
4
- class PeddlerRequestStructuredListTest < MiniTest::Test
4
+ class StructuredListTest < MiniTest::Test
5
5
  def setup
6
- @structured_list = Peddler::Request::StructuredList.new(:order_status)
6
+ @list = Peddler::StructuredList.new('OrderStatus', 'Status')
7
7
  end
8
8
 
9
9
  def test_builds_a_structured_list_for_a_single_value
10
10
  exp = { 'OrderStatus.Status.1' => 'foo' }
11
- assert_equal(exp, @structured_list.build('foo'))
11
+ assert_equal exp, @list.build('foo')
12
12
  end
13
13
 
14
14
  def test_builds_a_structured_list_for_an_array_of_values
15
15
  exp = { 'OrderStatus.Status.1' => 'foo', 'OrderStatus.Status.2' => 'bar' }
16
- assert_equal(exp, @structured_list.build(%w(foo bar)))
16
+ assert_equal exp, @list.build(%w(foo bar))
17
17
  end
18
18
  end
@@ -0,0 +1,19 @@
1
+ require 'helper'
2
+ require 'peddler/parser'
3
+
4
+ class XMLParserTest < MiniTest::Test
5
+ def setup
6
+ body = '<Response><Result><NextToken>123</NextToken><Foo>Bar</Foo></Result></Response>'
7
+ res = OpenStruct.new(body: body, headers: { 'Content-Type' => 'text/xml'})
8
+
9
+ @parser = Peddler::Parser.parse(res)
10
+ end
11
+
12
+ def test_parses_data
13
+ assert_equal 'Bar', @parser.parse['Foo']
14
+ end
15
+
16
+ def test_next_token
17
+ assert_equal '123', @parser.next_token
18
+ end
19
+ end
@@ -2,7 +2,7 @@ require 'helper'
2
2
  require 'peddler'
3
3
 
4
4
  class PeddlerTest < MiniTest::Test
5
- def test_loads_apis
6
- assert_equal 11, MWS.constants.size
5
+ def test_loads_all_apis
6
+ assert_equal 13, MWS.constants.size
7
7
  end
8
8
  end