peddler 2.1.1 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
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