peddler 1.6.3 → 1.6.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -16
  3. data/lib/mws.rb +2 -0
  4. data/lib/mws/feeds.rb +2 -0
  5. data/lib/mws/feeds/client.rb +2 -0
  6. data/lib/mws/finances.rb +2 -0
  7. data/lib/mws/finances/client.rb +6 -2
  8. data/lib/mws/fulfillment_inbound_shipment.rb +2 -0
  9. data/lib/mws/fulfillment_inbound_shipment/client.rb +23 -10
  10. data/lib/mws/fulfillment_inventory.rb +2 -0
  11. data/lib/mws/fulfillment_inventory/client.rb +2 -0
  12. data/lib/mws/fulfillment_outbound_shipment.rb +2 -0
  13. data/lib/mws/fulfillment_outbound_shipment/client.rb +21 -5
  14. data/lib/mws/merchant_fulfillment.rb +2 -0
  15. data/lib/mws/merchant_fulfillment/client.rb +4 -1
  16. data/lib/mws/off_amazon_payments.rb +2 -0
  17. data/lib/mws/off_amazon_payments/client.rb +51 -23
  18. data/lib/mws/orders.rb +2 -0
  19. data/lib/mws/orders/client.rb +6 -3
  20. data/lib/mws/products.rb +2 -0
  21. data/lib/mws/products/client.rb +30 -14
  22. data/lib/mws/recommendations.rb +2 -0
  23. data/lib/mws/recommendations/client.rb +6 -2
  24. data/lib/mws/reports.rb +2 -0
  25. data/lib/mws/reports/client.rb +2 -0
  26. data/lib/mws/sellers.rb +2 -0
  27. data/lib/mws/sellers/client.rb +2 -0
  28. data/lib/mws/subscriptions.rb +2 -0
  29. data/lib/mws/subscriptions/client.rb +21 -9
  30. data/lib/peddler.rb +2 -0
  31. data/lib/peddler/client.rb +2 -0
  32. data/lib/peddler/errors/builder.rb +2 -0
  33. data/lib/peddler/errors/error.rb +4 -0
  34. data/lib/peddler/errors/handler.rb +2 -0
  35. data/lib/peddler/errors/parser.rb +2 -0
  36. data/lib/peddler/flat_file_parser.rb +4 -1
  37. data/lib/peddler/headers.rb +2 -0
  38. data/lib/peddler/marketplace.rb +2 -0
  39. data/lib/peddler/operation.rb +2 -0
  40. data/lib/peddler/parser.rb +2 -0
  41. data/lib/peddler/structured_list.rb +2 -0
  42. data/lib/peddler/vcr_matcher.rb +2 -0
  43. data/lib/peddler/version.rb +1 -1
  44. data/lib/peddler/xml_parser.rb +2 -0
  45. data/lib/peddler/xml_response_parser.rb +2 -0
  46. data/test/credentials.rb +23 -0
  47. data/test/helper.rb +2 -0
  48. data/test/integration/test_errors.rb +6 -5
  49. data/test/integration/test_feeds.rb +2 -0
  50. data/test/integration/test_fulfillment_inbound_shipment.rb +2 -0
  51. data/test/integration/test_fulfillment_inventory.rb +2 -0
  52. data/test/integration/test_fulfillment_outbound_shipment.rb +2 -0
  53. data/test/integration/test_merchant_fulfillment.rb +2 -0
  54. data/test/integration/test_multibyte_queries.rb +3 -4
  55. data/test/integration/test_mws_headers.rb +3 -4
  56. data/test/integration/test_off_amazon_payments.rb +2 -0
  57. data/test/integration/test_orders.rb +8 -10
  58. data/test/integration/test_products.rb +2 -0
  59. data/test/integration/test_recommendations.rb +2 -0
  60. data/test/integration/test_reports.rb +2 -0
  61. data/test/integration/test_sellers.rb +2 -0
  62. data/test/integration/test_subscriptions.rb +2 -0
  63. data/test/integration_helper.rb +25 -12
  64. data/test/null_client.rb +2 -0
  65. data/test/recorder.rb +2 -0
  66. data/test/unit/mws/test_feeds_client.rb +2 -0
  67. data/test/unit/mws/test_finances_client.rb +2 -0
  68. data/test/unit/mws/test_fulfillment_inbound_shipment_client.rb +2 -0
  69. data/test/unit/mws/test_fulfillment_inventory_client.rb +2 -0
  70. data/test/unit/mws/test_fulfillment_outbound_shipment_client.rb +7 -2
  71. data/test/unit/mws/test_merchant_fulfillment_client.rb +2 -0
  72. data/test/unit/mws/test_off_amazon_payments_client.rb +2 -0
  73. data/test/unit/mws/test_orders_client.rb +2 -0
  74. data/test/unit/mws/test_products_client.rb +2 -0
  75. data/test/unit/mws/test_recommendations_client.rb +2 -0
  76. data/test/unit/mws/test_reports_client.rb +2 -0
  77. data/test/unit/mws/test_sellers_client.rb +2 -0
  78. data/test/unit/mws/test_subscriptions_client.rb +2 -0
  79. data/test/unit/peddler/errors/test_builder.rb +2 -0
  80. data/test/unit/peddler/errors/test_error.rb +2 -0
  81. data/test/unit/peddler/errors/test_handler.rb +2 -0
  82. data/test/unit/peddler/errors/test_parser.rb +2 -0
  83. data/test/unit/peddler/test_client.rb +6 -2
  84. data/test/unit/peddler/test_flat_file_parser.rb +27 -24
  85. data/test/unit/peddler/test_headers.rb +2 -0
  86. data/test/unit/peddler/test_marketplace.rb +2 -0
  87. data/test/unit/peddler/test_operation.rb +2 -0
  88. data/test/unit/peddler/test_parser.rb +2 -0
  89. data/test/unit/peddler/test_structured_list.rb +2 -0
  90. data/test/unit/peddler/test_vcr_matcher.rb +2 -0
  91. data/test/unit/peddler/test_xml_parser.rb +3 -1
  92. data/test/unit/peddler/test_xml_response_parser.rb +2 -0
  93. data/test/unit/test_mws.rb +2 -0
  94. metadata +58 -58
  95. data/test/mws.yml +0 -36
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  if RUBY_ENGINE == 'ruby'
2
4
  require 'simplecov'
