peddler 0.5.3 → 0.6.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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +237 -8
  3. data/lib/mws/feeds.rb +1 -0
  4. data/lib/mws/feeds/client.rb +97 -0
  5. data/lib/mws/feeds/parsers/feed.rb +14 -0
  6. data/lib/mws/feeds/parsers/feed_submission.rb +25 -0
  7. data/lib/mws/feeds/parsers/feed_submission_count.rb +13 -0
  8. data/lib/mws/feeds/parsers/feed_submission_list.rb +20 -0
  9. data/lib/mws/feeds/parsers/feed_submission_result.rb +10 -0
  10. data/lib/mws/feeds/parsers/feed_submissions.rb +18 -0
  11. data/lib/mws/feeds/requests/feed.rb +38 -0
  12. data/lib/mws/feeds/requests/feed_submission_count.rb +20 -0
  13. data/lib/mws/feeds/requests/feed_submission_list.rb +28 -0
  14. data/lib/mws/feeds/requests/feed_submission_result.rb +18 -0
  15. data/lib/mws/feeds/requests/feed_submissions.rb +20 -0
  16. data/lib/mws/fulfillment_inbound_shipment/client.rb +7 -0
  17. data/lib/mws/fulfillment_inventory/client.rb +7 -0
  18. data/lib/mws/fulfillment_outbound_shipment/client.rb +7 -0
  19. data/lib/mws/off_amazon_payments/client.rb +7 -0
  20. data/lib/mws/orders.rb +1 -0
  21. data/lib/mws/orders/client.rb +88 -0
  22. data/lib/mws/orders/parsers/invoice_data.rb +25 -0
  23. data/lib/mws/orders/parsers/order.rb +113 -0
  24. data/lib/mws/orders/parsers/order_item.rb +110 -0
  25. data/lib/mws/orders/parsers/order_items.rb +20 -0
  26. data/lib/mws/orders/parsers/orders.rb +20 -0
  27. data/lib/mws/orders/parsers/payment_execution_detail.rb +20 -0
  28. data/lib/mws/orders/parsers/payment_execution_detail_item.rb +17 -0
  29. data/lib/mws/orders/parsers/service_status.rb +36 -0
  30. data/lib/mws/orders/parsers/service_status_message.rb +17 -0
  31. data/lib/mws/orders/parsers/shipping_address.rb +37 -0
  32. data/lib/mws/orders/requests/order_items.rb +26 -0
  33. data/lib/mws/orders/requests/orders.rb +39 -0
  34. data/lib/mws/orders/requests/service_status.rb +15 -0
  35. data/lib/mws/products/client.rb +7 -0
  36. data/lib/mws/recommendations/client.rb +7 -0
  37. data/lib/mws/reports/client.rb +6 -0
  38. data/lib/mws/sellers/client.rb +7 -0
  39. data/lib/mws/subscriptions/client.rb +7 -0
  40. data/lib/peddler.rb +11 -1
  41. data/lib/peddler/client.rb +62 -0
  42. data/lib/peddler/parsers/base.rb +15 -0
  43. data/lib/peddler/parsers/collection.rb +23 -0
  44. data/lib/peddler/parsers/model.rb +43 -0
  45. data/lib/peddler/parsers/text.rb +13 -0
  46. data/lib/peddler/parsers/xml.rb +25 -0
  47. data/lib/peddler/request.rb +50 -0
  48. data/lib/peddler/request/parameters.rb +56 -0
  49. data/lib/peddler/request/structured_list.rb +43 -0
  50. data/lib/peddler/response_wrapper.rb +32 -0
  51. data/lib/peddler/version.rb +1 -1
  52. data/test/fixtures/feeds/feed_submission.xml +14 -0
  53. data/test/fixtures/feeds/feed_submission_count.xml +9 -0
  54. data/test/fixtures/feeds/feed_submission_list.xml +17 -0
  55. data/test/fixtures/feeds/feed_submissions.xml +15 -0
  56. data/test/fixtures/mws.yml +8 -0
  57. data/test/fixtures/mws.yml.example +4 -0
  58. data/test/fixtures/orders/order_items.xml +83 -0
  59. data/test/fixtures/orders/orders.xml +109 -0
  60. data/test/fixtures/orders/service_status.xml +19 -0
  61. data/test/helper.rb +5 -0
  62. data/test/integration/feeds/test_feed_submission_count.rb +13 -0
  63. data/test/integration/feeds/test_feed_submission_list.rb +15 -0
  64. data/test/integration/feeds/test_feed_submission_result.rb +15 -0
  65. data/test/integration/orders/test_order_items.rb +19 -0
  66. data/test/integration/orders/test_orders.rb +20 -0
  67. data/test/integration/orders/test_service_status.rb +12 -0
  68. data/test/integration_helper.rb +16 -0
  69. data/test/mws/feeds/parsers/test_feed.rb +13 -0
  70. data/test/mws/feeds/parsers/test_feed_submission.rb +25 -0
  71. data/test/mws/feeds/parsers/test_feed_submission_count.rb +13 -0
  72. data/test/mws/feeds/parsers/test_feed_submission_list.rb +14 -0
  73. data/test/mws/feeds/parsers/test_feed_submission_result.rb +13 -0
  74. data/test/mws/feeds/parsers/test_feed_submissions.rb +17 -0
  75. data/test/mws/feeds/requests/test_feed.rb +63 -0
  76. data/test/mws/feeds/requests/test_feed_submission_count.rb +23 -0
  77. data/test/mws/feeds/requests/test_feed_submission_list.rb +40 -0
  78. data/test/mws/feeds/requests/test_feed_submissions.rb +29 -0
  79. data/test/mws/orders/parsers/test_order.rb +86 -0
  80. data/test/mws/orders/parsers/test_order_item.rb +69 -0
  81. data/test/mws/orders/parsers/test_order_items.rb +14 -0
  82. data/test/mws/orders/parsers/test_orders.rb +14 -0
  83. data/test/mws/orders/parsers/test_payment_execution_detail.rb +14 -0
  84. data/test/mws/orders/parsers/test_payment_execution_detail_item.rb +17 -0
  85. data/test/mws/orders/parsers/test_service_status.rb +39 -0
  86. data/test/mws/orders/parsers/test_service_status_message.rb +17 -0
  87. data/test/mws/orders/parsers/test_shipping_address.rb +36 -0
  88. data/test/mws/orders/requests/test_order_items.rb +39 -0
  89. data/test/mws/orders/requests/test_orders.rb +49 -0
  90. data/test/mws/orders/requests/test_service_status.rb +25 -0
  91. data/test/parser_helper.rb +11 -0
  92. data/test/peddler/parsers/test_collection.rb +8 -0
  93. data/test/peddler/parsers/test_model.rb +34 -0
  94. data/test/peddler/request/test_parameters.rb +35 -0
  95. data/test/peddler/request/test_structured_list.rb +18 -0
  96. data/test/peddler/test_client.rb +42 -0
  97. data/test/request_helper.rb +20 -0
  98. metadata +213 -10
  99. data/lib/peddler/apis.rb +0 -45
  100. data/lib/peddler/service.rb +0 -83
  101. data/test/service_test.rb +0 -42
  102. data/test/test_helper.rb +0 -3
