active_shipping 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 47ab305f494f8f8dcce83d1e6fe8d4bb564040a3
4
- data.tar.gz: af1c599bb5301f5837f0f770d0554cec064f19f7
3
+ metadata.gz: 5f255b6e48e25f1a22656abd5424216bea74ef80
4
+ data.tar.gz: 7bafa8bea0f1a247ebb9aef8668c663b1b3eab44
5
5
  SHA512:
6
- metadata.gz: e6d5272f9e661af04ac7c31a22c0ee667cdc755a626373058e54f37593f0e4403282375261af1cd3bd9c47ed1bb4075242309f24f5b39be598a596a8325121af
7
- data.tar.gz: 21851000dd9aee050f2cbc9d6e8daf1180bf941a0f19ebd8e1bb27260bbcb148eb136d639a697235313514c97a9dfedb6f0752817aee9714df8151089b17b0e7
6
+ metadata.gz: f79e434be0cb714e9edfdb8d9e72bdfc5d1411de34593a373e914031b1c92f3890a937f8e8741cc6cc8218d434910c89cfd1dfbc1479aaf244dbfbad929a5dbe
7
+ data.tar.gz: 3a316e22f8772503f7e807d7ca4ffc057bbe8e88412cf32bcd697cc195b8ab0632a7508ea901e7d31ddcd7c7f145a390da6ffdd06bda2ea34598cd6dcf3170b9
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # ActiveShipping CHANGELOG
2
2
 
3
+ ### v1.1.0
4
+
5
+ - USPS: Allows package tracking disambiguation and exposes predicted arrival date and event codes.
6
+
3
7
  ### v1.0.0
4
8
 
5
9
  - **BREAKING CHANGE:** Change namespace from `ActiveMerchant::Shipping` to `ActiveShipping`
@@ -10,11 +10,8 @@ module ActiveShipping
10
10
  # This will send a test request to the USPS test servers, which they ask you
11
11
  # to do before they put your API key in production mode.
12
12
  class USPS < Carrier
13
- EventDetails = Struct.new(:description, :time, :zoneless_time, :location)
14
- EVENT_MESSAGE_PATTERNS = [
15
- /^(.*), (\w+ \d{1,2}, \d{4}, \d{1,2}:\d\d [ap]m), (.*), (\w\w) (\d{5})$/i,
16
- /^Your item \w{2,3} (out for delivery|delivered).* at (\d{1,2}:\d\d [ap]m on \w+ \d{1,2}, \d{4}) in (.*), (\w\w) (\d{5})\.$/i
17
- ]
13
+ EventDetails = Struct.new(:description, :time, :zoneless_time, :location, :event_code)
14
+ ONLY_PREFIX_EVENTS = ['DELIVERED','OUT FOR DELIVERY']
18
15
  self.retry_safe = true
19
16
 
20
17
  cattr_reader :name
@@ -232,26 +229,44 @@ module ActiveShipping
232
229
  Mass.new(70, :pounds)
233
230
  end
234
231
 
235
- def extract_event_details(message)
236
- return EventDetails.new unless EVENT_MESSAGE_PATTERNS.any? { |pattern| message =~ pattern }
237
- description = $1.upcase
238
- timestamp = $2
239
- city = $3
240
- state = $4
241
- zip_code = $5
232
+ def extract_event_details(node)
233
+ description = node.at('Event').text.upcase
234
+
235
+ if prefix = ONLY_PREFIX_EVENTS.find { |p| description.starts_with?(p) }
236
+ description = prefix
237
+ end
238
+
239
+ timestamp = "#{node.at('EventDate').text}, #{node.at('EventTime').text}"
240
+ event_code = node.at('EventCode').text
241
+ city = node.at('EventCity').text
242
+ state = node.at('EventState').text
243
+ zip_code = node.at('EventZIPCode').text
244
+
245
+ country_node = node.at('EventCountry')
246
+ country = country_node ? country_node.text : ''
247
+ country = 'USA' if country.empty?
242
248
 
243
249
  time = Time.parse(timestamp)
244
250
  zoneless_time = Time.utc(time.year, time.month, time.mday, time.hour, time.min, time.sec)
245
- location = Location.new(city: city, state: state, postal_code: zip_code, country: 'USA')
246
- EventDetails.new(description, time, zoneless_time, location)
251
+ location = Location.new(city: city, state: state, postal_code: zip_code, country: country)
252
+ EventDetails.new(description, time, zoneless_time, location, event_code)
247
253
  end
