active_fulfillment 2.0.2 → 2.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.
@@ -3,30 +3,32 @@ module ActiveMerchant
3
3
  class WebgistixService < Service
4
4
  SERVICE_URLS = {
5
5
  :fulfillment => 'https://www.webgistix.com/XML/CreateOrder.asp',
6
- :inventory => 'https://www.webgistix.com/XML/GetInventory.asp',
7
- :tracking => 'https://www.webgistix.com/XML/GetTracking.asp'
8
- }
6
+ :inventory => 'https://www.webgistix.com/XML/GetInventory.asp',
7
+ :tracking => 'https://www.webgistix.com/XML/GetTracking.asp'
8
+ }
9
9
  TEST_URLS = SERVICE_URLS.merge({
10
10
  :fulfillment => 'https://www.webgistix.com/XML/CreateOrderTest.asp'
11
11
  })
12
-
12
+
13
13
  SUCCESS, DUPLICATE, FAILURE = 'True', 'Duplicate', 'False'
14
14
 
15
15
  SUCCESS_MESSAGE = 'Successfully submitted the order'
16
16
  FAILURE_MESSAGE = 'Failed to submit the order'
17
17
  DUPLICATE_MESSAGE = 'This order has already been successfully submitted'
18
-
18
+
19
19
  INVALID_LOGIN = 'Invalid Credentials'
20
20
  NOT_SHIPPED = 'Not Shipped'
21
21
 
22
- # If a request is detected as a duplicate only the original data will be
22
+ TRACKING_COMPANIES = %w(UPS FedEx USPS)
23
+
24
+ # If a request is detected as a duplicate only the original data will be
23
25
  # used by Webgistix, and the subsequent responses will have a
24
26
  # :duplicate parameter set in the params hash.
25
27
  self.retry_safe = true
26
-
28
+
27
29
  # The first is the label, and the last is the code
28
30
  def self.shipping_methods
