usps-fork 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/README.md +89 -0
- data/Rakefile +15 -0
- data/lib/usps.rb +47 -0
- data/lib/usps/address.rb +72 -0
- data/lib/usps/client.rb +55 -0
- data/lib/usps/configuration.rb +17 -0
- data/lib/usps/errors.rb +46 -0
- data/lib/usps/request.rb +14 -0
- data/lib/usps/request/address_standardization.rb +44 -0
- data/lib/usps/request/base.rb +42 -0
- data/lib/usps/request/city_and_state_lookup.rb +32 -0
- data/lib/usps/request/delivery_confirmation.rb +88 -0
- data/lib/usps/request/delivery_confirmation_certify.rb +10 -0
- data/lib/usps/request/tracking_field_lookup.rb +28 -0
- data/lib/usps/request/tracking_lookup.rb +28 -0
- data/lib/usps/request/zip_code_lookup.rb +45 -0
- data/lib/usps/response.rb +8 -0
- data/lib/usps/response/address_standardization.rb +52 -0
- data/lib/usps/response/base.rb +13 -0
- data/lib/usps/response/city_and_state_lookup.rb +42 -0
- data/lib/usps/response/delivery_confirmation.rb +25 -0
- data/lib/usps/response/tracking_field_lookup.rb +34 -0
- data/lib/usps/response/tracking_lookup.rb +19 -0
- data/lib/usps/test.rb +34 -0
- data/lib/usps/test/address_verification.rb +31 -0
- data/lib/usps/test/city_and_state_lookup.rb +19 -0
- data/lib/usps/test/delivery_confirmation.rb +59 -0
- data/lib/usps/test/tracking_lookup.rb +29 -0
- data/lib/usps/test/zip_code_lookup.rb +37 -0
- data/lib/usps/track_detail.rb +49 -0
- data/lib/usps/version.rb +3 -0
- data/spec/address_spec.rb +65 -0
- data/spec/configuration_spec.rb +19 -0
- data/spec/data/address_standardization_1.xml +1 -0
- data/spec/data/address_standardization_2.xml +1 -0
- data/spec/data/city_and_state_lookup_1.xml +1 -0
- data/spec/data/city_and_state_lookup_2.xml +1 -0
- data/spec/data/delivery_confirmation_1.xml +1 -0
- data/spec/data/delivery_confirmation_2.xml +1 -0
- data/spec/data/tracking_field_lookup.xml +41 -0
- data/spec/data/tracking_field_lookup_2.xml +17 -0
- data/spec/data/tracking_lookup_1.xml +1 -0
- data/spec/data/tracking_lookup_2.xml +1 -0
- data/spec/request/address_standardization_spec.rb +45 -0
- data/spec/request/base_spec.rb +16 -0
- data/spec/request/city_and_state_lookup_spec.rb +32 -0
- data/spec/request/delivery_confirmation_certify_spec.rb +11 -0
- data/spec/request/delivery_confirmation_spec.rb +57 -0
- data/spec/request/tracking_field_spec.rb +20 -0
- data/spec/request/tracking_spec.rb +21 -0
- data/spec/request/zip_code_lookup_spec.rb +42 -0
- data/spec/response/address_standardization_spec.rb +54 -0
- data/spec/response/base_spec.rb +0 -0
- data/spec/response/city_and_state_lookup_spec.rb +27 -0
- data/spec/response/delivery_confirmation_spec.rb +43 -0
- data/spec/response/tracking_field_lookup_spec.rb +29 -0
- data/spec/response/tracking_lookup_spec.rb +27 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +13 -0
- data/spec/track_detail_spec.rb +51 -0
- data/spec/usps_spec.rb +8 -0
- metadata +147 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::Request::Base do
|
4
|
+
class RequestSubclassForTesting < USPS::Request::Base
|
5
|
+
config(:api => 'testing', :tag => 'TestingTag')
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should prepend the configured tag and USPS username" do
|
9
|
+
sub = RequestSubclassForTesting.new
|
10
|
+
|
11
|
+
xml = Nokogiri::XML.parse(sub.build)
|
12
|
+
|
13
|
+
expect(xml.root.name).to eq('TestingTag')
|
14
|
+
expect(xml.root.attr('USERID')).to eq(USPS.username)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::Request::CityAndStateLookup do
|
4
|
+
it "should be using the proper USPS api settings" do
|
5
|
+
USPS::Request::CityAndStateLookup.tap do |klass|
|
6
|
+
expect(klass.secure).to be_falsey
|
7
|
+
expect(klass.api).to eq('CityStateLookup')
|
8
|
+
expect(klass.tag).to eq('CityStateLookupRequest')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should not allow more than 5 addresses" do
|
13
|
+
expect do
|
14
|
+
USPS::Request::CityAndStateLookup.new([12345] * 10)
|
15
|
+
end.to raise_exception(ArgumentError)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should be able to build a proper request" do
|
19
|
+
request = USPS::Request::CityAndStateLookup.new(
|
20
|
+
90210, 48917, 49423, 99111, 12345
|
21
|
+
)
|
22
|
+
|
23
|
+
xml = Nokogiri::XML.parse(request.build)
|
24
|
+
|
25
|
+
#
|
26
|
+
expect(xml.search('ZipCode[@ID="0"]/Zip5').text).to eq('90210')
|
27
|
+
expect(xml.search('ZipCode[@ID="1"]/Zip5').text).to eq('48917')
|
28
|
+
expect(xml.search('ZipCode[@ID="2"]/Zip5').text).to eq('49423')
|
29
|
+
expect(xml.search('ZipCode[@ID="3"]/Zip5').text).to eq('99111')
|
30
|
+
expect(xml.search('ZipCode[@ID="4"]/Zip5').text).to eq('12345')
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::Request::DeliveryConfirmationCertify do
|
4
|
+
it 'should be using the proper USPS api settings' do
|
5
|
+
USPS::Request::DeliveryConfirmationCertify.tap do |klass|
|
6
|
+
expect(klass.secure).to be_truthy
|
7
|
+
expect(klass.api).to eq('DelivConfirmCertifyV3')
|
8
|
+
expect(klass.tag).to eq('DelivConfirmCertifyV3.0Request')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::Request::DeliveryConfirmation do
|
4
|
+
it 'should be using the proper USPS api settings' do
|
5
|
+
USPS::Request::DeliveryConfirmation.tap do |klass|
|
6
|
+
expect(klass.secure).to be_truthy
|
7
|
+
expect(klass.api).to eq('DeliveryConfirmationV3')
|
8
|
+
expect(klass.tag).to eq('DeliveryConfirmationV3.0Request')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should conform to test request 1' do
|
13
|
+
to = USPS::Address.new(
|
14
|
+
:name => 'Joe Customer',
|
15
|
+
:address => '6060 PRIMACY PKWY',
|
16
|
+
:address2 => 'STE 201',
|
17
|
+
:city => 'MEMPHIS',
|
18
|
+
:state => 'TN'
|
19
|
+
)
|
20
|
+
|
21
|
+
from = USPS::Address.new(
|
22
|
+
:name => 'John Smith',
|
23
|
+
:address => "475 L'Enfant Plaza, SW",
|
24
|
+
:city => 'Washington',
|
25
|
+
:state => 'DC',
|
26
|
+
:zip => 20260
|
27
|
+
)
|
28
|
+
|
29
|
+
request = USPS::Request::DeliveryConfirmation.new(to, from, 2).build
|
30
|
+
|
31
|
+
xml = Nokogiri::XML.parse(request)
|
32
|
+
expect(xml.search('Option').text).to eq('1')
|
33
|
+
expect(xml.search('ImageParameters').text).to eq('')
|
34
|
+
|
35
|
+
expect(xml.search('FromName').text).to eq('John Smith')
|
36
|
+
expect(xml.search('FromFirm').text).to eq('')
|
37
|
+
expect(xml.search('FromAddress1').text).to eq('')
|
38
|
+
expect(xml.search('FromAddress2').text).to eq("475 L'Enfant Plaza, SW")
|
39
|
+
expect(xml.search('FromCity').text).to eq('Washington')
|
40
|
+
expect(xml.search('FromState').text).to eq('DC')
|
41
|
+
expect(xml.search('FromZip5').text).to eq('20260')
|
42
|
+
expect(xml.search('FromZip4').text).to eq('')
|
43
|
+
|
44
|
+
expect(xml.search('ToName').text).to eq('Joe Customer')
|
45
|
+
expect(xml.search('ToFirm').text).to eq('')
|
46
|
+
expect(xml.search('ToAddress1').text).to eq('STE 201')
|
47
|
+
expect(xml.search('ToAddress2').text).to eq('6060 PRIMACY PKWY')
|
48
|
+
expect(xml.search('ToCity').text).to eq('MEMPHIS')
|
49
|
+
expect(xml.search('ToState').text).to eq('TN')
|
50
|
+
expect(xml.search('ToZip5').text).to eq('')
|
51
|
+
expect(xml.search('ToZip4').text).to eq('')
|
52
|
+
|
53
|
+
expect(xml.search('WeightInOunces').text).to eq('2')
|
54
|
+
expect(xml.search('ImageType').text).to eq('TIF')
|
55
|
+
expect(xml.search('ServiceType').text).to eq('Priority')
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::Request::TrackingFieldLookup do
|
4
|
+
|
5
|
+
it 'should be using the proper USPS api settings' do
|
6
|
+
USPS::Request::TrackingFieldLookup.tap do |klass|
|
7
|
+
expect(klass.secure).to be_falsey
|
8
|
+
expect(klass.api).to eq('TrackV2')
|
9
|
+
expect(klass.tag).to eq('TrackFieldRequest')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should build a proper request" do
|
14
|
+
request = USPS::Request::TrackingFieldLookup.new("EJ958083578US").build
|
15
|
+
xml = Nokogiri::XML.parse(request)
|
16
|
+
expect(xml.search('TrackID').text).to eq('')
|
17
|
+
expect(xml.search('TrackID').attr("ID").text).to eq("EJ958083578US")
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::Request::TrackingLookup do
|
4
|
+
|
5
|
+
it 'should be using the proper USPS api settings' do
|
6
|
+
USPS::Request::TrackingLookup.tap do |klass|
|
7
|
+
expect(klass.secure).to be_falsey
|
8
|
+
expect(klass.api).to eq('TrackV2')
|
9
|
+
expect(klass.tag).to eq('TrackRequest')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should build a proper request" do
|
14
|
+
request = USPS::Request::TrackingLookup.new("EJ958083578US").build
|
15
|
+
|
16
|
+
xml = Nokogiri::XML.parse(request)
|
17
|
+
expect(xml.search('TrackID').text).to eq('')
|
18
|
+
expect(xml.search('TrackID').attr("ID").text).to eq("EJ958083578US")
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::Request::ZipCodeLookup do
|
4
|
+
it "should be using the proper USPS api settings" do
|
5
|
+
USPS::Request::ZipCodeLookup.tap do |klass|
|
6
|
+
expect(klass.secure).to be_falsey
|
7
|
+
expect(klass.api).to eq('ZipCodeLookup')
|
8
|
+
expect(klass.tag).to eq('ZipCodeLookupRequest')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should not allow more than 5 addresses" do
|
13
|
+
expect do
|
14
|
+
USPS::Request::AddressStandardization.new([USPS::Address.new] * 6)
|
15
|
+
end.to raise_exception(ArgumentError)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should be able to build a proper request" do
|
19
|
+
request = USPS::Request::AddressStandardization.new(
|
20
|
+
USPS::Address.new(
|
21
|
+
:name => 'Joe Jackson',
|
22
|
+
:company => 'Widget Tel Co.',
|
23
|
+
:address => '999 Serious Business Av',
|
24
|
+
:address2 => 'Suite 2000',
|
25
|
+
:city => 'Awesome Town',
|
26
|
+
:state => 'FL'
|
27
|
+
)
|
28
|
+
)
|
29
|
+
|
30
|
+
xml = Nokogiri::XML.parse(request.build)
|
31
|
+
|
32
|
+
xml.search('Address').first.tap do |node|
|
33
|
+
expect(node.attr('ID')).to eq('0')
|
34
|
+
|
35
|
+
expect(node.search('FirmName').text).to eq('Widget Tel Co.')
|
36
|
+
expect(node.search('Address1').text).to eq('Suite 2000')
|
37
|
+
expect(node.search('Address2').text).to eq('999 Serious Business Av')
|
38
|
+
expect(node.search('City').text).to eq('Awesome Town')
|
39
|
+
expect(node.search('State').text).to eq('FL')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::Response::AddressStandardization do
|
4
|
+
it "should handle test request 1" do
|
5
|
+
address = USPS::Address.new(
|
6
|
+
:address => '6406 Ivy Lane',
|
7
|
+
:city => 'Greenbelt',
|
8
|
+
:state => 'MD'
|
9
|
+
)
|
10
|
+
|
11
|
+
response = USPS::Response::AddressStandardization.new(
|
12
|
+
address, load_xml('address_standardization_1.xml')
|
13
|
+
)
|
14
|
+
|
15
|
+
standard = response.get(address)
|
16
|
+
|
17
|
+
expect(standard.address).to eq('6406 IVY LN')
|
18
|
+
expect(standard.city).to eq('GREENBELT')
|
19
|
+
expect(standard.state).to eq('MD')
|
20
|
+
expect(standard.zip).to eq('20770-1441')
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should handle test request 2" do
|
24
|
+
address = USPS::Address.new(
|
25
|
+
:address => '8 Wildwood Dr',
|
26
|
+
:city => 'Old Lyme',
|
27
|
+
:state => 'CT',
|
28
|
+
:zip => '06371'
|
29
|
+
)
|
30
|
+
|
31
|
+
response = USPS::Response::AddressStandardization.new(
|
32
|
+
address, load_xml('address_standardization_2.xml')
|
33
|
+
)
|
34
|
+
|
35
|
+
standard = response.get(address)
|
36
|
+
|
37
|
+
expect(standard.address).to eq('8 WILDWOOD DR')
|
38
|
+
expect(standard.city).to eq('OLD LYME')
|
39
|
+
expect(standard.state).to eq('CT')
|
40
|
+
expect(standard.zip).to eq('06371-1844')
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should propogate name to the result address as it is not returned from api" do
|
44
|
+
address = USPS::Address.new(
|
45
|
+
:name => 'Carl Sagan'
|
46
|
+
)
|
47
|
+
|
48
|
+
response = USPS::Response::AddressStandardization.new(
|
49
|
+
address, load_xml('address_standardization_2.xml')
|
50
|
+
)
|
51
|
+
|
52
|
+
expect(response.get(address).name).to eq('Carl Sagan')
|
53
|
+
end
|
54
|
+
end
|
File without changes
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::Response::CityAndStateLookup do
|
4
|
+
it "should handle test request 1" do
|
5
|
+
response = USPS::Response::CityAndStateLookup.new(
|
6
|
+
load_xml('city_and_state_lookup_1.xml')
|
7
|
+
)
|
8
|
+
|
9
|
+
response.get(90210).tap do |r|
|
10
|
+
expect(r.zip).to eq(90210)
|
11
|
+
expect(r.city).to eq('BEVERLY HILLS')
|
12
|
+
expect(r.state).to eq('CA')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should handle test request 2" do
|
17
|
+
response = USPS::Response::CityAndStateLookup.new(
|
18
|
+
load_xml('city_and_state_lookup_2.xml')
|
19
|
+
)
|
20
|
+
|
21
|
+
response.get(20770).tap do |r|
|
22
|
+
expect(r.zip).to eq(20770)
|
23
|
+
expect(r.city).to eq('GREENBELT')
|
24
|
+
expect(r.state).to eq('MD')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::Response::DeliveryConfirmation do
|
4
|
+
it "should handle test request 1" do
|
5
|
+
response = USPS::Response::DeliveryConfirmation.new(
|
6
|
+
load_xml('delivery_confirmation_1.xml')
|
7
|
+
)
|
8
|
+
|
9
|
+
expect(response.confirmation).to eq('420381199101805213907126809651')
|
10
|
+
expect(response.label).to eq('LABEL DATA GOES HERE')
|
11
|
+
expect(response.postnet).to eq('38119571851')
|
12
|
+
|
13
|
+
# Check the address
|
14
|
+
addy = response.address
|
15
|
+
expect(addy.name).to eq('Joe Customer')
|
16
|
+
expect(addy.address).to eq('6060 PRIMACY PKWY')
|
17
|
+
expect(addy.address2).to eq('STE 201')
|
18
|
+
expect(addy.city).to eq('Memphis')
|
19
|
+
expect(addy.state).to eq('TN')
|
20
|
+
expect(addy.zip).to eq('38119-5718')
|
21
|
+
end
|
22
|
+
|
23
|
+
# TODO: Test is still missing custom fields
|
24
|
+
it "should handle test request 2" do
|
25
|
+
response = USPS::Response::DeliveryConfirmation.new(
|
26
|
+
load_xml('delivery_confirmation_2.xml')
|
27
|
+
)
|
28
|
+
|
29
|
+
expect(response.confirmation).to eq('420381199101805213907116323891')
|
30
|
+
expect(response.label).to eq('LABEL DATA GOES HERE')
|
31
|
+
expect(response.postnet).to eq('38119571851')
|
32
|
+
|
33
|
+
# Check the address
|
34
|
+
addy = response.address
|
35
|
+
expect(addy.company).to eq('U.S. Postal Service NCSC')
|
36
|
+
expect(addy.name).to eq('Joe Customer')
|
37
|
+
expect(addy.address).to eq('6060 PRIMACY PKWY')
|
38
|
+
expect(addy.address2).to eq('STE 201')
|
39
|
+
expect(addy.city).to eq('MEMPHIS')
|
40
|
+
expect(addy.state).to eq('TN')
|
41
|
+
expect(addy.zip).to eq('38119-5718')
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe USPS::Response::TrackingFieldLookup do
|
5
|
+
|
6
|
+
it "should handle test request" do
|
7
|
+
response = USPS::Response::TrackingFieldLookup.new(load_xml("tracking_field_lookup.xml"))
|
8
|
+
expect(response).to be_a_kind_of(USPS::Response::TrackingFieldLookup)
|
9
|
+
|
10
|
+
expect(response.summary.event).to eq("DELIVERED")
|
11
|
+
expect(response.summary.city).to eq("NEWTON")
|
12
|
+
expect(response.summary.date).to eq(Time.parse("2001-05-21 12:12:00"))
|
13
|
+
expect(response.summary.event_time).to eq("12:12 pm")
|
14
|
+
expect(response.summary.event_date).to eq("May 21, 2001")
|
15
|
+
expect(response.summary.event_state).to eq("IA")
|
16
|
+
expect(response.summary.event_zip_code).to eq("50208")
|
17
|
+
expect(response.summary.name).to eq("")
|
18
|
+
expect(response.summary.firm_name).to eq("")
|
19
|
+
expect(response.summary.authorized_agent).to eq("")
|
20
|
+
|
21
|
+
expect(response.details.length).to eq(2)
|
22
|
+
expect(response.details[0].event).to eq("ENROUTE")
|
23
|
+
expect(response.details[1].event).to eq("ACCEPTANCE")
|
24
|
+
end
|
25
|
+
it "should handle no detail records" do
|
26
|
+
response = USPS::Response::TrackingFieldLookup.new(load_xml("tracking_field_lookup_2.xml"))
|
27
|
+
expect(response.details.length).to eq(0)
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::Response::TrackingLookup do
|
4
|
+
|
5
|
+
it "should handle test request 1" do
|
6
|
+
response = USPS::Response::TrackingLookup.new(load_xml("tracking_lookup_1.xml"))
|
7
|
+
|
8
|
+
expect(response.summary).to eq("Your item was delivered at 8:10 am on June 1 in Wilmington DE 19801.")
|
9
|
+
expect(response.details.length).to eq(3)
|
10
|
+
|
11
|
+
expect(response.details[0]).to eq("May 30 11:07 am NOTICE LEFT WILMINGTON DE 19801.")
|
12
|
+
expect(response.details[1]).to eq("May 30 10:08 am ARRIVAL AT UNIT WILMINGTON DE 19850.")
|
13
|
+
expect(response.details[2]).to eq("May 29 9:55 am ACCEPT OR PICKUP EDGEWATER NJ 07020.")
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should handle test request 2" do
|
17
|
+
response = USPS::Response::TrackingLookup.new(load_xml("tracking_lookup_2.xml"))
|
18
|
+
|
19
|
+
expect(response.summary).to eq("Your item was delivered at 1:39 pm on June 1 in WOBURN MA 01815.")
|
20
|
+
expect(response.details.length).to eq(3)
|
21
|
+
|
22
|
+
expect(response.details[0]).to eq("May 30 7:44 am NOTICE LEFT WOBURN MA 01815.")
|
23
|
+
expect(response.details[1]).to eq("May 30 7:36 am ARRIVAL AT UNIT NORTH READING MA 01889.")
|
24
|
+
expect(response.details[2]).to eq("May 29 6:00 pm ACCEPT OR PICKUP PORTSMOUTH NH 03801.")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
Bundler.require(:default, :development)
|
3
|
+
|
4
|
+
require 'usps'
|
5
|
+
USPS.username = 'TESTING'
|
6
|
+
|
7
|
+
def load_data(path)
|
8
|
+
(@_file_cache ||= {})[path] ||= File.read(File.expand_path("../data/#{path}", __FILE__))
|
9
|
+
end
|
10
|
+
|
11
|
+
def load_xml(path)
|
12
|
+
Nokogiri::XML.parse(load_data(path))
|
13
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe USPS::TrackDetail do
|
4
|
+
it "should have the expected fields" do
|
5
|
+
track_detail = USPS::TrackDetail.new
|
6
|
+
|
7
|
+
expect(track_detail).to respond_to(
|
8
|
+
:event_time, :event_time=,
|
9
|
+
:event_date, :event_date=,
|
10
|
+
:event, :event=,
|
11
|
+
:event_city, :event_city=,
|
12
|
+
:event_state, :event_state=,
|
13
|
+
:event_zip_code, :event_zip_code=,
|
14
|
+
:event_country, :event_country=,
|
15
|
+
:firm_name, :firm_name=,
|
16
|
+
:name, :name=,
|
17
|
+
:authorized_agent, :authorized_agent=,
|
18
|
+
:date)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be initializable with a hash" do
|
22
|
+
track_detail = USPS::TrackDetail.new(
|
23
|
+
:name => 'Chris',
|
24
|
+
:event_city => '123 Main St',
|
25
|
+
:event => 'DELIVERED'
|
26
|
+
)
|
27
|
+
|
28
|
+
expect(track_detail.name).to eq('Chris')
|
29
|
+
expect(track_detail.event_city).to eq('123 Main St')
|
30
|
+
expect(track_detail.event).to eq('DELIVERED')
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should calculate a date" do
|
34
|
+
track_detail = USPS::TrackDetail.new(
|
35
|
+
:event_time => '9:24 pm',
|
36
|
+
:event_date => 'March 28, 2001',
|
37
|
+
)
|
38
|
+
track_detail.date.should == Time.parse('2001-03-28 21:24:00')
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should handle blank dates" do
|
42
|
+
track_detail = USPS::TrackDetail.new(
|
43
|
+
:event_time => '',
|
44
|
+
:event_date => '',
|
45
|
+
)
|
46
|
+
expect(track_detail.event_time).to eq("")
|
47
|
+
expect(track_detail.event_date).to eq("")
|
48
|
+
expect(track_detail.date).to eq(nil)
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|