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,169 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RemoteCanadaPostPWSTest < ActiveSupport::TestCase
|
|
4
|
+
# All remote tests require Canada Post development environment credentials
|
|
5
|
+
include ReactiveShipping::Test::Credentials
|
|
6
|
+
include ReactiveShipping::Test::Fixtures
|
|
7
|
+
|
|
8
|
+
def setup
|
|
9
|
+
@login = credentials(:canada_post_pws)
|
|
10
|
+
refute @login.key?(:platform_id), "The 'canada_post_pws' credentials should NOT include a platform ID"
|
|
11
|
+
|
|
12
|
+
# 1000 grams, 93 cm long, 10 cm diameter, cylinders have different volume calculations
|
|
13
|
+
@pkg1 = Package.new(1000, [93, 10, 10], :value => 10.00)
|
|
14
|
+
|
|
15
|
+
@line_item1 = line_item_fixture
|
|
16
|
+
|
|
17
|
+
@shipping_opts1 = { :dc => true, :cov => true, :cov_amount => 100.00, :aban => true }
|
|
18
|
+
|
|
19
|
+
@home_params = {
|
|
20
|
+
:name => "John Smith",
|
|
21
|
+
:company => "test",
|
|
22
|
+
:phone => "613-555-1212",
|
|
23
|
+
:address1 => "123 Elm St.",
|
|
24
|
+
:city => 'Ottawa',
|
|
25
|
+
:province => 'ON',
|
|
26
|
+
:country => 'CA',
|
|
27
|
+
:postal_code => 'K1P 1J1'
|
|
28
|
+
}
|
|
29
|
+
@home = Location.new(@home_params)
|
|
30
|
+
|
|
31
|
+
@dom_params = {
|
|
32
|
+
:name => "John Smith Sr.",
|
|
33
|
+
:company => "",
|
|
34
|
+
:phone => '123-123-1234',
|
|
35
|
+
:address1 => "5500 Oak Ave",
|
|
36
|
+
:city => 'Vancouver',
|
|
37
|
+
:province => 'BC',
|
|
38
|
+
:country => 'CA',
|
|
39
|
+
:postal_code => 'V5J 2T4'
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@dest_params = {
|
|
43
|
+
:name => "Frank White",
|
|
44
|
+
:phone => '123-123-1234',
|
|
45
|
+
:address1 => '999 Wiltshire Blvd',
|
|
46
|
+
:city => 'Beverly Hills',
|
|
47
|
+
:state => 'CA',
|
|
48
|
+
:country => 'US',
|
|
49
|
+
:zip => '90210'
|
|
50
|
+
}
|
|
51
|
+
@dest = Location.new(@dest_params)
|
|
52
|
+
|
|
53
|
+
@dom_params = {
|
|
54
|
+
:name => "Mrs. Smith",
|
|
55
|
+
:company => "",
|
|
56
|
+
:phone => "604-555-1212",
|
|
57
|
+
:address1 => "5000 Oak St.",
|
|
58
|
+
:address2 => "",
|
|
59
|
+
:city => 'Vancouver',
|
|
60
|
+
:province => 'BC',
|
|
61
|
+
:country => 'CA',
|
|
62
|
+
:postal_code => 'V5J 2N2'
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@intl_params = {
|
|
66
|
+
:name => "Mrs. Yamamoto",
|
|
67
|
+
:company => "",
|
|
68
|
+
:phone => "011-123-123-1234",
|
|
69
|
+
:address1 => "123 Yokohama Road",
|
|
70
|
+
:address2 => "",
|
|
71
|
+
:city => 'Tokyo',
|
|
72
|
+
:province => '',
|
|
73
|
+
:country => 'JP'
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@cp = CanadaPostPWS.new(@login.merge(:endpoint => "https://ct.soa-gw.canadapost.ca/"))
|
|
77
|
+
@cp.logger = Logger.new(StringIO.new)
|
|
78
|
+
|
|
79
|
+
@customer_number = @login[:customer_number]
|
|
80
|
+
|
|
81
|
+
@DEFAULT_RESPONSE = {
|
|
82
|
+
:shipping_id => "406951321983787352",
|
|
83
|
+
:tracking_number => "123456789012",
|
|
84
|
+
:label_url => "https://ct.soa-gw.canadapost.ca/ers/artifact/#{@login[:api_key]}/20238/0"
|
|
85
|
+
}
|
|
86
|
+
rescue NoCredentialsFound => e
|
|
87
|
+
skip(e.message)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def test_rates
|
|
91
|
+
opts = {:customer_number => @customer_number}
|
|
92
|
+
rate_response = @cp.find_rates(@home_params, @dom_params, [@pkg1], opts)
|
|
93
|
+
assert_kind_of ReactiveShipping::RateResponse, rate_response
|
|
94
|
+
assert_kind_of ReactiveShipping::RateEstimate, rate_response.rates.first
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_rates_with_invalid_customer_raises_exception
|
|
98
|
+
opts = {:customer_number => "0000000000", :service => "DOM.XP"}
|
|
99
|
+
assert_raises(ResponseError) do
|
|
100
|
+
@cp.find_rates(@home_params, @dom_params, [@pkg1], opts)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def test_tracking
|
|
105
|
+
pin = "1371134583769923" # valid pin
|
|
106
|
+
response = @cp.find_tracking_info(pin, {})
|
|
107
|
+
assert_equal 'Xpresspost', response.service_name
|
|
108
|
+
assert response.expected_date.is_a?(Date)
|
|
109
|
+
assert response.customer_number
|
|
110
|
+
assert_equal 13, response.shipment_events.count
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_tracking_when_no_tracking_info_raises_exception
|
|
114
|
+
pin = "4442172020196022" # valid pin
|
|
115
|
+
|
|
116
|
+
error = assert_raises(ReactiveShipping::ResponseError) do
|
|
117
|
+
@cp.find_tracking_info(pin, {})
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
assert_match /No Tracking/, error.message
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def test_create_shipment
|
|
124
|
+
skip "Failing with 'Contract Number is a required field' after API change, skipping because no clue how to fix, might need different creds"
|
|
125
|
+
opts = {:customer_number => @customer_number, :service => "DOM.XP"}
|
|
126
|
+
response = @cp.create_shipment(@home_params, @dom_params, @pkg1, @line_item1, opts)
|
|
127
|
+
assert_kind_of CPPWSShippingResponse, response
|
|
128
|
+
assert_match /\A\d{17}\z/, response.shipping_id
|
|
129
|
+
assert_equal "123456789012", response.tracking_number
|
|
130
|
+
assert_match "https://ct.soa-gw.canadapost.ca/ers/artifact/", response.label_url
|
|
131
|
+
assert_match @login[:api_key], response.label_url
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_create_shipment_with_options
|
|
135
|
+
skip "Failing with 'Contract Number is a required field' after API change, skipping because no clue how to fix, might need different creds"
|
|
136
|
+
opts = {:customer_number => @customer_number, :service => "USA.EP"}.merge(@shipping_opts1)
|
|
137
|
+
response = @cp.create_shipment(@home_params, @dest_params, @pkg1, @line_item1, opts)
|
|
138
|
+
|
|
139
|
+
assert_kind_of CPPWSShippingResponse, response
|
|
140
|
+
assert_match /\A\d{17}\z/, response.shipping_id
|
|
141
|
+
assert_equal "123456789012", response.tracking_number
|
|
142
|
+
assert_match "https://ct.soa-gw.canadapost.ca/ers/artifact/", response.label_url
|
|
143
|
+
assert_match @login[:api_key], response.label_url
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def test_retrieve_shipping_label
|
|
147
|
+
skip "Failing with 'Contract Number is a required field' after API change, skipping because no clue how to fix, might need different creds"
|
|
148
|
+
opts = {:customer_number => @customer_number, :service => "DOM.XP"}
|
|
149
|
+
shipping_response = @cp.create_shipment(@home_params, @dom_params, @pkg1, @line_item1, opts)
|
|
150
|
+
|
|
151
|
+
# Looks like it takes Canada Post some time to actually generate the PDF.
|
|
152
|
+
response = nil
|
|
153
|
+
10.times do
|
|
154
|
+
response = @cp.retrieve_shipping_label(shipping_response)
|
|
155
|
+
break unless response == ""
|
|
156
|
+
sleep(0.5)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
assert_equal "%PDF", response[0...4]
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def test_create_shipment_with_invalid_customer_raises_exception
|
|
163
|
+
skip "Failing with 'Contract Number is a required field' after API change, skipping because no clue how to fix, might need different creds"
|
|
164
|
+
opts = {:customer_number => "0000000000", :service => "DOM.XP"}
|
|
165
|
+
assert_raises(ResponseError) do
|
|
166
|
+
@cp.create_shipment(@home_params, @dom_params, @pkg1, @line_item1, opts)
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RemoteCanadaPostTest < ActiveSupport::TestCase
|
|
4
|
+
include ReactiveShipping::Test::Credentials
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
@carrier = CanadaPost.new(credentials(:canada_post))
|
|
8
|
+
@french_carrier = CanadaPost.new(credentials(:canada_post).merge(:french => true))
|
|
9
|
+
|
|
10
|
+
@origin = {:address1 => "61A York St", :city => "Ottawa", :province => "Ontario", :country => "Canada", :postal_code => "K1N 5T2"}
|
|
11
|
+
@destination = {:city => "Beverly Hills", :state => "CA", :country => "United States", :postal_code => "90210"}
|
|
12
|
+
@line_items = [Package.new(500, [2, 3, 4], :description => "a box full of stuff", :value => 25)]
|
|
13
|
+
rescue NoCredentialsFound => e
|
|
14
|
+
skip(e.message)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_valid_credentials
|
|
18
|
+
assert @carrier.valid_credentials?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_find_rates_french
|
|
22
|
+
rates = @french_carrier.find_rates(@origin, @destination, @line_items)
|
|
23
|
+
assert_instance_of CanadaPost::CanadaPostRateResponse, rates
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_postal_outlets_french
|
|
27
|
+
rates = @french_carrier.find_rates(@origin, @destination, @line_items)
|
|
28
|
+
|
|
29
|
+
rates.postal_outlets.each do |outlet|
|
|
30
|
+
assert_instance_of CanadaPost::PostalOutlet, outlet
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_find_rates
|
|
35
|
+
rates = @carrier.find_rates(@origin, @destination, @line_items)
|
|
36
|
+
assert_instance_of CanadaPost::CanadaPostRateResponse, rates
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_postal_outlets
|
|
40
|
+
rates = @carrier.find_rates(@origin, @destination, @line_items)
|
|
41
|
+
|
|
42
|
+
rates.postal_outlets.each do |outlet|
|
|
43
|
+
assert_instance_of CanadaPost::PostalOutlet, outlet
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_illegal_origin
|
|
48
|
+
@origin = @destination
|
|
49
|
+
|
|
50
|
+
assert_raises(ReactiveShipping::ResponseError) do
|
|
51
|
+
rates = @carrier.find_rates(@origin, @destination, @line_items)
|
|
52
|
+
refute rates.success?
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RemoteFedExTest < ActiveSupport::TestCase
|
|
4
|
+
include ReactiveShipping::Test::Credentials
|
|
5
|
+
include ReactiveShipping::Test::Fixtures
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
@carrier = FedEx.new(credentials(:fedex).merge(:test => true))
|
|
9
|
+
rescue NoCredentialsFound => e
|
|
10
|
+
skip(e.message)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
### valid_credentials?
|
|
14
|
+
|
|
15
|
+
def test_valid_credentials
|
|
16
|
+
valid_carrier = FedEx.new(credentials(:fedex))
|
|
17
|
+
assert valid_carrier.valid_credentials?
|
|
18
|
+
|
|
19
|
+
invalid_carrier = FedEx.new(credentials(:fedex).merge(password: 'invalid'))
|
|
20
|
+
refute invalid_carrier.valid_credentials?
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
### find_rates
|
|
24
|
+
|
|
25
|
+
def test_us_to_canada
|
|
26
|
+
response = @carrier.find_rates(
|
|
27
|
+
location_fixtures[:beverly_hills],
|
|
28
|
+
location_fixtures[:ottawa],
|
|
29
|
+
package_fixtures.values_at(:wii)
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
assert_instance_of Array, response.rates
|
|
33
|
+
assert response.rates.length > 0
|
|
34
|
+
response.rates.each do |rate|
|
|
35
|
+
assert_instance_of String, rate.service_name
|
|
36
|
+
assert_kind_of Integer, rate.price
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_freight
|
|
41
|
+
skip 'Cannot find the fedex freight creds. Whomp, whomp.'
|
|
42
|
+
freight = credentials(:fedex_freight)
|
|
43
|
+
|
|
44
|
+
shipping_location = Location.new( address1: freight[:shipping_address1],
|
|
45
|
+
address2: freight[:shipping_address2],
|
|
46
|
+
city: freight[:shipping_city],
|
|
47
|
+
state: freight[:shipping_state],
|
|
48
|
+
postal_code: freight[:shipping_postal_code],
|
|
49
|
+
country: freight[:shipping_country])
|
|
50
|
+
|
|
51
|
+
billing_location = Location.new( address1: freight[:billing_address1],
|
|
52
|
+
address2: freight[:billing_address2],
|
|
53
|
+
city: freight[:billing_city],
|
|
54
|
+
state: freight[:billing_state],
|
|
55
|
+
postal_code: freight[:billing_postal_code],
|
|
56
|
+
country: freight[:billing_country])
|
|
57
|
+
|
|
58
|
+
freight_options = {
|
|
59
|
+
account: freight[:account],
|
|
60
|
+
billing_location: billing_location,
|
|
61
|
+
payment_type: freight[:payment_type],
|
|
62
|
+
freight_class: freight[:freight_class],
|
|
63
|
+
packaging: freight[:packaging],
|
|
64
|
+
role: freight[:role]
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
response = @carrier.find_rates(
|
|
68
|
+
shipping_location,
|
|
69
|
+
location_fixtures[:ottawa],
|
|
70
|
+
package_fixtures.values_at(:wii),
|
|
71
|
+
freight: freight_options
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
assert_instance_of Array, response.rates
|
|
75
|
+
assert response.rates.length > 0
|
|
76
|
+
response.rates.each do |rate|
|
|
77
|
+
assert_instance_of String, rate.service_name
|
|
78
|
+
assert_kind_of Integer, rate.price
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_zip_to_zip_fails
|
|
83
|
+
@carrier.find_rates(
|
|
84
|
+
Location.new(:zip => 40524),
|
|
85
|
+
Location.new(:zip => 40515),
|
|
86
|
+
package_fixtures[:wii]
|
|
87
|
+
)
|
|
88
|
+
rescue ResponseError => e
|
|
89
|
+
assert_match /country\s?code/i, e.message
|
|
90
|
+
assert_match /(missing|invalid)/, e.message
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# FedEx requires a valid origin and destination postal code
|
|
94
|
+
def test_rates_for_locations_with_only_zip_and_country
|
|
95
|
+
response = @carrier.find_rates(
|
|
96
|
+
location_fixtures[:bare_beverly_hills],
|
|
97
|
+
location_fixtures[:bare_ottawa],
|
|
98
|
+
package_fixtures.values_at(:wii)
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
assert response.rates.size > 0
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def test_rates_for_location_with_only_country_code
|
|
105
|
+
@carrier.find_rates(
|
|
106
|
+
location_fixtures[:bare_beverly_hills],
|
|
107
|
+
Location.new(:country => 'CA'),
|
|
108
|
+
package_fixtures.values_at(:wii)
|
|
109
|
+
)
|
|
110
|
+
rescue ResponseError => e
|
|
111
|
+
assert_match /postal code/i, e.message
|
|
112
|
+
assert_match /(missing|invalid)/i, e.message
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def test_invalid_recipient_country
|
|
116
|
+
@carrier.find_rates(
|
|
117
|
+
location_fixtures[:bare_beverly_hills],
|
|
118
|
+
Location.new(:country => 'JP', :zip => '108-8361'),
|
|
119
|
+
package_fixtures.values_at(:wii)
|
|
120
|
+
)
|
|
121
|
+
rescue ResponseError => e
|
|
122
|
+
assert_match /postal code/i, e.message
|
|
123
|
+
assert_match /(missing|invalid)/i, e.message
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def test_ottawa_to_beverly_hills
|
|
127
|
+
response = @carrier.find_rates(
|
|
128
|
+
location_fixtures[:ottawa],
|
|
129
|
+
location_fixtures[:beverly_hills],
|
|
130
|
+
package_fixtures.values_at(:book, :wii)
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
assert_instance_of Array, response.rates
|
|
134
|
+
assert response.rates.length > 0
|
|
135
|
+
response.rates.each do |rate|
|
|
136
|
+
assert_instance_of String, rate.service_name
|
|
137
|
+
assert_kind_of Integer, rate.price
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def test_ottawa_to_london
|
|
142
|
+
response = @carrier.find_rates(
|
|
143
|
+
location_fixtures[:ottawa],
|
|
144
|
+
location_fixtures[:london],
|
|
145
|
+
package_fixtures.values_at(:book, :wii)
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
assert_instance_of Array, response.rates
|
|
149
|
+
assert response.rates.length > 0
|
|
150
|
+
response.rates.each do |rate|
|
|
151
|
+
assert_instance_of String, rate.service_name
|
|
152
|
+
assert_kind_of Integer, rate.price
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def test_beverly_hills_to_netherlands
|
|
157
|
+
response = @carrier.find_rates(
|
|
158
|
+
location_fixtures[:beverly_hills],
|
|
159
|
+
location_fixtures[:netherlands],
|
|
160
|
+
package_fixtures.values_at(:book, :wii)
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
assert_instance_of Array, response.rates
|
|
164
|
+
assert response.rates.length > 0
|
|
165
|
+
response.rates.each do |rate|
|
|
166
|
+
assert_instance_of String, rate.service_name
|
|
167
|
+
assert_kind_of Integer, rate.price
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def test_beverly_hills_to_new_york
|
|
172
|
+
response = @carrier.find_rates(
|
|
173
|
+
location_fixtures[:beverly_hills],
|
|
174
|
+
location_fixtures[:new_york],
|
|
175
|
+
package_fixtures.values_at(:book, :wii)
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
assert_instance_of Array, response.rates
|
|
179
|
+
assert response.rates.length > 0
|
|
180
|
+
response.rates.each do |rate|
|
|
181
|
+
assert_instance_of String, rate.service_name
|
|
182
|
+
assert_kind_of Integer, rate.price
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def test_beverly_hills_to_london
|
|
187
|
+
response = @carrier.find_rates(
|
|
188
|
+
location_fixtures[:beverly_hills],
|
|
189
|
+
location_fixtures[:london],
|
|
190
|
+
package_fixtures.values_at(:book, :wii)
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
assert_instance_of Array, response.rates
|
|
194
|
+
assert response.rates.length > 0
|
|
195
|
+
response.rates.each do |rate|
|
|
196
|
+
assert_instance_of String, rate.service_name
|
|
197
|
+
assert_kind_of Integer, rate.price
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def test_different_rates_for_commercial
|
|
202
|
+
residential_response = @carrier.find_rates(
|
|
203
|
+
location_fixtures[:beverly_hills],
|
|
204
|
+
location_fixtures[:ottawa],
|
|
205
|
+
package_fixtures.values_at(:chocolate_stuff)
|
|
206
|
+
)
|
|
207
|
+
commercial_response = @carrier.find_rates(
|
|
208
|
+
location_fixtures[:beverly_hills],
|
|
209
|
+
Location.from(location_fixtures[:ottawa].to_hash, :address_type => :commercial),
|
|
210
|
+
package_fixtures.values_at(:chocolate_stuff)
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
refute_equal residential_response.rates.map(&:price), commercial_response.rates.map(&:price)
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
### find_tracking_info
|
|
217
|
+
|
|
218
|
+
def test_find_tracking_info_for_delivered_shipment
|
|
219
|
+
response = @carrier.find_tracking_info('122816215025810')
|
|
220
|
+
assert response.success?
|
|
221
|
+
assert response.delivered?
|
|
222
|
+
assert_equal '122816215025810', response.tracking_number
|
|
223
|
+
assert_equal :delivered, response.status
|
|
224
|
+
assert_equal 'DL', response.status_code
|
|
225
|
+
assert_equal "Delivered", response.status_description
|
|
226
|
+
|
|
227
|
+
assert_equal Time.parse('Fri, 03 Jan 2014'), response.ship_time
|
|
228
|
+
assert_nil response.scheduled_delivery_date
|
|
229
|
+
assert_equal Time.parse('2014-01-09 18:31:00 +0000'), response.actual_delivery_date
|
|
230
|
+
|
|
231
|
+
origin_address = ReactiveShipping::Location.new(
|
|
232
|
+
city: 'SPOKANE',
|
|
233
|
+
country: 'US',
|
|
234
|
+
state: 'WA'
|
|
235
|
+
)
|
|
236
|
+
assert_equal origin_address.to_hash, response.origin.to_hash
|
|
237
|
+
|
|
238
|
+
destination_address = ReactiveShipping::Location.new(
|
|
239
|
+
city: 'NORTON',
|
|
240
|
+
country: 'US',
|
|
241
|
+
state: 'VA'
|
|
242
|
+
)
|
|
243
|
+
assert_equal destination_address.to_hash, response.destination.to_hash
|
|
244
|
+
assert_equal 11, response.shipment_events.length
|
|
245
|
+
assert_equal 'OC', response.shipment_events.first.type_code
|
|
246
|
+
assert_equal 'PU', response.shipment_events.second.type_code
|
|
247
|
+
assert_equal 'AR', response.shipment_events.third.type_code
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def test_find_tracking_info_for_in_transit_shipment_1
|
|
251
|
+
# unfortunately, we have to use Fedex unique identifiers, because the test tracking numbers are overloaded.
|
|
252
|
+
response = @carrier.find_tracking_info('920241085725456')
|
|
253
|
+
assert response.success?
|
|
254
|
+
refute response.delivered?
|
|
255
|
+
assert_equal '920241085725456', response.tracking_number
|
|
256
|
+
assert_equal :at_fedex_destination, response.status
|
|
257
|
+
assert_equal 'FD', response.status_code
|
|
258
|
+
assert_equal "At FedEx destination facility", response.status_description
|
|
259
|
+
assert_equal 7, response.shipment_events.length
|
|
260
|
+
assert_equal 'PU', response.shipment_events.first.type_code
|
|
261
|
+
assert_equal 'OC', response.shipment_events.second.type_code
|
|
262
|
+
assert_equal 'AR', response.shipment_events.third.type_code
|
|
263
|
+
assert_nil response.actual_delivery_date
|
|
264
|
+
assert_nil response.scheduled_delivery_date
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def test_find_tracking_info_for_in_transit_shipment_2
|
|
268
|
+
# unfortunately, we have to use Fedex unique identifiers, because the test tracking numbers are overloaded.
|
|
269
|
+
response = @carrier.find_tracking_info('403934084723025')
|
|
270
|
+
assert response.success?
|
|
271
|
+
refute response.delivered?
|
|
272
|
+
assert_equal '403934084723025', response.tracking_number
|
|
273
|
+
assert_equal :at_fedex_facility, response.status
|
|
274
|
+
assert_equal 'AR', response.status_code
|
|
275
|
+
assert_equal "Arrived at FedEx location", response.status_description
|
|
276
|
+
|
|
277
|
+
assert_equal Time.parse('Fri, 03 Jan 2014'), response.ship_time
|
|
278
|
+
assert_nil response.scheduled_delivery_date
|
|
279
|
+
assert_nil response.actual_delivery_date
|
|
280
|
+
|
|
281
|
+
origin_address = ReactiveShipping::Location.new(
|
|
282
|
+
city: 'CAMBRIDGE',
|
|
283
|
+
country: 'US',
|
|
284
|
+
state: 'OH'
|
|
285
|
+
)
|
|
286
|
+
assert_equal origin_address.to_hash, response.origin.to_hash
|
|
287
|
+
|
|
288
|
+
destination_address = ReactiveShipping::Location.new(
|
|
289
|
+
city: 'Spokane Valley',
|
|
290
|
+
country: 'US',
|
|
291
|
+
state: 'WA'
|
|
292
|
+
)
|
|
293
|
+
assert_equal destination_address.to_hash, response.destination.to_hash
|
|
294
|
+
assert_equal 3, response.shipment_events.length
|
|
295
|
+
assert_equal 'PU', response.shipment_events.first.type_code
|
|
296
|
+
assert_equal 'OC', response.shipment_events.second.type_code
|
|
297
|
+
assert_equal 'AR', response.shipment_events.third.type_code
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
def test_find_tracking_info_with_multiple_matches
|
|
301
|
+
exception = assert_raises(ReactiveShipping::Error) do
|
|
302
|
+
response = @carrier.find_tracking_info('123456789012')
|
|
303
|
+
end
|
|
304
|
+
assert_match 'Multiple matches were found.', exception.message
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
def test_find_tracking_info_not_found
|
|
308
|
+
assert_raises(ReactiveShipping::ShipmentNotFound) do
|
|
309
|
+
@carrier.find_tracking_info('199997777713')
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
def test_find_tracking_info_with_invalid_tracking_number
|
|
314
|
+
assert_raises(ReactiveShipping::ResponseError) do
|
|
315
|
+
@carrier.find_tracking_info('abc')
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
### create_shipment
|
|
320
|
+
|
|
321
|
+
def test_cant_obtain_multiple_shipping_labels
|
|
322
|
+
assert_raises(ReactiveShipping::Error,"Multiple packages are not supported yet.") do
|
|
323
|
+
@carrier.create_shipment(
|
|
324
|
+
location_fixtures[:beverly_hills_with_name],
|
|
325
|
+
location_fixtures[:new_york_with_name],
|
|
326
|
+
[package_fixtures[:wii],package_fixtures[:wii]],
|
|
327
|
+
:test => true,
|
|
328
|
+
:reference_number => {
|
|
329
|
+
:value => "FOO-123",
|
|
330
|
+
:code => "PO"
|
|
331
|
+
}
|
|
332
|
+
)
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
def test_obtain_shipping_label_with_single_element_array
|
|
337
|
+
response = @carrier.create_shipment(
|
|
338
|
+
location_fixtures[:beverly_hills_with_name],
|
|
339
|
+
location_fixtures[:new_york_with_name],
|
|
340
|
+
[package_fixtures[:wii]],
|
|
341
|
+
:test => true,
|
|
342
|
+
:reference_number => {
|
|
343
|
+
:value => "FOO-123",
|
|
344
|
+
:code => "PO"
|
|
345
|
+
}
|
|
346
|
+
)
|
|
347
|
+
|
|
348
|
+
assert response.success?
|
|
349
|
+
refute_empty response.labels
|
|
350
|
+
refute_empty response.labels.first.img_data
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
def test_obtain_shipping_label
|
|
354
|
+
response = @carrier.create_shipment(
|
|
355
|
+
location_fixtures[:beverly_hills_with_name],
|
|
356
|
+
location_fixtures[:new_york_with_name],
|
|
357
|
+
package_fixtures[:wii],
|
|
358
|
+
:test => true,
|
|
359
|
+
:reference_number => {
|
|
360
|
+
:value => "FOO-123",
|
|
361
|
+
:code => "PO"
|
|
362
|
+
}
|
|
363
|
+
)
|
|
364
|
+
|
|
365
|
+
assert response.success?
|
|
366
|
+
refute_empty response.labels
|
|
367
|
+
refute_empty response.labels.first.img_data
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
def test_obtain_shipping_label_with_signature_option
|
|
371
|
+
packages = package_fixtures.values_at(:wii)
|
|
372
|
+
packages.each {|p| p.options[:signature_option] = :adult }
|
|
373
|
+
|
|
374
|
+
response = @carrier.create_shipment(
|
|
375
|
+
location_fixtures[:beverly_hills_with_name],
|
|
376
|
+
location_fixtures[:new_york_with_name],
|
|
377
|
+
packages,
|
|
378
|
+
{:test => true}
|
|
379
|
+
)
|
|
380
|
+
|
|
381
|
+
signature_option = response.params["ProcessShipmentReply"]["CompletedShipmentDetail"]["CompletedPackageDetails"]["SignatureOption"]
|
|
382
|
+
assert_equal FedEx::SIGNATURE_OPTION_CODES[:adult], signature_option
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
def test_obtain_shipping_label_with_label_format_option
|
|
386
|
+
response = @carrier.create_shipment(
|
|
387
|
+
location_fixtures[:beverly_hills_with_name],
|
|
388
|
+
location_fixtures[:new_york_with_name],
|
|
389
|
+
package_fixtures[:wii],
|
|
390
|
+
:test => true,
|
|
391
|
+
:label_format => 'PDF'
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
assert response.success?
|
|
395
|
+
refute_empty response.labels
|
|
396
|
+
data = response.labels.first.img_data
|
|
397
|
+
refute_empty data
|
|
398
|
+
assert data[0...4] == '%PDF'
|
|
399
|
+
end
|
|
400
|
+
end
|