29
- [
31
+ [
30
32
  ["UPS Ground Shipping", "Ground"],
31
33
  ["UPS Ground", "Ground"],
32
34
  ["UPS Standard Shipping (Canada Only)", "Standard"],
@@ -63,7 +65,7 @@ module ActiveMerchant
63
65
  ["USPS Media Mail", "Media Mail"]
64
66
  ].inject(ActiveSupport::OrderedHash.new){|h, (k,v)| h[k] = v; h}
65
67
  end
66
-
68
+
67
69
  # Pass in the login and password for the shipwire account.
68
70
  # Optionally pass in the :test => true to force test mode
69
71
  def initialize(options = {})
@@ -71,8 +73,8 @@ module ActiveMerchant
71
73
  super
72
74
  end
73
75
 
74
- def fulfill(order_id, shipping_address, line_items, options = {})
75
- requires!(options, :shipping_method)
76
+ def fulfill(order_id, shipping_address, line_items, options = {})
77
+ requires!(options, :shipping_method)
76
78
  commit :fulfillment, build_fulfillment_request(order_id, shipping_address, line_items, options)
77
79
  end
78
80
 
@@ -80,60 +82,60 @@ module ActiveMerchant
80
82
  commit :inventory, build_inventory_request(options)
81
83
  end
82
84
 
83
- def fetch_tracking_numbers(order_ids, options = {})
85
+ def fetch_tracking_data(order_ids, options = {})
84
86
  commit :tracking, build_tracking_request(order_ids, options)
85
87
  end
86
-
88
+
87
89
  def valid_credentials?
88
90
  response = fulfill('', {}, [], :shipping_method => '')
89
91
  response.message != INVALID_LOGIN
90
92
  end
91
-
93
+
92
94
  def test_mode?
93
95
  true
94
96
  end
95
97
 
96
98
  private
97
- #<?xml version="1.0"?>
98
- # <OrderXML>
99
- # <Password>Webgistix</Password>
100
- # <CustomerID>3</CustomerID>
101
- # <Order>
102
- # <ReferenceNumber></ReferenceNumber>
103
- # <Company>Test Company</Company>
104
- # <Name>Joe Smith</Name>
105
- # <Address1>123 Main St.</Address1>
106
- # <Address2></Address2>
107
- # <Address3></Address3>
108
- # <City>Olean</City>
109
- # <State>NY</State>
110
- # <ZipCode>14760</ZipCode>
111
- # <Country>United States</Country>
112
- # <Email>info@webgistix.com</Email>
113
- # <Phone>1-123-456-7890</Phone>
114
- # <ShippingInstructions>Ground</ShippingInstructions>
115
- # <OrderComments>Test Order</OrderComments>
116
- # <Approve>0</Approve>
117
- # <Item>
118
- # <ItemID>testitem</ItemID>
119
- # <ItemQty>2</ItemQty>
120
- # </Item>
121
- # </Order>
99
+ #<?xml version="1.0"?>
100
+ # <OrderXML>
101
+ # <Password>Webgistix</Password>
102
+ # <CustomerID>3</CustomerID>
103
+ # <Order>
104
+ # <ReferenceNumber></ReferenceNumber>
105
+ # <Company>Test Company</Company>
106
+ # <Name>Joe Smith</Name>
107
+ # <Address1>123 Main St.</Address1>
108
+ # <Address2></Address2>
109
+ # <Address3></Address3>
110
+ # <City>Olean</City>
111
+ # <State>NY</State>
112
+ # <ZipCode>14760</ZipCode>
113
+ # <Country>United States</Country>
114
+ # <Email>info@webgistix.com</Email>
115
+ # <Phone>1-123-456-7890</Phone>
116
+ # <ShippingInstructions>Ground</ShippingInstructions>
117
+ # <OrderComments>Test Order</OrderComments>
118
+ # <Approve>0</Approve>
119
+ # <Item>
120
+ # <ItemID>testitem</ItemID>
121
+ # <ItemQty>2</ItemQty>
122
+ # </Item>
123
+ # </Order>
122
124
  # </OrderXML>
123
125
  def build_fulfillment_request(order_id, shipping_address, line_items, options)
124
126
  xml = Builder::XmlMarkup.new :indent => 2
125
127
  xml.instruct!
126
128
  xml.tag! 'OrderXML' do
127
129
  add_credentials(xml)
128
- add_order(xml, order_id, shipping_address, line_items, options)
130
+ add_order(xml, order_id, shipping_address, line_items, options)
129
131
  end
130
132
  xml.target!
131
133
  end
132
-
133
- #<?xml version="1.0"?>
134
- # <InventoryXML>
135
- # <Password>Webgistix</Password>
136
- # <CustomerID>3</CustomerID>
134
+
135
+ #<?xml version="1.0"?>
136
+ # <InventoryXML>
137
+ # <Password>Webgistix</Password>
138
+ # <CustomerID>3</CustomerID>
137
139
  # </InventoryXML>
138
140
  def build_inventory_request(options)
139
141
  xml = Builder::XmlMarkup.new :indent => 2
@@ -145,8 +147,8 @@ module ActiveMerchant
145
147
 
146
148
  #<?xml version="1.0"?>
147
149
  # <TrackingXML>
148
- # <Password>Webgistix</Password>
149
- # <CustomerID>3</CustomerID>
150
+ # <Password>Webgistix</Password>
151
+ # <CustomerID>3</CustomerID>
150
152
  # <Tracking>
151
153
  # <Order>AB12345</Order>
152
154
  # </Tracking>
@@ -159,7 +161,7 @@ module ActiveMerchant
159
161
  xml.instruct!
160
162
  xml.tag! 'TrackingXML' do
161
163
  add_credentials(xml)
162
-
164
+
163
165
  order_ids.each do |o_id|
164
166
  xml.tag! 'Tracking' do
165
167
  xml.tag! 'Order', o_id
@@ -179,7 +181,7 @@ module ActiveMerchant
179
181
  xml.tag! 'ShippingInstructions', options[:shipping_method]
180
182
  xml.tag! 'Approve', 1
181
183
  xml.tag! 'OrderComments', options[:comment] unless options[:comment].blank?
182
-
184
+
183
185
  add_address(xml, shipping_address, options)
184
186
 
185
187
  Array(line_items).each_with_index do |line_item, index|
@@ -187,7 +189,7 @@ module ActiveMerchant
187
189
  end
188
190
  end
189
191
  end
190
-
192
+
191
193
  def add_address(xml, address, options)
192
194
  xml.tag! 'Name', address[:name]
193
195
  xml.tag! 'Address1', address[:address1]
@@ -197,12 +199,12 @@ module ActiveMerchant
197
199
  xml.tag! 'State', address[:state]
198
200
  xml.tag! 'ZipCode', address[:zip]
199
201
  xml.tag! 'Company', address[:company]
200
-
202
+
201
203
  unless address[:country].blank?
202
204
  country = Country.find(address[:country])
203
205
  xml.tag! 'Country', country.name
204
206
  end
205
-
207
+
206
208
  xml.tag! 'Phone', address[:phone]
207
209
  xml.tag! 'Email', options[:email] unless options[:email].blank?
208
210
  end
@@ -216,20 +218,20 @@ module ActiveMerchant
216
218
 
217
219
  def commit(action, request)
218
220
  url = test? ? TEST_URLS[action] : SERVICE_URLS[action]
219
-
221
+
220
222
  data = ssl_post(url, request,
221
223
  'EndPointURL' => url,
222
224
  'Content-Type' => 'text/xml; charset="utf-8"'
223
225
  )
224
-
226
+
225
227
  response = parse_response(action, data)
226
228
  Response.new(success?(response), message_from(response), response, :test => test?)
227
229
  end
228
-
230
+
229
231
  def success?(response)
230
232
  response[:success] == SUCCESS || response[:success] == DUPLICATE
231
233
  end
232
-
234
+
233
235
  def message_from(response)
234
236
  if response[:duplicate]
235
237
  DUPLICATE_MESSAGE
@@ -241,9 +243,9 @@ module ActiveMerchant
241
243
  FAILURE_MESSAGE
242
244
  end
243
245
  end
244
-
246
+
245
247
  def parse_response(action, xml)
246
- begin
248
+ begin
247
249
  document = REXML::Document.new("<response>#{xml}</response>")
248
250
  rescue REXML::ParseException
249
251
  return {:success => FAILURE}
@@ -260,10 +262,10 @@ module ActiveMerchant
260
262
  raise ArgumentError, "Unknown action #{action}"
261
263
  end
262
264
  end
263
-
265
+
264
266
  def parse_fulfillment_response(document)
265
267
  response = parse_errors(document)
266
-
268
+
267
269
  # Check if completed
268
270
  if completed = REXML::XPath.first(document, '//Completed')
269
271
  completed.elements.each do |e|
@@ -272,9 +274,9 @@ module ActiveMerchant
272
274
  else
273
275
  response[:success] = FAILURE
274
276
  end
275
-
277
+
276
278
  response[:duplicate] = response[:success] == DUPLICATE
277
-
279
+
278
280
  response
279
281
  end
280
282
 
@@ -295,6 +297,8 @@ module ActiveMerchant
295
297
  def parse_tracking_response(document)
296
298
  response = parse_errors(document)
297
299
  response[:tracking_numbers] = {}
300
+ response[:tracking_companies] = {}
301
+ response[:tracking_urls] = {}
298
302
 
299
303
  document.root.each_element('//Shipment') do |node|
300
304
  # {InvoiceNumber => 'SOME-ID', ShipmentTrackingNumber => 'SOME-TRACKING-NUMBER'}
@@ -306,21 +310,27 @@ module ActiveMerchant
306
310
  response[:tracking_numbers][params['InvoiceNumber']] ||= []
307
311
  response[:tracking_numbers][params['InvoiceNumber']] << tracking
308
312
  end
313
+
314
+ company = params['Method'].split[0] if params['Method']
315
+ if TRACKING_COMPANIES.include? company
316
+ response[:tracking_companies][params['InvoiceNumber']] ||= []
317
+ response[:tracking_companies][params['InvoiceNumber']] << company
318
+ end
309
319
  end
310
320
 
311
321
  response
312
322
  end
313
-
323
+
314
324
  def parse_errors(document)
315
325
  response = {}
316
-
326
+
317
327
  REXML::XPath.match(document, "//Errors/Error").to_a.each_with_index do |e, i|
318
328
  response["error_#{i}".to_sym] = e.text
319
329
  end
320
-
330
+
321
331
  response[:success] = response.empty? ? SUCCESS : FAILURE
322
332
  response
323
- end
333
+ end
324
334
  end
325
335
  end
326
336
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  module ActiveMerchant
3
3
  module Fulfillment
4
- VERSION = "2.0.2"
4
+ VERSION = "2.1.0"
5
5
  end
6
6
  end
@@ -20,7 +20,7 @@ class RemoteAmazonMarketplaceWebservicesTest < Test::Unit::TestCase
20
20
  :country => 'US',
21
21
  :zip => '90210'
22
22
  }
