reactive_shipping 3.0.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 (247) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +33 -0
  4. data/.yardopts +13 -0
  5. data/CHANGELOG.md +225 -0
  6. data/CONTRIBUTING.md +23 -0
  7. data/Gemfile +3 -0
  8. data/MIT-LICENSE +21 -0
  9. data/README.md +158 -0
  10. data/Rakefile +35 -0
  11. data/dev.yml +17 -0
  12. data/gemfiles/activesupport42.gemfile +5 -0
  13. data/gemfiles/activesupport50.gemfile +6 -0
  14. data/gemfiles/activesupport51.gemfile +5 -0
  15. data/gemfiles/activesupport52.gemfile +5 -0
  16. data/gemfiles/activesupport_master.gemfile +5 -0
  17. data/lib/certs/eParcel.dtd +111 -0
  18. data/lib/reactive_shipping.rb +26 -0
  19. data/lib/reactive_shipping/address_validation_response.rb +30 -0
  20. data/lib/reactive_shipping/carrier.rb +184 -0
  21. data/lib/reactive_shipping/carriers.rb +35 -0
  22. data/lib/reactive_shipping/carriers/australia_post.rb +248 -0
  23. data/lib/reactive_shipping/carriers/benchmark_carrier.rb +31 -0
  24. data/lib/reactive_shipping/carriers/bogus_carrier.rb +12 -0
  25. data/lib/reactive_shipping/carriers/canada_post.rb +263 -0
  26. data/lib/reactive_shipping/carriers/canada_post_pws.rb +908 -0
  27. data/lib/reactive_shipping/carriers/fedex.rb +797 -0
  28. data/lib/reactive_shipping/carriers/kunaki.rb +155 -0
  29. data/lib/reactive_shipping/carriers/new_zealand_post.rb +260 -0
  30. data/lib/reactive_shipping/carriers/shipwire.rb +178 -0
  31. data/lib/reactive_shipping/carriers/stamps.rb +860 -0
  32. data/lib/reactive_shipping/carriers/ups.rb +1060 -0
  33. data/lib/reactive_shipping/carriers/usps.rb +708 -0
  34. data/lib/reactive_shipping/carriers/usps_returns.rb +86 -0
  35. data/lib/reactive_shipping/delivery_date_estimate.rb +20 -0
  36. data/lib/reactive_shipping/delivery_date_estimates_response.rb +11 -0
  37. data/lib/reactive_shipping/errors.rb +35 -0
  38. data/lib/reactive_shipping/external_return_label_request.rb +417 -0
  39. data/lib/reactive_shipping/external_return_label_response.rb +26 -0
  40. data/lib/reactive_shipping/label.rb +10 -0
  41. data/lib/reactive_shipping/label_response.rb +10 -0
  42. data/lib/reactive_shipping/location.rb +166 -0
  43. data/lib/reactive_shipping/package.rb +165 -0
  44. data/lib/reactive_shipping/package_item.rb +60 -0
  45. data/lib/reactive_shipping/rate_estimate.rb +197 -0
  46. data/lib/reactive_shipping/rate_response.rb +33 -0
  47. data/lib/reactive_shipping/response.rb +44 -0
  48. data/lib/reactive_shipping/shipment_event.rb +22 -0
  49. data/lib/reactive_shipping/shipment_packer.rb +108 -0
  50. data/lib/reactive_shipping/shipping_response.rb +34 -0
  51. data/lib/reactive_shipping/tracking_response.rb +120 -0
  52. data/lib/reactive_shipping/version.rb +3 -0
  53. data/reactive_shipping.gemspec +38 -0
  54. data/shipit.rubygems.yml +1 -0
  55. data/test/console.rb +39 -0
  56. data/test/credentials.yml +76 -0
  57. data/test/fixtures/files/label1.pdf +0 -0
  58. data/test/fixtures/files/ups-shipping-label.gif +0 -0
  59. data/test/fixtures/json/australia_post/calculate_domestic.json +13 -0
  60. data/test/fixtures/json/australia_post/calculate_domestic_2.json +19 -0
  61. data/test/fixtures/json/australia_post/calculate_international.json +12 -0
  62. data/test/fixtures/json/australia_post/calculate_international_2.json +15 -0
  63. data/test/fixtures/json/australia_post/error_message.json +5 -0
  64. data/test/fixtures/json/australia_post/service_domestic.json +117 -0
  65. data/test/fixtures/json/australia_post/service_domestic_2.json +117 -0
  66. data/test/fixtures/json/australia_post/service_international.json +76 -0
  67. data/test/fixtures/json/australia_post/service_international_2.json +59 -0
  68. data/test/fixtures/json/newzealandpost/domestic_book.json +1 -0
  69. data/test/fixtures/json/newzealandpost/domestic_default.json +1 -0
  70. data/test/fixtures/json/newzealandpost/domestic_error.json +1 -0
  71. data/test/fixtures/json/newzealandpost/domestic_poster.json +1 -0
  72. data/test/fixtures/json/newzealandpost/domestic_small_half_pound.json +1 -0
  73. data/test/fixtures/json/newzealandpost/international_book.json +1 -0
  74. data/test/fixtures/json/newzealandpost/international_new_zealand_wii.json +1 -0
  75. data/test/fixtures/json/newzealandpost/international_small_half_pound.json +1 -0
  76. data/test/fixtures/json/newzealandpost/international_wii.json +1 -0
  77. data/test/fixtures/xml/canadapost/example_request.xml +25 -0
  78. data/test/fixtures/xml/canadapost/example_response.xml +130 -0
  79. data/test/fixtures/xml/canadapost/example_response_error.xml +16 -0
  80. data/test/fixtures/xml/canadapost/example_response_french.xml +122 -0
  81. data/test/fixtures/xml/canadapost/example_response_with_nil_value.xml +164 -0
  82. data/test/fixtures/xml/canadapost/example_response_with_postal_outlet.xml +155 -0
  83. data/test/fixtures/xml/canadapost/example_response_with_postal_outlet_french.xml +274 -0
  84. data/test/fixtures/xml/canadapost/example_response_with_strange_delivery_date.xml +130 -0
  85. data/test/fixtures/xml/canadapost_pws/dnc_tracking_details_en.xml +112 -0
  86. data/test/fixtures/xml/canadapost_pws/merchant_details_error.xml +7 -0
  87. data/test/fixtures/xml/canadapost_pws/merchant_details_response.xml +7 -0
  88. data/test/fixtures/xml/canadapost_pws/option_response.xml +13 -0
  89. data/test/fixtures/xml/canadapost_pws/option_response_no_conflicts.xml +7 -0
  90. data/test/fixtures/xml/canadapost_pws/rates_info.xml +190 -0
  91. data/test/fixtures/xml/canadapost_pws/rates_info_error.xml +7 -0
  92. data/test/fixtures/xml/canadapost_pws/receipt_response.xml +42 -0
  93. data/test/fixtures/xml/canadapost_pws/receipt_response_no_priced_options.xml +36 -0
  94. data/test/fixtures/xml/canadapost_pws/register_token_error.xml +7 -0
  95. data/test/fixtures/xml/canadapost_pws/register_token_response.xml +3 -0
  96. data/test/fixtures/xml/canadapost_pws/service_options_response.xml +42 -0
  97. data/test/fixtures/xml/canadapost_pws/services_error.xml +6 -0
  98. data/test/fixtures/xml/canadapost_pws/services_response.xml +32 -0
  99. data/test/fixtures/xml/canadapost_pws/shipment_domestic.xml +69 -0
  100. data/test/fixtures/xml/canadapost_pws/shipment_response.xml +20 -0
  101. data/test/fixtures/xml/canadapost_pws/shipment_us.xml +69 -0
  102. data/test/fixtures/xml/canadapost_pws/tracking_details_en.xml +152 -0
  103. data/test/fixtures/xml/canadapost_pws/tracking_details_en_error.xml +7 -0
  104. data/test/fixtures/xml/canadapost_pws/tracking_details_en_undelivered.xml +116 -0
  105. data/test/fixtures/xml/canadapost_pws/tracking_details_fr.xml +156 -0
  106. data/test/fixtures/xml/canadapost_pws/tracking_details_no_expected_delivery_date.xml +40 -0
  107. data/test/fixtures/xml/fedex/create_shipment_response.xml +2 -0
  108. data/test/fixtures/xml/fedex/freight_rate_request.xml +82 -0
  109. data/test/fixtures/xml/fedex/freight_rate_response.xml +506 -0
  110. data/test/fixtures/xml/fedex/invalid_fedex_reply.xml +27 -0
  111. data/test/fixtures/xml/fedex/ottawa_to_beverly_hills_commercial_rate_request.xml +79 -0
  112. data/test/fixtures/xml/fedex/ottawa_to_beverly_hills_no_saturday_rate_request.xml +79 -0
  113. data/test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_request.xml +80 -0
  114. data/test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_response.xml +214 -0
  115. data/test/fixtures/xml/fedex/raterequest_reply.xml +213 -0
  116. data/test/fixtures/xml/fedex/raterequest_response_with_ground_home_delivery.xml +206 -0
  117. data/test/fixtures/xml/fedex/reply_without_notifications.xml +185 -0
  118. data/test/fixtures/xml/fedex/tracking_request.xml +29 -0
  119. data/test/fixtures/xml/fedex/tracking_response_bad_tracking_number.xml +20 -0
  120. data/test/fixtures/xml/fedex/tracking_response_delivered_at_door.xml +254 -0
  121. data/test/fixtures/xml/fedex/tracking_response_delivered_at_facility.xml +403 -0
  122. data/test/fixtures/xml/fedex/tracking_response_delivered_with_signature.xml +269 -0
  123. data/test/fixtures/xml/fedex/tracking_response_empty_status_detail.xml +84 -0
  124. data/test/fixtures/xml/fedex/tracking_response_failure_code_9045.xml +52 -0
  125. data/test/fixtures/xml/fedex/tracking_response_failure_code_9080.xml +51 -0
  126. data/test/fixtures/xml/fedex/tracking_response_in_transit.xml +127 -0
  127. data/test/fixtures/xml/fedex/tracking_response_invalid_tracking_number.xml +52 -0
  128. data/test/fixtures/xml/fedex/tracking_response_missing_status_code.xml +89 -0
  129. data/test/fixtures/xml/fedex/tracking_response_multiple_results.xml +100 -0
  130. data/test/fixtures/xml/fedex/tracking_response_not_found.xml +52 -0
  131. data/test/fixtures/xml/fedex/tracking_response_shipment_exception.xml +209 -0
  132. data/test/fixtures/xml/fedex/tracking_response_unable_to_process.xml +32 -0
  133. data/test/fixtures/xml/fedex/tracking_response_with_blank_state.xml +107 -0
  134. data/test/fixtures/xml/fedex/unknown_fedex_document_reply.xml +3 -0
  135. data/test/fixtures/xml/kunaki/invalid_state_response.xml +3 -0
  136. data/test/fixtures/xml/kunaki/no_valid_items_response.xml +3 -0
  137. data/test/fixtures/xml/kunaki/successful_rates_response.xml +3 -0
  138. data/test/fixtures/xml/kunaki/unsuccessful_rates_response.xml +9 -0
  139. data/test/fixtures/xml/shipwire/international_rates_response.xml +17 -0
  140. data/test/fixtures/xml/shipwire/new_carrier_rate_response.xml +18 -0
  141. data/test/fixtures/xml/shipwire/no_rates_response.xml +7 -0
  142. data/test/fixtures/xml/shipwire/rates_response.xml +36 -0
  143. data/test/fixtures/xml/shipwire/rates_response_no_estimate.xml +14 -0
  144. data/test/fixtures/xml/stamps/authenticate_user_request.xml +15 -0
  145. data/test/fixtures/xml/stamps/authenticate_user_response.xml +10 -0
  146. data/test/fixtures/xml/stamps/cleanse_address_request.xml +19 -0
  147. data/test/fixtures/xml/stamps/cleanse_address_response.xml +27 -0
  148. data/test/fixtures/xml/stamps/create_indicium_request.xml +69 -0
  149. data/test/fixtures/xml/stamps/create_indicium_response.xml +40 -0
  150. data/test/fixtures/xml/stamps/expired_authenticator_response.xml +15 -0
  151. data/test/fixtures/xml/stamps/get_account_info_request.xml +11 -0
  152. data/test/fixtures/xml/stamps/get_account_info_response.xml +36 -0
  153. data/test/fixtures/xml/stamps/get_purchase_status_request.xml +12 -0
  154. data/test/fixtures/xml/stamps/get_purchase_status_response.xml +16 -0
  155. data/test/fixtures/xml/stamps/get_rates_request.xml +19 -0
  156. data/test/fixtures/xml/stamps/get_rates_response.xml +351 -0
  157. data/test/fixtures/xml/stamps/purchase_postage_request.xml +13 -0
  158. data/test/fixtures/xml/stamps/purchase_postage_response.xml +17 -0
  159. data/test/fixtures/xml/stamps/track_shipment_request.xml +12 -0
  160. data/test/fixtures/xml/stamps/track_shipment_response.xml +45 -0
  161. data/test/fixtures/xml/ups/access_request.xml +6 -0
  162. data/test/fixtures/xml/ups/delivered_shipment_with_refund.xml +290 -0
  163. data/test/fixtures/xml/ups/delivered_shipment_without_events_tracking_response.xml +62 -0
  164. data/test/fixtures/xml/ups/delivery_dates_response.xml +140 -0
  165. data/test/fixtures/xml/ups/example_tracking_response.xml +53 -0
  166. data/test/fixtures/xml/ups/in_transit_shipment.xml +183 -0
  167. data/test/fixtures/xml/ups/out_for_delivery_shipment.xml +165 -0
  168. data/test/fixtures/xml/ups/package_exceeds_maximum_length.xml +12 -0
  169. data/test/fixtures/xml/ups/rate_single_service.xml +54 -0
  170. data/test/fixtures/xml/ups/rescheduled_shipment.xml +204 -0
  171. data/test/fixtures/xml/ups/shipment_accept_response.xml +42 -0
  172. data/test/fixtures/xml/ups/shipment_confirm_response.xml +33 -0
  173. data/test/fixtures/xml/ups/shipment_from_tiger_direct.xml +222 -0
  174. data/test/fixtures/xml/ups/test_real_home_as_residential_destination_response.xml +290 -0
  175. data/test/fixtures/xml/ups/test_real_home_as_residential_destination_response_with_insured.xml +289 -0
  176. data/test/fixtures/xml/ups/test_real_home_as_residential_destination_with_origin_account_response.xml +311 -0
  177. data/test/fixtures/xml/ups/tracking_request.xml +9 -0
  178. data/test/fixtures/xml/ups/triple_accept_response.xml +72 -0
  179. data/test/fixtures/xml/ups/triple_confirm_response.xml +32 -0
  180. data/test/fixtures/xml/ups/void_shipment_response.xml +11 -0
  181. data/test/fixtures/xml/usps/api_error_rate_response.xml +53 -0
  182. data/test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_base_rate_response.xml +2 -0
  183. data/test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_plus_rate_response.xml +258 -0
  184. data/test/fixtures/xml/usps/beverly_hills_to_new_york_book_rate_response.xml +108 -0
  185. data/test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_base_rate_response.xml +84 -0
  186. data/test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_plus_rate_response.xml +212 -0
  187. data/test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_rate_response.xml +230 -0
  188. data/test/fixtures/xml/usps/first_class_packages_with_invalid_mail_type_response.xml +12 -0
  189. data/test/fixtures/xml/usps/first_class_packages_with_mail_type_response.xml +16 -0
  190. data/test/fixtures/xml/usps/first_class_packages_without_mail_type_response.xml +12 -0
  191. data/test/fixtures/xml/usps/invalid_xml_response.xml +10 -0
  192. data/test/fixtures/xml/usps/invalid_xml_tracking_response_error.xml +2 -0
  193. data/test/fixtures/xml/usps/tracking_request.xml +10 -0
  194. data/test/fixtures/xml/usps/tracking_request_batch.xml +12 -0
  195. data/test/fixtures/xml/usps/tracking_response.xml +162 -0
  196. data/test/fixtures/xml/usps/tracking_response_alt.xml +53 -0
  197. data/test/fixtures/xml/usps/tracking_response_batch.xml +231 -0
  198. data/test/fixtures/xml/usps/tracking_response_failure.xml +11 -0
  199. data/test/fixtures/xml/usps/tracking_response_not_available.xml +12 -0
  200. data/test/fixtures/xml/usps/tracking_response_test_error.xml +8 -0
  201. data/test/fixtures/xml/usps/us_rate_request.xml +18 -0
  202. data/test/fixtures/xml/usps/us_rate_request_large.xml +18 -0
  203. data/test/fixtures/xml/usps/world_rate_request_only_country.xml +22 -0
  204. data/test/fixtures/xml/usps/world_rate_request_with_value.xml +24 -0
  205. data/test/fixtures/xml/usps/world_rate_request_without_value.xml +24 -0
  206. data/test/fixtures/xml/usps_returns/external_return_label_response.xml +2 -0
  207. data/test/fixtures/xml/usps_returns/external_return_label_response_failure.xml +10 -0
  208. data/test/remote/australia_post_test.rb +140 -0
  209. data/test/remote/canada_post_pws_platform_test.rb +259 -0
  210. data/test/remote/canada_post_pws_test.rb +169 -0
  211. data/test/remote/canada_post_test.rb +55 -0
  212. data/test/remote/fedex_test.rb +400 -0
  213. data/test/remote/kunaki_test.rb +37 -0
  214. data/test/remote/new_zealand_post_test.rb +149 -0
  215. data/test/remote/shipwire_test.rb +84 -0
  216. data/test/remote/stamps_test.rb +396 -0
  217. data/test/remote/usps_returns_test.rb +72 -0
  218. data/test/remote/usps_test.rb +243 -0
  219. data/test/test_helper.rb +296 -0
  220. data/test/unit/carrier_test.rb +130 -0
  221. data/test/unit/carriers/australia_post_test.rb +181 -0
  222. data/test/unit/carriers/benchmark_test.rb +18 -0
  223. data/test/unit/carriers/canada_post_pws_rating_test.rb +379 -0
  224. data/test/unit/carriers/canada_post_pws_register_test.rb +76 -0
  225. data/test/unit/carriers/canada_post_pws_shipping_test.rb +258 -0
  226. data/test/unit/carriers/canada_post_pws_test.rb +59 -0
  227. data/test/unit/carriers/canada_post_pws_tracking_test.rb +154 -0
  228. data/test/unit/carriers/canada_post_test.rb +148 -0
  229. data/test/unit/carriers/fedex_test.rb +693 -0
  230. data/test/unit/carriers/kunaki_test.rb +56 -0
  231. data/test/unit/carriers/new_zealand_post_test.rb +177 -0
  232. data/test/unit/carriers/shipwire_test.rb +188 -0
  233. data/test/unit/carriers/stamps_test.rb +245 -0
  234. data/test/unit/carriers/ups_test.rb +580 -0
  235. data/test/unit/carriers/usps_returns_test.rb +45 -0
  236. data/test/unit/carriers/usps_test.rb +633 -0
  237. data/test/unit/carriers_test.rb +16 -0
  238. data/test/unit/external_return_label_request_test.rb +258 -0
  239. data/test/unit/location_test.rb +234 -0
  240. data/test/unit/package_item_test.rb +232 -0
  241. data/test/unit/package_test.rb +404 -0
  242. data/test/unit/rate_estimate_test.rb +93 -0
  243. data/test/unit/response_test.rb +38 -0
  244. data/test/unit/shipment_event_test.rb +20 -0
  245. data/test/unit/shipment_packer_test.rb +212 -0
  246. data/test/unit/tracking_response_test.rb +41 -0
  247. metadata +684 -0