248
254
 
249
255
  protected
250
256
 
251
257
  def build_tracking_request(tracking_number, options = {})
252
258
  xml_builder = Nokogiri::XML::Builder.new do |xml|
253
- xml.TrackRequest('USERID' => @options[:login]) do
254
- xml.TrackID('ID' => tracking_number)
259
+ xml.TrackFieldRequest('USERID' => @options[:login]) do
260
+ xml.Revision { xml.text('1') }
261
+ xml.ClientIp { xml.text(@options[:client_ip] || '127.0.0.1') }
262
+ xml.SourceId { xml.text(@options[:source_id] || 'active_shipping') }
263
+ xml.TrackID('ID' => tracking_number) do
264
+ xml.DestinationZipCode { xml.text(@options[:destination_zip])} if @options[:destination_zip]
265
+ if @options[:mailing_date]
266
+ formatted_date = @options[:mailing_date].strftime('%Y-%m-%d')
267
+ xml.MailingDate { xml.text(formatted_date)}
268
+ end
269
+ end
255
270
  end
256
271
  end
257
272
  xml_builder.to_xml
@@ -529,7 +544,6 @@ module ActiveShipping
529
544
  def parse_tracking_response(response, options)
530
545
  actual_delivery_date, status = nil
531
546
  xml = Nokogiri.XML(response)
532
- root_node = xml.root
533
547
 
534
548
  success = response_success?(xml)
535
549
  message = response_message(xml)
@@ -538,20 +552,17 @@ module ActiveShipping
538
552
  destination = nil
539
553
  shipment_events = []
540
554
  tracking_details = xml.root.xpath('TrackInfo/TrackDetail')
541
-
542
- tracking_summary = xml.root.at('TrackInfo/TrackSummary')
543
- if tracking_details.length > 0
544
- tracking_details << tracking_summary
545
- else
546
- success = false
547
- message = tracking_summary.text
548
- end
555
+ tracking_details << xml.root.at('TrackInfo/TrackSummary')
549
556
 
550
557
  tracking_number = xml.root.at('TrackInfo').attributes['ID'].value
558
+ scheduled_delivery = Time.parse(xml.root.at('PredictedDeliveryDate').text)
551
559
 
552
560
  tracking_details.each do |event|
553
- details = extract_event_details(event.text)
554
- shipment_events << ShipmentEvent.new(details.description, details.zoneless_time, details.location) if details.location
561
+ details = extract_event_details(event)
562
+ if details.location
563
+ shipment_events << ShipmentEvent.new(details.description, details.zoneless_time,
564
+ details.location, details.description, details.event_code)
565
+ end
555
566
  end
556
567
 
557
568
  shipment_events = shipment_events.sort_by(&:time)
@@ -570,12 +581,13 @@ module ActiveShipping
570
581
  :destination => destination,
571
582
  :tracking_number => tracking_number,
572
583
  :status => status,
573
- :actual_delivery_date => actual_delivery_date
584
+ :actual_delivery_date => actual_delivery_date,
585
+ :scheduled_delivery_date => scheduled_delivery
574
586
  )
575
587
  end
576
588
 
577
589
  def track_summary_node(document)
578
- document.root.xpath('TrackInfo/TrackSummary')
590
+ document.root.xpath('TrackInfo/StatusSummary')
579
591
  end
580
592
 
581
593
  def error_description_node(document)
@@ -1,9 +1,9 @@
1
1
  module ActiveShipping
2
2
  class ShipmentEvent
3
- attr_reader :name, :time, :location, :message
3
+ attr_reader :name, :time, :location, :message, :type_code
4
4
 
5
- def initialize(name, time, location, message = nil)
6
- @name, @time, @location, @message = name, time, location, message
5
+ def initialize(name, time, location, message = nil, type_code = nil)
6
+ @name, @time, @location, @message, @type_code = name, time, location, message, type_code
7
7
  end
8
8
 
9
9
  def delivered?
