active_shipping 1.0.0.pre4 → 1.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.yardopts +0 -1
- data/CHANGELOG.md +17 -0
- data/CONTRIBUTING.md +2 -2
- data/Gemfile.activesupport32 +1 -0
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/active_shipping.gemspec +2 -2
- data/lib/active_shipping.rb +2 -3
- data/lib/active_shipping/carriers.rb +1 -0
- data/lib/active_shipping/carriers/canada_post_pws.rb +281 -266
- data/lib/active_shipping/carriers/correios.rb +285 -0
- data/lib/active_shipping/carriers/fedex.rb +205 -199
- data/lib/active_shipping/carriers/stamps.rb +218 -219
- data/lib/active_shipping/carriers/ups.rb +287 -48
- data/lib/active_shipping/carriers/usps.rb +3 -3
- data/lib/active_shipping/delivery_date_estimate.rb +21 -0
- data/lib/active_shipping/delivery_date_estimates_response.rb +11 -0
- data/lib/active_shipping/errors.rb +20 -1
- data/lib/active_shipping/location.rb +0 -5
- data/lib/active_shipping/response.rb +0 -15
- data/lib/active_shipping/version.rb +1 -1
- data/test/credentials.yml +11 -3
- data/test/fixtures/xml/correios/book_response.xml +13 -0
- data/test/fixtures/xml/correios/book_response_invalid.xml +13 -0
- data/test/fixtures/xml/correios/clothes_response.xml +43 -0
- data/test/fixtures/xml/correios/poster_response.xml +23 -0
- data/test/fixtures/xml/correios/shoes_response.xml +43 -0
- data/test/fixtures/xml/fedex/tracking_request.xml +13 -11
- 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_in_transit.xml +127 -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/ups/delivery_dates_response.xml +140 -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/test_real_home_as_residential_destination_response.xml +290 -1
- data/test/fixtures/xml/usps/delivered_extended_tracking_response.xml +11 -0
- data/test/remote/canada_post_pws_platform_test.rb +35 -22
- data/test/remote/canada_post_pws_test.rb +32 -40
- data/test/remote/correios_test.rb +83 -0
- data/test/remote/fedex_test.rb +95 -13
- data/test/remote/stamps_test.rb +1 -0
- data/test/remote/ups_test.rb +77 -40
- data/test/remote/usps_test.rb +13 -1
- data/test/test_helper.rb +12 -2
- data/test/unit/carriers/canada_post_pws_rating_test.rb +66 -59
- data/test/unit/carriers/canada_post_pws_shipping_test.rb +34 -23
- data/test/unit/carriers/correios_test.rb +244 -0
- data/test/unit/carriers/fedex_test.rb +161 -156
- data/test/unit/carriers/ups_test.rb +193 -1
- data/test/unit/carriers/usps_test.rb +14 -0
- data/test/unit/location_test.rb +0 -10
- metadata +63 -46
- metadata.gz.sig +0 -0
- data/lib/vendor/test_helper.rb +0 -6
- data/lib/vendor/xml_node/README +0 -36
- data/lib/vendor/xml_node/Rakefile +0 -21
- data/lib/vendor/xml_node/benchmark/bench_generation.rb +0 -30
- data/lib/vendor/xml_node/init.rb +0 -1
- data/lib/vendor/xml_node/lib/xml_node.rb +0 -221
- data/lib/vendor/xml_node/test/test_generating.rb +0 -89
- data/lib/vendor/xml_node/test/test_parsing.rb +0 -40
- data/test/fixtures/xml/fedex/tracking_response.xml +0 -151
- data/test/fixtures/xml/fedex/tracking_response_empty_destination.xml +0 -76
- data/test/fixtures/xml/fedex/tracking_response_no_destination.xml +0 -139
- data/test/fixtures/xml/fedex/tracking_response_no_ship_time.xml +0 -150
- data/test/fixtures/xml/fedex/tracking_response_with_estimated_delivery_date.xml +0 -95
- data/test/fixtures/xml/fedex/tracking_response_with_shipper_address.xml +0 -71
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<TrackResponse>
|
3
|
+
<TrackInfo ID="9361289949034102283511">
|
4
|
+
<TrackSummary>Your item was delivered to the front desk or reception area at 2:16 pm on October 12, 2013 in BROOKLYN, NY 11201.</TrackSummary>
|
5
|
+
<TrackDetail>Out for Delivery, October 12, 2013, 10:16 am, BROOKLYN, NY 11201</TrackDetail>
|
6
|
+
<TrackDetail>Sorting Complete, October 12, 2013, 10:06 am, BROOKLYN, NY 11201</TrackDetail>
|
7
|
+
<TrackDetail>Arrival at Post Office, October 12, 2013, 6:32 am, BROOKLYN, NY 11201</TrackDetail>
|
8
|
+
<TrackDetail>Acceptance, October 12, 2013, 6:26 am, BROOKLYN, NY 11201</TrackDetail>
|
9
|
+
<TrackDetail>Electronic Shipping Info Received, October 12, 2013</TrackDetail>
|
10
|
+
</TrackInfo>
|
11
|
+
</TrackResponse>
|
@@ -8,7 +8,7 @@ class RemoteCanadaPostPWSPlatformTest < Minitest::Test
|
|
8
8
|
include ActiveShipping::Test::Fixtures
|
9
9
|
|
10
10
|
def setup
|
11
|
-
@login = credentials(:
|
11
|
+
@login = credentials(:canada_post_pws_platform).merge(endpoint: "https://ct.soa-gw.canadapost.ca/")
|
12
12
|
|
13
13
|
# 100 grams, 93 cm long, 10 cm diameter, cylinders have different volume calculations
|
14
14
|
# @pkg1 = Package.new(1000, [93,10], :value => 10.00)
|
@@ -92,31 +92,24 @@ class RemoteCanadaPostPWSPlatformTest < Minitest::Test
|
|
92
92
|
@cp = CanadaPostPWS.new(@login)
|
93
93
|
@cp.logger = Logger.new(StringIO.new)
|
94
94
|
|
95
|
-
@customer_number = @login[:customer_number]
|
96
|
-
@customer_api_key = @login[:customer_api_key]
|
97
|
-
@customer_secret = @login[:customer_secret]
|
98
95
|
rescue NoCredentialsFound => e
|
99
96
|
skip(e.message)
|
100
97
|
end
|
101
98
|
|
102
99
|
def build_options
|
103
|
-
{
|
104
|
-
:customer_number => @customer_number,
|
105
|
-
:customer_api_key => @customer_api_key,
|
106
|
-
:customer_secret => @customer_secret
|
107
|
-
}
|
100
|
+
{ :customer_number => @login[:customer_number] }
|
108
101
|
end
|
109
102
|
|
110
103
|
def test_rates
|
111
|
-
|
112
|
-
|
113
|
-
|
104
|
+
rate_response = @cp.find_rates(@home_params, @dom_params, [@pkg1], build_options)
|
105
|
+
assert_kind_of ActiveShipping::RateResponse, rate_response
|
106
|
+
assert_kind_of ActiveShipping::RateEstimate, rate_response.rates.first
|
114
107
|
end
|
115
108
|
|
116
109
|
def test_rates_with_insurance_changes_price
|
117
110
|
rates = @cp.find_rates(@home_params, @dom_params, [@pkg1], build_options)
|
118
111
|
insured_rates = @cp.find_rates(@home_params, @dom_params, [@pkg1], build_options.merge(@shipping_opts1))
|
119
|
-
|
112
|
+
refute_equal rates.rates.first.price, insured_rates.rates.first.price
|
120
113
|
end
|
121
114
|
|
122
115
|
def test_rates_with_invalid_customer_raises_exception
|
@@ -139,7 +132,7 @@ class RemoteCanadaPostPWSPlatformTest < Minitest::Test
|
|
139
132
|
assert_equal 'Xpresspost', response.service_name
|
140
133
|
assert response.expected_date.is_a?(Date)
|
141
134
|
assert response.customer_number
|
142
|
-
assert_equal
|
135
|
+
assert_equal 13, response.shipment_events.count
|
143
136
|
end
|
144
137
|
|
145
138
|
def test_tracking_invalid_pin_raises_exception
|
@@ -147,7 +140,7 @@ class RemoteCanadaPostPWSPlatformTest < Minitest::Test
|
|
147
140
|
exception = assert_raises(ResponseError) do
|
148
141
|
@cp.find_tracking_info(pin, build_options)
|
149
142
|
end
|
150
|
-
assert_equal "No
|
143
|
+
assert_equal "No Tracking", exception.message
|
151
144
|
end
|
152
145
|
|
153
146
|
def test_create_shipment_with_invalid_customer_raises_exception
|
@@ -164,11 +157,14 @@ class RemoteCanadaPostPWSPlatformTest < Minitest::Test
|
|
164
157
|
end
|
165
158
|
|
166
159
|
def test_merchant_details_empty_details
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
assert_equal
|
160
|
+
register_response = @cp.register_merchant
|
161
|
+
details_response = @cp.retrieve_merchant_details(:token_id => register_response.token_id)
|
162
|
+
assert_kind_of ActiveShipping::CPPWSMerchantDetailsResponse, details_response
|
163
|
+
|
164
|
+
assert_equal '0000000000', details_response.customer_number
|
165
|
+
assert_equal '1234567890', details_response.contract_number
|
166
|
+
assert_equal '0000000000000000', details_response.username
|
167
|
+
assert_equal '1a2b3c4d5e6f7a8b9c0d12', details_response.password
|
172
168
|
end
|
173
169
|
|
174
170
|
def test_find_services_no_country
|
@@ -192,7 +188,7 @@ class RemoteCanadaPostPWSPlatformTest < Minitest::Test
|
|
192
188
|
assert response = @cp.find_service_options("INT.XP", nil, build_options)
|
193
189
|
assert_equal "INT.XP", response[:service_code]
|
194
190
|
assert_equal "Xpresspost International", response[:service_name]
|
195
|
-
assert_equal
|
191
|
+
assert_equal 5, response[:options].size
|
196
192
|
assert_equal "COV", response[:options][0][:code]
|
197
193
|
assert_equal false, response[:options][0][:required]
|
198
194
|
assert_equal true, response[:options][0][:qualifier_required]
|
@@ -211,7 +207,7 @@ class RemoteCanadaPostPWSPlatformTest < Minitest::Test
|
|
211
207
|
assert response = @cp.find_service_options("INT.XP", "JP", build_options)
|
212
208
|
assert_equal "INT.XP", response[:service_code]
|
213
209
|
assert_equal "Xpresspost International", response[:service_name]
|
214
|
-
assert_equal
|
210
|
+
assert_equal 4, response[:options].size
|
215
211
|
assert_equal "COV", response[:options][0][:code]
|
216
212
|
assert_equal false, response[:options][0][:required]
|
217
213
|
assert_equal true, response[:options][0][:qualifier_required]
|
@@ -245,4 +241,21 @@ class RemoteCanadaPostPWSPlatformTest < Minitest::Test
|
|
245
241
|
assert_equal "LAD", response[:code]
|
246
242
|
assert_equal "Laisser à la porte (pas d'avis)", response[:name]
|
247
243
|
end
|
244
|
+
|
245
|
+
def test_register_merchant
|
246
|
+
response = @cp.register_merchant
|
247
|
+
assert response.is_a?(CPPWSRegisterResponse)
|
248
|
+
assert_equal "1111111111111111111111", response.token_id
|
249
|
+
end
|
250
|
+
|
251
|
+
def test_merchant_details
|
252
|
+
token_id = "1111111111111111111111"
|
253
|
+
response = @cp.retrieve_merchant_details(:token_id => token_id)
|
254
|
+
assert response.is_a?(CPPWSMerchantDetailsResponse)
|
255
|
+
assert_equal "0000000000", response.customer_number
|
256
|
+
assert_equal "1234567890", response.contract_number
|
257
|
+
assert_equal "0000000000000000", response.username
|
258
|
+
assert_equal "1a2b3c4d5e6f7a8b9c0d12", response.password
|
259
|
+
assert_equal true, response.has_default_credit_card
|
260
|
+
end
|
248
261
|
end
|
@@ -7,15 +7,14 @@ class RemoteCanadaPostPWSTest < Minitest::Test
|
|
7
7
|
|
8
8
|
def setup
|
9
9
|
@login = credentials(:canada_post_pws)
|
10
|
+
refute @login.key?(:platform_id), "The 'canada_post_pws' credentials should NOT include a platform ID"
|
10
11
|
|
11
|
-
#
|
12
|
-
|
13
|
-
@pkg1 = Package.new(1000, nil, :value => 10.00)
|
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
14
|
|
15
15
|
@line_item1 = line_item_fixture
|
16
16
|
|
17
|
-
@shipping_opts1 = {:dc => true, :
|
18
|
-
:so => true, :pa18 => true}
|
17
|
+
@shipping_opts1 = { :dc => true, :cov => true, :cov_amount => 100.00, :aban => true }
|
19
18
|
|
20
19
|
@home_params = {
|
21
20
|
:name => "John Smith",
|
@@ -81,7 +80,7 @@ class RemoteCanadaPostPWSTest < Minitest::Test
|
|
81
80
|
|
82
81
|
@DEFAULT_RESPONSE = {
|
83
82
|
:shipping_id => "406951321983787352",
|
84
|
-
:tracking_number => "
|
83
|
+
:tracking_number => "123456789012",
|
85
84
|
:label_url => "https://ct.soa-gw.canadapost.ca/ers/artifact/#{@login[:api_key]}/20238/0"
|
86
85
|
}
|
87
86
|
rescue NoCredentialsFound => e
|
@@ -90,9 +89,9 @@ class RemoteCanadaPostPWSTest < Minitest::Test
|
|
90
89
|
|
91
90
|
def test_rates
|
92
91
|
opts = {:customer_number => @customer_number}
|
93
|
-
|
94
|
-
|
95
|
-
|
92
|
+
rate_response = @cp.find_rates(@home_params, @dom_params, [@pkg1], opts)
|
93
|
+
assert_kind_of ActiveShipping::RateResponse, rate_response
|
94
|
+
assert_kind_of ActiveShipping::RateEstimate, rate_response.rates.first
|
96
95
|
end
|
97
96
|
|
98
97
|
def test_rates_with_invalid_customer_raises_exception
|
@@ -108,7 +107,7 @@ class RemoteCanadaPostPWSTest < Minitest::Test
|
|
108
107
|
assert_equal 'Xpresspost', response.service_name
|
109
108
|
assert response.expected_date.is_a?(Date)
|
110
109
|
assert response.customer_number
|
111
|
-
assert_equal
|
110
|
+
assert_equal 13, response.shipment_events.count
|
112
111
|
end
|
113
112
|
|
114
113
|
def test_tracking_when_no_tracking_info_raises_exception
|
@@ -124,26 +123,36 @@ class RemoteCanadaPostPWSTest < Minitest::Test
|
|
124
123
|
def test_create_shipment
|
125
124
|
opts = {:customer_number => @customer_number, :service => "DOM.XP"}
|
126
125
|
response = @cp.create_shipment(@home_params, @dom_params, @pkg1, @line_item1, opts)
|
127
|
-
|
128
|
-
|
129
|
-
assert_equal
|
130
|
-
|
126
|
+
assert_kind_of CPPWSShippingResponse, response
|
127
|
+
assert_match /\A\d{17}\z/, response.shipping_id
|
128
|
+
assert_equal "123456789012", response.tracking_number
|
129
|
+
assert_match "https://ct.soa-gw.canadapost.ca/ers/artifact/", response.label_url
|
130
|
+
assert_match @login[:api_key], response.label_url
|
131
131
|
end
|
132
132
|
|
133
133
|
def test_create_shipment_with_options
|
134
|
-
opts = {:customer_number => @customer_number, :service => "USA.EP"}
|
135
|
-
opts.merge! @shipping_opts1
|
134
|
+
opts = {:customer_number => @customer_number, :service => "USA.EP"}.merge(@shipping_opts1)
|
136
135
|
response = @cp.create_shipment(@home_params, @dest_params, @pkg1, @line_item1, opts)
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
assert_equal
|
136
|
+
|
137
|
+
assert_kind_of CPPWSShippingResponse, response
|
138
|
+
assert_match /\A\d{17}\z/, response.shipping_id
|
139
|
+
assert_equal "123456789012", response.tracking_number
|
140
|
+
assert_match "https://ct.soa-gw.canadapost.ca/ers/artifact/", response.label_url
|
141
|
+
assert_match @login[:api_key], response.label_url
|
141
142
|
end
|
142
143
|
|
143
144
|
def test_retrieve_shipping_label
|
144
|
-
|
145
|
-
|
146
|
-
|
145
|
+
opts = {:customer_number => @customer_number, :service => "DOM.XP"}
|
146
|
+
shipping_response = @cp.create_shipment(@home_params, @dom_params, @pkg1, @line_item1, opts)
|
147
|
+
|
148
|
+
# Looks like it takes Canada Post some time to actually generate the PDF.
|
149
|
+
response = nil
|
150
|
+
10.times do
|
151
|
+
response = @cp.retrieve_shipping_label(shipping_response)
|
152
|
+
break unless response == ""
|
153
|
+
sleep(0.5)
|
154
|
+
end
|
155
|
+
|
147
156
|
assert_equal "%PDF", response[0...4]
|
148
157
|
end
|
149
158
|
|
@@ -153,21 +162,4 @@ class RemoteCanadaPostPWSTest < Minitest::Test
|
|
153
162
|
@cp.create_shipment(@home_params, @dom_params, @pkg1, @line_item1, opts)
|
154
163
|
end
|
155
164
|
end
|
156
|
-
|
157
|
-
def test_register_merchant
|
158
|
-
response = @cp.register_merchant
|
159
|
-
assert response.is_a?(CPPWSRegisterResponse)
|
160
|
-
assert_equal "1111111111111111111111", response.token_id
|
161
|
-
end
|
162
|
-
|
163
|
-
def test_merchant_details
|
164
|
-
token_id = "1111111111111111111111"
|
165
|
-
response = @cp.retrieve_merchant_details(:token_id => token_id)
|
166
|
-
assert response.is_a?(CPPWSMerchantDetailsResponse)
|
167
|
-
assert_equal "0000000000", response.customer_number
|
168
|
-
assert_equal "1234567890", response.contract_number
|
169
|
-
assert_equal "0000000000000000", response.username
|
170
|
-
assert_equal "1a2b3c4d5e6f7a8b9c0d12", response.password
|
171
|
-
assert_equal true, response.has_default_credit_card
|
172
|
-
end
|
173
165
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RemoteCorreiosTest < Minitest::Test
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@carrier = Correios.new
|
7
|
+
|
8
|
+
@saopaulo = Location.new(:zip => "01415000")
|
9
|
+
@riodejaneiro = Location.new(:zip => "22210030")
|
10
|
+
@invalid_city = Location.new(:zip => "invalid")
|
11
|
+
|
12
|
+
@book = Package.new(250, [14, 19, 2])
|
13
|
+
@invalid_book = Package.new(9999999999999, [14, 19, 2])
|
14
|
+
@poster = Package.new(100, [93, 15], :cylinder => true)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_book_request
|
18
|
+
response = @carrier.find_rates(@saopaulo, @riodejaneiro, [@book])
|
19
|
+
|
20
|
+
assert response.is_a?(RateResponse)
|
21
|
+
assert response.rates.first.is_a?(RateEstimate)
|
22
|
+
assert response.success?
|
23
|
+
assert_equal 1, response.params["responses"].size
|
24
|
+
assert_equal 2, response.rates.size
|
25
|
+
assert_equal 1, response.raw_responses.size
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_poster_and_book_request
|
29
|
+
response = @carrier.find_rates(@saopaulo, @riodejaneiro, [@book, @poster])
|
30
|
+
|
31
|
+
assert response.is_a?(RateResponse)
|
32
|
+
assert response.rates.first.is_a?(RateEstimate)
|
33
|
+
assert response.success?
|
34
|
+
assert_equal 2, response.params["responses"].size
|
35
|
+
assert_equal 2, response.rates.size
|
36
|
+
assert_equal 2, response.raw_responses.size
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_book_request_with_specific_services
|
40
|
+
response = @carrier.find_rates(@saopaulo, @riodejaneiro, [@book], :services => [41106, 40010, 40215])
|
41
|
+
|
42
|
+
assert response.is_a?(RateResponse)
|
43
|
+
assert response.rates.first.is_a?(RateEstimate)
|
44
|
+
assert response.success?
|
45
|
+
assert_equal 1, response.params["responses"].size
|
46
|
+
assert_equal 3, response.rates.size
|
47
|
+
assert_equal 1, response.raw_responses.size
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_response_prices
|
51
|
+
response = @carrier.find_rates(@saopaulo, @riodejaneiro, [@book, @poster])
|
52
|
+
response_book= @carrier.find_rates(@saopaulo, @riodejaneiro, [@book])
|
53
|
+
response_poster = @carrier.find_rates(@saopaulo, @riodejaneiro, [@poster])
|
54
|
+
|
55
|
+
book_price = response_book.rates.sum(&:price)
|
56
|
+
poster_price = response_poster.rates.sum(&:price)
|
57
|
+
total_price = response.rates.sum(&:price)
|
58
|
+
|
59
|
+
assert total_price == book_price + poster_price
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_invalid_zip
|
63
|
+
error = assert_raises(ActiveShipping::ResponseError) do
|
64
|
+
@carrier.find_rates(@saopaulo, @invalid_city, [@book])
|
65
|
+
end
|
66
|
+
|
67
|
+
assert_kind_of RateResponse, error.response
|
68
|
+
refute error.message.empty?
|
69
|
+
assert error.response.raw_responses.any?
|
70
|
+
assert_equal Hash.new, error.response.params
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_valid_book_and_invalid_book
|
74
|
+
error = assert_raises(ActiveShipping::ResponseError) do
|
75
|
+
@carrier.find_rates(@saopaulo, @riodejaneiro, [@book, @invalid_book])
|
76
|
+
end
|
77
|
+
|
78
|
+
assert_kind_of RateResponse, error.response
|
79
|
+
refute error.message.empty?
|
80
|
+
assert error.response.raw_responses.any?
|
81
|
+
assert_equal Hash.new, error.response.params
|
82
|
+
end
|
83
|
+
end
|
data/test/remote/fedex_test.rb
CHANGED
@@ -10,10 +10,18 @@ class RemoteFedExTest < Minitest::Test
|
|
10
10
|
skip(e.message)
|
11
11
|
end
|
12
12
|
|
13
|
+
### valid_credentials?
|
14
|
+
|
13
15
|
def test_valid_credentials
|
14
|
-
|
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?
|
15
21
|
end
|
16
22
|
|
23
|
+
### find_rates
|
24
|
+
|
17
25
|
def test_us_to_canada
|
18
26
|
response = @carrier.find_rates(
|
19
27
|
location_fixtures[:beverly_hills],
|
@@ -190,17 +198,6 @@ class RemoteFedExTest < Minitest::Test
|
|
190
198
|
end
|
191
199
|
end
|
192
200
|
|
193
|
-
def test_tracking
|
194
|
-
p response = @carrier.find_tracking_info('123456789012', :test => true)
|
195
|
-
assert response
|
196
|
-
end
|
197
|
-
|
198
|
-
def test_tracking_with_bad_number
|
199
|
-
assert_raises(ResponseError) do
|
200
|
-
@carrier.find_tracking_info('12345')
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
201
|
def test_different_rates_for_commercial
|
205
202
|
residential_response = @carrier.find_rates(
|
206
203
|
location_fixtures[:beverly_hills],
|
@@ -213,6 +210,91 @@ class RemoteFedExTest < Minitest::Test
|
|
213
210
|
package_fixtures.values_at(:chocolate_stuff)
|
214
211
|
)
|
215
212
|
|
216
|
-
|
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
|
+
# unfortunately, we have to use Fedex unique identifiers, because the test tracking numbers are overloaded.
|
220
|
+
response = @carrier.find_tracking_info('123456789012', unique_identifier: '2456987000~123456789012~FX')
|
221
|
+
assert response.success?
|
222
|
+
assert response.delivered?
|
223
|
+
assert_equal '123456789012', response.tracking_number
|
224
|
+
assert_equal :delivered, response.status
|
225
|
+
assert_equal 'DL', response.status_code
|
226
|
+
assert_equal "Delivered", response.status_description
|
227
|
+
|
228
|
+
assert_equal Time.parse('2014-11-14T03:49:00Z'), response.ship_time
|
229
|
+
assert_equal nil, response.scheduled_delivery_date
|
230
|
+
assert_equal Time.parse('2014-12-05T00:28:00Z'), response.actual_delivery_date
|
231
|
+
|
232
|
+
assert_equal nil, response.origin
|
233
|
+
|
234
|
+
destination_address = ActiveShipping::Location.new(
|
235
|
+
city: 'COLLIERVILLE',
|
236
|
+
country: 'US',
|
237
|
+
state: 'TN'
|
238
|
+
)
|
239
|
+
assert_equal destination_address.to_hash, response.destination.to_hash
|
240
|
+
assert_equal 1, response.shipment_events.length
|
241
|
+
end
|
242
|
+
|
243
|
+
def test_find_tracking_info_for_in_transit_shipment_1
|
244
|
+
# unfortunately, we have to use Fedex unique identifiers, because the test tracking numbers are overloaded.
|
245
|
+
response = @carrier.find_tracking_info('123456789012', unique_identifier: '2456979001~123456789012~FX')
|
246
|
+
assert response.success?
|
247
|
+
refute response.delivered?
|
248
|
+
assert_equal '123456789012', response.tracking_number
|
249
|
+
assert_equal :in_transit, response.status
|
250
|
+
assert_equal 'IT', response.status_code
|
251
|
+
assert_equal "Package available for clearance", response.status_description
|
252
|
+
assert_equal 1, response.shipment_events.length
|
253
|
+
assert_nil response.actual_delivery_date
|
254
|
+
assert_equal nil, response.scheduled_delivery_date
|
255
|
+
end
|
256
|
+
|
257
|
+
def test_find_tracking_info_for_in_transit_shipment_2
|
258
|
+
# unfortunately, we have to use Fedex unique identifiers, because the test tracking numbers are overloaded.
|
259
|
+
response = @carrier.find_tracking_info('123456789012', unique_identifier: '2456979000~123456789012~FX')
|
260
|
+
assert response.success?
|
261
|
+
refute response.delivered?
|
262
|
+
assert_equal '123456789012', response.tracking_number
|
263
|
+
assert_equal :in_transit, response.status
|
264
|
+
assert_equal 'IT', response.status_code
|
265
|
+
assert_equal "In transit", response.status_description
|
266
|
+
|
267
|
+
assert_equal Time.parse('2014-11-25T20:04:00Z'), response.ship_time
|
268
|
+
assert_equal nil, response.scheduled_delivery_date
|
269
|
+
assert_equal nil, response.actual_delivery_date
|
270
|
+
|
271
|
+
assert_equal nil, response.origin
|
272
|
+
|
273
|
+
destination_address = ActiveShipping::Location.new(
|
274
|
+
city: 'TONNESSEE',
|
275
|
+
country: 'US',
|
276
|
+
state: 'TN'
|
277
|
+
)
|
278
|
+
assert_equal destination_address.to_hash, response.destination.to_hash
|
279
|
+
assert_equal 9, response.shipment_events.length
|
280
|
+
end
|
281
|
+
|
282
|
+
def test_find_tracking_info_with_multiple_matches
|
283
|
+
exception = assert_raises(ActiveShipping::Error) do
|
284
|
+
response = @carrier.find_tracking_info('123456789012')
|
285
|
+
end
|
286
|
+
assert_match 'Multiple matches were found.', exception.message
|
287
|
+
end
|
288
|
+
|
289
|
+
def test_find_tracking_info_not_found
|
290
|
+
assert_raises(ActiveShipping::ShipmentNotFound) do
|
291
|
+
@carrier.find_tracking_info('123456789013')
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
def test_find_tracking_info_with_invalid_tracking_number
|
296
|
+
assert_raises(ActiveShipping::ResponseError) do
|
297
|
+
@carrier.find_tracking_info('abc')
|
298
|
+
end
|
217
299
|
end
|
218
300
|
end
|