active_shipping 0.1.4 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. data/CHANGELOG +2 -0
  2. data/README.markdown +0 -3
  3. data/lib/active_merchant/common.rb +14 -0
  4. data/lib/{active_shipping/lib → active_merchant/common}/connection.rb +2 -0
  5. data/lib/{active_shipping/lib → active_merchant/common}/country.rb +0 -0
  6. data/lib/active_merchant/common/error.rb +26 -0
  7. data/lib/active_merchant/common/post_data.rb +24 -0
  8. data/lib/{active_shipping/lib → active_merchant/common}/posts_data.rb +0 -0
  9. data/lib/{active_shipping/lib → active_merchant/common}/requires_parameters.rb +0 -0
  10. data/lib/{active_shipping/lib → active_merchant/common}/utils.rb +0 -0
  11. data/lib/{active_shipping/lib → active_merchant/common}/validateable.rb +0 -0
  12. data/lib/active_shipping.rb +10 -22
  13. data/lib/active_shipping/shipping/base.rb +2 -1
  14. data/lib/active_shipping/shipping/carrier.rb +0 -5
  15. data/lib/active_shipping/shipping/carriers.rb +2 -1
  16. data/lib/active_shipping/shipping/carriers/fedex.rb +7 -191
  17. data/lib/active_shipping/shipping/carriers/kunaki.rb +165 -0
  18. data/lib/active_shipping/shipping/carriers/ups.rb +2 -1
  19. data/lib/active_shipping/shipping/carriers/usps.rb +0 -85
  20. data/lib/active_shipping/shipping/location.rb +1 -4
  21. data/lib/active_shipping/shipping/response.rb +1 -4
  22. data/lib/active_shipping/version.rb +3 -0
  23. data/lib/vendor/quantified/lib/quantified.rb +5 -3
  24. metadata +68 -102
  25. data/.gitignore +0 -8
  26. data/Rakefile +0 -51
  27. data/VERSION +0 -1
  28. data/active_shipping.gemspec +0 -152
  29. data/init.rb +0 -1
  30. data/lib/active_shipping/lib/error.rb +0 -4
  31. data/lib/active_shipping/lib/post_data.rb +0 -22
  32. data/lib/active_shipping/shipping/contact.rb +0 -18
  33. data/lib/active_shipping/shipping/label.rb +0 -31
  34. data/lib/active_shipping/shipping/location_response.rb +0 -14
  35. data/lib/active_shipping/shipping/party.rb +0 -15
  36. data/lib/active_shipping/shipping/return_label_response.rb +0 -14
  37. data/lib/active_shipping/shipping/return_shipment.rb +0 -14
  38. data/lib/active_shipping/shipping/shipment.rb +0 -73
  39. data/test/fixtures.example.yml +0 -13
  40. data/test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_request.xml +0 -67
  41. data/test/fixtures/xml/fedex/ottawa_to_beverly_hills_rate_response.xml +0 -213
  42. data/test/fixtures/xml/fedex/tracking_request.xml +0 -27
  43. data/test/fixtures/xml/fedex/tracking_response.xml +0 -153
  44. data/test/fixtures/xml/shipwire/international_rates_response.xml +0 -17
  45. data/test/fixtures/xml/shipwire/invalid_credentials_response.xml +0 -4
  46. data/test/fixtures/xml/shipwire/new_carrier_rate_response.xml +0 -18
  47. data/test/fixtures/xml/shipwire/no_rates_response.xml +0 -7
  48. data/test/fixtures/xml/shipwire/rates_response.xml +0 -36
  49. data/test/fixtures/xml/ups/example_tracking_response.xml +0 -53
  50. data/test/fixtures/xml/ups/shipment_from_tiger_direct.xml +0 -222
  51. data/test/fixtures/xml/ups/test_real_home_as_residential_destination_response.xml +0 -1
  52. data/test/fixtures/xml/usps/beverly_hills_to_ottawa_book_rate_response.xml +0 -85
  53. data/test/fixtures/xml/usps/beverly_hills_to_ottawa_book_wii_rate_response.xml +0 -168
  54. data/test/fixtures/xml/usps/beverly_hills_to_ottawa_wii_rate_response.xml +0 -85
  55. data/test/fixtures/xml/usps/example_tracking_response.xml +0 -104
  56. data/test/fixtures/xml/usps/multi_tracking_example.xml +0 -105
  57. data/test/party_factory.rb +0 -29
  58. data/test/remote/fedex_test.rb +0 -160
  59. data/test/remote/shipwire_test.rb +0 -88
  60. data/test/remote/ups_test.rb +0 -207
  61. data/test/remote/usps_test.rb +0 -184
  62. data/test/shipment_factory.rb +0 -27
  63. data/test/test_helper.rb +0 -171
  64. data/test/unit/base_test.rb +0 -18
  65. data/test/unit/carriers/fedex_test.rb +0 -78
  66. data/test/unit/carriers/shipwire_test.rb +0 -130
  67. data/test/unit/carriers/ups_test.rb +0 -81
  68. data/test/unit/carriers/usps_test.rb +0 -206
  69. data/test/unit/location_test.rb +0 -46
  70. data/test/unit/package_test.rb +0 -65
  71. data/test/unit/party_test.rb +0 -20
  72. data/test/unit/response_test.rb +0 -10
  73. data/test/unit/shipment_test.rb +0 -43