@@ -1,3 +1,3 @@
1
1
  module ActiveShipping
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
data/repodb.yml ADDED
@@ -0,0 +1,3 @@
1
+ assification: library
2
+ ci_urls:
3
+ - https://travis-ci.org/Shopify/active_shipping
@@ -1,3 +1,10 @@
1
- <TrackRequest USERID="xxxxxxxx">
2
- <TrackID ID="EJ958083578US"></TrackID>
3
- </TrackRequest>
1
+ <?xml version="1.0"?>
2
+ <TrackFieldRequest USERID="login">
3
+ <Revision>1</Revision>
4
+ <ClientIp>127.0.0.1</ClientIp>
5
+ <SourceId>active_shipping</SourceId>
6
+ <TrackID ID="9102901000462189604217">
7
+ <DestinationZipCode>12345</DestinationZipCode>
8
+ <MailingDate>2010-01-30</MailingDate>
9
+ </TrackID>
10
+ </TrackFieldRequest>
@@ -1,13 +1,162 @@
1
- <?xml version="1.0"?>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
2
  <TrackResponse>
3
+ <!-- other than this comment and an altered tracking number this is a real API response -->
3
4
  <TrackInfo ID="9102901000462189604217">
4
- <TrackSummary>Your item is out for delivery at 8:13 am on January 27, 2012 in DES MOINES, IA 50311.</TrackSummary>
5
- <TrackDetail>Sorting Complete, January 27, 2012, 8:03 am, DES MOINES, IA 50311</TrackDetail>
6
- <TrackDetail>Electronic Shipping Info Received, January 27, 2012</TrackDetail>
7
- <TrackDetail>Arrival at Post Office, January 26, 2012, 11:21 am, DES MOINES, IA 50311</TrackDetail>
8
- <TrackDetail>Departed Shipping Partner Facility, January 24, 2012, 7:45 am, GRAND PRAIRIE, TX 75050</TrackDetail>
9
- <TrackDetail>Departed Shipping Partner Facility, January 23, 2012, 2:49 am, PHOENIX, AZ 85043</TrackDetail>
10
- <TrackDetail>Arrived Shipping Partner Facility, January 22, 2012, 5:00 pm, PHOENIX, AZ 85043</TrackDetail>
11
- <TrackDetail>Picked Up by Shipping Partner, January 22, 2012, 4:30 pm, PHOENIX, AZ 85043</TrackDetail>
5
+ <Class>First-Class Package Service</Class>
6
+ <ClassOfMailCode>FC</ClassOfMailCode>
7
+ <DestinationCity>HANNA CITY</DestinationCity>
8
+ <DestinationState>IL</DestinationState>
9
+ <DestinationZip>61536</DestinationZip>
10
+ <EmailEnabled>true</EmailEnabled>
11
+ <ExpectedDeliveryDate>April 28, 2015</ExpectedDeliveryDate>
12
+ <KahalaIndicator>false</KahalaIndicator>
13
+ <MailTypeCode>DM</MailTypeCode>
14
+ <MPDATE>2015-04-24 02:08:04.000000</MPDATE>
15
+ <MPSUFFIX>495865558</MPSUFFIX>
16
+ <OriginCity>ARGYLE</OriginCity>
17
+ <OriginState>TX</OriginState>
18
+ <OriginZip>76226</OriginZip>
19
+ <PodEnabled>false</PodEnabled>
20
+ <PredictedDeliveryDate>April 28, 2015</PredictedDeliveryDate>
21
+ <RestoreEnabled>false</RestoreEnabled>
22
+ <RramEnabled>false</RramEnabled>
23
+ <RreEnabled>false</RreEnabled>
24
+ <Service>USPS Tracking&lt;SUP&gt;&amp;#153;&lt;/SUP&gt;</Service>
25
+ <ServiceTypeCode>001</ServiceTypeCode>
26
+ <Status>Delivered, In/At Mailbox</Status>
27
+ <StatusCategory>Delivered</StatusCategory>
28
+ <StatusSummary>Your item was delivered in or at the mailbox at 9:01 am on April 28, 2015 in HANNA CITY, IL 61536.</StatusSummary>
29
+ <TABLECODE>T</TABLECODE>
30
+ <TrackSummary>
31
+ <EventTime>9:01 am</EventTime>
32
+ <EventDate>April 28, 2015</EventDate>
33
+ <Event>Delivered, In/At Mailbox</Event>
34
+ <EventCity>HANNA CITY</EventCity>
35
+ <EventState>IL</EventState>
36
+ <EventZIPCode>61536</EventZIPCode>
37
+ <EventCountry/>
38
+ <FirmName/>
39
+ <Name/>
40
+ <AuthorizedAgent>false</AuthorizedAgent>
41
+ <EventCode>01</EventCode>
42
+ <DeliveryAttributeCode>01</DeliveryAttributeCode>
43
+ </TrackSummary>
44
+ <TrackDetail>
45
+ <EventTime>8:29 am</EventTime>
46
+ <EventDate>April 28, 2015</EventDate>
47
+ <Event>Out for Delivery</Event>
48
+ <EventCity>HANNA CITY</EventCity>
49
+ <EventState>IL</EventState>
50
+ <EventZIPCode>61536</EventZIPCode>
51
+ <EventCountry/>
52
+ <FirmName/>
53
+ <Name/>
54
+ <AuthorizedAgent>false</AuthorizedAgent>
55
+ <EventCode>OF</EventCode>
56
+ </TrackDetail>
57
+ <TrackDetail>
58
+ <EventTime>8:19 am</EventTime>
59
+ <EventDate>April 28, 2015</EventDate>
60
+ <Event>Sorting Complete</Event>
61
+ <EventCity>HANNA CITY</EventCity>
62
+ <EventState>IL</EventState>
63
+ <EventZIPCode>61536</EventZIPCode>
64
+ <EventCountry/>
65
+ <FirmName/>
66
+ <Name/>
67
+ <AuthorizedAgent>false</AuthorizedAgent>
68
+ <EventCode>PC</EventCode>
69
+ </TrackDetail>
70
+ <TrackDetail>
71
+ <EventTime>7:03 am</EventTime>
72
+ <EventDate>April 28, 2015</EventDate>
73
+ <Event>Arrived at Post Office</Event>
74
+ <EventCity>HANNA CITY</EventCity>
75
+ <EventState>IL</EventState>
76
+ <EventZIPCode>61536</EventZIPCode>
77
+ <EventCountry/>
78
+ <FirmName/>
79
+ <Name/>
80
+ <AuthorizedAgent>false</AuthorizedAgent>
81
+ <EventCode>07</EventCode>
82
+ </TrackDetail>
83
+ <TrackDetail>
84
+ <EventTime>4:05 am</EventTime>
85
+ <EventDate>April 28, 2015</EventDate>
86
+ <Event>Departed USPS Facility</Event>
87
+ <EventCity>HAZELWOOD</EventCity>
88
+ <EventState>MO</EventState>
89
+ <EventZIPCode>63042</EventZIPCode>
90
+ <EventCountry/>
91
+ <FirmName/>
92
+ <Name/>
93
+ <AuthorizedAgent>false</AuthorizedAgent>
94
+ <EventCode>EF</EventCode>
95
+ </TrackDetail>
96
+ <TrackDetail>
97
+ <EventTime>4:04 pm</EventTime>
98
+ <EventDate>April 27, 2015</EventDate>
99
+ <Event>Arrived at USPS Facility</Event>
100
+ <EventCity>HAZELWOOD</EventCity>
101
+ <EventState>MO</EventState>
102
+ <EventZIPCode>63042</EventZIPCode>
103
+ <EventCountry/>
104
+ <FirmName/>
105
+ <Name/>
106
+ <AuthorizedAgent>false</AuthorizedAgent>
107
+ <EventCode>10</EventCode>
108
+ </TrackDetail>
109
+ <TrackDetail>
110
+ <EventTime>12:18 am</EventTime>
111
+ <EventDate>April 26, 2015</EventDate>
112
+ <Event>Departed USPS Facility</Event>
113
+ <EventCity>COPPELL</EventCity>
114
+ <EventState>TX</EventState>
115
+ <EventZIPCode>75099</EventZIPCode>
116
+ <EventCountry/>
117
+ <FirmName/>
118
+ <Name/>
119
+ <AuthorizedAgent>false</AuthorizedAgent>
120
+ <EventCode>EF</EventCode>
121
+ </TrackDetail>
122
+ <TrackDetail>
123
+ <EventTime>7:19 pm</EventTime>
124
+ <EventDate>April 25, 2015</EventDate>
125
+ <Event>Arrived at USPS Origin Facility</Event>
126
+ <EventCity>COPPELL</EventCity>
127
+ <EventState>TX</EventState>
128
+ <EventZIPCode>75099</EventZIPCode>
129
+ <EventCountry/>
130
+ <FirmName/>
131
+ <Name/>
132
+ <AuthorizedAgent>false</AuthorizedAgent>
133
+ <EventCode>10</EventCode>
134
+ </TrackDetail>
135
+ <TrackDetail>
136
+ <EventTime>6:04 pm</EventTime>
137
+ <EventDate>April 25, 2015</EventDate>
138
+ <Event>Accepted at USPS Origin Sort Facility</Event>
139
+ <EventCity>ARGYLE</EventCity>
140
+ <EventState>TX</EventState>
141
+ <EventZIPCode>76226</EventZIPCode>
142
+ <EventCountry/>
143
+ <FirmName/>
144
+ <Name/>
145
+ <AuthorizedAgent>false</AuthorizedAgent>
146
+ <EventCode>OA</EventCode>
147
+ </TrackDetail>
148
+ <TrackDetail>
149
+ <EventTime>11:36 pm</EventTime>
150
+ <EventDate>April 23, 2015</EventDate>
151
+ <Event>Shipping Label Created</Event>
152
+ <EventCity>ARGYLE</EventCity>
153
+ <EventState>TX</EventState>
154
+ <EventZIPCode>76226</EventZIPCode>
155
+ <EventCountry/>
156
+ <FirmName/>
157
+ <Name/>
158
+ <AuthorizedAgent>false</AuthorizedAgent>
159
+ <EventCode>GX</EventCode>
160
+ </TrackDetail>
12
161
  </TrackInfo>
