fedex 2.0.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  require 'spec_helper'
2
-
2
+ require 'tmpdir'
3
3
  module Fedex
4
4
  describe Label do
5
5
  describe "ship service for label" do
@@ -21,34 +21,49 @@ module Fedex
21
21
  let(:shipping_options) do
22
22
  { :packaging_type => "YOUR_PACKAGING", :drop_off_type => "REGULAR_PICKUP" }
23
23
  end
24
-
25
- context "domestic shipment", :vcr do
26
- let(:filename) {
27
- require 'tmpdir'
28
- File.join(Dir.tmpdir, "label#{rand(15000)}.pdf")
24
+
25
+ let(:label_specification) do
26
+ { :label_format_type => 'COMMON2D',
27
+ :image_type => 'PNG',
29
28
  }
30
- let(:options) do
31
- {:shipper => shipper, :recipient => recipient, :packages => packages, :service_type => "FEDEX_GROUND", :filename => filename}
32
- end
33
-
29
+ end
30
+
31
+ let(:filename) {
32
+ require 'tmpdir'
33
+ File.join(Dir.tmpdir, "label#{rand(15000)}.pdf")
34
+ }
35
+
36
+ let(:options) do
37
+ { :shipper => shipper,
38
+ :recipient => recipient,
39
+ :packages => packages,
40
+ :service_type => "FEDEX_GROUND",
41
+ :label_specification => label_specification,
42
+ :filename => filename
43
+ }
44
+ end
45
+
46
+ describe "label", :vcr do
34
47
  before do
35
48
  @label = fedex.label(options)
36
49
  end
37
-
38
- it "returns a label" do
39
- @label.should be_an_instance_of(Label)
40
- end
41
-
42
- it "creates a label file" do
50
+
51
+ it "should create a label" do
43
52
  File.should exist(filename)
44
53
  end
45
-
54
+
55
+ it "should return tracking number" do
56
+ @label.should respond_to('tracking_number')
57
+ end
58
+
59
+ it "should expose complete response" do
60
+ @label.should respond_to('response_details')
61
+ end
46
62
  after do
47
63
  require 'fileutils'
48
64
  FileUtils.rm_r(filename) if File.exist?(filename)
49
65
  end
50
66
  end
51
-
52
67
  end
53
68
  end
54
69
  end
@@ -0,0 +1,149 @@
1
+ require 'spec_helper'
2
+
3
+ module Fedex
4
+ describe Shipment do
5
+ context "missing required parameters" do
6
+ it "should raise Rate exception" do
7
+ lambda{ Shipment.new}.should raise_error(RateError)
8
+ end
9
+ end
10
+
11
+ context "required parameters present" do
12
+ subject { Shipment.new(fedex_credentials) }
13
+ it "should create a valid instance" do
14
+ subject.should be_an_instance_of(Shipment)
15
+ end
16
+ end
17
+
18
+ describe "rate service" do
19
+ let(:fedex) { Shipment.new(fedex_credentials) }
20
+ let(:shipper) do
21
+ {:name => "Sender", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Harrison", :state => "AR", :postal_code => "72601", :country_code => "US"}
22
+ end
23
+ let(:recipient) do
24
+ {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Frankin Park", :state => "IL", :postal_code => "60131", :country_code => "US", :residential => true }
25
+ end
26
+ let(:packages) do
27
+ [
28
+ {
29
+ :weight => {:units => "LB", :value => 2},
30
+ :dimensions => {:length => 10, :width => 5, :height => 4, :units => "IN" }
31
+ },
32
+ {
33
+ :weight => {:units => "LB", :value => 6},
34
+ :dimensions => {:length => 5, :width => 5, :height => 4, :units => "IN" }
35
+ }
36
+ ]
37
+ end
38
+ let(:shipping_options) do
39
+ { :packaging_type => "YOUR_PACKAGING", :drop_off_type => "REGULAR_PICKUP" }
40
+ end
41
+
42
+ context "domestic shipment", :vcr do
43
+ it "should return a rate" do
44
+ rate = fedex.rate({:shipper => shipper, :recipient => recipient, :packages => packages, :service_type => "FEDEX_GROUND"})
45
+ rate.should be_an_instance_of(Rate)
46
+ end
47
+ end
48
+
49
+ context "canadian shipment", :vcr do
50
+ it "should return a rate" do
51
+ canadian_recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address=>"Address Line 1", :city => "Richmond", :state => "BC", :postal_code => "V7C4V4", :country_code => "CA", :residential => "true" }
52
+ rate = fedex.rate({:shipper => shipper, :recipient => canadian_recipient, :packages => packages, :service_type => "FEDEX_GROUND"})
53
+ rate.should be_an_instance_of(Rate)
54
+ end
55
+ end
56
+
57
+ context "canadian shipment including customs", :vcr do
58
+ it "should return a rate including international fees" do
59
+ canadian_recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address=>"Address Line 1", :city => "Richmond", :state => "BC", :postal_code => "V7C4V4", :country_code => "CA", :residential => "true" }
60
+ broker = {
61
+ :account_number => "510087143",
62
+ :tins => { :tin_type => "BUSINESS_NATIONAL",
63
+ :number => "431870271",
64
+ :usage => "Usage" },
65
+ :contact => { :contact_id => "1",
66
+ :person_name => "Broker Name",
67
+ :title => "Broker",
68
+ :company_name => "Broker One",
69
+ :phone_number => "555-555-5555",
70
+ :phone_extension => "555-555-5555",
71
+ :pager_number => "555",
72
+ :fax_number=> "555-555-5555",
73
+ :e_mail_address => "contact@me.com" },
74
+ :address => { :street_lines => "Main Street",
75
+ :city => "Franklin Park",
76
+ :state_or_province_code => 'IL',
77
+ :postal_code => '60131',
78
+ :urbanization_code => '123',
79
+ :country_code => 'US',
80
+ :residential => 'false' }
81
+ }
82
+
83
+ clearance_brokerage = "BROKER_INCLUSIVE"
84
+
85
+ importer_of_record= {
86
+ :account_number => "22222",
87
+ :tins => { :tin_type => "BUSINESS_NATIONAL",
88
+ :number => "22222",
89
+ :usage => "Usage" },
90
+ :contact => { :contact_id => "1",
91
+ :person_name => "Importer Name",
92
+ :title => "Importer",
93
+ :company_name => "Importer One",
94
+ :phone_number => "555-555-5555",
95
+ :phone_extension => "555-555-5555",
96
+ :pager_number => "555",
97
+ :fax_number=> "555-555-5555",
98
+ :e_mail_address => "contact@me.com" },
99
+ :address => { :street_lines => "Main Street",
100
+ :city => "Chicago",
101
+ :state_or_province_code => 'IL',
102
+ :postal_code => '60611',
103
+ :urbanization_code => '2308',
104
+ :country_code => 'US',
105
+ :residential => 'false' }
106
+ }
107
+
108
+ recipient_customs_id = { :type => 'COMPANY',
109
+ :value => '1254587' }
110
+
111
+
112
+ duties_payment = { :payment_type => "SENDER",
113
+ :payor => { :account_number => "510087143",
114
+ :country_code => "US" } }
115
+
116
+ customs_value = { :currency => "USD",
117
+ :amount => "200" }
118
+ commodities = [{
119
+ :name => "Cotton Coat",
120
+ :number_of_pieces => "2",
121
+ :description => "Cotton Coat",
122
+ :country_of_manufacture => "US",
123
+ :harmonized_code => "6103320000",
124
+ :weight => {:units => "LB", :value => "2"},
125
+ :quantity => "3",
126
+ :unit_price => {:currency => "USD", :amount => "50" },
127
+ :customs_value => {:currency => "USD", :amount => "150" }
128
+ },
129
+ {
130
+ :name => "Poster",
131
+ :number_of_pieces => "1",
132
+ :description => "Paper Poster",
133
+ :country_of_manufacture => "US",
134
+ :harmonized_code => "4817100000",
135
+ :weight => {:units => "LB", :value => "0.2"},
136
+ :quantity => "3",
137
+ :unit_price => {:currency => "USD", :amount => "50" },
138
+ :customs_value => {:currency => "USD", :amount => "150" }
139
+ }
140
+ ]
141
+
142
+ customs_clearance = { :broker => broker, :clearance_brokerage => clearance_brokerage, :importer_of_record => importer_of_record, :recipient_customs_id => recipient_customs_id, :duties_payment => duties_payment, :commodities => commodities }
143
+ rate = fedex.rate({:shipper => shipper, :recipient => canadian_recipient, :packages => packages, :service_type => "FEDEX_GROUND", :customs_clearance => customs_clearance})
144
+ rate.should be_an_instance_of(Rate)
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
@@ -1,149 +1,44 @@
1
1
  require 'spec_helper'
2
+ require 'fedex/shipment'
2
3
 
3
- module Fedex
4
- describe Shipment do
5
- context "missing required parameters" do
6
- it "should raise Rate exception" do
7
- lambda{ Shipment.new}.should raise_error(RateError)
8
- end
4
+ describe Fedex::Request::Shipment do
5
+ describe "ship service" do
6
+ let(:fedex) { Fedex::Shipment.new(fedex_credentials) }
7
+ let(:shipper) do
8
+ {:name => "Sender", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Harrison", :state => "AR", :postal_code => "72601", :country_code => "US"}
9
9
  end
10
-
11
- context "required parameters present" do
12
- subject { Shipment.new(fedex_credentials) }
13
- it "should create a valid instance" do
14
- subject.should be_an_instance_of(Shipment)
15
- end
10
+ let(:recipient) do
11
+ {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Frankin Park", :state => "IL", :postal_code => "60131", :country_code => "US", :residential => true }
12
+ end
13
+ let(:packages) do
14
+ [
15
+ {
16
+ :weight => {:units => "LB", :value => 2},
17
+ :dimensions => {:length => 10, :width => 5, :height => 4, :units => "IN" }
18
+ }
19
+ ]
20
+ end
21
+ let(:shipping_options) do
22
+ { :packaging_type => "YOUR_PACKAGING", :drop_off_type => "REGULAR_PICKUP" }
16
23
  end
17
24
 
18
- describe "rate service" do
19
- let(:fedex) { Shipment.new(fedex_credentials) }
20
- let(:shipper) do
21
- {:name => "Sender", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Harrison", :state => "AR", :postal_code => "72601", :country_code => "US"}
22
- end
23
- let(:recipient) do
24
- {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Frankin Park", :state => "IL", :postal_code => "60131", :country_code => "US", :residential => true }
25
- end
26
- let(:packages) do
27
- [
28
- {
29
- :weight => {:units => "LB", :value => 2},
30
- :dimensions => {:length => 10, :width => 5, :height => 4, :units => "IN" }
31
- },
32
- {
33
- :weight => {:units => "LB", :value => 6},
34
- :dimensions => {:length => 5, :width => 5, :height => 4, :units => "IN" }
35
- }
36
- ]
37
- end
38
- let(:shipping_options) do
39
- { :packaging_type => "YOUR_PACKAGING", :drop_off_type => "REGULAR_PICKUP" }
40
- end
41
-
42
- context "domestic shipment", :vcr do
43
- it "should return a rate" do
44
- rate = fedex.rate({:shipper => shipper, :recipient => recipient, :packages => packages, :service_type => "FEDEX_GROUND"})
45
- rate.should be_an_instance_of(Rate)
46
- end
47
- end
48
-
49
- context "canadian shipment", :vcr do
50
- it "should return a rate" do
51
- canadian_recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address=>"Address Line 1", :city => "Richmond", :state => "BC", :postal_code => "V7C4V4", :country_code => "CA", :residential => "true" }
52
- rate = fedex.rate({:shipper => shipper, :recipient => canadian_recipient, :packages => packages, :service_type => "FEDEX_GROUND"})
53
- rate.should be_an_instance_of(Rate)
54
- end
25
+ context "domestic shipment", :vcr do
26
+ let(:filename) {
27
+ require 'tmpdir'
28
+ File.join(Dir.tmpdir, "label#{rand(15000)}.pdf")
29
+ }
30
+ let(:options) do
31
+ {:shipper => shipper, :recipient => recipient, :packages => packages, :service_type => "FEDEX_GROUND", :filename => filename}
55
32
  end
56
33
 
57
- context "canadian shipment including customs", :vcr do
58
- it "should return a rate including international fees" do
59
- canadian_recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address=>"Address Line 1", :city => "Richmond", :state => "BC", :postal_code => "V7C4V4", :country_code => "CA", :residential => "true" }
60
- broker = {
61
- :account_number => "510087143",
62
- :tins => { :tin_type => "BUSINESS_NATIONAL",
63
- :number => "431870271",
64
- :usage => "Usage" },
65
- :contact => { :contact_id => "1",
66
- :person_name => "Broker Name",
67
- :title => "Broker",
68
- :company_name => "Broker One",
69
- :phone_number => "555-555-5555",
70
- :phone_extension => "555-555-5555",
71
- :pager_number => "555",
72
- :fax_number=> "555-555-5555",
73
- :e_mail_address => "contact@me.com" },
74
- :address => { :street_lines => "Main Street",
75
- :city => "Franklin Park",
76
- :state_or_province_code => 'IL',
77
- :postal_code => '60131',
78
- :urbanization_code => '123',
79
- :country_code => 'US',
80
- :residential => 'false' }
81
- }
82
-
83
- clearance_brokerage = "BROKER_INCLUSIVE"
84
-
85
- importer_of_record= {
86
- :account_number => "22222",
87
- :tins => { :tin_type => "BUSINESS_NATIONAL",
88
- :number => "22222",
89
- :usage => "Usage" },
90
- :contact => { :contact_id => "1",
91
- :person_name => "Importer Name",
92
- :title => "Importer",
93
- :company_name => "Importer One",
94
- :phone_number => "555-555-5555",
95
- :phone_extension => "555-555-5555",
96
- :pager_number => "555",
97
- :fax_number=> "555-555-5555",
98
- :e_mail_address => "contact@me.com" },
99
- :address => { :street_lines => "Main Street",
100
- :city => "Chicago",
101
- :state_or_province_code => 'IL',
102
- :postal_code => '60611',
103
- :urbanization_code => '2308',
104
- :country_code => 'US',
105
- :residential => 'false' }
106
- }
107
-
108
- recipient_customs_id = { :type => 'COMPANY',
109
- :value => '1254587' }
34
+ it "succeeds" do
35
+ expect {
36
+ @shipment = fedex.ship(options)
37
+ }.to_not raise_error
110
38
 
111
-
112
- duties_payment = { :payment_type => "SENDER",
113
- :payor => { :account_number => "510087143",
114
- :country_code => "US" } }
115
-
116
- customs_value = { :currency => "USD",
117
- :amount => "200" }
118
- commodities = [{
119
- :name => "Cotton Coat",
120
- :number_of_pieces => "2",
121
- :description => "Cotton Coat",
122
- :country_of_manufacture => "US",
123
- :harmonized_code => "6103320000",
124
- :weight => {:units => "LB", :value => "2"},
125
- :quantity => "3",
126
- :unit_price => {:currency => "USD", :amount => "50" },
127
- :customs_value => {:currency => "USD", :amount => "150" }
128
- },
129
- {
130
- :name => "Poster",
131
- :number_of_pieces => "1",
132
- :description => "Paper Poster",
133
- :country_of_manufacture => "US",
134
- :harmonized_code => "4817100000",
135
- :weight => {:units => "LB", :value => "0.2"},
136
- :quantity => "3",
137
- :unit_price => {:currency => "USD", :amount => "50" },
138
- :customs_value => {:currency => "USD", :amount => "150" }
139
- }
140
- ]
141
-
142
- customs_clearance = { :broker => broker, :clearance_brokerage => clearance_brokerage, :importer_of_record => importer_of_record, :recipient_customs_id => recipient_customs_id, :duties_payment => duties_payment, :commodities => commodities }
143
- rate = fedex.rate({:shipper => shipper, :recipient => canadian_recipient, :packages => packages, :service_type => "FEDEX_GROUND", :customs_clearance => customs_clearance})
144
- rate.should be_an_instance_of(Rate)
145
- end
39
+ @shipment.class.should_not == Fedex::RateError
146
40
  end
147
41
  end
42
+
148
43
  end
149
- end
44
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ module Fedex
4
+ describe TrackingInformation do
5
+ let(:fedex) { Shipment.new(fedex_credentials) }
6
+
7
+ context "shipments with tracking number", :vcr, :focus do
8
+ let(:options) do
9
+ { :package_id => "077973360403984",
10
+ :package_type => "TRACKING_NUMBER_OR_DOORTAG",
11
+ :include_detailed_scans => true
12
+ }
13
+ end
14
+
15
+ it "returns events with tracking information" do
16
+ tracking_info = fedex.track(options)
17
+
18
+ tracking_info.events.count.should == 7
19
+ end
20
+
21
+ it "fails if using an invalid package type" do
22
+ fail_options = options
23
+
24
+ fail_options[:package_type] = "UNKNOWN_PACKAGE"
25
+
26
+ lambda { fedex.track(options) }.should raise_error
27
+ end
28
+
29
+ it "allows short hand tracking number queries" do
30
+ shorthand_options = options
31
+
32
+ shorthand_options.delete(:package_type)
33
+ tracking_number = shorthand_options.delete(:package_id)
34
+
35
+ shorthand_options[:tracking_number] = tracking_number
36
+
37
+ tracking_info = fedex.track(shorthand_options)
38
+
39
+ tracking_info.tracking_number.should == tracking_number
40
+ end
41
+
42
+ it "reports the status of the package" do
43
+ tracking_info = fedex.track(options)
44
+
45
+ tracking_info.status.should == "Delivered"
46
+ end
47
+
48
+ end
49
+ end
50
+ end