23
-
23
+
24
24
  @line_items = [
25
25
  { :sku => 'SETTLERS',
26
26
  :quantity => 1 #,
@@ -50,13 +50,13 @@ class RemoteAmazonMarketplaceWebservicesTest < Test::Unit::TestCase
50
50
  :login => 'y',
51
51
  :password => 'p',
52
52
  :seller_id => 'o')
53
-
53
+
54
54
  response = service.fulfill(ActiveMerchant::Utils.generate_unique_id, @address, @line_items, @options)
55
55
  assert !response.success?
56
-
56
+
57
57
  assert_equal "InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.", response.response_comment
58
58
  end
59
-
59
+
60
60
  def test_list_orders
61
61
  response = @service.fetch_current_orders
62
62
  assert response.success?
@@ -73,23 +73,30 @@ class RemoteAmazonMarketplaceWebservicesTest < Test::Unit::TestCase
73
73
  assert response.success?
74
74
  assert_equal 0, response.stock_levels['SETTLERS']
75
75
  end
76
-
76
+
77
+ def test_fetch_tracking_data
78
+ response = @service.fetch_tracking_data(['123456']) # an actual order
79
+ assert response.success?
80
+ assert_equal Hash.new, response.tracking_numbers # no tracking numbers in testing
81
+ assert_equal Hash.new, response.tracking_companies
82
+ end
83
+
77
84
  def test_fetch_tracking_numbers
78
85
  response = @service.fetch_tracking_numbers(['123456']) # an actual order
79
86
  assert response.success?
80
87
  assert_equal Hash.new, response.tracking_numbers # no tracking numbers in testing
81
88
  end
82
-
89
+
83
90
  def test_fetch_tracking_numbers_ignores_not_found
84
91
  response = @service.fetch_tracking_numbers(['1337-1'])
85
92
  assert response.success?
86
93
  assert_equal Hash.new, response.tracking_numbers
87
94
  end
88
-
95
+
89
96
  def test_valid_credentials
90
97
  assert @service.valid_credentials?
91
98
  end
92
-
99
+
93
100
  def test_invalid_credentials
94
101
  service = AmazonMarketplaceWebService.new(
95
102
  :login => 'your@email.com',
@@ -97,7 +104,7 @@ class RemoteAmazonMarketplaceWebservicesTest < Test::Unit::TestCase
97
104
  :seller_id => 'SellerNumber1')
98
105
  assert !service.valid_credentials?
99
106
  end
100
-
107
+
101
108
  def test_get_status_does_not_require_valid_credentials
102
109
  service = AmazonMarketplaceWebService.new(
103
110
  :login => 'your@email.com',
@@ -105,7 +112,7 @@ class RemoteAmazonMarketplaceWebservicesTest < Test::Unit::TestCase
105
112
  response = service.status
106
113
  assert response.success?
107
114
  end
108
-
115
+
109
116
  def test_get_status
110
117
  service = AmazonMarketplaceWebService.new(fixtures(:amazon))
111
118
  response = service.status
@@ -9,12 +9,12 @@ class RemoteAmazonTest < Test::Unit::TestCase
9
9
  def setup
10
10
  @service = AmazonService.new( fixtures(:amazon) )
11
11
 
12
- @options = {
12
+ @options = {
13
13
  :shipping_method => 'Standard',
14
14
  :order_date => Time.now.utc.yesterday,
15
15
  :comment => "Delayed due to tornados"
16
16
  }
17
-
17
+
18
18
  @address = { :name => 'Johnny Chase',
19
19
  :address1 => '100 Information Super Highway',
20
20
  :address2 => 'Suite 66',
@@ -23,7 +23,7 @@ class RemoteAmazonTest < Test::Unit::TestCase
23
23
  :country => 'US',
24
24
  :zip => '90210'
25
25
  }
26
-
26
+
27
27
  @line_items = [
28
28
  { :sku => 'SETTLERS8',
29
29
  :quantity => 1 #,
@@ -37,28 +37,28 @@ class RemoteAmazonTest < Test::Unit::TestCase
37
37
  assert response.success?
38
38
  assert !response.test?
39
39
  end
40
-
40
+
41
41
  def test_order_multiple_line_items
42
42
  @line_items.push(
43
43
  { :sku => 'CARCASSONNE',
44
44
  :quantity => 2
45
45
  }
46
46
  )
47
-
47
+
48
48
  response = @service.fulfill(ActiveMerchant::Utils.generate_unique_id, @address, @line_items, @options)
49
49
  assert response.success?
50
50
  end
51
-
51
+
52
52
  def test_invalid_credentials_during_fulfillment
53
53
  service = AmazonService.new(
54
54
  :login => 'y',
55
55
  :password => 'p')
56
-
56
+
57
57
  response = service.fulfill(ActiveMerchant::Utils.generate_unique_id, @address, @line_items, @options)
58
58
  assert !response.success?
59
59
  assert_equal "aws:Client.InvalidClientTokenId The AWS Access Key Id you provided does not exist in our records.", response.message
60
60
  end
61
-
61
+
62
62
  def test_list_orders
63
63
  response = @service.fetch_current_orders
64
64
  assert response.success?
@@ -75,30 +75,37 @@ class RemoteAmazonTest < Test::Unit::TestCase
75
75
  assert response.success?
76
76
  assert_equal 0, response.stock_levels['SETTLERS']
77
77
  end
78
-
78
+
79
+ def test_fetch_tracking_numbers
80
+ response = @service.fetch_tracking_data['123456']) # an actual order
81
+ assert response.success?
82
+ assert_equal Hash.new, response.tracking_numbers # no tracking numbers in testing
83
+ assert_equal Hash.new, response.tracking_companies
84
+ end
85
+
79
86
  def test_fetch_tracking_numbers
80
87
  response = @service.fetch_tracking_numbers(['123456']) # an actual order
81
88
  assert response.success?
82
89
  assert_equal Hash.new, response.tracking_numbers # no tracking numbers in testing
83
90
  end
84
-
91
+
85
92
  def test_fetch_tracking_numbers_ignores_not_found
86
93
  response = @service.fetch_tracking_numbers(['#1337-1'])
87
94
  assert response.success?
88
95
  assert_equal Hash.new, response.tracking_numbers
89
96
  end
90
-
97
+
91
98
  def test_valid_credentials
92
99
  assert @service.valid_credentials?
93
100
  end
94
-
101
+
95
102
  def test_invalid_credentials
96
103
  service = AmazonService.new(
97
104
  :login => 'your@email.com',
98
105
  :password => 'password')
99
106
  assert !service.valid_credentials?
100
107
  end
101
-
108
+
102
109
  def test_get_status_fails
103
110
  service = AmazonService.new(
104
111
  :login => 'your@email.com',
@@ -107,11 +114,11 @@ class RemoteAmazonTest < Test::Unit::TestCase
107
114
  assert !response.success?
108
115
  assert_equal "aws:Client.InvalidClientTokenId The AWS Access Key Id you provided does not exist in our records.", response.message
109
116
  end
110
-
117
+
111
118
  def test_get_status
112
119
  service = AmazonService.new(fixtures(:amazon))
113
120
  response = service.status
114
121
  assert response.success?
115
122
  end
116
-
123
+
117
124
  end
@@ -5,14 +5,14 @@ class RemoteShipwireTest < Test::Unit::TestCase
5
5
  Base.mode = :test
6
6
 
7
7
  @shipwire = ShipwireService.new( fixtures(:shipwire) )
8
-
9
- @options = {
8
+
9
+ @options = {
10
10
  :warehouse => 'LAX',
11
11
  :shipping_method => 'UPS Ground',
12
12
  :email => 'cody@example.com'
13
13
  }
14
-
15
- @us_address = {
14
+
15
+ @us_address = {
16
16
  :name => 'Steve Jobs',
17
17
  :company => 'Apple Computer Inc.',
18
18
  :address1 => '1 Infinite Loop',
@@ -22,8 +22,8 @@ class RemoteShipwireTest < Test::Unit::TestCase
22
22
  :zip => '95014',
23
23
  :email => 'steve@apple.com'
24
24
  }
25
-
26
- @uk_address = {
25
+
26
+ @uk_address = {
27
27
  :name => 'Bob Diamond',
28
28
  :company => 'Barclays Bank PLC',
29
29
  :address1 => '1 Churchill Place',
@@ -32,22 +32,22 @@ class RemoteShipwireTest < Test::Unit::TestCase
32
32
  :zip => 'E14 5HP',
33
33
  :email => 'bob@barclays.co.uk'
34
34
  }
35
-
35
+
36
36
  @line_items = [ { :sku => 'AF0001', :quantity => 25 } ]
37
37
  end
38
-
38
+
39
39
  def test_invalid_credentials_during_fulfillment
40
40
  shipwire = ShipwireService.new(
41
41
  :login => 'your@email.com',
42
42
  :password => 'password')
43
-
43
+
44
44
  response = shipwire.fulfill('123456', @us_address, @line_items, @options)
45
45
  assert !response.success?
46
46
  assert response.test?
47
47
  assert_equal 'Error', response.params['status']
48
48
  assert_equal "Could not verify Username/EmailAddress and Password combination", response.message
49
49
  end
50
-
50
+
51
51
  def test_successful_order_submission_to_us
52
52
  response = @shipwire.fulfill('123456', @us_address, @line_items, @options)
53
53
  assert response.success?
@@ -58,7 +58,7 @@ class RemoteShipwireTest < Test::Unit::TestCase
58
58
  assert_equal '0', response.params['status']
59
59
  assert_equal 'Successfully submitted the order', response.message
60
60
  end
61
-
61
+
62
62
  def test_successful_order_submission_to_uk
63
63
  response = @shipwire.fulfill('123456', @uk_address, @line_items, @options)
64
64
  assert response.success?
@@ -69,10 +69,10 @@ class RemoteShipwireTest < Test::Unit::TestCase
69
69
  assert_equal '0', response.params['status']
70
70
  assert_equal 'Successfully submitted the order', response.message
71
71
  end
72
-
72
+
73
73
  def test_order_multiple_line_items
74
74
  @line_items.push({ :sku => 'AF0002', :quantity => 25 })
75
-
75
+
76
76
  response = @shipwire.fulfill('123456', @us_address, @line_items, @options)
77
77
  assert response.success?
78
78
  assert response.test?
@@ -80,41 +80,41 @@ class RemoteShipwireTest < Test::Unit::TestCase
80
80
  assert_equal '1', response.params['total_orders']
81
81
  assert_equal '2', response.params['total_items']
82
82
  assert_equal '0', response.params['status']
83
- assert_equal 'Successfully submitted the order', response.message
83
+ assert_equal 'Successfully submitted the order', response.message
84
84
  end
85
-
85
+
86
86
  def test_no_sku_is_sent_with_fulfillment
87
- options = {
87
+ options = {
88
88
  :shipping_method => 'UPS Ground'
89
89
  }
90
-
90
+
91
91
  line_items = [ { :quantity => 1, :description => 'Libtech Snowboard' } ]
92
-
92
+
93
93
  response = @shipwire.fulfill('123456', @us_address, line_items, options)
94
-
94
+
95
95
  assert response.success?
96
96
  assert response.test?
97
97
  assert_not_nil response.params['transaction_id']
98
98
  assert_equal "1", response.params['total_orders']
99
99
  assert_equal "0", response.params['total_items']
100
100
  assert_equal "0", response.params['status']
101
- assert_equal 'Successfully submitted the order', response.message
101
+ assert_equal 'Successfully submitted the order', response.message
102
102
  end
103
-
103
+
104
104
  def test_invalid_credentials_during_inventory
105
105
  shipwire = ShipwireService.new(
106
106
  :login => 'your@email.com',
107
107
  :password => 'password'
108
108
  )
109
-
109
+
110
110
  response = shipwire.fetch_stock_levels
111
-
111
+
112
112
  assert !response.success?
113
113
  assert response.test?
114
114
  assert_equal 'Error', response.params['status']
115
115
  assert_equal "Error with Valid Username/EmailAddress and Password Required. There is an error in XML document.", response.message
116
116
  end
117
-
117
+
118
118
  def test_get_inventory
119
119
  response = @shipwire.fetch_stock_levels
120
120
  assert response.success?
@@ -123,18 +123,26 @@ class RemoteShipwireTest < Test::Unit::TestCase
123
123
  assert_equal 32, response.stock_levels["GD201-500"]
124
124
  assert_equal "2", response.params["total_products"]
125
125
  end
126
-
126
+
127
+ def test_fetch_tracking_data
128
+ response = @shipwire.fetch_tracking_data(['123456'])
129
+ assert response.success?
130
+ assert response.test?
131
+ assert_equal Hash.new, response.tracking_numbers # no tracking numbers in testing
132
+ assert_equal Hash.new, response.tracking_companies
133
+ end
134
+
127
135
  def test_fetch_tracking_numbers
128
136
  response = @shipwire.fetch_tracking_numbers(['123456'])
129
- assert response.success?
137
+ assert response.success?
130
138
  assert response.test?
131
139
  assert_equal Hash.new, response.tracking_numbers # no tracking numbers in testing
132
140
  end
133
-
141
+
134
142
  def test_valid_credentials
135
143
  assert @shipwire.valid_credentials?
136
144
  end
137
-
145
+
138
146
  def test_invalid_credentials
139
147
  service = ShipwireService.new(
140
148
  :login => 'your@email.com',