13
162
  </TrackResponse>
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <TrackResponse>
3
+ <!-- this is a manually altered response designed to test cases that might occur but have never been actually observed yet. -->
4
+ <TrackInfo ID="9102901000462189604217">
5
+ <Class>First-Class Package Service</Class>
6
+ <ClassOfMailCode>FC</ClassOfMailCode>
7
+ <DestinationCity>HANNA CITY</DestinationCity>
8
+ <DestinationState>IL</DestinationState>
9
+ <DestinationZip>61536</DestinationZip>
10
+ <EmailEnabled>true</EmailEnabled>
11
+ <ExpectedDeliveryDate>April 28, 2015</ExpectedDeliveryDate>
12
+ <KahalaIndicator>false</KahalaIndicator>
13
+ <MailTypeCode>DM</MailTypeCode>
14
+ <MPDATE>2015-04-24 02:08:04.000000</MPDATE>
15
+ <MPSUFFIX>495865558</MPSUFFIX>
16
+ <OriginCity>ARGYLE</OriginCity>
17
+ <OriginState>TX</OriginState>
18
+ <OriginZip>76226</OriginZip>
19
+ <PodEnabled>false</PodEnabled>
20
+ <PredictedDeliveryDate>April 28, 2015</PredictedDeliveryDate>
21
+ <RestoreEnabled>false</RestoreEnabled>
22
+ <RramEnabled>false</RramEnabled>
23
+ <RreEnabled>false</RreEnabled>
24
+ <Service>USPS Tracking&lt;SUP&gt;&amp;#153;&lt;/SUP&gt;</Service>
25
+ <ServiceTypeCode>001</ServiceTypeCode>
26
+ <Status>Delivered, In/At Mailbox</Status>
27
+ <StatusCategory>Delivered</StatusCategory>
28
+ <StatusSummary>Your item was delivered in or at the mailbox at 9:01 am on April 28, 2015 in HANNA CITY, IL 61536.</StatusSummary>
29
+ <TABLECODE>T</TABLECODE>
30
+ <TrackSummary>
31
+ <EventTime>8:29 am</EventTime>
32
+ <EventDate>April 28, 2015</EventDate>
33
+ <Event>Out for Delivery, in truck</Event>
34
+ <EventCity>OTTAWA</EventCity>
35
+ <EventState>ON</EventState>
36
+ <EventZIPCode>61536</EventZIPCode>
37
+ <EventCountry>Canada</EventCountry>
38
+ <FirmName/>
39
+ <Name/>
40
+ <AuthorizedAgent>false</AuthorizedAgent>
41
+ <EventCode>OF</EventCode>
42
+ </TrackSummary>
43
+ </TrackInfo>
44
+ </TrackResponse>
@@ -1,2 +1,11 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <TrackResponse><TrackInfo ID="abc123xyz"><TrackSummary>The Postal Service could not locate the tracking information for your request. Please verify your tracking number and try again later.</TrackSummary></TrackInfo></TrackResponse>
2
+ <TrackResponse>
3
+ <TrackInfo ID="9102901000462189604217">
4
+ <Error>
5
+ <Number>-2147219302</Number>
6
+ <Description>The Postal Service could not locate the tracking information for your request. Please verify your tracking number and try again later.</Description>
7
+ <HelpFile/>
8
+ <HelpContext/>
9
+ </Error>
10
+ </TrackInfo>
11
+ </TrackResponse>
@@ -9,6 +9,11 @@ class USPSTest < Minitest::Test
9
9
  @tracking_response_failure = xml_fixture('usps/tracking_response_failure')