@@ -0,0 +1,69 @@
1
+ require 'parser_helper'
2
+ require 'mws/orders/parsers/order_item'
3
+
4
+ class OrderItemParserTest < ParserTest
5
+ def setup
6
+ node = fixture('orders/order_items').xpath('//xmlns:OrderItem').first
7
+ @order_item = MWS::Orders::Parsers::OrderItem.new(node)
8
+ end
9
+
10
+ def test_asin
11
+ assert_kind_of String, @order_item.asin
12
+ end
13
+
14
+ def test_order_item_id
15
+ assert_kind_of String, @order_item.order_item_id
16
+ end
17
+
18
+ def test_seller_sku
19
+ assert_kind_of String, @order_item.seller_sku
20
+ end
21
+
22
+ def test_title
23
+ assert_kind_of String, @order_item.title
24
+ end
25
+
26
+ def test_quantity_ordered
27
+ assert_kind_of Integer, @order_item.quantity_ordered
28
+ end
29
+
30
+ def test_quantity_shipped
31
+ assert_kind_of Integer, @order_item.quantity_shipped
32
+ end
33
+
34
+ def test_item_price
35
+ assert_kind_of Money, @order_item.item_price
36
+ end
37
+
38
+ def test_shipping_price
39
+ assert_kind_of Money, @order_item.shipping_price
40
+ end
41
+
42
+ def test_scheduled_delivery_ends_at
43
+ assert_kind_of Time, @order_item.scheduled_delivery_ends_at
44
+ end
45
+
46
+ def test_scheduled_delivery_starts_at
47
+ assert_kind_of Time, @order_item.scheduled_delivery_starts_at
48
+ end
49
+
50
+ def test_cod_fee
51
+ assert_kind_of Money, @order_item.cod_fee
52
+ end
53
+
54
+ def test_cod_fee_discount
55
+ assert_kind_of Money, @order_item.cod_fee_discount
56
+ end
57
+
58
+ def test_gift_message_text
59
+ assert_kind_of String, @order_item.gift_message_text
60
+ end
61
+
62
+ def test_gift_wrap_price
63
+ assert_kind_of Money, @order_item.gift_wrap_price
64
+ end
65
+
66
+ def test_gift_wrap_level
67
+ assert_kind_of String, @order_item.gift_wrap_level
68
+ end
69
+ end
@@ -0,0 +1,14 @@
1
+ require 'parser_helper'
2
+ require 'mws/orders/parsers/order_items'
3
+
4
+ class OrderItemsParserTest < ParserTest
5
+ def setup
6
+ node = fixture('orders/order_items').xpath('//xmlns:ListOrderItemsResult')
7
+ @order_items = MWS::Orders::Parsers::OrderItems.new(node)
8
+ end
9
+
10
+ def test_has_order_items
11
+ refute_empty @order_items.to_a
12
+ @order_items.each { |order_item| assert_kind_of MWS::Orders::Parsers::OrderItem, order_item }
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require 'parser_helper'
2
+ require 'mws/orders/parsers/orders'
3
+
4
+ class OrdersParserTest < ParserTest
5
+ def setup
6
+ node = fixture('orders/orders').xpath('//xmlns:ListOrdersResult')
7
+ @orders = MWS::Orders::Parsers::Orders.new(node)
8
+ end
9
+
10
+ def test_has_orders
11
+ refute_empty @orders.to_a
12
+ @orders.each { |order| assert_kind_of MWS::Orders::Parsers::Order, order }
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require 'parser_helper'
2
+ require 'mws/orders/parsers/payment_execution_detail'
3
+
4
+ class PaymentExecutionDetailParserTest < ParserTest
5
+ def setup
6
+ node = fixture('orders/orders').xpath('//xmlns:PaymentExecutionDetail').first
7
+ @ped = MWS::Orders::Parsers::PaymentExecutionDetail.new(node)
8
+ end
9
+
10
+ def test_has_payment_execution_detail_items
11
+ refute_empty @ped.to_a
12
+ @ped.each { |pedi| assert_kind_of MWS::Orders::Parsers::PaymentExecutionDetailItem, pedi }
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ require 'parser_helper'
2
+ require 'mws/orders/parsers/payment_execution_detail_item'
3
+
4
+ class PaymentExecutionDetailItemParserTest < ParserTest
5
+ def setup
6
+ node = fixture('orders/orders').xpath('//xmlns:PaymentExecutionDetailItem').first
7
+ @pedi = MWS::Orders::Parsers::PaymentExecutionDetailItem.new(node)
8
+ end
9
+
10
+ def test_payment
11
+ assert_kind_of Money, @pedi.payment
12
+ end
13
+
14
+ def test_payment_method
15
+ assert_kind_of String, @pedi.payment_method
16
+ end
17
+ end
@@ -0,0 +1,39 @@
1
+ require 'parser_helper'
2
+ require 'mws/orders/parsers/service_status'
3
+
4
+ class ServiceStatusParserTest < ParserTest
5
+ def setup
6
+ node = fixture('orders/service_status').xpath('//xmlns:GetServiceStatusResult').first
7
+ @service_status = MWS::Orders::Parsers::ServiceStatus.new(node)
8
+ end
9
+
10
+ def test_status
11
+ assert_kind_of String, @service_status.status
12
+ end
13
+
14
+ def test_timestamp
15
+ assert_kind_of Time, @service_status.timestamp
16
+ end
17
+
18
+ def test_message_id
19
+ assert_kind_of String, @service_status.message_id
20
+ end
21
+
22
+ def test_messages
23
+ assert_kind_of Array, @service_status.messages
24
+ end
25
+
26
+ def test_ok?
27
+ @service_status.stub(:status, 'GREEN') do
28
+ assert @service_status.ok?
29
+ end
30
+
31
+ @service_status.stub(:status, 'RED') do
32
+ refute @service_status.ok?
33
+ end
34
+ end
35
+
36
+ def test_inspect
37
+ assert_equal @service_status.status, @service_status.to_s
38
+ end
39
+ end
@@ -0,0 +1,17 @@
1
+ require 'parser_helper'
2
+ require 'mws/orders/parsers/service_status_message'
3
+
4
+ class ServiceStatusMessageParserTest < ParserTest
5
+ def setup
6
+ node = fixture('orders/service_status').xpath('//xmlns:Message').first
7
+ @message = MWS::Orders::Parsers::ServiceStatusMessage.new(node)
8
+ end
9
+
10
+ def test_locale
11
+ assert_kind_of String, @message.locale
12
+ end
13
+
14
+ def test_text
15
+ assert_kind_of String, @message.text
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ require 'parser_helper'
2
+ require 'mws/orders/parsers/shipping_address'
3
+
4
+ class ShippingAddressParserTest < ParserTest
5
+ def setup
6
+ node = fixture('orders/orders').xpath('//xmlns:ShippingAddress').first
7
+ @address = MWS::Orders::Parsers::ShippingAddress.new(node)
8
+ end
9
+
10
+ def test_name
11
+ assert_kind_of String, @address.name
12
+ end
13
+
14
+ def test_address_lines
15
+ assert_kind_of Array, @address.address_lines
16
+ @address.address_lines.each do |line|
17
+ assert_kind_of String, line
18
+ end
19
+ end
20
+
21
+ def test_city
22
+ assert_kind_of String, @address.city
23
+ end
24
+
25
+ def test_state_or_region
26
+ assert_kind_of String, @address.state_or_region
27
+ end
28
+
29
+ def test_postal_code
30
+ assert_kind_of String, @address.postal_code
31
+ end
32
+
33
+ def test_country_code
34
+ assert_kind_of String, @address.country_code
35
+ end
36
+ end
@@ -0,0 +1,39 @@
1
+ require 'request_helper'
2
+ require 'mws/orders/requests/order_items'
3
+
4
+ class MWSOrdersOrderItemsRequestTest < RequestTest
5
+ def mock_response_body
6
+ <<-EOF
7
+ <Response xmlns="ns">
8
+ <Result>
9
+ <NextToken>123</NextToken>
10
+ <OrderItems>
11
+ <OrderItem>
12
+ <Id>123</Id>
13
+ </OrderItem>
14
+ </OrderItems>
15
+ </Result>
16
+ </Response>
17
+ EOF
18
+ end
19
+
20
+ def setup
21
+ @order_items = MWS::Orders::Requests::OrderItems.new(mock_client)
22
+ end
23
+
24
+ def test_lists_order_items
25
+ res = @order_items.list('123-1234567-1234567')
26
+ assert_kind_of MWS::Orders::Parsers::OrderItems, res
27
+ end
28
+
29
+ def test_returns_next_token
30
+ @order_items.last_response = mock_response
31
+ assert_equal '123', @order_items.next_token
32
+ end
33
+
34
+ def test_lists_order_items_by_next_token
35
+ @order_items.last_response = mock_response
36
+ res = @order_items.list_by_next_token
37
+ assert_kind_of MWS::Orders::Parsers::OrderItems, res
38
+ end
39
+ end
@@ -0,0 +1,49 @@
1
+ require 'request_helper'
2
+ require 'mws/orders/requests/orders'
3
+
4
+ class MWSOrdersOrdersRequestTest < RequestTest
5
+ def mock_response_body
6
+ <<-EOF
7
+ <Response xmlns="ns">
8
+ <Result>
9
+ <NextToken>123</NextToken>
10
+ <Orders>
11
+ <Order>
12
+ <Id>123</Id>
13
+ </Order>
14
+ </Orders>
15
+ </Result>
16
+ </Response>
17
+ EOF
18
+ end
19
+
20
+ def setup
21
+ @orders = MWS::Orders::Requests::Orders.new(mock_client)
22
+ end
23
+
24
+ def test_lists_orders
25
+ res = @orders.list(created_after: 0)
26
+ assert_kind_of MWS::Orders::Parsers::Orders, res
27
+ end
28
+
29
+ def test_returns_next_token
30
+ @orders.last_response = mock_response
31
+ assert_equal '123', @orders.next_token
32
+ end
33
+
34
+ def test_lists_orders_by_next_token
35
+ @orders.last_response = mock_response
36
+ res = @orders.list_by_next_token
37
+ assert_kind_of MWS::Orders::Parsers::Orders, res
38
+ end
39
+
40
+ def test_gets_order
41
+ res = @orders.get('123')
42
+ assert_kind_of MWS::Orders::Parsers::Orders, res
43
+ end
44
+
45
+ def test_gets_multiple_orders
46
+ res = @orders.get('123', '321')
47
+ assert_kind_of MWS::Orders::Parsers::Orders, res
48
+ end
49
+ end
@@ -0,0 +1,25 @@
1
+ require 'request_helper'
2
+ require 'mws/orders/requests/service_status'
3
+
4
+ class MWSOrdersServiceStatusRequestTest < RequestTest
5
+ def mock_response_body
6
+ <<-EOF
7
+ <Response xmlns="ns">
8
+ <Result>
9
+ <GetServiceStatusResult>
10
+ <Status>GREEN</Status>
11
+ </GetServiceStatusResult>
12
+ </Result>
13
+ </Response>
14
+ EOF
15
+ end
16
+
17
+ def setup
18
+ @status = MWS::Orders::Requests::ServiceStatus.new(mock_client)
19
+ end
20
+
21
+ def test_gets_status
22
+ res = @status.get
23
+ assert_kind_of MWS::Orders::Parsers::ServiceStatus, res
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ require 'helper'
2
+ require 'nokogiri'
3
+
4
+ class ParserTest < MiniTest::Test
5
+ def fixture(type)
6
+ file = File.expand_path("../fixtures/#{type}.xml", __FILE__)
7
+ body = File.read(file)
8
+
9
+ Nokogiri(body)
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ require 'helper'
2
+ require 'peddler/parsers/collection'
3
+
4
+ class PeddlerCollectionParserTest < MiniTest::Test
5
+ def test_is_enumerable
6
+ assert_respond_to Peddler::Parsers::Collection.new(nil), :map
7
+ end
8
+ end
@@ -0,0 +1,34 @@
1
+ require 'helper'
2
+ require 'peddler/parsers/model'
3
+ require 'nokogiri'
4
+
5
+ class PeddlerModelParserTest < MiniTest::Test
6
+ def build(xml)
7
+ document = Nokogiri(xml)
8
+ Peddler::Parsers::Model.new(document)
9
+ end
10
+
11
+ def test_parses_money
12
+ xml = <<-EOF
13
+ <Price xmlns="example">
14
+ <CurrencyCode>USD</CurrencyCode>
15
+ <Amount>10.00</Amount>
16
+ </Price>
17
+ EOF
18
+ model = build(xml)
19
+ money = model.money_at_xpath('Price')
20
+ assert_equal '$10.00', money.format
21
+ end
22
+
23
+ def test_parses_japanese_yen
24
+ xml = <<-EOF
25
+ <Price xmlns="example">
26
+ <CurrencyCode>JPY</CurrencyCode>
27
+ <Amount>1000.00</Amount>
28
+ </Price>
29
+ EOF
30
+ model = build(xml)
31
+ money = model.money_at_xpath('Price')
32
+ assert_equal '¥1,000', money.format
33
+ end
34
+ end
@@ -0,0 +1,35 @@
1
+ require 'helper'
2
+ require 'peddler/request/parameters'
3
+
4
+ class PeddlerRequestParametersTest < MiniTest::Test
5
+ def setup
6
+ @parameters = Peddler::Request::Parameters.new(:do_it)
7
+ end
8
+
9
+ def test_has_an_action_key
10
+ assert_equal 'DoIt', @parameters.fetch('Action')
11
+ end
12
+
13
+ def test_formats_timestamps
14
+ ts = Minitest::Mock.new
15
+ ts.expect(:iso8601, 'formatted')
16
+ @parameters.store('a timestamp', ts)
17
+ assert_equal 'formatted', @parameters.timestamp!.fetch('a timestamp')
18
+ end
19
+
20
+ def test_formats_structured_lists
21
+ @parameters.store(:order_status, 'foo')
22
+ assert_equal 'foo', @parameters.format_structured_lists!.fetch('OrderStatus.Status.1')
23
+ end
24
+
25
+ def test_camelizes_keys
26
+ @parameters.store(:underscored_key, 'baz')
27
+ refute @parameters.camelize_keys!.has_key?(:underscored_key)
28
+ assert @parameters.has_key?('UnderscoredKey')
29
+ end
30
+
31
+ def test_updates_delegated_hash
32
+ assert_kind_of Peddler::Request::Parameters, @parameters.update(key: 'value')
33
+ assert_equal 'value', @parameters.fetch(:key)
34
+ end
35
+ end