3
5
 
@@ -1,12 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/orders'
3
5
  require 'peddler/errors/handler'
4
6
 
5
7
  class TestErrors < IntegrationTest
8
+ use 'Orders'
9
+
6
10
  def setup
7
11
  @previous_error_handler = MWS::Orders::Client.error_handler
8
12
  MWS::Orders::Client.error_handler = Peddler::Errors::Handler
9
- @api = 'Orders'
10
13
  super
11
14
  end
12
15
 
@@ -17,20 +20,18 @@ class TestErrors < IntegrationTest
17
20
 
18
21
  def test_invalid_key
19
22
  clients.each do |client|
20
- e = assert_raises Peddler::Errors::Error do
23
+ assert_raises(Peddler::Errors::InvalidAccessKeyId) do
21
24
  client.aws_access_key_id = 'foo'
22
25
  client.get_order('bar')
23
26
  end
24
- assert_instance_of Peddler::Errors::InvalidAccessKeyId, e
25
27
  end
26
28
  end
27
29
 
28
30
  def test_request_throttled
29
31
  clients.each do |client|
30
- e = assert_raises Peddler::Errors::Error do
32
+ assert_raises(Peddler::Errors::RequestThrottled) do
31
33
  client.get_order('foo')
32
34
  end
33
- assert_instance_of Peddler::Errors::RequestThrottled, e
34
35
  end
35
36
  end
36
37
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/feeds'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/fulfillment_inbound_shipment'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/fulfillment_inventory'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/fulfillment_outbound_shipment'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/merchant_fulfillment'
3
5
 
@@ -1,11 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/products'
3
5
 
4
6
  class TestMultibyteQueries < IntegrationTest
5
- def setup
6
- @api = 'Products'
7
- super
8
- end
7
+ use 'Products'
9
8
 
10
9
  def test_posts_multibyte_queries_properly
11
10
  ret = clients.map do |client|
@@ -1,11 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/products'
3
5
 
4
6
  class TestMWSHeaders < IntegrationTest
5
- def setup
6
- @api = 'Products'
7
- super
8
- end
7
+ use 'Products'
9
8
 
10
9
  def test_parses_headers
11
10
  clients.each do |client|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/off_amazon_payments'
3
5
 
@@ -1,22 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/orders'
3
5
 
4
6
  class TestOrders < IntegrationTest
5
7
  def test_gets_orders
6
8
  clients.each do |client|
7
- order_ids = client
8
- .list_orders(
9
- created_after: Date.new(2015),
10
- max_results_per_page: 5
11
- )
12
- .dig('Orders', 'Order')
13
- .map { |order| order['AmazonOrderId'] }
9
+ order_ids = client.list_orders(created_after: Date.new(2015),
10
+ max_results_per_page: 5)
11
+ .dig('Orders', 'Order')
12
+ .map { |order| order['AmazonOrderId'] }
14
13
 
15
14
  next if order_ids.count < 2
16
15
 
17
- orders = client
18
- .get_order(*order_ids)
19
- .dig('Orders', 'Order')
16
+ orders = client.get_order(*order_ids)
17
+ .dig('Orders', 'Order')
20
18
 
21
19
  assert_equal order_ids.count, orders.count