10
10
  end
11
11
 
12
+ def test_tracking_request_should_create_correct_xml
13
+ @carrier.expects(:commit).with(:track, xml_fixture('usps/tracking_request'),false).returns(@tracking_response)
14
+ @carrier.find_tracking_info('9102901000462189604217', :destination_zip => '12345', :mailing_date => Date.new(2010,1,30))
15
+ end
16
+
12
17
  def test_tracking_failure_should_raise_exception
13
18
  @carrier.expects(:commit).returns(@tracking_response_failure)
14
19
  assert_raises ResponseError do
@@ -44,10 +49,13 @@ class USPSTest < Minitest::Test
44
49
  assert_equal 'ActiveShipping::TrackingResponse', @carrier.find_tracking_info('EJ958083578US').class.name
45
50
  end
46
51
 
47
- def test_find_tracking_info_should_parse_response_into_correct_number_of_shipment_events
52
+ def test_find_tracking_info_should_have_correct_fields
48
53
  @carrier.expects(:commit).returns(@tracking_response)
49
54
  response = @carrier.find_tracking_info('9102901000462189604217', :test => true)
50
- assert_equal 7, response.shipment_events.size
55
+ assert_equal 10, response.shipment_events.size
56
+ assert_equal Time.parse('April 28, 2015'), response.scheduled_delivery_date
57
+ assert_equal Time.parse('2015-04-28 09:01:00 UTC'), response.actual_delivery_date
58
+ assert_equal '9102901000462189604217', response.tracking_number
51
59
  end
