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.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.travis.yml +33 -0
- data/.yardopts +13 -0
- data/CHANGELOG.md +225 -0
- data/CONTRIBUTING.md +23 -0
- data/Gemfile +3 -0
- data/MIT-LICENSE +21 -0
- data/README.md +158 -0
- data/Rakefile +35 -0
- data/dev.yml +17 -0
- data/gemfiles/activesupport42.gemfile +5 -0
- data/gemfiles/activesupport50.gemfile +6 -0
- data/gemfiles/activesupport51.gemfile +5 -0
- data/gemfiles/activesupport52.gemfile +5 -0
- data/gemfiles/activesupport_master.gemfile +5 -0
- data/lib/certs/eParcel.dtd +111 -0
- data/lib/reactive_shipping.rb +26 -0
- data/lib/reactive_shipping/address_validation_response.rb +30 -0
- data/lib/reactive_shipping/carrier.rb +184 -0
- data/lib/reactive_shipping/carriers.rb +35 -0
- data/lib/reactive_shipping/carriers/australia_post.rb +248 -0
- data/lib/reactive_shipping/carriers/benchmark_carrier.rb +31 -0
- data/lib/reactive_shipping/carriers/bogus_carrier.rb +12 -0
- data/lib/reactive_shipping/carriers/canada_post.rb +263 -0
- data/lib/reactive_shipping/carriers/canada_post_pws.rb +908 -0
- data/lib/reactive_shipping/carriers/fedex.rb +797 -0
- data/lib/reactive_shipping/carriers/kunaki.rb +155 -0
- data/lib/reactive_shipping/carriers/new_zealand_post.rb +260 -0
- data/lib/reactive_shipping/carriers/shipwire.rb +178 -0
- data/lib/reactive_shipping/carriers/stamps.rb +860 -0
- data/lib/reactive_shipping/carriers/ups.rb +1060 -0
- data/lib/reactive_shipping/carriers/usps.rb +708 -0
- data/lib/reactive_shipping/carriers/usps_returns.rb +86 -0
- data/lib/reactive_shipping/delivery_date_estimate.rb +20 -0
- data/lib/reactive_shipping/delivery_date_estimates_response.rb +11 -0
- data/lib/reactive_shipping/errors.rb +35 -0
- data/lib/reactive_shipping/external_return_label_request.rb +417 -0
- data/lib/reactive_shipping/external_return_label_response.rb +26 -0
- data/lib/reactive_shipping/label.rb +10 -0
- data/lib/reactive_shipping/label_response.rb +10 -0
- data/lib/reactive_shipping/location.rb +166 -0
- data/lib/reactive_shipping/package.rb +165 -0
- data/lib/reactive_shipping/package_item.rb +60 -0
- data/lib/reactive_shipping/rate_estimate.rb +197 -0
- data/lib/reactive_shipping/rate_response.rb +33 -0
- data/lib/reactive_shipping/response.rb +44 -0
- data/lib/reactive_shipping/shipment_event.rb +22 -0
- data/lib/reactive_shipping/shipment_packer.rb +108 -0
- data/lib/reactive_shipping/shipping_response.rb +34 -0
- data/lib/reactive_shipping/tracking_response.rb +120 -0
- data/lib/reactive_shipping/version.rb +3 -0
- data/reactive_shipping.gemspec +38 -0
- data/shipit.rubygems.yml +1 -0
- data/test/console.rb +39 -0
- data/test/credentials.yml +76 -0
- data/test/fixtures/files/label1.pdf +0 -0
- data/test/fixtures/files/ups-shipping-label.gif +0 -0
- data/test/fixtures/json/australia_post/calculate_domestic.json +13 -0
- data/test/fixtures/json/australia_post/calculate_domestic_2.json +19 -0
- data/test/fixtures/json/australia_post/calculate_international.json +12 -0
- data/test/fixtures/json/australia_post/calculate_international_2.json +15 -0
- data/test/fixtures/json/australia_post/error_message.json +5 -0
- data/test/fixtures/json/australia_post/service_domestic.json +117 -0
- data/test/fixtures/json/australia_post/service_domestic_2.json +117 -0
- data/test/fixtures/json/australia_post/service_international.json +76 -0
- data/test/fixtures/json/australia_post/service_international_2.json +59 -0
- data/test/fixtures/json/newzealandpost/domestic_book.json +1 -0
- data/test/fixtures/json/newzealandpost/domestic_default.json +1 -0
- data/test/fixtures/json/newzealandpost/domestic_error.json +1 -0
- data/test/fixtures/json/newzealandpost/domestic_poster.json +1 -0
- data/test/fixtures/json/newzealandpost/domestic_small_half_pound.json +1 -0
- data/test/fixtures/json/newzealandpost/international_book.json +1 -0
- data/test/fixtures/json/newzealandpost/international_new_zealand_wii.json +1 -0
- data/test/fixtures/json/newzealandpost/international_small_half_pound.json +1 -0
- data/test/fixtures/json/newzealandpost/international_wii.json +1 -0
- data/test/fixtures/xml/canadapost/example_request.xml +25 -0
- data/test/fixtures/xml/canadapost/example_response.xml +130 -0
- data/test/fixtures/xml/canadapost/example_response_error.xml +16 -0
- data/test/fixtures/xml/canadapost/example_response_french.xml +122 -0
- data/test/fixtures/xml/canadapost/example_response_with_nil_value.xml +164 -0
- data/test/fixtures/xml/canadapost/example_response_with_postal_outlet.xml +155 -0
- data/test/fixtures/xml/canadapost/example_response_with_postal_outlet_french.xml +274 -0
- data/test/fixtures/xml/canadapost/example_response_with_strange_delivery_date.xml +130 -0
- data/test/fixtures/xml/canadapost_pws/dnc_tracking_details_en.xml +112 -0
- data/test/fixtures/xml/canadapost_pws/merchant_details_error.xml +7 -0
- data/test/fixtures/xml/canadapost_pws/merchant_details_response.xml +7 -0
- data/test/fixtures/xml/canadapost_pws/option_response.xml +13 -0
- data/test/fixtures/xml/canadapost_pws/option_response_no_conflicts.xml +7 -0
- data/test/fixtures/xml/canadapost_pws/rates_info.xml +190 -0
- data/test/fixtures/xml/canadapost_pws/rates_info_error.xml +7 -0
- data/test/fixtures/xml/canadapost_pws/receipt_response.xml +42 -0
- data/test/fixtures/xml/canadapost_pws/receipt_response_no_priced_options.xml +36 -0
- data/test/fixtures/xml/canadapost_pws/register_token_error.xml +7 -0
- data/test/fixtures/xml/canadapost_pws/register_token_response.xml +3 -0
- data/test/fixtures/xml/canadapost_pws/service_options_response.xml +42 -0
- data/test/fixtures/xml/canadapost_pws/services_error.xml +6 -0
- data/test/fixtures/xml/canadapost_pws/services_response.xml +32 -0
- data/test/fixtures/xml/canadapost_pws/shipment_domestic.xml +69 -0
- data/test/fixtures/xml/canadapost_pws/shipment_response.xml +20 -0
- data/test/fixtures/xml/canadapost_pws/shipment_us.xml +69 -0
- data/test/fixtures/xml/canadapost_pws/tracking_details_en.xml +152 -0
- data/test/fixtures/xml/canadapost_pws/tracking_details_en_error.xml +7 -0
- data/test/fixtures/xml/canadapost_pws/tracking_details_en_undelivered.xml +116 -0
- data/test/fixtures/xml/canadapost_pws/tracking_details_fr.xml +156 -0
- data/test/fixtures/xml/canadapost_pws/tracking_details_no_expected_delivery_date.xml +40 -0
- data/test/fixtures/xml/fedex/create_shipment_response.xml +2 -0
- data/test/fixtures/xml/fedex/freight_rate_request.xml +82 -0
- data/test/fixtures/xml/fedex/freight_rate_response.xml +506 -0
- data/test/fixtures/xml/fedex/invalid_fedex_reply.xml +27 -0
- data/test/fixtures/xml/fedex/ottawa_to_beverly_hills_commercial_rate_request.xml +79 -0
- data/test/fixtures/xml/fedex/ottawa_to_beverly_hills_no_saturday_rate_request.xml +79 -0
- data/test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_request.xml +80 -0
- data/test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_response.xml +214 -0
- data/test/fixtures/xml/fedex/raterequest_reply.xml +213 -0
- data/test/fixtures/xml/fedex/raterequest_response_with_ground_home_delivery.xml +206 -0
- data/test/fixtures/xml/fedex/reply_without_notifications.xml +185 -0
- data/test/fixtures/xml/fedex/tracking_request.xml +29 -0
- data/test/fixtures/xml/fedex/tracking_response_bad_tracking_number.xml +20 -0
- data/test/fixtures/xml/fedex/tracking_response_delivered_at_door.xml +254 -0
- data/test/fixtures/xml/fedex/tracking_response_delivered_at_facility.xml +403 -0
- data/test/fixtures/xml/fedex/tracking_response_delivered_with_signature.xml +269 -0
- data/test/fixtures/xml/fedex/tracking_response_empty_status_detail.xml +84 -0
- data/test/fixtures/xml/fedex/tracking_response_failure_code_9045.xml +52 -0
- data/test/fixtures/xml/fedex/tracking_response_failure_code_9080.xml +51 -0
- data/test/fixtures/xml/fedex/tracking_response_in_transit.xml +127 -0
- data/test/fixtures/xml/fedex/tracking_response_invalid_tracking_number.xml +52 -0
- data/test/fixtures/xml/fedex/tracking_response_missing_status_code.xml +89 -0
- data/test/fixtures/xml/fedex/tracking_response_multiple_results.xml +100 -0
- data/test/fixtures/xml/fedex/tracking_response_not_found.xml +52 -0
- data/test/fixtures/xml/fedex/tracking_response_shipment_exception.xml +209 -0
- data/test/fixtures/xml/fedex/tracking_response_unable_to_process.xml +32 -0
- data/test/fixtures/xml/fedex/tracking_response_with_blank_state.xml +107 -0
- data/test/fixtures/xml/fedex/unknown_fedex_document_reply.xml +3 -0
- data/test/fixtures/xml/kunaki/invalid_state_response.xml +3 -0
- data/test/fixtures/xml/kunaki/no_valid_items_response.xml +3 -0
- data/test/fixtures/xml/kunaki/successful_rates_response.xml +3 -0
- data/test/fixtures/xml/kunaki/unsuccessful_rates_response.xml +9 -0
- data/test/fixtures/xml/shipwire/international_rates_response.xml +17 -0
- data/test/fixtures/xml/shipwire/new_carrier_rate_response.xml +18 -0
- data/test/fixtures/xml/shipwire/no_rates_response.xml +7 -0
- data/test/fixtures/xml/shipwire/rates_response.xml +36 -0
- data/test/fixtures/xml/shipwire/rates_response_no_estimate.xml +14 -0
- data/test/fixtures/xml/stamps/authenticate_user_request.xml +15 -0
- data/test/fixtures/xml/stamps/authenticate_user_response.xml +10 -0
- data/test/fixtures/xml/stamps/cleanse_address_request.xml +19 -0
- data/test/fixtures/xml/stamps/cleanse_address_response.xml +27 -0
- data/test/fixtures/xml/stamps/create_indicium_request.xml +69 -0
- data/test/fixtures/xml/stamps/create_indicium_response.xml +40 -0
- data/test/fixtures/xml/stamps/expired_authenticator_response.xml +15 -0
- data/test/fixtures/xml/stamps/get_account_info_request.xml +11 -0
- data/test/fixtures/xml/stamps/get_account_info_response.xml +36 -0
- data/test/fixtures/xml/stamps/get_purchase_status_request.xml +12 -0
- data/test/fixtures/xml/stamps/get_purchase_status_response.xml +16 -0
- data/test/fixtures/xml/stamps/get_rates_request.xml +19 -0
- data/test/fixtures/xml/stamps/get_rates_response.xml +351 -0
- data/test/fixtures/xml/stamps/purchase_postage_request.xml +13 -0
- data/test/fixtures/xml/stamps/purchase_postage_response.xml +17 -0
- data/test/fixtures/xml/stamps/track_shipment_request.xml +12 -0
- data/test/fixtures/xml/stamps/track_shipment_response.xml +45 -0
- data/test/fixtures/xml/ups/access_request.xml +6 -0
- data/test/fixtures/xml/ups/delivered_shipment_with_refund.xml +290 -0
- data/test/fixtures/xml/ups/delivered_shipment_without_events_tracking_response.xml +62 -0
- data/test/fixtures/xml/ups/delivery_dates_response.xml +140 -0
- data/test/fixtures/xml/ups/example_tracking_response.xml +53 -0
- data/test/fixtures/xml/ups/in_transit_shipment.xml +183 -0
- data/test/fixtures/xml/ups/out_for_delivery_shipment.xml +165 -0
- data/test/fixtures/xml/ups/package_exceeds_maximum_length.xml +12 -0
- data/test/fixtures/xml/ups/rate_single_service.xml +54 -0
- data/test/fixtures/xml/ups/rescheduled_shipment.xml +204 -0
- data/test/fixtures/xml/ups/shipment_accept_response.xml +42 -0
- data/test/fixtures/xml/ups/shipment_confirm_response.xml +33 -0
- data/test/fixtures/xml/ups/shipment_from_tiger_direct.xml +222 -0
- data/test/fixtures/xml/ups/test_real_home_as_residential_destination_response.xml +290 -0
- data/test/fixtures/xml/ups/test_real_home_as_residential_destination_response_with_insured.xml +289 -0
- data/test/fixtures/xml/ups/test_real_home_as_residential_destination_with_origin_account_response.xml +311 -0
- data/test/fixtures/xml/ups/tracking_request.xml +9 -0
- data/test/fixtures/xml/ups/triple_accept_response.xml +72 -0
- data/test/fixtures/xml/ups/triple_confirm_response.xml +32 -0
- data/test/fixtures/xml/ups/void_shipment_response.xml +11 -0
- data/test/fixtures/xml/usps/api_error_rate_response.xml +53 -0
- data/test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_base_rate_response.xml +2 -0
- data/test/fixtures/xml/usps/beverly_hills_to_new_york_book_commercial_plus_rate_response.xml +258 -0
- data/test/fixtures/xml/usps/beverly_hills_to_new_york_book_rate_response.xml +108 -0
- data/test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_base_rate_response.xml +84 -0
- data/test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_plus_rate_response.xml +212 -0
- data/test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_rate_response.xml +230 -0
- data/test/fixtures/xml/usps/first_class_packages_with_invalid_mail_type_response.xml +12 -0
- data/test/fixtures/xml/usps/first_class_packages_with_mail_type_response.xml +16 -0
- data/test/fixtures/xml/usps/first_class_packages_without_mail_type_response.xml +12 -0
- data/test/fixtures/xml/usps/invalid_xml_response.xml +10 -0
- data/test/fixtures/xml/usps/invalid_xml_tracking_response_error.xml +2 -0
- data/test/fixtures/xml/usps/tracking_request.xml +10 -0
- data/test/fixtures/xml/usps/tracking_request_batch.xml +12 -0
- data/test/fixtures/xml/usps/tracking_response.xml +162 -0
- data/test/fixtures/xml/usps/tracking_response_alt.xml +53 -0
- data/test/fixtures/xml/usps/tracking_response_batch.xml +231 -0
- data/test/fixtures/xml/usps/tracking_response_failure.xml +11 -0
- data/test/fixtures/xml/usps/tracking_response_not_available.xml +12 -0
- data/test/fixtures/xml/usps/tracking_response_test_error.xml +8 -0
- data/test/fixtures/xml/usps/us_rate_request.xml +18 -0
- data/test/fixtures/xml/usps/us_rate_request_large.xml +18 -0
- data/test/fixtures/xml/usps/world_rate_request_only_country.xml +22 -0
- data/test/fixtures/xml/usps/world_rate_request_with_value.xml +24 -0
- data/test/fixtures/xml/usps/world_rate_request_without_value.xml +24 -0
- data/test/fixtures/xml/usps_returns/external_return_label_response.xml +2 -0
- data/test/fixtures/xml/usps_returns/external_return_label_response_failure.xml +10 -0
- data/test/remote/australia_post_test.rb +140 -0
- data/test/remote/canada_post_pws_platform_test.rb +259 -0
- data/test/remote/canada_post_pws_test.rb +169 -0
- data/test/remote/canada_post_test.rb +55 -0
- data/test/remote/fedex_test.rb +400 -0
- data/test/remote/kunaki_test.rb +37 -0
- data/test/remote/new_zealand_post_test.rb +149 -0
- data/test/remote/shipwire_test.rb +84 -0
- data/test/remote/stamps_test.rb +396 -0
- data/test/remote/usps_returns_test.rb +72 -0
- data/test/remote/usps_test.rb +243 -0
- data/test/test_helper.rb +296 -0
- data/test/unit/carrier_test.rb +130 -0
- data/test/unit/carriers/australia_post_test.rb +181 -0
- data/test/unit/carriers/benchmark_test.rb +18 -0
- data/test/unit/carriers/canada_post_pws_rating_test.rb +379 -0
- data/test/unit/carriers/canada_post_pws_register_test.rb +76 -0
- data/test/unit/carriers/canada_post_pws_shipping_test.rb +258 -0
- data/test/unit/carriers/canada_post_pws_test.rb +59 -0
- data/test/unit/carriers/canada_post_pws_tracking_test.rb +154 -0
- data/test/unit/carriers/canada_post_test.rb +148 -0
- data/test/unit/carriers/fedex_test.rb +693 -0
- data/test/unit/carriers/kunaki_test.rb +56 -0
- data/test/unit/carriers/new_zealand_post_test.rb +177 -0
- data/test/unit/carriers/shipwire_test.rb +188 -0
- data/test/unit/carriers/stamps_test.rb +245 -0
- data/test/unit/carriers/ups_test.rb +580 -0
- data/test/unit/carriers/usps_returns_test.rb +45 -0
- data/test/unit/carriers/usps_test.rb +633 -0
- data/test/unit/carriers_test.rb +16 -0
- data/test/unit/external_return_label_request_test.rb +258 -0
- data/test/unit/location_test.rb +234 -0
- data/test/unit/package_item_test.rb +232 -0
- data/test/unit/package_test.rb +404 -0
- data/test/unit/rate_estimate_test.rb +93 -0
- data/test/unit/response_test.rb +38 -0
- data/test/unit/shipment_event_test.rb +20 -0
- data/test/unit/shipment_packer_test.rb +212 -0
- data/test/unit/tracking_response_test.rb +41 -0
- metadata +684 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class CarriersTest < ActiveSupport::TestCase
|
|
4
|
+
test ".find searches by string for a carrier and finds USPS" do
|
|
5
|
+
assert_equal ReactiveShipping::USPS, ReactiveShipping::Carriers.find('usps')
|
|
6
|
+
assert_equal ReactiveShipping::USPS, ReactiveShipping::Carriers.find('USPS')
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
test ".find searches by symbol for a carrier and finds USPS" do
|
|
10
|
+
assert_equal ReactiveShipping::USPS, ReactiveShipping::Carriers.find(:usps)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
test ".find raises with an unknown carrier" do
|
|
14
|
+
assert_raises(NameError) { ReactiveShipping::Carriers.find(:polar_north) }
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class ExternalReturnLabelRequestTest < ActiveSupport::TestCase
|
|
4
|
+
include ReactiveShipping::Test::Fixtures
|
|
5
|
+
|
|
6
|
+
setup do
|
|
7
|
+
@external_request_label_req =
|
|
8
|
+
ExternalReturnLabelRequest.from_hash(
|
|
9
|
+
customer_name: "Test Customer",
|
|
10
|
+
customer_address1: "122 Hudson St.",
|
|
11
|
+
customer_city: "New York",
|
|
12
|
+
customer_state: "NY",
|
|
13
|
+
customer_zipcode: "10013",
|
|
14
|
+
label_format: "No Instructions",
|
|
15
|
+
label_definition: "4X6",
|
|
16
|
+
service_type_code: "044",
|
|
17
|
+
merchant_account_id: "12345",
|
|
18
|
+
mid: "12345678",
|
|
19
|
+
call_center_or_self_service: "Customer",
|
|
20
|
+
address_override_notification: "true",
|
|
21
|
+
)
|
|
22
|
+
@email = "no-reply@example.com"
|
|
23
|
+
@invalid_email = "not_a_valid_email"
|
|
24
|
+
@anything = "Any string"
|
|
25
|
+
@blank_values = ["", " "]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
test "#recipient_bcc raises on an invalid email" do
|
|
29
|
+
assert_raises(USPSValidationError) do
|
|
30
|
+
@external_request_label_req.recipient_bcc = @invalid_email
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
test "#recipient_bcc assigns the email" do
|
|
35
|
+
@external_request_label_req.recipient_bcc = @email
|
|
36
|
+
assert_equal @email, @external_request_label_req.recipient_bcc
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
test "#recipient_email raises if invalid" do
|
|
40
|
+
assert_raises(USPSValidationError) do
|
|
41
|
+
@external_request_label_req.recipient_email = @invalid_email
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
test "#recipient_email assigns the email" do
|
|
46
|
+
@external_request_label_req.recipient_email = @email
|
|
47
|
+
assert_equal @email, @external_request_label_req.recipient_email
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
test "#recipient_name accepts anything" do
|
|
51
|
+
@external_request_label_req.recipient_name = @anything
|
|
52
|
+
assert_equal @anything, @external_request_label_req.recipient_name
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
test "#sender_email raises if invalid" do
|
|
56
|
+
assert_raises(USPSValidationError) do
|
|
57
|
+
@external_request_label_req.sender_email = @invalid_email
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
test "#sender_email assigns the email" do
|
|
62
|
+
@external_request_label_req.sender_email = @email
|
|
63
|
+
assert_equal @email, @external_request_label_req.sender_email
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
test "#sender_name assigns the value" do
|
|
67
|
+
@external_request_label_req.sender_name = @anything
|
|
68
|
+
assert_equal @anything, @external_request_label_req.sender_name
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
test "#sender_name raises if blank or nil" do
|
|
72
|
+
@blank_values.each do |blank|
|
|
73
|
+
assert_raises(USPSValidationError) do
|
|
74
|
+
@external_request_label_req.sender_name = blank
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
test "#sender_name raises if nil" do
|
|
80
|
+
assert_raises(USPSValidationError) do
|
|
81
|
+
@external_request_label_req.sender_name = nil
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
test "#image_type accepts a valid image type" do
|
|
86
|
+
ExternalReturnLabelRequest::IMAGE_TYPE.each do |type|
|
|
87
|
+
@external_request_label_req.image_type = type.downcase
|
|
88
|
+
assert_equal type, @external_request_label_req.image_type
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
test "#image_type raises on jpg" do
|
|
93
|
+
assert_raises(USPSValidationError) do
|
|
94
|
+
@external_request_label_req.image_type = "jpg"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
test "#call_center_or_self_service accepts the valid values defined" do
|
|
99
|
+
ExternalReturnLabelRequest::CALL_CENTER_OR_SELF_SERVICE.each do |cc_or_cs|
|
|
100
|
+
@external_request_label_req.call_center_or_self_service = cc_or_cs
|
|
101
|
+
assert_equal cc_or_cs, @external_request_label_req.call_center_or_self_service
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
test "#call_center_or_self_service raises on an invalid value" do
|
|
106
|
+
assert_raises(USPSValidationError) do
|
|
107
|
+
@external_request_label_req.call_center_or_self_service = "Invalid"
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
test "#packaging_information accepts a value" do
|
|
112
|
+
@external_request_label_req.packaging_information = @anything
|
|
113
|
+
assert_equal @anything, @external_request_label_req.packaging_information
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
test "#packaging_information accepts blank values" do
|
|
117
|
+
@blank_values.each do |blank|
|
|
118
|
+
@external_request_label_req.packaging_information = blank
|
|
119
|
+
assert_equal "", @external_request_label_req.packaging_information
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
test "#packaging_information raises on a value too long" do
|
|
124
|
+
assert_raises(USPSValidationError) do
|
|
125
|
+
@external_request_label_req.packaging_information = "a" * 16
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
test "#packaging_information2 accepts a value" do
|
|
130
|
+
@external_request_label_req.packaging_information2 = @anything
|
|
131
|
+
assert_equal @anything, @external_request_label_req.packaging_information2
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
test "#packaging_information2 accepts blank values" do
|
|
135
|
+
@blank_values.each do |blank|
|
|
136
|
+
@external_request_label_req.packaging_information2 = blank
|
|
137
|
+
assert_equal "", @external_request_label_req.packaging_information2
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
test "#packaging_information2 raises when a value is too long" do
|
|
142
|
+
assert_raises(USPSValidationError) do
|
|
143
|
+
@external_request_label_req.packaging_information2 = "a" * 16
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
test "#customer_address2 accepts a value" do
|
|
148
|
+
@external_request_label_req.customer_address2 = @anything
|
|
149
|
+
assert_equal @anything, @external_request_label_req.customer_address2
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
test "#customer_address2 accepts blank values" do
|
|
153
|
+
@blank_values.each do |blank|
|
|
154
|
+
@external_request_label_req.customer_address2 = blank
|
|
155
|
+
assert_nil @external_request_label_req.customer_address2
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
test "#customer_address2 accepts nil" do
|
|
160
|
+
@external_request_label_req.customer_address2 = nil
|
|
161
|
+
assert_nil @external_request_label_req.customer_address2
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
test "#sanitize scrubs strings" do
|
|
165
|
+
assert_equal "", @external_request_label_req.send(:sanitize,' ')
|
|
166
|
+
assert_equal 'some string', @external_request_label_req.send(:sanitize, 'some string ')
|
|
167
|
+
assert_nil @external_request_label_req.send(:sanitize, {})
|
|
168
|
+
assert_nil @external_request_label_req.send(:sanitize, nil)
|
|
169
|
+
assert_nil @external_request_label_req.send(:sanitize, nil)
|
|
170
|
+
assert_nil @external_request_label_req.send(:sanitize, [])
|
|
171
|
+
assert_equal ExternalReturnLabelRequest::CAP_STRING_LEN, @external_request_label_req.send(:sanitize, (1..100).to_a.join("_")).size
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
test "#to_bool coerces true values" do
|
|
175
|
+
assert_equal true, @external_request_label_req.send(:to_bool, 'yes')
|
|
176
|
+
assert_equal true, @external_request_label_req.send(:to_bool, 'true')
|
|
177
|
+
assert_equal true, @external_request_label_req.send(:to_bool, true)
|
|
178
|
+
assert_equal true, @external_request_label_req.send(:to_bool, '1')
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
test "#to_bool coerces false values" do
|
|
182
|
+
assert_equal false, @external_request_label_req.send(:to_bool, '0')
|
|
183
|
+
assert_equal false, @external_request_label_req.send(:to_bool, 'false')
|
|
184
|
+
assert_equal false, @external_request_label_req.send(:to_bool, false)
|
|
185
|
+
assert_equal false, @external_request_label_req.send(:to_bool, nil, false)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
test "#validate_range" do
|
|
189
|
+
assert_raises(USPSValidationError) do
|
|
190
|
+
@external_request_label_req.send(:validate_range, '1', 5, 10, __method__)
|
|
191
|
+
end
|
|
192
|
+
assert_raises(USPSValidationError) do
|
|
193
|
+
@external_request_label_req.send(:validate_range, '', 1, 10, __method__)
|
|
194
|
+
end
|
|
195
|
+
@external_request_label_req.send(:validate_range, '5 char', 3, 10, __method__)
|
|
196
|
+
@external_request_label_req.send(:validate_range, '5 char', nil, 10, __method__)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
test "#validate_string_length" do
|
|
200
|
+
assert_raises(USPSValidationError) do
|
|
201
|
+
@external_request_label_req.send(:validate_string_length, '14 char string', 13, __method__)
|
|
202
|
+
end
|
|
203
|
+
assert_raises(USPSValidationError) do
|
|
204
|
+
@external_request_label_req.send(:validate_string_length, '14 char string', nil, __method__)
|
|
205
|
+
end
|
|
206
|
+
@external_request_label_req.send(:validate_string_length, '14 char string', 14, __method__)
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
test "#validate_set_inclusion" do
|
|
210
|
+
assert_raises(USPSValidationError) do
|
|
211
|
+
@external_request_label_req.send(:validate_set_inclusion, 'not_in_set', ['v1','v2','v3'], __method__)
|
|
212
|
+
end
|
|
213
|
+
assert_raises(USPSValidationError) do
|
|
214
|
+
@external_request_label_req.send(:validate_set_inclusion, 'not_in_set', nil, __method__)
|
|
215
|
+
end
|
|
216
|
+
@external_request_label_req.send(:validate_set_inclusion, 'v1', ['v1','v2','v3'], __method__)
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
test "#validate_email" do
|
|
220
|
+
assert_raises(USPSValidationError) do
|
|
221
|
+
@external_request_label_req.send(:validate_email, @invalid_email, __method__)
|
|
222
|
+
end
|
|
223
|
+
assert_raises(USPSValidationError) do
|
|
224
|
+
@external_request_label_req.send(:validate_email, " ", __method__)
|
|
225
|
+
end
|
|
226
|
+
assert_equal @email, @external_request_label_req.send(:validate_email, @email, __method__)
|
|
227
|
+
assert_equal @email, @external_request_label_req.send(:validate_email, " #{@email} ", __method__)
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
test "#initialize raises with no tag" do
|
|
231
|
+
assert_raises(USPSMissingRequiredTagError) { ExternalReturnLabelRequest.new }
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
test "#initialize passes with valid values and that every key is necessary" do
|
|
235
|
+
sample_hash = {
|
|
236
|
+
:customer_name => "Test Customer",
|
|
237
|
+
:customer_address1 => "122 Hudson St.",
|
|
238
|
+
:customer_city => "New York",
|
|
239
|
+
:customer_state => "NY",
|
|
240
|
+
:customer_zipcode => "10013",
|
|
241
|
+
:label_format => "No Instructions",
|
|
242
|
+
:label_definition => "4X6",
|
|
243
|
+
:service_type_code => "044",
|
|
244
|
+
:merchant_account_id => "12345",
|
|
245
|
+
:mid => "12345678",
|
|
246
|
+
:call_center_or_self_service => "Customer",
|
|
247
|
+
:address_override_notification => "true"
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
assert ExternalReturnLabelRequest.from_hash(sample_hash)
|
|
251
|
+
|
|
252
|
+
sample_hash.keys.each do |k|
|
|
253
|
+
assert_raises(USPSMissingRequiredTagError) do
|
|
254
|
+
ExternalReturnLabelRequest.from_hash(sample_hash.reject {|k, v| k })
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
end
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class LocationTest < ActiveSupport::TestCase
|
|
4
|
+
include ReactiveShipping::Test::Fixtures
|
|
5
|
+
|
|
6
|
+
setup do
|
|
7
|
+
@location = location_fixtures[:ottawa]
|
|
8
|
+
@address2 = 'Apt 613'
|
|
9
|
+
@address3 = 'Victory Lane'
|
|
10
|
+
@attributes_hash = {
|
|
11
|
+
country: 'CA',
|
|
12
|
+
zip: '90210',
|
|
13
|
+
territory_code: 'QC',
|
|
14
|
+
town: 'Perth',
|
|
15
|
+
address: '66 Gregory Ave.',
|
|
16
|
+
phone: '515-555-1212',
|
|
17
|
+
fax_number: 'none to speak of',
|
|
18
|
+
email: 'bob.bobsen@gmail.com',
|
|
19
|
+
address_type: :commercial,
|
|
20
|
+
name: "Bob Bobsen",
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test "#initialize sets a country object" do
|
|
25
|
+
assert_instance_of ActiveUtils::Country, @location.country
|
|
26
|
+
assert_equal 'CA', @location.country_code(:alpha2)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
test ".from sets up the location from a hash" do
|
|
30
|
+
location = Location.from(@attributes_hash)
|
|
31
|
+
|
|
32
|
+
assert_equal @attributes_hash[:country], location.country_code(:alpha2)
|
|
33
|
+
assert_equal @attributes_hash[:zip], location.zip
|
|
34
|
+
assert_equal @attributes_hash[:territory_code], location.province
|
|
35
|
+
assert_equal @attributes_hash[:town], location.city
|
|
36
|
+
assert_equal @attributes_hash[:address], location.address1
|
|
37
|
+
assert_equal @attributes_hash[:phone], location.phone
|
|
38
|
+
assert_equal @attributes_hash[:fax_number], location.fax
|
|
39
|
+
assert_equal @attributes_hash[:email], location.email
|
|
40
|
+
assert_equal @attributes_hash[:address_type].to_s, location.address_type
|
|
41
|
+
assert_equal @attributes_hash[:name], location.name
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
test ".from sets from an object with properties" do
|
|
45
|
+
object = Class.new do
|
|
46
|
+
def initialize(hash)
|
|
47
|
+
@hash = hash
|
|
48
|
+
end
|
|
49
|
+
def method_missing(method)
|
|
50
|
+
@hash[method]
|
|
51
|
+
end
|
|
52
|
+
def respond_to?(method)
|
|
53
|
+
return false if method == :[]
|
|
54
|
+
true
|
|
55
|
+
end
|
|
56
|
+
end.new(@attributes_hash)
|
|
57
|
+
|
|
58
|
+
location = Location.from(object)
|
|
59
|
+
|
|
60
|
+
assert_equal @attributes_hash[:country], location.country_code(:alpha2)
|
|
61
|
+
assert_equal @attributes_hash[:zip], location.zip
|
|
62
|
+
assert_equal @attributes_hash[:territory_code], location.province
|
|
63
|
+
assert_equal @attributes_hash[:town], location.city
|
|
64
|
+
assert_equal @attributes_hash[:address], location.address1
|
|
65
|
+
assert_equal @attributes_hash[:phone], location.phone
|
|
66
|
+
assert_equal @attributes_hash[:fax_number], location.fax
|
|
67
|
+
assert_equal @attributes_hash[:email], location.email
|
|
68
|
+
assert_equal @attributes_hash[:address_type].to_s, location.address_type
|
|
69
|
+
assert_equal @attributes_hash[:name], location.name
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
test ".from adheres to propery order even if hash access is available" do
|
|
73
|
+
object = Class.new do
|
|
74
|
+
def [](index)
|
|
75
|
+
{ province: "California" }[index]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def province_code
|
|
79
|
+
"CA"
|
|
80
|
+
end
|
|
81
|
+
end.new
|
|
82
|
+
assert_equal "CA", Location.from(object).province
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
test ".from sets the name to nil if it is not provided" do
|
|
86
|
+
location = Location.from({})
|
|
87
|
+
assert_nil location.name
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
test ".from sets company and company_name from company" do
|
|
91
|
+
location = Location.from(company: "Mine")
|
|
92
|
+
|
|
93
|
+
assert_equal "Mine", location.company
|
|
94
|
+
assert_equal "Mine", location.company_name
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
test ".from sets company and company_name from company_name" do
|
|
98
|
+
location = Location.from(company_name: "Mine")
|
|
99
|
+
|
|
100
|
+
assert_equal "Mine", location.company
|
|
101
|
+
assert_equal "Mine", location.company_name
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
test ".from prioritizes company" do
|
|
105
|
+
location = Location.from(company_name: "from company_name", company: "from company")
|
|
106
|
+
|
|
107
|
+
assert_equal "from company", location.company
|
|
108
|
+
assert_equal "from company", location.company_name
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
test "#prettyprint outputs a readable string" do
|
|
112
|
+
expected = "110 Laurier Avenue West\nOttawa, ON, K1P 1J1\nCanada"
|
|
113
|
+
assert_equal expected, @location.prettyprint
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
test "#to_s outputs a readable string without newlines" do
|
|
117
|
+
expected = "110 Laurier Avenue West Ottawa, ON, K1P 1J1 Canada"
|
|
118
|
+
assert_equal expected, @location.to_s
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
test "#inspect returns a readable string" do
|
|
122
|
+
expected = "110 Laurier Avenue West\nOttawa, ON, K1P 1J1\nCanada\nPhone: 1-613-580-2400\nFax: 1-613-580-2495\nEmail: bob.bobsen@gmail.com"
|
|
123
|
+
assert_equal expected, @location.inspect
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
test "#address_type= assigns a type of address as commercial" do
|
|
127
|
+
refute @location.commercial?
|
|
128
|
+
|
|
129
|
+
@location.address_type = :commercial
|
|
130
|
+
assert @location.commercial?
|
|
131
|
+
refute @location.residential?
|
|
132
|
+
assert_equal "commercial", @location.address_type
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
test "#address_type= assigns a type of address as residential" do
|
|
136
|
+
refute @location.residential?
|
|
137
|
+
|
|
138
|
+
@location.address_type = :residential
|
|
139
|
+
assert @location.residential?
|
|
140
|
+
refute @location.commercial?
|
|
141
|
+
assert_equal "residential", @location.address_type
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
test "#address_type= raises on an invalid assignment" do
|
|
145
|
+
assert_raises(ArgumentError) do
|
|
146
|
+
@location.address_type = :new_address_type
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
assert_nil @location.address_type
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
test "#address_type= cannot blank out the value as nil" do
|
|
153
|
+
@location.address_type = :residential
|
|
154
|
+
assert @location.residential?
|
|
155
|
+
|
|
156
|
+
@location.address_type = nil
|
|
157
|
+
assert @location.residential?
|
|
158
|
+
assert_equal "residential", @location.address_type
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
test "#address_type= cannot blank out the value as empty string" do
|
|
162
|
+
@location.address_type = :residential
|
|
163
|
+
assert @location.residential?
|
|
164
|
+
|
|
165
|
+
@location.address_type = ""
|
|
166
|
+
assert @location.residential?
|
|
167
|
+
assert_equal "residential", @location.address_type
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
test "#to_hash has the expected attributes" do
|
|
171
|
+
expected = %w(address1 address2 address3 address_type city company_name country email fax name phone postal_code province)
|
|
172
|
+
|
|
173
|
+
assert_equal expected, @location.to_hash.stringify_keys.keys.sort
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
test "#to_json returns the JSON values" do
|
|
177
|
+
expected = JSON.parse(@location.to_json).symbolize_keys
|
|
178
|
+
|
|
179
|
+
assert_equal @location.to_hash, expected
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
test "#zip_plus_4 nil without the extra four" do
|
|
183
|
+
zip = "12345"
|
|
184
|
+
location = Location.from(zip: zip)
|
|
185
|
+
|
|
186
|
+
assert_nil location.zip_plus_4
|
|
187
|
+
assert_equal zip, location.zip
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
test "#zip_plus_4 parses without the dash" do
|
|
191
|
+
zip = "12345-9999"
|
|
192
|
+
zip_without_dash = "123459999"
|
|
193
|
+
location = Location.from(zip: zip_without_dash)
|
|
194
|
+
|
|
195
|
+
assert_equal zip, location.zip_plus_4
|
|
196
|
+
assert_equal zip_without_dash, location.zip
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
test "#zip_plus_4 parses with the dash" do
|
|
200
|
+
zip = "12345-9999"
|
|
201
|
+
location = Location.from(zip: zip)
|
|
202
|
+
|
|
203
|
+
assert_equal zip, location.zip_plus_4
|
|
204
|
+
assert_equal zip, location.zip
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
test "#address2_and_3 shows just address2" do
|
|
208
|
+
location = Location.from(address2: @address2)
|
|
209
|
+
assert_equal 'Apt 613', location.address2_and_3
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
test "#address2_and_3 shows just address3" do
|
|
213
|
+
location = Location.from(address3: @address3)
|
|
214
|
+
assert_equal @address3, location.address2_and_3
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
test "#address2_and_3 shows both address2 and address3" do
|
|
218
|
+
location = Location.from(address2: @address2, address3: @address3)
|
|
219
|
+
assert_equal "#{@address2}, #{@address3}", location.address2_and_3
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
test "#address2_and_3 shows an empty string when address2 and address3 are both blank" do
|
|
223
|
+
assert_nil @location.address2
|
|
224
|
+
assert_nil @location.address3
|
|
225
|
+
assert_equal "", @location.address2_and_3
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
test "#== compares locations by attributes" do
|
|
229
|
+
another_location = Location.from(@location.to_hash)
|
|
230
|
+
|
|
231
|
+
assert_equal @location, another_location
|
|
232
|
+
refute_equal @location, Location.new({})
|
|
233
|
+
end
|
|
234
|
+
end
|