active_shipping 1.0.1 → 1.1.0

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.
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>