peddler 2.1.1 → 2.3.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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +43 -41
  3. data/lib/mws.rb +2 -1
  4. data/lib/mws/easy_ship.rb +3 -0
  5. data/lib/mws/easy_ship/client.rb +93 -0
  6. data/lib/mws/fulfillment_outbound_shipment/client.rb +1 -1
  7. data/lib/mws/orders/client.rb +6 -6
  8. data/lib/mws/shipment_invoicing.rb +3 -0
  9. data/lib/mws/shipment_invoicing/client.rb +74 -0
  10. data/lib/peddler/client.rb +11 -10
  11. data/lib/peddler/content.rb +2 -2
  12. data/lib/peddler/errors/builder.rb +7 -2
  13. data/lib/peddler/errors/class_generator.rb +1 -1
  14. data/lib/peddler/errors/error.rb +6 -2
  15. data/lib/peddler/errors/parser.rb +1 -1
  16. data/lib/peddler/flat_file_parser.rb +5 -3
  17. data/lib/peddler/marketplace.rb +23 -19
  18. data/lib/peddler/mws.rb +2 -2
  19. data/lib/peddler/operation.rb +17 -11
  20. data/lib/peddler/parser.rb +1 -1
  21. data/lib/peddler/structured_list.rb +1 -1
  22. data/lib/peddler/vcr_matcher.rb +7 -7
  23. data/lib/peddler/version.rb +1 -1
  24. data/lib/peddler/xml_parser.rb +1 -1
  25. data/lib/peddler/xml_response_parser.rb +1 -1
  26. metadata +11 -146
  27. data/lib/mws/off_amazon_payments/client.rb +0 -362
  28. data/test/credentials.rb +0 -23
  29. data/test/helper.rb +0 -15
  30. data/test/integration/internals/test_errors.rb +0 -17
  31. data/test/integration/internals/test_multibyte_queries.rb +0 -17
  32. data/test/integration/internals/test_mws_headers.rb +0 -21
  33. data/test/integration/internals/test_string_encodings.rb +0 -38
  34. data/test/integration/test_feeds.rb +0 -37
  35. data/test/integration/test_fulfillment_inbound_shipment.rb +0 -35
  36. data/test/integration/test_fulfillment_inventory.rb +0 -20
  37. data/test/integration/test_fulfillment_outbound_shipment.rb +0 -13
  38. data/test/integration/test_merchant_fulfillment.rb +0 -69
  39. data/test/integration/test_off_amazon_payments.rb +0 -13
  40. data/test/integration/test_orders.rb +0 -30
  41. data/test/integration/test_products.rb +0 -97
  42. data/test/integration/test_recommendations.rb +0 -20
  43. data/test/integration/test_reports.rb +0 -51
  44. data/test/integration/test_sellers.rb +0 -13
  45. data/test/integration/test_subscriptions.rb +0 -27
  46. data/test/integration_helper.rb +0 -53
  47. data/test/mws.yml +0 -36
  48. data/test/mws.yml.example +0 -32
  49. data/test/null_client.rb +0 -25
  50. data/test/recorder.rb +0 -39
  51. data/test/unit/mws/test_feeds_client.rb +0 -103
  52. data/test/unit/mws/test_finances_client.rb +0 -74
  53. data/test/unit/mws/test_fulfillment_inbound_shipment_client.rb +0 -426
  54. data/test/unit/mws/test_fulfillment_inventory_client.rb +0 -48
  55. data/test/unit/mws/test_fulfillment_outbound_shipment_client.rb +0 -202
  56. data/test/unit/mws/test_merchant_fulfillment_client.rb +0 -109
  57. data/test/unit/mws/test_off_amazon_payments_client.rb +0 -286
  58. data/test/unit/mws/test_orders_client.rb +0 -111
  59. data/test/unit/mws/test_products_client.rb +0 -248
  60. data/test/unit/mws/test_recommendations_client.rb +0 -62
  61. data/test/unit/mws/test_reports_client.rb +0 -209
  62. data/test/unit/mws/test_sellers_client.rb +0 -47
  63. data/test/unit/mws/test_subscriptions_client.rb +0 -182
  64. data/test/unit/peddler/errors/test_builder.rb +0 -65
  65. data/test/unit/peddler/errors/test_class_generator.rb +0 -18
  66. data/test/unit/peddler/errors/test_error.rb +0 -33
  67. data/test/unit/peddler/errors/test_parser.rb +0 -44
  68. data/test/unit/peddler/test_client.rb +0 -203
  69. data/test/unit/peddler/test_flat_file_parser.rb +0 -111
  70. data/test/unit/peddler/test_headers.rb +0 -103
  71. data/test/unit/peddler/test_marketplace.rb +0 -47
  72. data/test/unit/peddler/test_operation.rb +0 -87
  73. data/test/unit/peddler/test_parser.rb +0 -36
  74. data/test/unit/peddler/test_structured_list.rb +0 -39
  75. data/test/unit/peddler/test_vcr_matcher.rb +0 -55
  76. data/test/unit/peddler/test_xml_parser.rb +0 -37
  77. data/test/unit/peddler/test_xml_response_parser.rb +0 -39
  78. data/test/unit/test_mws.rb +0 -11
  79. data/test/vcr_cassettes/CartInformation.yml +0 -433
  80. data/test/vcr_cassettes/CustomerInformation.yml +0 -433
  81. data/test/vcr_cassettes/Errors.yml +0 -444
  82. data/test/vcr_cassettes/Feeds.yml +0 -9957
  83. data/test/vcr_cassettes/FulfillmentInboundShipment.yml +0 -6166
  84. data/test/vcr_cassettes/FulfillmentInventory.yml +0 -850
  85. data/test/vcr_cassettes/FulfillmentOutboundShipment.yml +0 -433
  86. data/test/vcr_cassettes/MWSHeaders.yml +0 -2964
  87. data/test/vcr_cassettes/MerchantFulfillment.yml +0 -753
  88. data/test/vcr_cassettes/MultibyteQueries.yml +0 -437
  89. data/test/vcr_cassettes/OffAmazonPayments.yml +0 -433
  90. data/test/vcr_cassettes/Orders.yml +0 -4740
  91. data/test/vcr_cassettes/PeddlerVCRMatcher.yml +0 -41
  92. data/test/vcr_cassettes/Products.yml +0 -7139
  93. data/test/vcr_cassettes/Recommendations.yml +0 -3145
  94. data/test/vcr_cassettes/Reports.yml +0 -5549
  95. data/test/vcr_cassettes/Sellers.yml +0 -433
  96. data/test/vcr_cassettes/Subscriptions.yml +0 -1529
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/reports'
5
-
6
- class TestStringEncodings < IntegrationTest
7
- use 'Reports'
8
-
9
- def setup
10
- skip unless ENV['LIVE']
11
- end
12
-
13
- def test_flat_file_responses
14
- get_report('_GET_SELLER_FEEDBACK_DATA_') do |res|
15
- assert_equal res.content_charset, res.body.encoding
16
- end
17
- end
18
-
19
- private
20
-
21
- def get_report(report_type, start_date: Date.today - 30)
22
- clients.each do |client|
23
- res = client.request_report(report_type, start_date: start_date)
24
- report_request_id = res.dig('ReportRequestInfo', 'ReportRequestId')
25
- loop do
26
- sleep 15
27
- res = client.get_report_request_list(report_request_id_list:
28
- report_request_id)
29
- status = res.dig('ReportRequestInfo', 'ReportProcessingStatus')
30
- next unless status.include?('_DONE_')
31
-
32
- report_id = res.dig('ReportRequestInfo', 'GeneratedReportId')
33
- yield client.get_report(report_id)
34
- break
35
- end
36
- end
37
- end
38
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/feeds'
5
-
6
- class TestFeeds < IntegrationTest
7
- def test_getting_feed_submission_count
8
- clients.each do |client|
9
- res = client.get_feed_submission_count
10
- refute_empty res.parse
11
- end
12
- end
13
-
14
- def test_getting_feed_submission_list
15
- clients.each do |client|
16
- res = client.get_feed_submission_list
17
- refute_empty res.parse
18
- end
19
- end
20
-
21
- def test_submitting_feeds
22
- feed_content = "sku\tprice\tquantity\nwidget\t\t0\n"
23
- feed_type = '_POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA_'
24
-
25
- clients.each do |client|
26
- res = client.submit_feed(feed_content, feed_type)
27
- feed_submission_id = res.dig('FeedSubmissionInfo', 'FeedSubmissionId')
28
- assert feed_submission_id
29
-
30
- # Clean up
31
- client.cancel_feed_submissions(
32
- feed_submission_id: feed_submission_id,
33
- feed_type_list: feed_type
34
- )
35
- end
36
- end
37
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/fulfillment_inbound_shipment'
5
-
6
- class TestFulfillmentInboundShipment < IntegrationTest
7
- Address = Struct.new(:name, :address_line_1, :city, :state_or_province_code,
8
- :postal_code, :country_code)
9
- Item = Struct.new(:seller_sku, :quantity)
10
-
11
- def test_creating_inbound_shipment_plan
12
- address = Address.new('John', '1 Main St', 'New York', 'NY', '10001', 'US')
13
- item = Item.new('123', 1)
14
- clients.each do |client|
15
- res = client.create_inbound_shipment_plan(address, [item])
16
- refute_empty res.parse
17
- end
18
- end
19
-
20
- def test_getting_service_status
21
- clients.each do |client|
22
- res = client.get_service_status
23
- refute_empty res.parse
24
- end
25
- end
26
-
27
- def test_handling_large_requests
28
- address = Address.new('John', '1 Main St', 'New York', 'NY', '10001', 'US')
29
- items = Array.new(100) { |i| Item.new(i, 1) }
30
- clients.each do |client|
31
- res = client.create_inbound_shipment_plan(address, items)
32
- assert_equal 200, res.status
33
- end
34
- end
35
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/fulfillment_inventory'
5
-
6
- class TestFulfillmentInventory < IntegrationTest
7
- def test_listing_inventory_supply
8
- clients.each do |client|
9
- res = client.list_inventory_supply(query_start_date_time: Date.today - 30)
10
- refute_empty res.parse
11
- end
12
- end
13
-
14
- def test_getting_service_status
15
- clients.each do |client|
16
- res = client.get_service_status
17
- refute_empty res.parse
18
- end
19
- end
20
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/fulfillment_outbound_shipment'
5
-
6
- class TestFulfillmentOutboundShipment < IntegrationTest
7
- def test_getting_service_status
8
- clients.each do |client|
9
- res = client.get_service_status
10
- refute_empty res.parse
11
- end
12
- end
13
- end
@@ -1,69 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/merchant_fulfillment'
5
-
6
- class TestMerchantFulfillment < IntegrationTest
7
- def test_getting_eligible_shipments_in_the_us
8
- client = clients.us
9
- res = client.get_eligible_shipping_services(shipment_request_details)
10
- refute res.dig('ShippingServiceList', 'ShippingService').count.zero?
11
- end
12
-
13
- def test_shipping_in_the_us
14
- client = clients.us
15
- res = client.create_shipment(shipment_request_details, 'UPS_PTP_GND')
16
- label = res.dig('Shipment', 'Label')
17
- data_compressed = Base64.decode64(label['FileContents']['Contents'])
18
- # data = Zlib.gunzip(data_compressed)
19
- data = Zlib::GzipReader.new(StringIO.new(data_compressed)).read
20
- assert_equal label['FileContents']['Checksum'], Digest::MD5.base64digest(data)
21
- res = client.cancel_shipment(res.dig('Shipment', 'ShipmentId'))
22
- assert_equal 'RefundPending', res.dig('Shipment', 'Status')
23
- end
24
-
25
- def test_getting_service_status
26
- clients.each do |client|
27
- res = client.get_service_status
28
- refute_empty res.parse
29
- end
30
- end
31
-
32
- private
33
-
34
- def shipment_request_details
35
- {
36
- amazon_order_id: '123-1234567-1234567',
37
- item_list: [
38
- {
39
- order_item_id: '12345678901234',
40
- quantity: 1
41
- }
42
- ],
43
- ship_from_address: {
44
- name: 'John Doe',
45
- address_line_1: '10 Jay St',
46
- email: 'john@example.com',
47
- city: 'Brooklyn',
48
- state_or_province_code: 'NY',
49
- postal_code: '11201',
50
- country_code: 'US',
51
- phone: '7181231234'
52
- },
53
- package_dimensions: {
54
- length: 40,
55
- width: 30,
56
- height: 10,
57
- unit: 'centimeters'
58
- },
59
- weight: {
60
- value: 1000,
61
- unit: 'grams'
62
- },
63
- shipping_service_options: {
64
- carrier_will_pick_up: false,
65
- delivery_experience: 'DeliveryConfirmationWithoutSignature'
66
- }
67
- }
68
- end
69
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/off_amazon_payments'
5
-
6
- class TestOffAmazonPayments < IntegrationTest
7
- def test_getting_service_status
8
- clients.each do |client|
9
- res = client.get_service_status
10
- refute_empty res.parse
11
- end
12
- end
13
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/orders'
5
-
6
- class TestOrders < IntegrationTest
7
- def test_getting_orders
8
- clients.each do |client|
9
- order_ids = client.list_orders(client.marketplace.id,
10
- created_after: Date.new(2015),
11
- max_results_per_page: 5)
12
- .dig('Orders', 'Order')
13
- .map { |order| order['AmazonOrderId'] }
14
-
15
- next if order_ids.count < 2
16
-
17
- res = client.get_order(*order_ids)
18
- orders = res.dig('Orders', 'Order')
19
-
20
- assert_equal order_ids.count, orders.count
21
- end
22
- end
23
-
24
- def test_getting_service_status
25
- clients.each do |client|
26
- res = client.get_service_status
27
- refute_empty res.parse
28
- end
29
- end
30
- end
@@ -1,97 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/products'
5
-
6
- class TestProducts < IntegrationTest
7
- def test_listing_matching_products
8
- clients.each do |client|
9
- res = client.list_matching_products(client.marketplace.id, 'architecture')
10
- refute_empty res.parse
11
- end
12
- end
13
-
14
- def test_getting_matching_product
15
- clients.each do |client|
16
- res = client.get_matching_product(client.marketplace.id, '1780935374')
17
- refute_empty res.parse
18
- end
19
- end
20
-
21
- def test_getting_matching_product_for_id
22
- clients.each do |client|
23
- res = client.get_matching_product_for_id(client.marketplace.id, 'ISBN', '9781780935379')
24
- refute_empty res.parse
25
- end
26
- end
27
-
28
- def test_getting_competitive_pricing_for_asin
29
- clients.each do |client|
30
- res = client.get_competitive_pricing_for_asin(client.marketplace.id, '1780935374')
31
- refute_empty res.parse
32
- end
33
- end
34
-
35
- def test_getting_lowest_offer_listings_for_asin
36
- clients.each do |client|
37
- res = client.get_lowest_offer_listings_for_asin(client.marketplace.id, '1780935374')
38
- refute_empty res.parse
39
- end
40
- end
41
-
42
- def test_getting_lowest_priced_offers_for_asin
43
- clients.each do |client|
44
- res = client.get_lowest_priced_offers_for_asin(client.marketplace.id, '1780935374', 'New')
45
- refute_empty res.parse
46
- end
47
- end
48
-
49
- def test_getting_product_categories_for_asin
50
- clients.each do |client|
51
- res = client.get_product_categories_for_asin(client.marketplace.id, '1780935374')
52
- refute_empty res.parse
53
- end
54
- end
55
-
56
- def test_getting_my_fees_estimate
57
- clients.each do |client|
58
- res = client.get_my_fees_estimate(
59
- marketplace_id: client.marketplace.id,
60
- id_type: 'ASIN',
61
- id_value: '1780935374',
62
- price_to_estimate_fees: {
63
- listing_price: {
64
- currency_code: currency_code_for(client.marketplace.id),
65
- amount: 100
66
- }
67
- },
68
- identifier: '123',
69
- is_amazon_fulfilled: false
70
- )
71
- assert res.dig('FeesEstimateResultList', 'FeesEstimateResult', 'FeesEstimate')
72
- end
73
- end
74
-
75
- def test_getting_service_status
76
- clients.each do |client|
77
- res = client.get_service_status
78
- refute_empty res.parse
79
- end
80
- end
81
-
82
- private
83
-
84
- CURRENCY_CODES = {
85
- 'A2EUQ1WTGCTBG2' => 'CAD',
86
- 'AAHKV2X7AFYLW' => 'CNY',
87
- 'A1F83G8C2ARO7P' => 'GBP',
88
- 'A21TJRUUN4KGV' => 'INR',
89
- 'A1VC38T7YXB528' => 'JPY',
90
- 'A1AM78C64UM0Y8' => 'MXN',
91
- 'ATVPDKIKX0DER' => 'USD'
92
- }.freeze
93
-
94
- def currency_code_for(marketplace_id)
95
- CURRENCY_CODES.fetch(marketplace_id, 'EUR')
96
- end
97
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/recommendations'
5
-
6
- class TestRecommendations < IntegrationTest
7
- def test_listing_recommendations
8
- clients.each do |client|
9
- res = client.list_recommendations(client.marketplace.id)
10
- refute_empty res.parse
11
- end
12
- end
13
-
14
- def test_getting_service_status
15
- clients.each do |client|
16
- res = client.get_service_status
17
- refute_empty res.parse
18
- end
19
- end
20
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/reports'
5
-
6
- class TestReports < IntegrationTest
7
- def test_getting_report_request_count
8
- clients.each do |client|
9
- res = client.get_report_request_count
10
- refute_empty res.parse
11
- end
12
- end
13
-
14
- def test_getting_report_request_list
15
- clients.each do |client|
16
- res = client.get_report_request_list
17
- refute_empty res.parse
18
- end
19
- end
20
-
21
- def test_getting_report_schedule_count
22
- clients.each do |client|
23
- res = client.get_report_schedule_count
24
- refute_empty res.parse
25
- end
26
- end
27
-
28
- def test_listing_report_schedules
29
- clients.each do |client|
30
- res = client.get_report_schedule_list
31
- refute_empty res.parse
32
- end
33
- end
34
-
35
- def test_getting_report_count
36
- clients.each do |client|
37
- res = client.get_report_count
38
- refute_empty res.parse
39
- end
40
- end
41
-
42
- def test_getting_report
43
- clients.each do |client|
44
- res = client.get_report_list(max_count: 1)
45
- id = res.parse['ReportInfo']['ReportId']
46
- res = client.get_report(id)
47
- assert res.valid?
48
- assert res.records_count || res.parse
49
- end
50
- end
51
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'integration_helper'
4
- require 'mws/sellers'
5
-
6
- class TestSellers < IntegrationTest
7
- def test_getting_service_status
8
- clients.each do |client|
9
- res = client.get_service_status
10
- refute_empty res.parse
11
- end
12
- end
13
- end