52
60
 
53
61
  def test_find_tracking_info_should_return_shipment_events_in_ascending_chronological_order
@@ -59,37 +67,62 @@ class USPSTest < Minitest::Test
59
67
  def test_find_tracking_info_should_have_correct_timestamps_for_shipment_events
60
68
  @carrier.expects(:commit).returns(@tracking_response)
61
69
  response = @carrier.find_tracking_info('9102901000462189604217', :test => true)
62
- assert_equal ['2012-01-22 16:30:00 UTC',
63
- '2012-01-22 17:00:00 UTC',
64
- '2012-01-23 02:49:00 UTC',
65
- '2012-01-24 07:45:00 UTC',
66
- '2012-01-26 11:21:00 UTC',
67
- '2012-01-27 08:03:00 UTC',
68
- '2012-01-27 08:13:00 UTC'], response.shipment_events.map { |e| e.time.strftime('%Y-%m-%d %H:%M:00 %Z') }
70
+ assert_equal [
71
+ "2015-04-23 23:36:00 UTC",
72
+ "2015-04-25 18:04:00 UTC",
73
+ "2015-04-25 19:19:00 UTC",
74
+ "2015-04-26 00:18:00 UTC",
75
+ "2015-04-27 16:04:00 UTC",
76
+ "2015-04-28 04:05:00 UTC",
77
+ "2015-04-28 07:03:00 UTC",
78
+ "2015-04-28 08:19:00 UTC",
79
+ "2015-04-28 08:29:00 UTC",
80
+ "2015-04-28 09:01:00 UTC"], response.shipment_events.map { |e| e.time.strftime('%Y-%m-%d %H:%M:00 %Z') }
69
81
  end
70
82
 
71
83
  def test_find_tracking_info_should_have_correct_names_for_shipment_events
72
84
  @carrier.expects(:commit).returns(@tracking_response)
73
85
  response = @carrier.find_tracking_info('9102901000462189604217')
74
- assert_equal ["PICKED UP BY SHIPPING PARTNER",
75
- "ARRIVED SHIPPING PARTNER FACILITY",
76
- "DEPARTED SHIPPING PARTNER FACILITY",
77
- "DEPARTED SHIPPING PARTNER FACILITY",
78
- "ARRIVAL AT POST OFFICE",
79
- "SORTING COMPLETE",
80
- "OUT FOR DELIVERY"], response.shipment_events.map(&:name)
86
+ assert_equal [
87
+ "SHIPPING LABEL CREATED",
88
+ "ACCEPTED AT USPS ORIGIN SORT FACILITY",
89
+ "ARRIVED AT USPS ORIGIN FACILITY",
90
+ "DEPARTED USPS FACILITY",
91
+ "ARRIVED AT USPS FACILITY",
92
+ "DEPARTED USPS FACILITY",
93
+ "ARRIVED AT POST OFFICE",
94
+ "SORTING COMPLETE",
95
+ "OUT FOR DELIVERY",
96
+ "DELIVERED"], response.shipment_events.map(&:name)
81
97
  end