@@ -0,0 +1,93 @@
1
+ require 'test_helper'
2
+
3
+ class RateEstimateTest < ActiveSupport::TestCase
4
+ setup do
5
+ @origin = {address1: "61A York St", city: "Ottawa", province: "ON", country: "Canada", postal_code: "K1N 5T2"}
6
+ @destination = {city: "Beverly Hills", state: "CA", country: "United States", postal_code: "90210"}
7
+ @line_items = [Package.new(500, [2, 3, 4], description: "a box full of stuff", value: 2500)]
8
+ @carrier = CanadaPost.new(login: 'test')
9
+ @options = {currency: 'USD', delivery_range: [DateTime.parse("Fri 01 Jul 2016"), DateTime.parse("Sun 03 Jul 2016")]}
10
+
11
+ @rate_estimate = RateEstimate.new(@origin, @destination, @carrier, @service_name, @options)
12
+ end
13
+
14
+ test "#initialize accepts phone_required option field" do
15
+ est = RateEstimate.new(@origin, @destination, @carrier, @service_name, @options.merge(phone_required: true))
16
+ assert_equal true, est.phone_required
17
+
18
+ est = RateEstimate.new(@origin, @destination, @carrier, @service_name, @options.merge(phone_required: nil))
19
+ assert_equal false, est.phone_required
20
+
21
+ est = RateEstimate.new(@origin, @destination, @carrier, @service_name, @options.merge(phone_required: false))
22
+ assert_equal false, est.phone_required
23
+ end
24
+
25
+ test "#initialize accepts description option field" do
26
+ rate_estimate = RateEstimate.new(@origin, @destination, @carrier, @service_name, @options.merge(description: "It's free!"))
27
+ assert_equal "It's free!", rate_estimate.description
28
+ end
29
+
30
+ test "#initialize converts noniso currency to iso" do
31
+ rate_estimate = RateEstimate.new(@origin, @destination, @carrier, @service_name, @options.merge(currency: 'UKL'))
32
+ assert_equal 'GBP', rate_estimate.currency
33
+ end
34
+
35
+ test "#initialize raises if invalid currency code" do
36
+ assert_raises(ActiveUtils::InvalidCurrencyCodeError) do
37
+ RateEstimate.new(nil, nil, nil, nil, currency: 'FAKE')
38
+ end
39
+ end
40
+
41
+ test "#initialize accepts estimate_reference option field" do
42
+ est = RateEstimate.new(@origin, @destination, @carrier, @service_name, @options.merge(estimate_reference: "somefakeref"))
43
+
44
+ assert_equal "somefakeref", est.estimate_reference
45
+ end
46
+
47
+ test "#initialize accepts compare_price option field" do
48
+ est = RateEstimate.new(@origin, @destination, @carrier, @service_name, @options.merge(compare_price: 10.0))
49
+ assert_equal 1000, est.compare_price
50
+ end
51
+
52
+ test "#initialize accepts delivery_category option field" do
53
+ est = RateEstimate.new(@origin, @destination, @carrier, @service_name, @options.merge(delivery_category: "local_delivery"))
54
+
55
+ assert_equal "local_delivery", est.delivery_category
56
+ end
57
+
58
+ test "#initialize accepts charge_items option field" do
59
+ charge_items = [
60
+ {
61
+ group: "base_charge",
62
+ code: 'label',
63
+ name: "USPS Priority Mail label",
64
+ description: "USPS Priority Mail label to New York, NY, US",
65
+ amount: 14.64
66
+ },
67
+ {
68
+ group: "included_option",
69
+ code: 'tracking',
70
+ name: "Tracking",
71
+ description: "Free tracking",
72
+ amount: 0
73
+ }
74
+ ]
75
+ est = RateEstimate.new(@origin, @destination, @carrier, @service_name, @options.merge(charge_items: charge_items))
76
+
77
+ assert_equal charge_items, est.charge_items
78
+ end
79
+
80
+ test "delivery_date is pulled from the later date of the delivery_range" do
81
+ assert_equal [DateTime.parse("Fri 01 Jul 2016"), DateTime.parse("Sun 03 Jul 2016")], @rate_estimate.delivery_range
82
+ assert_equal DateTime.parse("Sun 03 Jul 2016"), @rate_estimate.delivery_date
83
+ end
84
+
85
+ test "#initialize accepts messages option field" do
86
+ rate = RateEstimate.new(@origin, @destination, @carrier, @service_name, @options.merge(messages: ["warning"]))
87
+ assert_equal ["warning"], rate.messages
88
+ end
89
+
90
+ test "#date_for returns nil when given nil string" do
91
+ assert_nil @rate_estimate.send(:date_for, nil)
92
+ end
93
+ end
@@ -0,0 +1,38 @@
1
+ require 'test_helper'
2
+
3
+ class ResponseTest < ActiveSupport::TestCase
4
+ test "#initialize for a successful response" do
5
+ response = RateResponse.new(
6
+ true,
7
+ "success!",
8
+ { rate: 'Free!' },
9
+ rates: [ stub(service_name: 'Free!', total_price: 0) ],
10
+ xml: "<rate>Free!</rate>"
11
+ )
12
+ assert_predicate response, :success?
13
+ end
14
+
15
+ test "#initialize for a failed response raises ResponseError" do
16
+ assert_raises(ReactiveShipping::ResponseError) do
17
+ RateResponse.new(
18
+ false,
19
+ "fail!",
20
+ { rate: 'Free!' },
21
+ rates: [ stub(service_name: 'Free!', total_price: 0) ],
22
+ xml: "<rate>Free!</rate>"
23
+ )
24
+ end
25
+ end
26
+
27
+ test "#initialize doesn't raise when you pass in allow_failure" do
28
+ response = RateResponse.new(
29
+ false,
30
+ "fail!",
31
+ { rate: 'Free!' },
32
+ rates: [ stub(service_name: 'Free!', total_price: 0) ],
33
+ xml: "<rate>Free!</rate>",
34
+ allow_failure: true,
35
+ )
36
+ refute_predicate response, :success?
37
+ end
38
+ end
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+
3
+ class ShipmentEventTest < ActiveSupport::TestCase
4
+ def test_equality
5
+ options1 = [
6
+ 'ARRIVED AT UNIT',
7
+ DateTime.parse('Thu 12 May 2016 05:45:00'),
8
+ Location.new(city: 'SAN JOSE', state: 'CA', postal_code: '90001', country: 'US'),
9
+ 'ARRIVED AT UNIT',
10
+ '07'
11
+ ]
12
+ # Copies options to create new DateTime and Location objects to check for similar distinct objects
13
+ options2 = options1.dup
14
+
15
+ shipment_event_1 = ShipmentEvent.new(*options1)
16
+ shipment_event_2 = ShipmentEvent.new(*options2)
17
+
18
+ assert_equal shipment_event_1, shipment_event_2
19
+ end
20
+ end
@@ -0,0 +1,212 @@
1
+ require 'test_helper'
2
+
3
+ class ShipmentPackerTest < ActiveSupport::TestCase
4
+ def setup
5
+ @dimensions = [5.1, 15.2, 30.5]
6
+ end
7
+
8
+ test "pack divide order into a single package" do
9
+ items = [{ grams: 1, quantity: 1, price: 1.0 }]
10
+
11
+ packages = ShipmentPacker.pack(items, @dimensions, 1, 'USD')
12
+ assert_equal 1, packages.size
13
+
14
+ package = packages.first
15
+ assert_equal Measured::Weight(1, :g), package.weight
16
+ end
17
+
18
+ test "divide order with multiple lines into a single package" do
19
+ items = [{ grams: 1, quantity: 2, price: 1.0 }]
20
+
21
+ packages = ShipmentPacker.pack(items, @dimensions, 2, 'USD')
22
+ assert_equal 1, packages.size
23
+
24
+ package = packages.first
25
+ assert_equal Measured::Weight(2, :g), package.weight
26
+ end
27
+
28
+ test "divide order with single line into two packages" do
29
+ items = [{ grams: 1, quantity: 2, price: 1.0 }]
30
+
31
+ packages = ShipmentPacker.pack(items, @dimensions, 1, 'USD')
32
+ assert_equal 2, packages.size
33
+
34
+ packages.each do |package|
35
+ assert_equal Measured::Weight(1, :g), package.weight
36
+ end
37
+ end
38
+
39
+ test "divide order with single line into two packages max weight as float" do
40
+ max_weight = 68038.8555
41
+
42
+ items = [{ grams: 45359, quantity: 2, price: 1.0 }]
43
+
44
+ packages = ShipmentPacker.pack(items, @dimensions, max_weight, 'USD')
45
+ assert_equal 2, packages.size
46
+
47
+ packages.each do |package|
48
+ assert_equal Measured::Weight(45359, :g), package.weight
49
+ end
50
+ end
51
+
52
+ test "divide order with multiple lines into two packages" do
53
+ items = [
54
+ { grams: 1, quantity: 1, price: 1.0 },
55
+ { grams: 1, quantity: 1, price: 1.0 }
56
+ ]
57
+
58
+ packages = ShipmentPacker.pack(items, @dimensions, 1, 'USD')
59
+ assert_equal 2, packages.size
60
+
61
+ packages.each do |package|
62
+ assert_equal Measured::Weight(1, :g), package.weight
63
+ end
64
+ end
65
+
66
+ test "divide order into two packages mixing line items" do
67
+ items = [
68
+ { grams: 1, quantity: 1, price: 1.0 },
69
+ { grams: 1, quantity: 1, price: 1.0 },
70
+ { grams: 1, quantity: 1, price: 1.0 }
71
+ ]
72
+
73
+ packages = ShipmentPacker.pack(items, @dimensions, 2, 'USD')
74
+ assert_equal 2, packages.size
75
+
76
+ assert_equal Measured::Weight(2, :g), packages[0].weight
77
+ assert_equal Measured::Weight(1, :g), packages[1].weight
78
+ end
79
+
80
+ test "raise overweight exception when a single item exceeds the maximum weight of a package" do
81
+ assert_raises(ShipmentPacker::OverweightItem) do
82
+ items = [{ grams: 2, quantity: 1, price: 1.0 }]
83
+ ShipmentPacker.pack(items, @dimensions, 1, 'USD')
84
+ end
85
+ end
86
+
87
+ test "raise over weight exceptions before over package limit exceptions" do
88
+ assert_raises(ShipmentPacker::OverweightItem) do
89
+ items = [{ grams: 5, quantity: ShipmentPacker::EXCESS_PACKAGE_QUANTITY_THRESHOLD + 1, price: 1.0 }]
90
+ ShipmentPacker.pack(items, @dimensions, 4, 'USD')
91
+ end
92
+ end
93
+
94
+ test "returns an empty list when no items provided" do
95
+ assert_equal [], ShipmentPacker.pack([], @dimensions, 1, 'USD')
96
+ end
97
+
98
+ test "add summarized prices for all items and currency to package" do
99
+ items = [
100
+ { grams: 1, quantity: 3, price: 1.0 },
101
+ { grams: 2, quantity: 1, price: 2.0 }
102
+ ]
103
+ packages = ShipmentPacker.pack(items, @dimensions, 5, 'USD')
104
+ assert_equal 1, packages.size
105
+ assert_equal 500, packages.first.value
106
+ assert_equal 'USD', packages.first.currency
107
+ end
108
+
109
+ test "divide items and prices accordingly when splitting into two packages" do
110
+ items = [
111
+ { grams: 1, quantity: 1, price: 1.0 },
112
+ { grams: 1, quantity: 1, price: 1.0 },
113
+ { grams: 1, quantity: 1, price: 1.0 }
114
+ ]
115
+
116
+ packages = ShipmentPacker.pack(items, @dimensions, 2, 'USD')
117
+ assert_equal 2, packages.size
118
+
119
+ assert_equal 200, packages[0].value
120
+ assert_equal 100, packages[1].value
121
+ assert_equal 'USD', packages[0].currency
122
+ assert_equal 'USD', packages[1].currency
123
+ end
124
+
125
+ test "symbolize item keys" do
126
+ string_key_items = [{ 'grams' => 1, 'quantity' => 1, 'price' => 1.0 }]
127
+ indifferent_access_items = [{ 'grams' => 1, 'quantity' => 1, 'price' => 1.0 }.with_indifferent_access]
128
+
129
+ [string_key_items, indifferent_access_items].each do |items|
130
+ packages = ShipmentPacker.pack(items, @dimensions, 1, 'USD')
131
+ assert_equal 1, packages.size
132
+
133
+ package = packages.first
134
+ assert_equal Measured::Weight(1, :g), package.weight
135
+ assert_equal 100, package.value
136
+ end
137
+ end
138
+
139
+ test "cast quantity and grams to int" do
140
+ items = [{ grams: '1', quantity: '1', price: '1.0' }]
141
+
142
+ packages = ShipmentPacker.pack(items, @dimensions, 1, 'USD')
143
+
144
+ package = packages.first
145
+ assert_equal Measured::Weight(1, :g), package.weight
146
+ assert_equal 100, package.value
147
+ end
148
+
149
+ test "excess packages raised over threshold before packing begins" do
150
+ ReactiveShipping::Package.expects(:new).never
151
+ items = [{ grams: 1, quantity: ShipmentPacker::EXCESS_PACKAGE_QUANTITY_THRESHOLD + 1, price: 1.0 }]
152
+
153
+ assert_raises(ShipmentPacker::ExcessPackageQuantity) do
154
+ ShipmentPacker.pack(items, @dimensions, 1, 'USD')
155
+ end
156
+ end
157
+
158
+ test "excess packages not raised at threshold" do
159
+ items = [{ grams: 1, quantity: ShipmentPacker::EXCESS_PACKAGE_QUANTITY_THRESHOLD, price: 1.0 }]
160
+ packages = ShipmentPacker.pack(items, @dimensions, 1, 'USD')
161
+
162
+ assert_predicate packages, :present?
163
+ end
164
+
165
+ test "excess packages not raised below threshold" do
166
+ items = [{ grams: 1, quantity: ShipmentPacker::EXCESS_PACKAGE_QUANTITY_THRESHOLD - 1, price: 1.0 }]
167
+ packages = ShipmentPacker.pack(items, @dimensions, 1, 'USD')
168
+
169
+ assert_predicate packages, :present?
170
+ end
171
+
172
+ test "excess packages with slightly larger max weight than item weight" do
173
+ max_weight = 750
174
+ items = [{ grams: 500, quantity: ShipmentPacker::EXCESS_PACKAGE_QUANTITY_THRESHOLD + 1, price: 1.0 }]
175
+
176
+ assert_raises(ShipmentPacker::ExcessPackageQuantity) do
177
+ ShipmentPacker.pack(items, @dimensions, max_weight, 'USD')
178
+ end
179
+ end
180
+
181
+ test "lots of zero weight items" do
182
+ items = [{ grams: 0, quantity: 1_000_000, price: 1.0 }]
183
+ packages = ShipmentPacker.pack(items, @dimensions, 1, 'USD')
184
+
185
+ assert_equal 1, packages.size
186
+ assert_equal 0, packages[0].grams
187
+ assert_equal 100_000_000, packages[0].value
188
+ end
189
+
190
+ test "dont destroy input items" do
191
+ items = [{ grams: 1, quantity: 5, price: 1.0 }]
192
+
193
+ packages = ShipmentPacker.pack(items, @dimensions, 10, 'USD')
194
+
195
+ assert_equal 1, items.size
196
+ assert_equal 1, packages.size
197
+ end
198
+
199
+ test "dont modify input item quantities" do
200
+ items = [{ grams: 1, quantity: 5, price: 1.0 }]
201
+
202
+ ShipmentPacker.pack(items, @dimensions, 10, 'USD')
203
+ assert_equal 5, items.first[:quantity]
204
+ end
205
+
206
+ test "items with negative weight" do
207
+ items = [{ grams: -1, quantity: 5, price: 1.0 }]
208
+
209
+ ShipmentPacker.pack(items, @dimensions, 10, 'USD')
210
+ assert_equal 5, items.first[:quantity]
211
+ end
212
+ end
@@ -0,0 +1,41 @@
1
+ require 'test_helper'
2
+
3
+ class TrackingResponseTest < ActiveSupport::TestCase
4
+ def test_equality
5
+ options1 = {
6
+ carrier: 'usps',
7
+ status: 'DELIVERED',
8
+ status_code: 'I0',
9
+ status_description: 'DELIVERED',
10
+ actual_delivery_date: DateTime.parse("Sat 14 May 2016 13:20:00"),
11
+ tracking_number: 'TRACKINGNUMBER1234ABC',
12
+ shipment_events: [
13
+ ShipmentEvent.new(
14
+ 'DELIVERED',
15
+ DateTime.parse("Sat 14 May 2016 13:20:00"),
16
+ Location.new(city: 'LOS ANGELES', state: 'CA', postal_code: '90210', country: 'US'),
17
+ 'DELIVERED',
18
+ 'I0'
19
+ ),
20
+ ShipmentEvent.new(
21
+ 'ARRIVED AT UNIT',
22
+ DateTime.parse("Thu 12 May 2016 05:45:00"),
23
+ Location.new(city: 'SAN JOSE', state: 'CA', postal_code: '90001', country: 'US'),
24
+ 'ARRIVED AT UNIT',
25
+ '07'
26
+ )
27
+ ],
28
+ destination: Location.new(postal_code: '90210'),
29
+ origin: Location.new(postal_code: '00001')
30
+ }
31
+ # Deep copies options1 to create new ShipmentEvent, Location, etc. objects to check for similar distinct objects
32
+ options2 = Marshal.load(Marshal.dump(options1))
33
+ options2[:shipment_events][0], options2[:shipment_events][1] =
34
+ options2[:shipment_events][1], options2[:shipment_events][0]
35
+
36
+ tracking_response_1 = TrackingResponse.new(true, nil, {}, options1)
37
+ tracking_response_2 = TrackingResponse.new(true, nil, {}, options2)
38
+
39
+ assert_equal tracking_response_1, tracking_response_2
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,684 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: reactive_shipping
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Sub Pop Records
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-08-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: measured
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '4.2'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '6.1'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '4.2'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '6.1'
47
+ - !ruby/object:Gem::Dependency
48
+ name: active_utils
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 3.3.1
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 3.3.1
61
+ - !ruby/object:Gem::Dependency
62
+ name: nokogiri
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '1.6'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '1.6'
75
+ - !ruby/object:Gem::Dependency
76
+ name: minitest
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: minitest-reporters
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rake
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: mocha
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1'
131
+ - !ruby/object:Gem::Dependency
132
+ name: timecop
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: business_time
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: pry
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: pry-byebug
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: vcr
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: webmock
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ description: Get rates and tracking info from various shipping carriers. A fork of
216
+ Shopify's original ActiveShipping gem.
217
+ email:
218
+ - webmaster@subpop.com
219
+ executables: []
220
+ extensions: []
221
+ extra_rdoc_files: []
222
+ files:
223
+ - ".gitignore"
224
+ - ".travis.yml"
225
+ - ".yardopts"
226
+ - CHANGELOG.md
227
+ - CONTRIBUTING.md
228
+ - Gemfile
229
+ - MIT-LICENSE
230
+ - README.md
231
+ - Rakefile
232
+ - dev.yml
233
+ - gemfiles/activesupport42.gemfile
234
+ - gemfiles/activesupport50.gemfile
235
+ - gemfiles/activesupport51.gemfile
236
+ - gemfiles/activesupport52.gemfile
237
+ - gemfiles/activesupport_master.gemfile
238
+ - lib/certs/eParcel.dtd
239
+ - lib/reactive_shipping.rb
240
+ - lib/reactive_shipping/address_validation_response.rb
241
+ - lib/reactive_shipping/carrier.rb
242
+ - lib/reactive_shipping/carriers.rb
243
+ - lib/reactive_shipping/carriers/australia_post.rb
244
+ - lib/reactive_shipping/carriers/benchmark_carrier.rb
245
+ - lib/reactive_shipping/carriers/bogus_carrier.rb
246
+ - lib/reactive_shipping/carriers/canada_post.rb
247
+ - lib/reactive_shipping/carriers/canada_post_pws.rb
248
+ - lib/reactive_shipping/carriers/fedex.rb
249
+ - lib/reactive_shipping/carriers/kunaki.rb
250
+ - lib/reactive_shipping/carriers/new_zealand_post.rb
251
+ - lib/reactive_shipping/carriers/shipwire.rb
252
+ - lib/reactive_shipping/carriers/stamps.rb
253
+ - lib/reactive_shipping/carriers/ups.rb
254
+ - lib/reactive_shipping/carriers/usps.rb
255
+ - lib/reactive_shipping/carriers/usps_returns.rb
256
+ - lib/reactive_shipping/delivery_date_estimate.rb
257
+ - lib/reactive_shipping/delivery_date_estimates_response.rb
258
+ - lib/reactive_shipping/errors.rb
259
+ - lib/reactive_shipping/external_return_label_request.rb
260
+ - lib/reactive_shipping/external_return_label_response.rb
261
+ - lib/reactive_shipping/label.rb
262
+ - lib/reactive_shipping/label_response.rb
263
+ - lib/reactive_shipping/location.rb
264
+ - lib/reactive_shipping/package.rb
265
+ - lib/reactive_shipping/package_item.rb
266
+ - lib/reactive_shipping/rate_estimate.rb
267
+ - lib/reactive_shipping/rate_response.rb
268
+ - lib/reactive_shipping/response.rb
269
+ - lib/reactive_shipping/shipment_event.rb
270
+ - lib/reactive_shipping/shipment_packer.rb
271
+ - lib/reactive_shipping/shipping_response.rb
272
+ - lib/reactive_shipping/tracking_response.rb
273
+ - lib/reactive_shipping/version.rb
274
+ - reactive_shipping.gemspec
275
+ - shipit.rubygems.yml
276
+ - test/console.rb
277
+ - test/credentials.yml
278
+ - test/fixtures/files/label1.pdf
279
+ - test/fixtures/files/ups-shipping-label.gif
280
+ - test/fixtures/json/australia_post/calculate_domestic.json
281
+ - test/fixtures/json/australia_post/calculate_domestic_2.json
282
+ - test/fixtures/json/australia_post/calculate_international.json
283
+ - test/fixtures/json/australia_post/calculate_international_2.json
284
+ - test/fixtures/json/australia_post/error_message.json
285
+ - test/fixtures/json/australia_post/service_domestic.json
286
+ - test/fixtures/json/australia_post/service_domestic_2.json
287
+ - test/fixtures/json/australia_post/service_international.json
288
+ - test/fixtures/json/australia_post/service_international_2.json
289
+ - test/fixtures/json/newzealandpost/domestic_book.json
290
+ - test/fixtures/json/newzealandpost/domestic_default.json
291
+ - test/fixtures/json/newzealandpost/domestic_error.json
292
+ - test/fixtures/json/newzealandpost/domestic_poster.json
293
+ - test/fixtures/json/newzealandpost/domestic_small_half_pound.json
294
+ - test/fixtures/json/newzealandpost/international_book.json
295
+ - test/fixtures/json/newzealandpost/international_new_zealand_wii.json
296
+ - test/fixtures/json/newzealandpost/international_small_half_pound.json
297
+ - test/fixtures/json/newzealandpost/international_wii.json
298
+ - test/fixtures/xml/canadapost/example_request.xml
299
+ - test/fixtures/xml/canadapost/example_response.xml
300
+ - test/fixtures/xml/canadapost/example_response_error.xml
301
+ - test/fixtures/xml/canadapost/example_response_french.xml
302
+ - test/fixtures/xml/canadapost/example_response_with_nil_value.xml
303
+ - test/fixtures/xml/canadapost/example_response_with_postal_outlet.xml
304
+ - test/fixtures/xml/canadapost/example_response_with_postal_outlet_french.xml
305
+ - test/fixtures/xml/canadapost/example_response_with_strange_delivery_date.xml
306
+ - test/fixtures/xml/canadapost_pws/dnc_tracking_details_en.xml
307
+ - test/fixtures/xml/canadapost_pws/merchant_details_error.xml
308
+ - test/fixtures/xml/canadapost_pws/merchant_details_response.xml
309
+ - test/fixtures/xml/canadapost_pws/option_response.xml
310
+ - test/fixtures/xml/canadapost_pws/option_response_no_conflicts.xml
311
+ - test/fixtures/xml/canadapost_pws/rates_info.xml
312
+ - test/fixtures/xml/canadapost_pws/rates_info_error.xml
313
+ - test/fixtures/xml/canadapost_pws/receipt_response.xml
314
+ - test/fixtures/xml/canadapost_pws/receipt_response_no_priced_options.xml
315
+ - test/fixtures/xml/canadapost_pws/register_token_error.xml
316
+ - test/fixtures/xml/canadapost_pws/register_token_response.xml
317
+ - test/fixtures/xml/canadapost_pws/service_options_response.xml
318
+ - test/fixtures/xml/canadapost_pws/services_error.xml
319
+ - test/fixtures/xml/canadapost_pws/services_response.xml
320
+ - test/fixtures/xml/canadapost_pws/shipment_domestic.xml
321
+ - test/fixtures/xml/canadapost_pws/shipment_response.xml
322
+ - test/fixtures/xml/canadapost_pws/shipment_us.xml
323
+ - test/fixtures/xml/canadapost_pws/tracking_details_en.xml
324
+ - test/fixtures/xml/canadapost_pws/tracking_details_en_error.xml
325
+ - test/fixtures/xml/canadapost_pws/tracking_details_en_undelivered.xml
326
+ - test/fixtures/xml/canadapost_pws/tracking_details_fr.xml
327
+ - test/fixtures/xml/canadapost_pws/tracking_details_no_expected_delivery_date.xml
328
+ - test/fixtures/xml/fedex/create_shipment_response.xml
329
+ - test/fixtures/xml/fedex/freight_rate_request.xml
330
+ - test/fixtures/xml/fedex/freight_rate_response.xml
331
+ - test/fixtures/xml/fedex/invalid_fedex_reply.xml
332
+ - test/fixtures/xml/fedex/ottawa_to_beverly_hills_commercial_rate_request.xml
333
+ - test/fixtures/xml/fedex/ottawa_to_beverly_hills_no_saturday_rate_request.xml
334
+ - test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_request.xml
335
+ - test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_response.xml
336
+ - test/fixtures/xml/fedex/raterequest_reply.xml
337
+ - test/fixtures/xml/fedex/raterequest_response_with_ground_home_delivery.xml
338
+ - test/fixtures/xml/fedex/reply_without_notifications.xml
339
+ - test/fixtures/xml/fedex/tracking_request.xml
340
+ - test/fixtures/xml/fedex/tracking_response_bad_tracking_number.xml
341
+ - test/fixtures/xml/fedex/tracking_response_delivered_at_door.xml
342
+ - test/fixtures/xml/fedex/tracking_response_delivered_at_facility.xml
343
+ - test/fixtures/xml/fedex/tracking_response_delivered_with_signature.xml
344
+ - test/fixtures/xml/fedex/tracking_response_empty_status_detail.xml
345
+ - test/fixtures/xml/fedex/tracking_response_failure_code_9045.xml
346
+ - test/fixtures/xml/fedex/tracking_response_failure_code_9080.xml
347
+ - test/fixtures/xml/fedex/tracking_response_in_transit.xml
348
+ - test/fixtures/xml/fedex/tracking_response_invalid_tracking_number.xml
349
+ - test/fixtures/xml/fedex/tracking_response_missing_status_code.xml
350
+ - test/fixtures/xml/fedex/tracking_response_multiple_results.xml
351
+ - test/fixtures/xml/fedex/tracking_response_not_found.xml
352
+ - test/fixtures/xml/fedex/tracking_response_shipment_exception.xml
353
+ - test/fixtures/xml/fedex/tracking_response_unable_to_process.xml
354
+ - test/fixtures/xml/fedex/tracking_response_with_blank_state.xml
355
+ - test/fixtures/xml/fedex/unknown_fedex_document_reply.xml
356
+ - test/fixtures/xml/kunaki/invalid_state_response.xml
357
+ - test/fixtures/xml/kunaki/no_valid_items_response.xml
358
+ - test/fixtures/xml/kunaki/successful_rates_response.xml
359
+ - test/fixtures/xml/kunaki/unsuccessful_rates_response.xml
360
+ - test/fixtures/xml/shipwire/international_rates_response.xml
361
+ - test/fixtures/xml/shipwire/new_carrier_rate_response.xml
362
+ - test/fixtures/xml/shipwire/no_rates_response.xml
363
+ - test/fixtures/xml/shipwire/rates_response.xml
364
+ - test/fixtures/xml/shipwire/rates_response_no_estimate.xml
365
+ - test/fixtures/xml/stamps/authenticate_user_request.xml
366
+ - test/fixtures/xml/stamps/authenticate_user_response.xml
367
+ - test/fixtures/xml/stamps/cleanse_address_request.xml
368
+ - test/fixtures/xml/stamps/cleanse_address_response.xml
369
+ - test/fixtures/xml/stamps/create_indicium_request.xml
370
+ - test/fixtures/xml/stamps/create_indicium_response.xml
371
+ - test/fixtures/xml/stamps/expired_authenticator_response.xml
372
+ - test/fixtures/xml/stamps/get_account_info_request.xml
373
+ - test/fixtures/xml/stamps/get_account_info_response.xml
374
+ - test/fixtures/xml/stamps/get_purchase_status_request.xml
375
+ - test/fixtures/xml/stamps/get_purchase_status_response.xml
376
+ - test/fixtures/xml/stamps/get_rates_request.xml
377
+ - test/fixtures/xml/stamps/get_rates_response.xml
378
+ - test/fixtures/xml/stamps/purchase_postage_request.xml
379
+ - test/fixtures/xml/stamps/purchase_postage_response.xml
380
+ - test/fixtures/xml/stamps/track_shipment_request.xml
381
+ - test/fixtures/xml/stamps/track_shipment_response.xml
382
+ - test/fixtures/xml/ups/access_request.xml
383
+ - test/fixtures/xml/ups/delivered_shipment_with_refund.xml
384
+ - test/fixtures/xml/ups/delivered_shipment_without_events_tracking_response.xml
385
+ - test/fixtures/xml/ups/delivery_dates_response.xml
386
+ - test/fixtures/xml/ups/example_tracking_response.xml
387
+ - test/fixtures/xml/ups/in_transit_shipment.xml
388
+ - test/fixtures/xml/ups/out_for_delivery_shipment.xml
389
+ - test/fixtures/xml/ups/package_exceeds_maximum_length.xml
390
+ - test/fixtures/xml/ups/rate_single_service.xml
391
+ - test/fixtures/xml/ups/rescheduled_shipment.xml
392
+ - test/fixtures/xml/ups/shipment_accept_response.xml
393
+ - test/fixtures/xml/ups/shipment_confirm_response.xml
394
+ - test/fixtures/xml/ups/shipment_from_tiger_direct.xml
395
+ - test/fixtures/xml/ups/test_real_home_as_residential_destination_response.xml
396
+ - test/fixtures/xml/ups/test_real_home_as_residential_destination_response_with_insured.xml
397
+ - test/fixtures/xml/ups/test_real_home_as_residential_destination_with_origin_account_response.xml
398
+ - test/fixtures/xml/ups/tracking_request.xml
399
+ - test/fixtures/xml/ups/triple_accept_response.xml
400
+ - test/fixtures/xml/ups/triple_confirm_response.xml
401
+ - test/fixtures/xml/ups/void_shipment_response.xml
402
+ - test/fixtures/xml/usps/api_error_rate_response.xml
403
+ - test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_base_rate_response.xml
404
+ - test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_plus_rate_response.xml
405
+ - test/fixtures/xml/usps/beverly_hills_to_new_york_book_rate_response.xml
406
+ - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_base_rate_response.xml
407
+ - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_plus_rate_response.xml
408
+ - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_rate_response.xml
409
+ - test/fixtures/xml/usps/first_class_packages_with_invalid_mail_type_response.xml
410
+ - test/fixtures/xml/usps/first_class_packages_with_mail_type_response.xml
411
+ - test/fixtures/xml/usps/first_class_packages_without_mail_type_response.xml
412
+ - test/fixtures/xml/usps/invalid_xml_response.xml
413
+ - test/fixtures/xml/usps/invalid_xml_tracking_response_error.xml
414
+ - test/fixtures/xml/usps/tracking_request.xml
415
+ - test/fixtures/xml/usps/tracking_request_batch.xml
416
+ - test/fixtures/xml/usps/tracking_response.xml
417
+ - test/fixtures/xml/usps/tracking_response_alt.xml
418
+ - test/fixtures/xml/usps/tracking_response_batch.xml
419
+ - test/fixtures/xml/usps/tracking_response_failure.xml
420
+ - test/fixtures/xml/usps/tracking_response_not_available.xml
421
+ - test/fixtures/xml/usps/tracking_response_test_error.xml
422
+ - test/fixtures/xml/usps/us_rate_request.xml
423
+ - test/fixtures/xml/usps/us_rate_request_large.xml
424
+ - test/fixtures/xml/usps/world_rate_request_only_country.xml
425
+ - test/fixtures/xml/usps/world_rate_request_with_value.xml
426
+ - test/fixtures/xml/usps/world_rate_request_without_value.xml
427
+ - test/fixtures/xml/usps_returns/external_return_label_response.xml
428
+ - test/fixtures/xml/usps_returns/external_return_label_response_failure.xml
429
+ - test/remote/australia_post_test.rb
430
+ - test/remote/canada_post_pws_platform_test.rb
431
+ - test/remote/canada_post_pws_test.rb
432
+ - test/remote/canada_post_test.rb
433
+ - test/remote/fedex_test.rb
434
+ - test/remote/kunaki_test.rb
435
+ - test/remote/new_zealand_post_test.rb
436
+ - test/remote/shipwire_test.rb
437
+ - test/remote/stamps_test.rb
438
+ - test/remote/usps_returns_test.rb
439
+ - test/remote/usps_test.rb
440
+ - test/test_helper.rb
441
+ - test/unit/carrier_test.rb
442
+ - test/unit/carriers/australia_post_test.rb
443
+ - test/unit/carriers/benchmark_test.rb
444
+ - test/unit/carriers/canada_post_pws_rating_test.rb
445
+ - test/unit/carriers/canada_post_pws_register_test.rb
446
+ - test/unit/carriers/canada_post_pws_shipping_test.rb
447
+ - test/unit/carriers/canada_post_pws_test.rb
448
+ - test/unit/carriers/canada_post_pws_tracking_test.rb
449
+ - test/unit/carriers/canada_post_test.rb
450
+ - test/unit/carriers/fedex_test.rb
451
+ - test/unit/carriers/kunaki_test.rb
452
+ - test/unit/carriers/new_zealand_post_test.rb
453
+ - test/unit/carriers/shipwire_test.rb
454
+ - test/unit/carriers/stamps_test.rb
455
+ - test/unit/carriers/ups_test.rb
456
+ - test/unit/carriers/usps_returns_test.rb
457
+ - test/unit/carriers/usps_test.rb
458
+ - test/unit/carriers_test.rb
459
+ - test/unit/external_return_label_request_test.rb
460
+ - test/unit/location_test.rb
461
+ - test/unit/package_item_test.rb
462
+ - test/unit/package_test.rb
463
+ - test/unit/rate_estimate_test.rb
464
+ - test/unit/response_test.rb
465
+ - test/unit/shipment_event_test.rb
466
+ - test/unit/shipment_packer_test.rb
467
+ - test/unit/tracking_response_test.rb
468
+ homepage: http://github.com/realsubpop/reactive_shipping
469
+ licenses:
470
+ - MIT
471
+ metadata: {}
472
+ post_install_message: Thanks for installing ReactiveShipping! https://github.com/realsubpop/reactive_shipping/blob/master/CHANGELOG.md.
473
+ rdoc_options: []
474
+ require_paths:
475
+ - lib
476
+ required_ruby_version: !ruby/object:Gem::Requirement
477
+ requirements:
478
+ - - ">="
479
+ - !ruby/object:Gem::Version
480
+ version: '0'
481
+ required_rubygems_version: !ruby/object:Gem::Requirement
482
+ requirements:
483
+ - - ">="
484
+ - !ruby/object:Gem::Version
485
+ version: '0'
486
+ requirements: []
487
+ rubyforge_project:
488
+ rubygems_version: 2.6.10
489
+ signing_key:
490
+ specification_version: 4
491
+ summary: Simple shipping abstraction library
492
+ test_files:
493
+ - test/console.rb
494
+ - test/credentials.yml
495
+ - test/fixtures/files/label1.pdf
496
+ - test/fixtures/files/ups-shipping-label.gif
497
+ - test/fixtures/json/australia_post/calculate_domestic.json
498
+ - test/fixtures/json/australia_post/calculate_domestic_2.json
499
+ - test/fixtures/json/australia_post/calculate_international.json
500
+ - test/fixtures/json/australia_post/calculate_international_2.json
501
+ - test/fixtures/json/australia_post/error_message.json
502
+ - test/fixtures/json/australia_post/service_domestic.json
503
+ - test/fixtures/json/australia_post/service_domestic_2.json
504
+ - test/fixtures/json/australia_post/service_international.json
505
+ - test/fixtures/json/australia_post/service_international_2.json
506
+ - test/fixtures/json/newzealandpost/domestic_book.json
507
+ - test/fixtures/json/newzealandpost/domestic_default.json
508
+ - test/fixtures/json/newzealandpost/domestic_error.json
509
+ - test/fixtures/json/newzealandpost/domestic_poster.json
510
+ - test/fixtures/json/newzealandpost/domestic_small_half_pound.json
511
+ - test/fixtures/json/newzealandpost/international_book.json
512
+ - test/fixtures/json/newzealandpost/international_new_zealand_wii.json
513
+ - test/fixtures/json/newzealandpost/international_small_half_pound.json
514
+ - test/fixtures/json/newzealandpost/international_wii.json
515
+ - test/fixtures/xml/canadapost/example_request.xml
516
+ - test/fixtures/xml/canadapost/example_response.xml
517
+ - test/fixtures/xml/canadapost/example_response_error.xml
518
+ - test/fixtures/xml/canadapost/example_response_french.xml
519
+ - test/fixtures/xml/canadapost/example_response_with_nil_value.xml
520
+ - test/fixtures/xml/canadapost/example_response_with_postal_outlet.xml
521
+ - test/fixtures/xml/canadapost/example_response_with_postal_outlet_french.xml
522
+ - test/fixtures/xml/canadapost/example_response_with_strange_delivery_date.xml
523
+ - test/fixtures/xml/canadapost_pws/dnc_tracking_details_en.xml
524
+ - test/fixtures/xml/canadapost_pws/merchant_details_error.xml
525
+ - test/fixtures/xml/canadapost_pws/merchant_details_response.xml
526
+ - test/fixtures/xml/canadapost_pws/option_response.xml
527
+ - test/fixtures/xml/canadapost_pws/option_response_no_conflicts.xml
528
+ - test/fixtures/xml/canadapost_pws/rates_info.xml
529
+ - test/fixtures/xml/canadapost_pws/rates_info_error.xml
530
+ - test/fixtures/xml/canadapost_pws/receipt_response.xml
531
+ - test/fixtures/xml/canadapost_pws/receipt_response_no_priced_options.xml
532
+ - test/fixtures/xml/canadapost_pws/register_token_error.xml
533
+ - test/fixtures/xml/canadapost_pws/register_token_response.xml
534
+ - test/fixtures/xml/canadapost_pws/service_options_response.xml
535
+ - test/fixtures/xml/canadapost_pws/services_error.xml
536
+ - test/fixtures/xml/canadapost_pws/services_response.xml
537
+ - test/fixtures/xml/canadapost_pws/shipment_domestic.xml
538
+ - test/fixtures/xml/canadapost_pws/shipment_response.xml
539
+ - test/fixtures/xml/canadapost_pws/shipment_us.xml
540
+ - test/fixtures/xml/canadapost_pws/tracking_details_en.xml
541
+ - test/fixtures/xml/canadapost_pws/tracking_details_en_error.xml
542
+ - test/fixtures/xml/canadapost_pws/tracking_details_en_undelivered.xml
543
+ - test/fixtures/xml/canadapost_pws/tracking_details_fr.xml
544
+ - test/fixtures/xml/canadapost_pws/tracking_details_no_expected_delivery_date.xml
545
+ - test/fixtures/xml/fedex/create_shipment_response.xml
546
+ - test/fixtures/xml/fedex/freight_rate_request.xml
547
+ - test/fixtures/xml/fedex/freight_rate_response.xml
548
+ - test/fixtures/xml/fedex/invalid_fedex_reply.xml
549
+ - test/fixtures/xml/fedex/ottawa_to_beverly_hills_commercial_rate_request.xml
550
+ - test/fixtures/xml/fedex/ottawa_to_beverly_hills_no_saturday_rate_request.xml
551
+ - test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_request.xml
552
+ - test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_response.xml
553
+ - test/fixtures/xml/fedex/raterequest_reply.xml
554
+ - test/fixtures/xml/fedex/raterequest_response_with_ground_home_delivery.xml
555
+ - test/fixtures/xml/fedex/reply_without_notifications.xml
556
+ - test/fixtures/xml/fedex/tracking_request.xml
557
+ - test/fixtures/xml/fedex/tracking_response_bad_tracking_number.xml
558
+ - test/fixtures/xml/fedex/tracking_response_delivered_at_door.xml
559
+ - test/fixtures/xml/fedex/tracking_response_delivered_at_facility.xml
560
+ - test/fixtures/xml/fedex/tracking_response_delivered_with_signature.xml
561
+ - test/fixtures/xml/fedex/tracking_response_empty_status_detail.xml
562
+ - test/fixtures/xml/fedex/tracking_response_failure_code_9045.xml
563
+ - test/fixtures/xml/fedex/tracking_response_failure_code_9080.xml
564
+ - test/fixtures/xml/fedex/tracking_response_in_transit.xml
565
+ - test/fixtures/xml/fedex/tracking_response_invalid_tracking_number.xml
566
+ - test/fixtures/xml/fedex/tracking_response_missing_status_code.xml
567
+ - test/fixtures/xml/fedex/tracking_response_multiple_results.xml
568
+ - test/fixtures/xml/fedex/tracking_response_not_found.xml
569
+ - test/fixtures/xml/fedex/tracking_response_shipment_exception.xml
570
+ - test/fixtures/xml/fedex/tracking_response_unable_to_process.xml
571
+ - test/fixtures/xml/fedex/tracking_response_with_blank_state.xml
572
+ - test/fixtures/xml/fedex/unknown_fedex_document_reply.xml
573
+ - test/fixtures/xml/kunaki/invalid_state_response.xml
574
+ - test/fixtures/xml/kunaki/no_valid_items_response.xml
575
+ - test/fixtures/xml/kunaki/successful_rates_response.xml
576
+ - test/fixtures/xml/kunaki/unsuccessful_rates_response.xml
577
+ - test/fixtures/xml/shipwire/international_rates_response.xml
578
+ - test/fixtures/xml/shipwire/new_carrier_rate_response.xml
579
+ - test/fixtures/xml/shipwire/no_rates_response.xml
580
+ - test/fixtures/xml/shipwire/rates_response.xml
581
+ - test/fixtures/xml/shipwire/rates_response_no_estimate.xml
582
+ - test/fixtures/xml/stamps/authenticate_user_request.xml
583
+ - test/fixtures/xml/stamps/authenticate_user_response.xml
584
+ - test/fixtures/xml/stamps/cleanse_address_request.xml
585
+ - test/fixtures/xml/stamps/cleanse_address_response.xml
586
+ - test/fixtures/xml/stamps/create_indicium_request.xml
587
+ - test/fixtures/xml/stamps/create_indicium_response.xml
588
+ - test/fixtures/xml/stamps/expired_authenticator_response.xml
589
+ - test/fixtures/xml/stamps/get_account_info_request.xml
590
+ - test/fixtures/xml/stamps/get_account_info_response.xml
591
+ - test/fixtures/xml/stamps/get_purchase_status_request.xml
592
+ - test/fixtures/xml/stamps/get_purchase_status_response.xml
593
+ - test/fixtures/xml/stamps/get_rates_request.xml
594
+ - test/fixtures/xml/stamps/get_rates_response.xml
595
+ - test/fixtures/xml/stamps/purchase_postage_request.xml
596
+ - test/fixtures/xml/stamps/purchase_postage_response.xml
597
+ - test/fixtures/xml/stamps/track_shipment_request.xml
598
+ - test/fixtures/xml/stamps/track_shipment_response.xml
599
+ - test/fixtures/xml/ups/access_request.xml
600
+ - test/fixtures/xml/ups/delivered_shipment_with_refund.xml
601
+ - test/fixtures/xml/ups/delivered_shipment_without_events_tracking_response.xml
602
+ - test/fixtures/xml/ups/delivery_dates_response.xml
603
+ - test/fixtures/xml/ups/example_tracking_response.xml
604
+ - test/fixtures/xml/ups/in_transit_shipment.xml
605
+ - test/fixtures/xml/ups/out_for_delivery_shipment.xml
606
+ - test/fixtures/xml/ups/package_exceeds_maximum_length.xml
607
+ - test/fixtures/xml/ups/rate_single_service.xml
608
+ - test/fixtures/xml/ups/rescheduled_shipment.xml
609
+ - test/fixtures/xml/ups/shipment_accept_response.xml
610
+ - test/fixtures/xml/ups/shipment_confirm_response.xml
611
+ - test/fixtures/xml/ups/shipment_from_tiger_direct.xml
612
+ - test/fixtures/xml/ups/test_real_home_as_residential_destination_response.xml
613
+ - test/fixtures/xml/ups/test_real_home_as_residential_destination_response_with_insured.xml
614
+ - test/fixtures/xml/ups/test_real_home_as_residential_destination_with_origin_account_response.xml
615
+ - test/fixtures/xml/ups/tracking_request.xml
616
+ - test/fixtures/xml/ups/triple_accept_response.xml
617
+ - test/fixtures/xml/ups/triple_confirm_response.xml
618
+ - test/fixtures/xml/ups/void_shipment_response.xml
619
+ - test/fixtures/xml/usps/api_error_rate_response.xml
620
+ - test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_base_rate_response.xml
621
+ - test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_plus_rate_response.xml
622
+ - test/fixtures/xml/usps/beverly_hills_to_new_york_book_rate_response.xml
623
+ - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_base_rate_response.xml
624
+ - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_plus_rate_response.xml
625
+ - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_rate_response.xml
626
+ - test/fixtures/xml/usps/first_class_packages_with_invalid_mail_type_response.xml
627
+ - test/fixtures/xml/usps/first_class_packages_with_mail_type_response.xml
628
+ - test/fixtures/xml/usps/first_class_packages_without_mail_type_response.xml
629
+ - test/fixtures/xml/usps/invalid_xml_response.xml
630
+ - test/fixtures/xml/usps/invalid_xml_tracking_response_error.xml
631
+ - test/fixtures/xml/usps/tracking_request.xml
632
+ - test/fixtures/xml/usps/tracking_request_batch.xml
633
+ - test/fixtures/xml/usps/tracking_response.xml
634
+ - test/fixtures/xml/usps/tracking_response_alt.xml
635
+ - test/fixtures/xml/usps/tracking_response_batch.xml
636
+ - test/fixtures/xml/usps/tracking_response_failure.xml
637
+ - test/fixtures/xml/usps/tracking_response_not_available.xml
638
+ - test/fixtures/xml/usps/tracking_response_test_error.xml
639
+ - test/fixtures/xml/usps/us_rate_request.xml
640
+ - test/fixtures/xml/usps/us_rate_request_large.xml
641
+ - test/fixtures/xml/usps/world_rate_request_only_country.xml
642
+ - test/fixtures/xml/usps/world_rate_request_with_value.xml
643
+ - test/fixtures/xml/usps/world_rate_request_without_value.xml
644
+ - test/fixtures/xml/usps_returns/external_return_label_response.xml
645
+ - test/fixtures/xml/usps_returns/external_return_label_response_failure.xml
646
+ - test/remote/australia_post_test.rb
647
+ - test/remote/canada_post_pws_platform_test.rb
648
+ - test/remote/canada_post_pws_test.rb
649
+ - test/remote/canada_post_test.rb
650
+ - test/remote/fedex_test.rb
651
+ - test/remote/kunaki_test.rb
652
+ - test/remote/new_zealand_post_test.rb
653
+ - test/remote/shipwire_test.rb
654
+ - test/remote/stamps_test.rb
655
+ - test/remote/usps_returns_test.rb
656
+ - test/remote/usps_test.rb
657
+ - test/test_helper.rb
658
+ - test/unit/carrier_test.rb
659
+ - test/unit/carriers/australia_post_test.rb
660
+ - test/unit/carriers/benchmark_test.rb
661
+ - test/unit/carriers/canada_post_pws_rating_test.rb
662
+ - test/unit/carriers/canada_post_pws_register_test.rb
663
+ - test/unit/carriers/canada_post_pws_shipping_test.rb
664
+ - test/unit/carriers/canada_post_pws_test.rb
665
+ - test/unit/carriers/canada_post_pws_tracking_test.rb
666
+ - test/unit/carriers/canada_post_test.rb
667
+ - test/unit/carriers/fedex_test.rb
668
+ - test/unit/carriers/kunaki_test.rb
669
+ - test/unit/carriers/new_zealand_post_test.rb
670
+ - test/unit/carriers/shipwire_test.rb
671
+ - test/unit/carriers/stamps_test.rb
672
+ - test/unit/carriers/ups_test.rb
673
+ - test/unit/carriers/usps_returns_test.rb
674
+ - test/unit/carriers/usps_test.rb
675
+ - test/unit/carriers_test.rb
676
+ - test/unit/external_return_label_request_test.rb
677
+ - test/unit/location_test.rb
678
+ - test/unit/package_item_test.rb
679
+ - test/unit/package_test.rb
680
+ - test/unit/rate_estimate_test.rb
681
+ - test/unit/response_test.rb
682
+ - test/unit/shipment_event_test.rb
683
+ - test/unit/shipment_packer_test.rb
684
+ - test/unit/tracking_response_test.rb