22
20
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/products'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/recommendations'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/reports'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/sellers'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'integration_helper'
2
4
  require 'mws/subscriptions'
3
5
 
@@ -1,22 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'credentials'
1
4
  require 'helper'
2
5
  require 'recorder'
3
6
 
4
- %w[mws.yml mws.yml.example].each do |path|
5
- file = File.expand_path("../#{path}", __FILE__)
6
- if File.exist?(file)
7
- $mws = YAML.load_file(file)
8
- break
9
- end
10
- end
11
-
12
7
  class IntegrationTest < MiniTest::Test
13
8
  include Recorder
14
9
 
15
- private
10
+ class << self
11
+ def use(endpoint)
12
+ @current_endpoint = endpoint
13
+ end
14
+
15
+ def clients
16
+ @clients ||= build_clients
17
+ end
18
+
19
+ private
20
+
21
+ def build_clients
22
+ klass = MWS.const_get("#{current_endpoint}::Client")
23
+ ::Credentials.map { |credentials| klass.new(credentials) }.shuffle
24
+ end
25
+
26
+ def current_endpoint
27
+ @current_endpoint || name.sub('Test', '')
28
+ end
29
+ end
16
30
 
17
31
  def clients
18
- api = @api || test_name
19
- $mws.map { |record| MWS.const_get("#{api}::Client").new(record) }.shuffle
32
+ self.class.clients
20
33
  end
21
34
  end
22
35
 
@@ -31,7 +44,7 @@ VCR.configure do |c|
31
44
  end
32
45
  end
33
46
 
34
- $mws.each do |record|
47
+ Credentials.each do |record|
35
48
  c.filter_sensitive_data('FILTERED') { record['merchant_id'] }
36
49
  c.filter_sensitive_data('FILTERED') { record['aws_access_key_id'] }
37
50
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'peddler/client'
2
4
  require 'securerandom'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'peddler/vcr_matcher'
2
4
  require 'yaml'
3
5
  require 'vcr'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/feeds/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/finances/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/fulfillment_inbound_shipment/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/fulfillment_inventory/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/fulfillment_outbound_shipment/client'
3
5
 
@@ -87,12 +89,15 @@ class TestMWSFulfillmentOutboundShipmentClient < MiniTest::Test
87
89
  end
88
90
 
89
91
  def test_lists_all_fulfillment_orders
92
+ started_at = Time.now
93
+
90
94
  operation = {
91
- 'Action' => 'ListAllFulfillmentOrders'
95
+ 'Action' => 'ListAllFulfillmentOrders',
96
+ 'QueryStartDateTime' => started_at.iso8601
92
97
  }
93
98
 
94
99
  @client.stub(:run, nil) do
95
- @client.list_all_fulfillment_orders
100
+ @client.list_all_fulfillment_orders(started_at)
96
101
  end
97
102
 
98
103
  assert_equal operation, @client.operation
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/merchant_fulfillment/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/off_amazon_payments/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/orders/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/products/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/recommendations/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/reports/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/sellers/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'mws/subscriptions/client'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'peddler/errors/builder'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'peddler/errors/error'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'peddler/errors/handler'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'peddler/errors/parser'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'null_client'
3
5
 
@@ -132,13 +134,15 @@ class TestPeddlerClient < MiniTest::Test
132
134
  def test_does_not_clear_body_when_run_fails
133
135
  Excon.stub({}, status: 503)
134
136
  @client.body = 'foo'
135
- assert_raises { @client.run }
137
+ assert_raises(Excon::Error::ServiceUnavailable) do
138
+ @client.run
139
+ end
136
140
  refute_nil @client.body
137
141
  end
138
142
 
139
143
  def test_streams_response
140
144
  chunks = ''
141
- streamer = ->(chunk, _, _) { chunks << chunk }
145
+ streamer = ->(chunk, _, _) { chunks += chunk }
142
146
  @client.run(&streamer)
143
147
 
144
148
  assert_equal @response_body, chunks
@@ -1,17 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'helper'
2
4
  require 'peddler/flat_file_parser'
3
5
 
4
6
  class TestPeddlerFlatFileParser < MiniTest::Test
5
7
  def test_parses_data
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
- body.encode!('ASCII-8BIT')
8
+ body = build_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",
9
+ encoding: Encoding::ASCII_8BIT)
8
10
  parser = Peddler::FlatFileParser.new(build_mock_response(body), 'ISO-8859-1')
9
11
  assert_kind_of CSV::Table, parser.parse
10
12
  end
11
13
 
12
14
  def test_parses_data_a_line_at_a_time
13
- 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"
14
- body.encode!('ASCII-8BIT')
15
+ body = build_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",
16
+ encoding: Encoding::ASCII_8BIT)
15
17
  parser = Peddler::FlatFileParser.new(build_mock_response(body), 'ISO-8859-1')
16
18
  counter = 0
17
19
  parser.parse { counter += 1 }