82
98
 
83
99
  def test_find_tracking_info_should_have_correct_locations_for_shipment_events
84
100
  @carrier.expects(:commit).returns(@tracking_response)
85
101
  response = @carrier.find_tracking_info('9102901000462189604217', :test => true)
86
- assert_equal ["PHOENIX, AZ, 85043",
87
- "PHOENIX, AZ, 85043",
88
- "PHOENIX, AZ, 85043",
89
- "GRAND PRAIRIE, TX, 75050",
90
- "DES MOINES, IA, 50311",
91
- "DES MOINES, IA, 50311",
92
- "DES MOINES, IA, 50311"], response.shipment_events.map(&:location).map { |l| "#{l.city}, #{l.state}, #{l.postal_code}" }
102
+ assert_equal [
103
+ "ARGYLE, TX, 76226",
104
+ "ARGYLE, TX, 76226",
105
+ "COPPELL, TX, 75099",
106
+ "COPPELL, TX, 75099",
107
+ "HAZELWOOD, MO, 63042",
108
+ "HAZELWOOD, MO, 63042",
109
+ "HANNA CITY, IL, 61536",
110
+ "HANNA CITY, IL, 61536",
111
+ "HANNA CITY, IL, 61536",
112
+ "HANNA CITY, IL, 61536"], response.shipment_events.map(&:location).map { |l| "#{l.city}, #{l.state}, #{l.postal_code}" }
113
+ end
114
+
115
+ def test_find_tracking_info_should_have_correct_event_codes_for_shipment_events
116
+ @carrier.expects(:commit).returns(@tracking_response)
117
+ response = @carrier.find_tracking_info('9102901000462189604217', :test => true)
118
+ assert_equal ["GX", "OA", "10", "EF", "10", "EF", "07", "PC", "OF", "01"], response.shipment_events.map(&:type_code)
119
+ end
120
+
121
+ def test_find_tracking_info_should_handle_special_cases
122
+ @carrier.expects(:commit).returns(xml_fixture('usps/tracking_response_alt'))
123
+ response = @carrier.find_tracking_info('9102901000462189604217', :test => true)
124
+ assert_equal 'Canada', response.shipment_events.last.location.country.name
125
+ assert_equal :out_for_delivery, response.status
93
126
  end
94
127
 
95
128
  def test_find_tracking_info_destination
@@ -108,17 +141,11 @@ class USPSTest < Minitest::Test
108
141
  def test_find_tracking_info_should_have_correct_status
109
142
  @carrier.expects(:commit).returns(@tracking_response)
110
143
  response = @carrier.find_tracking_info('9102901000462189604217')
111
- assert_equal :out_for_delivery, response.status
144
+ assert_equal :delivered, response.status
112
145
  end
113
146
 
114
147
  def test_find_tracking_info_should_have_correct_delivered
115
- @carrier.expects(:commit).returns(xml_fixture('usps/delivered_tracking_response'))
116
- response = @carrier.find_tracking_info('9102901000462189604217')
117
- assert_equal true, response.delivered?
118
- end
119
-
120
- def test_find_tracking_info_with_extended_response_format_should_have_correct_delivered
121
- @carrier.expects(:commit).returns(xml_fixture('usps/delivered_extended_tracking_response'))
148
+ @carrier.expects(:commit).returns(@tracking_response)
122
149
  response = @carrier.find_tracking_info('9102901000462189604217')
123
150
  assert_equal true, response.delivered?
124
151
  end
@@ -453,18 +480,6 @@ class USPSTest < Minitest::Test
453
480
  assert_equal [3767, 5526, 7231, 7231], response.rates.map(&:price)
454
481
  end
455
482
 
456
- def test_extract_event_details_handles_single_digit_calendar_dates
457
- assert details = @carrier.extract_event_details("Out for Delivery, October 9, 2013, 10:16 am, BROOKLYN, NY 11201")
458
- assert_equal "OUT FOR DELIVERY", details.description
459
- assert_equal 9, details.zoneless_time.mday
460
- end
461
-
462
- def test_extract_event_details_handles_double_digit_calendar_dates
463
- assert details = @carrier.extract_event_details("Out for Delivery, October 12, 2013, 10:16 am, BROOKLYN, NY 11201")
464
- assert_equal "OUT FOR DELIVERY", details.description
465
- assert_equal 12, details.zoneless_time.mday
466
- end
467
-
468
483
  private