@@ -1,88 +0,0 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
2
-
3
- class RemoteShipwireTest < Test::Unit::TestCase
4
-
5
- def setup
6
- @packages = TestFixtures.packages
7
- @locations = TestFixtures.locations
8
- @carrier = Shipwire.new(fixtures(:shipwire))
9
- @item1 = { :sku => 'AF0001', :quantity => 2 }
10
- @item2 = { :sku => 'AF0002', :quantity => 1 }
11
- @items = [@item1, @item2]
12
- end
13
-
14
- def test_successful_domestic_rates_request_for_single_line_item
15
- response = @carrier.find_rates(
16
- @locations[:ottawa],
17
- @locations[:beverly_hills],
18
- @packages.values_at(:book, :wii),
19
- :items => [@item1],
20
- :order_id => '#1000'
21
- )
22
-
23
- assert response.success?
24
- assert_equal 3, response.rates.size
25
- assert_equal ['1D', '2D', 'GD'], response.rates.collect(&:service_code).sort
26
- end
27
-
28
- def test_successful_domestic_rates_request_for_multiple_line_items
29
- response = @carrier.find_rates(
30
- @locations[:ottawa],
31
- @locations[:beverly_hills],
32
- @packages.values_at(:book, :wii),
33
- :items => @items,
34
- :order_id => '#1000'
35
- )
36
-
37
- assert response.success?
38
- assert_equal 3, response.rates.size
39
- assert_equal ['1D', '2D', 'GD'], response.rates.collect(&:service_code).sort
40
- end
41
-
42
- def test_successful_international_rates_request_for_single_line_item
43
- response = @carrier.find_rates(
44
- @locations[:ottawa],
45
- @locations[:london],
46
- @packages.values_at(:book, :wii),
47
- :items => [@item1],
48
- :order_id => '#1000'
49
- )
50
-
51
- assert response.success?
52
- assert_equal 1, response.rates.size
53
- assert_equal ['INTL'], response.rates.collect(&:service_code)
54
- end
55
-
56
- def test_invalid_credentials
57
- shipwire = Shipwire.new(
58
- :login => 'your@email.com',
59
- :password => 'password'
60
- )
61
-
62
- begin
63
- assert_raises(ActiveMerchant::Shipping::ResponseError) do
64
- shipwire.find_rates(
65
- @locations[:ottawa],
66
- @locations[:beverly_hills],
67
- @packages.values_at(:book, :wii),
68
- :items => @items,
69
- :order_id => '#1000'
70
- )
71
- end
72
- rescue ResponseError => e
73
- assert_equal "Could not verify e-mail/password combination", response.message
74
- end
75
- end
76
-
77
- def test_validate_credentials_with_valid_credentials
78
- assert @carrier.valid_credentials?
79
- end
80
-
81
- def test_validate_credentials_with_invalid_credentials
82
- shipwire = Shipwire.new(
83
- :login => 'your@email.com',
84
- :password => 'password'
85
- )
86
- assert !shipwire.valid_credentials?
87
- end
88
- end
@@ -1,207 +0,0 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
2
-
3
- class UPSTest < Test::Unit::TestCase
4
-
5
- def setup
6
- @packages = TestFixtures.packages
7
- @locations = TestFixtures.locations
8
- @carrier = UPS.new(fixtures(:ups))
9
- end
10
-
11
- def test_tracking
12
- assert_nothing_raised do
13
- response = @carrier.find_tracking_info('1Z5FX0076803466397')
14
- end
15
- end
16
-
17
- def test_tracking_with_bad_number
18
- assert_raises ResponseError do
19
- response = @carrier.find_tracking_info('1Z12345')
20
- end
21
- end
22
-
23
- def test_tracking_with_another_number
24
- assert_nothing_raised do
25
- response = @carrier.find_tracking_info('1Z67Y4260390005815')
26
- end
27
- end
28
-
29
- def test_us_to_uk
30
- response = nil
31
- assert_nothing_raised do
32
- response = @carrier.find_rates(
33
- @locations[:beverly_hills],
34
- @locations[:london],
35
- @packages.values_at(:big_half_pound),
36
- :test => true
37
- )
38
- end
39
- end
40
-
41
- def test_puerto_rico
42
- response = nil
43
- assert_nothing_raised do
44
- response = @carrier.find_rates(
45
- @locations[:beverly_hills],
46
- Location.new(:city => 'Ponce', :country => 'US', :state => 'PR', :zip => '00733-1283'),
47
- @packages.values_at(:big_half_pound),
48
- :test => true
49
- )
50
- end
51
- end
52
-
53
- def test_just_country_given
54
- response = @carrier.find_rates(
55
- @locations[:beverly_hills],
56
- Location.new(:country => 'CA'),
57
- Package.new(100, [5,10,20])
58
- )
59
- assert_not_equal [], response.rates
60
- end
61
-
62
- def test_ottawa_to_beverly_hills
63
- response = nil
64
- assert_nothing_raised do
65
- response = @carrier.find_rates(
66
- @locations[:ottawa],
67
- @locations[:beverly_hills],
68
- @packages.values_at(:book, :wii),
69
- :test => true
70
- )
71
- end
72
-
73
- assert response.success?, response.message
74
- assert_instance_of Hash, response.params
75
- assert_instance_of String, response.xml
76
- assert_instance_of Array, response.rates
77
- assert_not_equal [], response.rates
78
-
79
- rate = response.rates.first
80
- assert_equal 'UPS', rate.carrier
81
- assert_equal 'CAD', rate.currency
82
- assert_instance_of Fixnum, rate.total_price
83
- assert_instance_of Fixnum, rate.price
84
- assert_instance_of String, rate.service_name
85
- assert_instance_of String, rate.service_code
86
- assert_instance_of Array, rate.package_rates
87
- assert_equal @packages.values_at(:book, :wii), rate.packages
88
-
89
- package_rate = rate.package_rates.first
90
- assert_instance_of Hash, package_rate
91
- assert_instance_of Package, package_rate[:package]
92
- assert_nil package_rate[:rate]
93
- end
94
-
95
- def test_ottawa_to_us_fails_without_zip
96
- assert_raises ResponseError do
97
- @carrier.find_rates(
98
- @locations[:ottawa],
99
- Location.new(:country => 'US'),
100
- @packages.values_at(:book, :wii),
101
- :test => true
102
- )
103
- end
104
- end
105
-
106
- def test_ottawa_to_us_succeeds_with_only_zip
107
- assert_nothing_raised do
108
- @carrier.find_rates(
109
- @locations[:ottawa],
110
- Location.new(:country => 'US', :zip => 90210),
111
- @packages.values_at(:book, :wii),
112
- :test => true
113
- )
114
- end
115
- end
116
-
117
- def test_us_to_uk_with_different_pickup_types
118
- assert_nothing_raised do
119
- daily_response = @carrier.find_rates(
120
- @locations[:beverly_hills],
121
- @locations[:london],
122
- @packages.values_at(:book, :wii),
123
- :pickup_type => :daily_pickup,
124
- :test => true
125
- )
126
- one_time_response = @carrier.find_rates(
127
- @locations[:beverly_hills],
128
- @locations[:london],
129
- @packages.values_at(:book, :wii),
130
- :pickup_type => :one_time_pickup,
131
- :test => true
132
- )
133
- assert_not_equal daily_response.rates.map(&:price), one_time_response.rates.map(&:price)
134
- end
135
- end
136
-
137
- def test_bare_packages
138
- response = nil
139
- p = Package.new(0,0)
140
- assert_nothing_raised do
141
- response = @carrier.find_rates(
142
- @locations[:beverly_hills], # imperial (U.S. origin)
143
- @locations[:ottawa],
144
- p,
145
- :test => true
146
- )
147
- end
148
- assert response.success?, response.message
149
- assert_nothing_raised do
150
- response = @carrier.find_rates(
151
- @locations[:ottawa],
152
- @locations[:beverly_hills], # metric
153
- p,
154
- :test => true
155
- )
156
- end
157
- assert response.success?, response.message
158
- end
159
-
160
- def test_different_rates_for_residential_and_commercial_destinations
161
- responses = {}
162
- locations = [
163
- :real_home_as_residential, :real_home_as_commercial,
164
- :fake_home_as_residential, :fake_home_as_commercial,
165
- :real_google_as_residential, :real_google_as_commercial,
166
- :fake_google_as_residential, :fake_google_as_commercial
167
- ]
168
-
169
- locations.each do |location|
170
- responses[location] = @carrier.find_rates(
171
- @locations[:beverly_hills],
172
- @locations[location],
173
- @packages.values_at(:chocolate_stuff)
174
- )
175
- end
176
-
177
- prices_of = lambda {|sym| responses[sym].rates.map(&:price)}
178
-
179
- # this is how UPS does things...
180
- # if it's a real residential address and UPS knows it, then they return
181
- # residential rates whether or not we have the ResidentialAddressIndicator:
182
- assert_equal prices_of.call(:real_home_as_residential), prices_of.call(:real_home_as_commercial)
183
-
184
- # if UPS doesn't know about the address, and we HAVE the ResidentialAddressIndicator,
185
- # then UPS will default to residential rates:
186
- assert_equal prices_of.call(:real_home_as_residential), prices_of.call(:fake_home_as_residential)
187
-
188
- # if UPS doesn't know about the address, and we DON'T have the ResidentialAddressIndicator,
189
- # then UPS will default to commercial rates:
190
- assert_not_equal prices_of.call(:fake_home_as_residential), prices_of.call(:fake_home_as_commercial)
191
- assert prices_of.call(:fake_home_as_residential).first > prices_of.call(:fake_home_as_commercial).first
192
-
193
-
194
- # if it's a real commercial address and UPS knows it, then they return
195
- # commercial rates whether or not we have the ResidentialAddressIndicator:
196
- assert_equal prices_of.call(:real_google_as_commercial), prices_of.call(:real_google_as_residential)
197
-
198
- # if UPS doesn't know about the address, and we DON'T have the ResidentialAddressIndicator,
199
- # then UPS will default to commercial rates:
200
- assert_equal prices_of.call(:real_google_as_commercial), prices_of.call(:fake_google_as_commercial)
201
-
202
- # if UPS doesn't know about the address, and we HAVE the ResidentialAddressIndicator,
203
- # then UPS will default to residential rates:
204
- assert_not_equal prices_of.call(:fake_google_as_commercial), prices_of.call(:fake_google_as_residential)
205
- assert prices_of.call(:fake_home_as_residential).first > prices_of.call(:fake_home_as_commercial).first
206
- end
207
- end
@@ -1,184 +0,0 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
2
-
3
- class USPSTest < Test::Unit::TestCase
4
-
5
- def setup
6
- @packages = TestFixtures.packages
7
- @locations = TestFixtures.locations
8
- @carrier = USPS.new(fixtures(:usps))
9
- end
10
-
11
- def test_machinable_rate_discrepancy
12
- assert_nothing_raised do
13
- default_machinable_response = @carrier.find_rates(
14
- Location.new(:zip => 83843),
15
- Location.new(:zip => 70001),
16
- Package.new(32, [12,6,2], :units => :imperial)
17
- )
18
- assert default_machinable_response.request =~ /<Machinable>TRUE<\/Machinable>/
19
-
20
- explicit_non_machinable_response = @carrier.find_rates(
21
- Location.new(:zip => 83843),
22
- Location.new(:zip => 70001),
23
- Package.new(32, [12,6,2], :units => :imperial, :machinable => false)
24
- )
25
- assert explicit_non_machinable_response.request =~ /<Machinable>FALSE<\/Machinable>/
26
-
27
- assert_not_equal default_machinable_response.rates.map(&:price),
28
- explicit_non_machinable_response.rates.map(&:price)
29
- end
30
- end
31
-
32
- def test_zip_to_zip
33
- assert_nothing_raised do
34
- response = @carrier.find_rates(
35
- Location.new(:zip => 40524),
36
- Location.new(:zip => 40515),
37
- Package.new(16, [12,6,2], :units => :imperial)
38
- )
39
- end
40
- end
41
-
42
- def test_just_country_given
43
- assert_nothing_raised do
44
- response = @carrier.find_rates(
45
- @locations[:beverly_hills],
46
- Location.new(:country => 'CZ'),
47
- Package.new(100, [5,10,20])
48
- )
49
- end
50
- end
51
-
52
- def test_us_to_canada
53
- response = nil
54
- assert_nothing_raised do
55
- response = @carrier.find_rates(
56
- @locations[:beverly_hills],
57
- @locations[:ottawa],
58
- @packages.values_at(:wii),
59
- :test => true
60
- )
61
- assert_not_equal [], response.rates.length
62
- end
63
- end
64
-
65
- def test_domestic_rates_thoroughly
66
- response = nil
67
- assert_nothing_raised do
68
- response = @carrier.find_rates(
69
- @locations[:new_york],
70
- @locations[:beverly_hills],
71
- @packages.values_at(:book,:wii),
72
- :test => true
73
- )
74
- end
75
- assert response.success?, response.message
76
- assert_instance_of Hash, response.params
77
- assert_instance_of String, response.xml
78
- assert_instance_of Array, response.rates
79
- assert_not_equal [], response.rates
80
-
81
- rate = response.rates.first
82
- assert_equal 'USPS', rate.carrier
83
- assert_equal 'USD', rate.currency
84
- assert_instance_of Fixnum, rate.total_price
85
- assert_instance_of Fixnum, rate.price
86
- assert_instance_of String, rate.service_name
87
- assert_instance_of String, rate.service_code
88
- assert_instance_of Array, rate.package_rates
89
- assert_equal @packages.values_at(:book, :wii), rate.packages
90
-
91
- package_rate = rate.package_rates.first
92
- assert_instance_of Hash, package_rate
93
- assert_instance_of Package, package_rate[:package]
94
- assert_not_nil package_rate[:rate]
95
-
96
- other_than_two = response.rates.map(&:package_count).reject {|n| n == 2}
97
- assert_equal [], other_than_two, "Some RateEstimates do not refer to the right number of packages (#{other_than_two.inspect})"
98
-
99
-
100
- end
101
-
102
- def test_international_thoroughly
103
-
104
- response = nil
105
- assert_nothing_raised do
106
- response = @carrier.find_rates(
107
- @locations[:beverly_hills],
108
- @locations[:ottawa],
109
- @packages.values_at(:book, :wii),
110
- :test => true
111
- )
112
- end
113
-
114
- assert response.success?, response.message
115
- assert_instance_of Hash, response.params
116
- assert_instance_of String, response.xml
117
- assert_instance_of Array, response.rates
118
- assert_not_equal [], response.rates
119
-
120
- rate = response.rates.first
121
- assert_equal 'USPS', rate.carrier
122
- assert_equal 'USD', rate.currency
123
- assert_instance_of Fixnum, rate.total_price
124
- assert_instance_of Fixnum, rate.price
125
- assert_instance_of String, rate.service_name
126
- assert_instance_of String, rate.service_code
127
- assert_instance_of Array, rate.package_rates
128
- assert_equal @packages.values_at(:book, :wii), rate.packages
129
-
130
- package_rate = rate.package_rates.first
131
- assert_instance_of Hash, package_rate
132
- assert_instance_of Package, package_rate[:package]
133
- assert_not_nil package_rate[:rate]
134
-
135
- other_than_two = response.rates.map(&:package_count).reject {|n| n == 2}
136
- assert_equal [], other_than_two, "Some RateEstimates do not refer to the right number of packages (#{other_than_two.inspect})"
137
-
138
- end
139
-
140
- def test_bare_packages
141
- response = nil
142
- p = Package.new(0,0)
143
- response = begin
144
- @carrier.find_rates(
145
- @locations[:beverly_hills], # imperial (U.S. origin)
146
- @locations[:ottawa],
147
- p,
148
- :test => true
149
- )
150
- rescue ResponseError => e
151
- e.response
152
- end
153
- assert response.success?, response.message
154
- end
155
-
156
- def test_valid_credentials
157
- assert USPS.new(fixtures(:usps).merge(:test => true)).valid_credentials?
158
- end
159
-
160
- # Uncomment and switch out SPECIAL_COUNTRIES with some other batch to see which
161
- # countries are currently working. Commented out here just because it's a lot of
162
- # hits to their server at once:
163
-
164
- # ALL_COUNTRIES = ActiveMerchant::Country.const_get('COUNTRIES').map {|c| c[:alpha2]}
165
- # SPECIAL_COUNTRIES = USPS.const_get('COUNTRY_NAME_CONVERSIONS').keys.sort
166
- # NORMAL_COUNTRIES = (ALL_COUNTRIES - SPECIAL_COUNTRIES)
167
- #
168
- # SPECIAL_COUNTRIES.each do |code|
169
- # unless ActiveMerchant::Country.find(code).name == USPS.const_get('COUNTRY_NAME_CONVERSIONS')[code]
170
- # define_method("test_country_#{code}") do
171
- # response = nil
172
- # begin
173
- # response = @carrier.find_rates( @locations[:beverly_hills],
174
- # Location.new(:country => code),
175
- # @packages.values_at(:wii),
176
- # :test => true)
177
- # rescue Exception => e
178
- # flunk(e.inspect + "\nrequest: " + @carrier.last_request)
179
- # end
180
- # assert_not_equal [], response.rates.length
181
- # end
182
- # end
183
- # end
184
- end