active_shipping 0.1.4 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
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,206 +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(:login => 'login')
9
- @international_rate_responses = {
10
- :vanilla => xml_fixture('usps/beverly_hills_to_ottawa_book_rate_response')
11
- }
12
-
13
- end
14
-
15
- # TODO: test_parse_domestic_rate_response
16
- # TODO: test_build_us_rate_request
17
- # TODO: test_build_world_rate_request
18
-
19
- def test_initialize_options_requirements
20
- assert_raises ArgumentError do USPS.new end
21
- assert_nothing_raised { USPS.new(:login => 'blah')}
22
- end
23
-
24
- def test_find_tracking_info_should_return_a_tracking_response
25
- @carrier.expects(:commit).returns(xml_fixture('usps/example_tracking_response'))
26
- assert_instance_of ActiveMerchant::Shipping::TrackingResponse,
27
- @carrier.find_tracking_info(['EJ958083578US'], :test => true)[0]
28
- end
29
-
30
- def test_find_tracking_info_should_return_a_tracking_number
31
- @carrier.expects(:commit).returns(xml_fixture('usps/example_tracking_response'))
32
- info = @carrier.find_tracking_info(['EJ958083578US'], :test => true)[0]
33
-
34
- assert_equal 'EJ958083578US', info.tracking_number
35
- end
36
-
37
- def test_find_tracking_info_should_return_correct_number_of_shipment_events
38
- @carrier.expects(:commit).returns(xml_fixture('usps/example_tracking_response'))
39
- info = @carrier.find_tracking_info(['EJ958083578US'], :test => true)[0]
40
-
41
- assert_equal 4, info.shipment_events.size
42
- end
43
-
44
- def test_find_tracking_info_should_return_proper_order
45
- @carrier.expects(:commit).returns(xml_fixture('usps/example_tracking_response'))
46
- info = @carrier.find_tracking_info(['EJ958083578US'], :test => true)[0]
47
-
48
- assert_equal "NOTICE LEFT", info.shipment_events.first.name
49
- assert_equal "DELIVERED", info.shipment_events.last.name
50
- end
51
-
52
- def test_find_multiple_returns_two_seperate_tracking_responses
53
- @carrier.expects(:commit).returns(xml_fixture('usps/multi_tracking_example'))
54
- info = @carrier.find_tracking_info(['EJ958083578US', 'EJ958088694US'], :test => true)
55
- assert_equal 2, info.size
56
- assert_equal 'EJ958083578US', info.first.tracking_number
57
- assert_equal 'EJ958088694US', info.last.tracking_number
58
- end
59
-
60
- def test_parse_international_rate_response
61
- fixture_xml = @international_rate_responses[:vanilla]
62
- @carrier.expects(:commit).returns(fixture_xml)
63
-
64
- response = begin
65
- @carrier.find_rates(
66
- @locations[:beverly_hills], # imperial (U.S. origin)
67
- @locations[:ottawa],
68
- @packages[:book],
69
- :test => true
70
- )
71
- rescue ResponseError => e
72
- e.response
73
- end
74
-
75
-
76
- expected_xml_hash = Hash.from_xml(fixture_xml)
77
- actual_xml_hash = Hash.from_xml(response.xml)
78
-
79
- assert_equal expected_xml_hash, actual_xml_hash
80
-
81
- assert_not_equal [],response.rates
82
- assert_equal response.rates.sort_by(&:price), response.rates
83
- assert_equal ["1", "2", "3", "4", "6", "7", "9"], response.rates.map(&:service_code).sort
84
-
85
- ordered_service_names = ["USPS Express Mail International (EMS)", "USPS First-Class Mail International", "USPS Global Express Guaranteed", "USPS Global Express Guaranteed Non-Document Non-Rectangular", "USPS Global Express Guaranteed Non-Document Rectangular", "USPS Priority Mail International", "USPS Priority Mail International Flat Rate Box"]
86
- assert_equal ordered_service_names, response.rates.map(&:service_name).sort
87
-
88
-
89
- assert_equal [376, 1600, 2300, 2325, 4100, 4100, 4100], response.rates.map(&:total_price)
90
- end
91
-
92
- def test_parse_max_dimension_sentences
93
- limits = {
94
- "Max. length 46\", width 35\", height 46\" and max. length plus girth 108\"" =>
95
- [{:length => 46.0, :width => 46.0, :height => 35.0, :length_plus_girth => 108.0}],
96
- "Max.length 42\", max. length plus girth 79\"" =>
97
- [{:length => 42.0, :length_plus_girth => 79.0}],
98
- "9 1/2\" X 12 1/2\"" =>
99
- [{:length => 12.5, :width => 9.5, :height => 0.75}, "Flat Rate Envelope"],
100
- "Maximum length and girth combined 108\"" =>
101
- [{:length_plus_girth => 108.0}],
102
- "USPS-supplied Priority Mail flat-rate envelope 9 1/2\" x 12 1/2.\" Maximum weight 4 pounds." =>
103
- [{:length => 12.5, :width => 9.5, :height => 0.75}, "Flat Rate Envelope"],
104
- "Max. length 24\", Max. length, height, depth combined 36\"" =>
105
- [{:length => 24.0, :length_plus_width_plus_height => 36.0}]
106
- }
107
- p = @packages[:book]
108
- limits.each do |sentence,hashes|
109
- dimensions = hashes[0].update(:weight => 50.0)
110
- service_node = build_service_node(
111
- :name => hashes[1],
112
- :max_weight => 50,
113
- :max_dimensions => sentence )
114
- @carrier.expects(:package_valid_for_max_dimensions).with(p, dimensions)
115
- @carrier.send(:package_valid_for_service, p, service_node)
116
- end
117
-
118
- service_node = build_service_node(
119
- :name => "flat-rate box",
120
- :max_weight => 50,
121
- :max_dimensions => "USPS-supplied Priority Mail flat-rate box. Maximum weight 20 pounds." )
122
-
123
- # should test against either kind of flat rate box:
124
- dimensions = [{:weight => 50.0, :length => 11.0, :width => 8.5, :height => 5.5}, # or...
125
- {:weight => 50.0, :length => 13.625, :width => 11.875, :height => 3.375}]
126
- @carrier.expects(:package_valid_for_max_dimensions).with(p, dimensions[0])
127
- @carrier.expects(:package_valid_for_max_dimensions).with(p, dimensions[1])
128
- @carrier.send(:package_valid_for_service, p, service_node)
129
-
130
- end
131
-
132
- def test_package_valid_for_max_dimensions
133
- p = Package.new(70 * 16, [10,10,10], :units => :imperial)
134
- limits = {:weight => 70.0, :length => 10.0, :width => 10.0, :height => 10.0, :length_plus_girth => 50.0, :length_plus_width_plus_height => 30.0}
135
- assert_equal true, @carrier.send(:package_valid_for_max_dimensions, p, limits)
136
-
137
- limits.keys.each do |key|
138
- dimensions = {key => (limits[key] - 1)}
139
- assert_equal false, @carrier.send(:package_valid_for_max_dimensions, p, dimensions)
140
- end
141
-
142
- end
143
-
144
- def test_strip_9_digit_zip_codes
145
- request = URI.decode(@carrier.send(:build_us_rate_request, @packages[:book], "90210-1234", "123456789"))
146
- assert !(request =~ /\>90210-1234\</)
147
- assert request =~ /\>90210\</
148
- assert !(request =~ /\>123456789\</)
149
- assert request =~ /\>12345\</
150
- end
151
-
152
- def test_xml_logging_to_file
153
- mock_response = @international_rate_responses[:vanilla]
154
- @carrier.expects(:commit).times(2).returns(mock_response)
155
- @carrier.find_rates(
156
- @locations[:beverly_hills],
157
- @locations[:ottawa],
158
- @packages[:book],
159
- :test => true
160
- )
161
- @carrier.find_rates(
162
- @locations[:beverly_hills],
163
- @locations[:ottawa],
164
- @packages[:book],
165
- :test => true
166
- )
167
- end
168
-
169
- def test_maximum_weight
170
- assert Package.new(70 * 16, [5,5,5], :units => :imperial).mass == @carrier.maximum_weight
171
- assert Package.new((70 * 16) + 0.01, [5,5,5], :units => :imperial).mass > @carrier.maximum_weight
172
- assert Package.new((70 * 16) - 0.01, [5,5,5], :units => :imperial).mass < @carrier.maximum_weight
173
- end
174
-
175
- private
176
-
177
- def build_service_node(options = {})
178
- XmlNode.new('Service') do |service_node|
179
- service_node << XmlNode.new('Pounds', options[:pounds] || "0")
180
- service_node << XmlNode.new('SvcCommitments', options[:svc_commitments] || "Varies")
181
- service_node << XmlNode.new('Country', options[:country] || "CANADA")
182
- service_node << XmlNode.new('ID', options[:id] || "3")
183
- service_node << XmlNode.new('MaxWeight', options[:max_weight] || "64")
184
- service_node << XmlNode.new('SvcDescription', options[:name] || "First-Class Mail International")
185
- service_node << XmlNode.new('MailType', options[:mail_type] || "Package")
186
- service_node << XmlNode.new('Postage', options[:postage] || "3.76")
187
- service_node << XmlNode.new('Ounces', options[:ounces] || "9")
188
- service_node << XmlNode.new('MaxDimensions', options[:max_dimensions] ||
189
- "Max. length 24\", Max. length, height, depth combined 36\"")
190
- end.to_xml_element
191
- end
192
-
193
- def build_service_hash(options = {})
194
- {"Pounds"=> options[:pounds] || "0", # 8
195
- "SvcCommitments"=> options[:svc_commitments] || "Varies",
196
- "Country"=> options[:country] || "CANADA",
197
- "ID"=> options[:id] || "3",
198
- "MaxWeight"=> options[:max_weight] || "64",
199
- "SvcDescription"=> options[:name] || "First-Class Mail International",
200
- "MailType"=> options[:mail_type] || "Package",
201
- "Postage"=> options[:postage] || "3.76",
202
- "Ounces"=> options[:ounces] || "9",
203
- "MaxDimensions"=> options[:max_dimensions] ||
204
- "Max. length 24\", Max. length, height, depth combined 36\""}
205
- end
206
- end
@@ -1,46 +0,0 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
2
-
3
- class LocationTest < Test::Unit::TestCase
4
- include ActiveMerchant::Shipping
5
-
6
- def setup
7
- @locations = TestFixtures.locations.dup
8
- end
9
-
10
- def test_countries
11
- assert_instance_of ActiveMerchant::Country, @locations[:ottawa].country
12
- assert_equal 'CA', @locations[:ottawa].country_code(:alpha2)
13
- end
14
-
15
- def test_location_from_strange_hash
16
- hash = { :country => 'CA',
17
- :zip => '90210',
18
- :territory_code => 'QC',
19
- :town => 'Perth',
20
- :address => '66 Gregory Ave.',
21
- :phone => '515-555-1212',
22
- :fax_number => 'none to speak of',
23
- :address_type => :commercial
24
- }
25
- location = Location.from(hash)
26
-
27
- assert_equal hash[:country], location.country_code(:alpha2)
28
- assert_equal hash[:zip], location.zip
29
- assert_equal hash[:territory_code], location.province
30
- assert_equal hash[:town], location.city
31
- assert_equal hash[:address], location.address1
32
- assert_equal hash[:phone], location.phone
33
- assert_equal hash[:fax_number], location.fax
34
- assert_equal hash[:address_type].to_s, location.address_type
35
- end
36
-
37
- def to_s
38
- expected = "110 Laurier Avenue West\nOttawa, ON, K1P 1J1\nCanada"
39
- assert_equal expected, @locations[:ottawa].to_s
40
- end
41
-
42
- def test_inspect
43
- expected = "110 Laurier Avenue West\nOttawa, ON, K1P 1J1\nCanada\nPhone: 1-613-580-2400\nFax: 1-613-580-2495"
44
- assert_equal expected, @locations[:ottawa].inspect
45
- end
46
- end
@@ -1,65 +0,0 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
2
-
3
- class PackageTest < Test::Unit::TestCase
4
-
5
- GRAMS_IN_AN_OUNCE = 28.349523125
6
- OUNCES_IN_A_GRAM = 0.0352739619495804
7
- INCHES_IN_A_CM = 0.393700787401575
8
- CM_IN_AN_INCH = 2.54
9
-
10
- def setup
11
- @imperial_package = Package.new(65, [3,6,8.5],
12
- :units => :imperial,
13
- :value => 10.65,
14
- :currency => 'USD'
15
- )
16
-
17
- @metric_package = Package.new(100, [5,18.5,40],
18
- :value => 860,
19
- :currency => 'CAD'
20
- )
21
-
22
- @packages = TestFixtures.packages
23
- end
24
-
25
- def test_accessors
26
- # :wii => Package.new((7.5 * 16), [15, 10, 4.5], :units => :imperial, :value => 269.99, :currency => 'GBP')
27
- wii = @packages[:wii]
28
- [:x, :max, :long, :length].each do |sym|
29
- assert_equal 15, wii.inches(sym)
30
- assert_equal 15, wii.in(sym)
31
- assert_equal 15 * CM_IN_AN_INCH, wii.centimetres(sym)
32
- assert_equal 15 * CM_IN_AN_INCH, wii.cm(sym)
33
- end
34
- [:y, :mid, :width, :wide].each do |sym|
35
- assert_equal 10, wii.inches(sym)
36
- assert_equal 10, wii.in(sym)
37
- assert_equal 10 * CM_IN_AN_INCH, wii.centimetres(sym)
38
- assert_equal 10 * CM_IN_AN_INCH, wii.cm(sym)
39
- end
40
- [:z, :min, :height, :high, :depth, :deep].each do |sym|
41
- assert_equal 4.5, wii.inches(sym)
42
- assert_equal 4.5, wii.in(sym)
43
- assert_equal 4.5 * CM_IN_AN_INCH, wii.centimetres(sym)
44
- assert_equal 4.5 * CM_IN_AN_INCH, wii.cm(sym)
45
- end
46
- [:pounds, :lbs, :lb].each do |sym|
47
- assert_equal 7.5, wii.send(sym)
48
- end
49
- [:ounces, :oz].each do |sym|
50
- assert_equal 120, wii.send(sym)
51
- end
52
- [:grams, :g].each do |sym|
53
- assert_equal 120 * GRAMS_IN_AN_OUNCE, wii.send(sym)
54
- end
55
- [:kilograms, :kgs, :kg].each do |sym|
56
- assert_equal 120 * GRAMS_IN_AN_OUNCE / 1000, wii.send(sym)
57
- end
58
- assert_equal 675.0, wii.inches(:volume)
59
- assert_equal 675.0, wii.inches(:box_volume)
60
-
61
-
62
- assert_equal 'GBP', wii.currency
63
- assert_equal 26999, wii.value
64
- end
65
- end
@@ -1,20 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ActiveMerchant::Shipping::PartyTest < Test::Unit::TestCase
4
- include ActiveMerchant::Shipping
5
- def setup
6
- @party = PartyFactory.build(:fedex)
7
- end
8
-
9
- def test_has_location
10
- assert_not_nil @party.location
11
- end
12
-
13
- def test_has_contact
14
- assert_not_nil @party.contact
15
- end
16
-
17
- def test_has_account_number
18
- assert_not_nil @party.account_number
19
- end
20
- end
@@ -1,10 +0,0 @@
1
- require File.dirname(__FILE__) + '/../test_helper'
2
-
3
- class ResponseTest < Test::Unit::TestCase
4
- def test_initialize
5
- assert_nothing_raised do
6
- RateResponse.new(true, "success!", {:rate => 'Free!'}, :rates => [stub(:service_name => 'Free!', :total_price => 0)], :xml => "<rate>Free!</rate>")
7
- end
8
-
9
- end
10
- end
@@ -1,43 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ShipmentTest < Test::Unit::TestCase
4
- def setup
5
- @shipment = ShipmentFactory.build(:fedex)
6
- end
7
-
8
- def test_should_have_ship_at
9
- assert_not_nil @shipment.ship_at
10
- end
11
-
12
- def test_should_have_service
13
- assert_not_nil @shipment.service
14
- end
15
-
16
- def test_should_have_valid_service
17
- end
18
-
19
- def test_should_have_packaging_type
20
- assert_not_nil @shipment.packaging_type
21
- end
22
-
23
- def test_should_have_shipper
24
- assert_not_nil @shipment.shipper
25
- end
26
-
27
- def test_should_have_recipient
28
- assert_not_nil @shipment.recipient
29
- end
30
-
31
- def test_should_have_payment_type
32
- assert_not_nil @shipment.payment_type
33
- end
34
-
35
- def test_should_have_label
36
- assert_not_nil @shipment.label
37
- end
38
-
39
- def test_should_have_requested_packages
40
- assert_not_nil @shipment.requested_packages
41
- end
42
-
43
- end