@@ -19,22 +21,22 @@ class TestPeddlerFlatFileParser < MiniTest::Test
19
21
  end
20
22
 
21
23
  def test_summarises
22
- 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"
23
- body.encode!('ASCII-8BIT')
24
+ body = build_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",
25
+ encoding: Encoding::ASCII_8BIT)
24
26
  parser = Peddler::FlatFileParser.new(build_mock_response(body), 'ISO-8859-1')
25
27
  refute_empty parser.records_count
26
28
  end
27
29
 
28
30
  def test_summarises_non_english_reports
29
- body = "Riepilogo elaborazione feed:\n\tNumero record elaborati\t\t1\n\tNumero record elaborati con successo\t\t1\n\n"
30
- body.encode!('Cp1252')
31
+ body = build_body("Riepilogo elaborazione feed:\n\tNumero record elaborati\t\t1\n\tNumero record elaborati con successo\t\t1\n\n",
32
+ encoding: 'Cp1252')
31
33
  parser = Peddler::FlatFileParser.new(build_mock_response(body), 'ISO-8859-1')
32
34
  refute_empty parser.records_count
33
35
  end
34
36
 
35
37
  def test_validates
36
- 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"
37
- body.encode!('ASCII-8BIT')
38
+ body = build_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",
39
+ encoding: Encoding::ASCII_8BIT)
38
40
  parser = Peddler::FlatFileParser.new(build_mock_response(body), 'ISO-8859-1')
39
41
  assert parser.valid?
40
42
  end
@@ -46,43 +48,44 @@ class TestPeddlerFlatFileParser < MiniTest::Test
46
48
  end
47
49
 
48
50
  def test_handles_japanese_flat_files
49
- body = "Foo\nこんにちは\n"
50
- body.encode!('SHIFT_JIS')
51
- parser = Peddler::FlatFileParser.new(build_mock_response(body), 'Windows-31J')
51
+ body = build_body("Foo\nこんにちは\n", encoding: Encoding::SHIFT_JIS)
52
+ parser = Peddler::FlatFileParser.new(build_mock_response(body), Encoding::WINDOWS_31J)
52
53
  assert_equal 'こんにちは', parser.parse[0]['Foo']
53
54
  end
54
55
 
55
56
  def test_handles_japanese_curly_braces
56
- body = "Foo\n〝\n"
57
- body.encode!('Windows-31J')
58
- parser = Peddler::FlatFileParser.new(build_mock_response(body), 'Windows-31J')
57
+ body = build_body("Foo\n〝\n", encoding: Encoding::WINDOWS_31J)
58
+ parser = Peddler::FlatFileParser.new(build_mock_response(body), Encoding::WINDOWS_31J)
59
59
  assert_equal '〝', parser.parse[0]['Foo']
60
60
  end
61
61
 
62
62
  def test_handles_latin_1_flat_files
63
- body = "Foo\n™\n"
64
- body.encode!('Cp1252')
65
- parser = Peddler::FlatFileParser.new(build_mock_response(body), 'Cp1252')
63
+ body = build_body("Foo\n™\n", encoding: 'Cp1252')
64
+ parser = Peddler::FlatFileParser.new(build_mock_response(body), Encoding::CP1252)
66
65
  assert_equal '™', parser.parse['Foo'][0]
67
66
  end
68
67
 
69
68
  def test_handles_undefined_characters
70
- body = "Foo\n\xFF\n"
71
- body.force_encoding('ASCII-8BIT')
72
- parser = Peddler::FlatFileParser.new(build_mock_response(body), 'ASCII-8BIT')
69
+ body = "Foo\n\xFF\n".dup
70
+ body.force_encoding(Encoding::ASCII_8BIT)
71
+ parser = Peddler::FlatFileParser.new(build_mock_response(body), Encoding::ASCII_8BIT)
73
72
  assert_equal '�', parser.parse['Foo'][0]
74
73
  end
75
74
 
76
75
  def test_handles_utf8_flat_files
77
76
  body = "Foo\nfür\n"
78
- parser = Peddler::FlatFileParser.new(build_mock_response(body, ascii: false), 'CP1252')
77
+ parser = Peddler::FlatFileParser.new(build_mock_response(body, ascii: false), Encoding::CP1252)
79
78
  assert_equal 'für', parser.parse['Foo'][0]
80
79
  end
81
80
 
82
81
  private
83
82
 
83
+ def build_body(str, encoding:)
84
+ str.dup.encode(encoding)
85
+ end
86
+
84
87
  def build_mock_response(body, ascii: true)
85
- body.force_encoding('ASCII-8BIT') if ascii
88
+ body.force_encoding(Encoding::ASCII_8BIT) if ascii
86
89
  headers = {
87
90
  'Content-MD5' => Digest::MD5.base64digest(body)
88
91
  }