469
484
 
470
485
  def build_service_node(options = {})
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_shipping
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James MacAulay
@@ -33,7 +33,7 @@ cert_chain:
33
33
  fl3hbtVFTqbOlwL9vy1fudXcolIE/ZTcxQ+er07ZFZdKCXayR9PPs64heamfn0fp
34
34
  TConQSX2BnZdhIEYW+cKzEC/bLc=
35
35
  -----END CERTIFICATE-----
36
- date: 2015-05-08 00:00:00.000000000 Z
36
+ date: 2015-05-14 00:00:00.000000000 Z
37
37
  dependencies:
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: quantified
@@ -219,6 +219,7 @@ files:
219
219
  - lib/active_shipping/tracking_response.rb
220
220
  - lib/active_shipping/version.rb
221
221
  - lib/certs/eParcel.dtd
222
+ - repodb.yml
222
223
  - shipit.rubygems.yml
223
224
  - test/credentials.yml
224
225
  - test/fixtures/files/label1.pdf
@@ -334,14 +335,13 @@ files:
334
335
  - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_base_rate_response.xml
335
336
  - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_plus_rate_response.xml
336
337
  - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_rate_response.xml
337
- - test/fixtures/xml/usps/delivered_extended_tracking_response.xml
338
- - test/fixtures/xml/usps/delivered_tracking_response.xml
339
338
  - test/fixtures/xml/usps/first_class_packages_with_invalid_mail_type_response.xml
340
339
  - test/fixtures/xml/usps/first_class_packages_with_mail_type_response.xml
341
340
  - test/fixtures/xml/usps/first_class_packages_without_mail_type_response.xml
342
341
  - test/fixtures/xml/usps/invalid_xml_tracking_response_error.xml
343
342
  - test/fixtures/xml/usps/tracking_request.xml
344
343
  - test/fixtures/xml/usps/tracking_response.xml
344
+ - test/fixtures/xml/usps/tracking_response_alt.xml
345
345
  - test/fixtures/xml/usps/tracking_response_failure.xml
346
346
  - test/fixtures/xml/usps/tracking_response_not_available.xml
347
347
  - test/fixtures/xml/usps/tracking_response_test_error.xml
@@ -401,7 +401,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
401
401
  version: '0'
402
402
  requirements: []
403
403
  rubyforge_project:
404
- rubygems_version: 2.2.2
404
+ rubygems_version: 2.2.3
405
405
  signing_key:
406
406
  specification_version: 4
407
407
  summary: Simple shipping abstraction library
@@ -520,14 +520,13 @@ test_files:
520
520
  - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_base_rate_response.xml
521
521
  - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_commercial_plus_rate_response.xml
522
522
  - test/fixtures/xml/usps/beverly_hills_to_ottawa_american_wii_rate_response.xml
523
- - test/fixtures/xml/usps/delivered_extended_tracking_response.xml
524
- - test/fixtures/xml/usps/delivered_tracking_response.xml
525
523
  - test/fixtures/xml/usps/first_class_packages_with_invalid_mail_type_response.xml
526
524
  - test/fixtures/xml/usps/first_class_packages_with_mail_type_response.xml
527
525
  - test/fixtures/xml/usps/first_class_packages_without_mail_type_response.xml
528
526
  - test/fixtures/xml/usps/invalid_xml_tracking_response_error.xml
529
527
  - test/fixtures/xml/usps/tracking_request.xml
530
528
  - test/fixtures/xml/usps/tracking_response.xml
529
+ - test/fixtures/xml/usps/tracking_response_alt.xml
531
530
  - test/fixtures/xml/usps/tracking_response_failure.xml
532
531
  - test/fixtures/xml/usps/tracking_response_not_available.xml
533
532
  - test/fixtures/xml/usps/tracking_response_test_error.xml
metadata.gz.sig CHANGED
Binary file
@@ -1,11 +0,0 @@
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>
@@ -1,11 +0,0 @@
1
- <?xml version="1.0"?>
2
- <TrackResponse>
3
- <TrackInfo ID="9361289949034102283511">
4
- <TrackSummary>Your item was delivered 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>