active_fulfillment 2.1.9 → 3.0.0.pre2
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 +4 -4
- data/CHANGELOG.md +68 -0
- data/lib/active_fulfillment.rb +5 -5
- data/lib/active_fulfillment/base.rb +10 -0
- data/lib/active_fulfillment/response.rb +26 -0
- data/lib/active_fulfillment/service.rb +56 -0
- data/lib/active_fulfillment/services.rb +5 -0
- data/lib/active_fulfillment/services/amazon_mws.rb +473 -0
- data/lib/active_fulfillment/services/james_and_james.rb +122 -0
- data/lib/active_fulfillment/services/shipwire.rb +266 -0
- data/lib/active_fulfillment/services/shopify_api.rb +125 -0
- data/lib/active_fulfillment/services/webgistix.rb +334 -0
- data/lib/active_fulfillment/version.rb +4 -0
- data/test/remote/amazon_mws_test.rb +20 -17
- data/test/remote/james_and_james_test.rb +77 -0
- data/test/remote/shipwire_test.rb +25 -25
- data/test/remote/webgistix_test.rb +21 -21
- data/test/test_helper.rb +27 -52
- data/test/unit/base_test.rb +4 -4
- data/test/unit/services/amazon_mws_test.rb +56 -26
- data/test/unit/services/james_and_james_test.rb +90 -0
- data/test/unit/services/shipwire_test.rb +18 -18
- data/test/unit/services/shopify_api_test.rb +7 -20
- data/test/unit/services/webgistix_test.rb +35 -35
- metadata +32 -114
- data/CHANGELOG +0 -62
- data/lib/active_fulfillment/fulfillment/base.rb +0 -12
- data/lib/active_fulfillment/fulfillment/response.rb +0 -28
- data/lib/active_fulfillment/fulfillment/service.rb +0 -58
- data/lib/active_fulfillment/fulfillment/services.rb +0 -5
- data/lib/active_fulfillment/fulfillment/services/amazon.rb +0 -389
- data/lib/active_fulfillment/fulfillment/services/amazon_mws.rb +0 -454
- data/lib/active_fulfillment/fulfillment/services/shipwire.rb +0 -268
- data/lib/active_fulfillment/fulfillment/services/shopify_api.rb +0 -125
- data/lib/active_fulfillment/fulfillment/services/webgistix.rb +0 -338
- data/lib/active_fulfillment/fulfillment/version.rb +0 -6
- data/test/fixtures.yml +0 -16
- data/test/fixtures/xml/amazon/inventory_get_response.xml +0 -17
- data/test/fixtures/xml/amazon/inventory_list_response.xml +0 -29
- data/test/fixtures/xml/amazon/inventory_list_response_with_next_1.xml +0 -30
- data/test/fixtures/xml/amazon/inventory_list_response_with_next_2.xml +0 -29
- data/test/fixtures/xml/amazon/tracking_response_1.xml +0 -56
- data/test/fixtures/xml/amazon/tracking_response_2.xml +0 -38
- data/test/fixtures/xml/amazon/tracking_response_error.xml +0 -13
- data/test/fixtures/xml/amazon/tracking_response_not_found.xml +0 -13
- data/test/fixtures/xml/amazon_mws/fulfillment_get_fulfillment_order.xml +0 -114
- data/test/fixtures/xml/amazon_mws/fulfillment_get_fulfillment_order_2.xml +0 -90
- data/test/fixtures/xml/amazon_mws/fulfillment_get_fullfillment_order_with_multiple_tracking_numbers.xml +0 -121
- data/test/fixtures/xml/amazon_mws/fulfillment_list_all_fulfillment_orders.xml +0 -70
- data/test/fixtures/xml/amazon_mws/inventory_list_inventory_item_supply.xml +0 -32
- data/test/fixtures/xml/amazon_mws/inventory_list_inventory_supply.xml +0 -75
- data/test/fixtures/xml/amazon_mws/inventory_list_inventory_supply_by_next_token.xml +0 -38
- data/test/fixtures/xml/amazon_mws/tracking_response_error.xml +0 -9
- data/test/fixtures/xml/amazon_mws/tracking_response_not_found.xml +0 -9
- data/test/fixtures/xml/shipwire/fulfillment_failure_response.xml +0 -7
- data/test/fixtures/xml/shipwire/invalid_login_response.xml +0 -7
- data/test/fixtures/xml/shipwire/inventory_get_response.xml +0 -44
- data/test/fixtures/xml/shipwire/successful_empty_tracking_response.xml +0 -8
- data/test/fixtures/xml/shipwire/successful_live_tracking_response.xml +0 -53
- data/test/fixtures/xml/shipwire/successful_tracking_response.xml +0 -16
- data/test/fixtures/xml/shipwire/successful_tracking_response_with_tracking_urls.xml +0 -31
- data/test/fixtures/xml/webgistix/multiple_tracking_response.xml +0 -21
- data/test/fixtures/xml/webgistix/tracking_response.xml +0 -14
- data/test/remote/amazon_test.rb +0 -124
- data/test/unit/services/amazon_test.rb +0 -271
@@ -1,10 +1,12 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class RemoteShipwireTest < Test
|
3
|
+
class RemoteShipwireTest < Minitest::Test
|
4
|
+
include ActiveFulfillment::Test::Fixtures
|
5
|
+
|
4
6
|
def setup
|
5
|
-
Base.mode = :test
|
7
|
+
ActiveFulfillment::Base.mode = :test
|
6
8
|
|
7
|
-
@shipwire = ShipwireService.new(
|
9
|
+
@shipwire = ActiveFulfillment::ShipwireService.new(fixtures(:shipwire))
|
8
10
|
|
9
11
|
@options = {
|
10
12
|
:warehouse => 'LAX',
|
@@ -37,19 +39,17 @@ class RemoteShipwireTest < Test::Unit::TestCase
|
|
37
39
|
end
|
38
40
|
|
39
41
|
def test_invalid_credentials_during_fulfillment
|
40
|
-
shipwire = ShipwireService.new(
|
42
|
+
shipwire = ActiveFulfillment::ShipwireService.new(
|
41
43
|
:login => 'your@email.com',
|
42
44
|
:password => 'password')
|
43
45
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
assert_equal 'Error', response.params['status']
|
48
|
-
assert_equal "Could not verify Username/EmailAddress and Password combination", response.message
|
46
|
+
assert_raises(ActiveUtils::ResponseError, 'Failed with 401 Authorization Required') do
|
47
|
+
shipwire.fulfill(SecureRandom.uuid, @us_address, @line_items, @options)
|
48
|
+
end
|
49
49
|
end
|
50
50
|
|
51
51
|
def test_successful_order_submission_to_us
|
52
|
-
response = @shipwire.fulfill(
|
52
|
+
response = @shipwire.fulfill(SecureRandom.uuid, @us_address, @line_items, @options)
|
53
53
|
assert response.success?
|
54
54
|
assert response.test?
|
55
55
|
assert response.params['transaction_id']
|
@@ -60,7 +60,7 @@ class RemoteShipwireTest < Test::Unit::TestCase
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def test_successful_order_submission_to_uk
|
63
|
-
response = @shipwire.fulfill(
|
63
|
+
response = @shipwire.fulfill(SecureRandom.uuid, @uk_address, @line_items, @options)
|
64
64
|
assert response.success?
|
65
65
|
assert response.test?
|
66
66
|
assert response.params['transaction_id']
|
@@ -73,7 +73,7 @@ class RemoteShipwireTest < Test::Unit::TestCase
|
|
73
73
|
def test_order_multiple_line_items
|
74
74
|
@line_items.push({ :sku => 'AF0002', :quantity => 25 })
|
75
75
|
|
76
|
-
response = @shipwire.fulfill(
|
76
|
+
response = @shipwire.fulfill(SecureRandom.uuid, @us_address, @line_items, @options)
|
77
77
|
assert response.success?
|
78
78
|
assert response.test?
|
79
79
|
assert response.params['transaction_id']
|
@@ -84,32 +84,32 @@ class RemoteShipwireTest < Test::Unit::TestCase
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def test_no_sku_is_sent_with_fulfillment
|
87
|
-
|
88
|
-
|
89
|
-
|
87
|
+
options = {
|
88
|
+
:shipping_method => 'UPS Ground'
|
89
|
+
}
|
90
90
|
|
91
91
|
line_items = [ { :quantity => 1, :description => 'Libtech Snowboard' } ]
|
92
92
|
|
93
|
-
response = @shipwire.fulfill(
|
93
|
+
response = @shipwire.fulfill(SecureRandom.uuid, @us_address, line_items, options)
|
94
94
|
|
95
95
|
assert response.success?
|
96
96
|
assert response.test?
|
97
|
-
|
97
|
+
refute response.params['transaction_id'].blank?
|
98
98
|
assert_equal "1", response.params['total_orders']
|
99
|
-
assert_equal "
|
99
|
+
assert_equal "1", response.params['total_items']
|
100
100
|
assert_equal "0", response.params['status']
|
101
101
|
assert_equal 'Successfully submitted the order', response.message
|
102
102
|
end
|
103
103
|
|
104
104
|
def test_invalid_credentials_during_inventory
|
105
|
-
shipwire = ShipwireService.new(
|
105
|
+
shipwire = ActiveFulfillment::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
|
+
refute 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
|
@@ -128,15 +128,15 @@ class RemoteShipwireTest < Test::Unit::TestCase
|
|
128
128
|
response = @shipwire.fetch_tracking_data(['123456'])
|
129
129
|
assert response.success?
|
130
130
|
assert response.test?
|
131
|
-
|
132
|
-
|
131
|
+
assert_instance_of Hash, response.tracking_numbers # {"40298"=>["9400110200793596422990"]}
|
132
|
+
assert_instance_of Hash, response.tracking_companies # {"40298"=>["USPS"]}
|
133
133
|
end
|
134
134
|
|
135
135
|
def test_fetch_tracking_numbers
|
136
136
|
response = @shipwire.fetch_tracking_numbers(['123456'])
|
137
137
|
assert response.success?
|
138
138
|
assert response.test?
|
139
|
-
|
139
|
+
assert_instance_of Hash, response.tracking_numbers # {"40298"=>["9400110200793596422990"]}
|
140
140
|
end
|
141
141
|
|
142
142
|
def test_valid_credentials
|
@@ -144,10 +144,10 @@ class RemoteShipwireTest < Test::Unit::TestCase
|
|
144
144
|
end
|
145
145
|
|
146
146
|
def test_invalid_credentials
|
147
|
-
service = ShipwireService.new(
|
147
|
+
service = ActiveFulfillment::ShipwireService.new(
|
148
148
|
:login => 'your@email.com',
|
149
149
|
:password => 'password'
|
150
150
|
)
|
151
|
-
|
151
|
+
refute service.valid_credentials?
|
152
152
|
end
|
153
153
|
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class RemoteWebgistixTest < Test
|
3
|
+
class RemoteWebgistixTest < Minitest::Test
|
4
|
+
include ActiveFulfillment::Test::Fixtures
|
5
|
+
|
4
6
|
def setup
|
5
|
-
Base.mode = :test
|
7
|
+
ActiveFulfillment::Base.mode = :test
|
6
8
|
|
7
|
-
@service = WebgistixService.new(
|
9
|
+
@service = ActiveFulfillment::WebgistixService.new(fixtures(:webgistix))
|
8
10
|
|
9
11
|
@options = {
|
10
12
|
:shipping_method => 'Ground',
|
@@ -28,40 +30,37 @@ class RemoteWebgistixTest < Test::Unit::TestCase
|
|
28
30
|
end
|
29
31
|
|
30
32
|
def test_successful_order_submission
|
31
|
-
response = @service.fulfill(
|
33
|
+
response = @service.fulfill(SecureRandom.uuid, @address, @line_items, @options)
|
32
34
|
assert response.success?
|
33
35
|
assert response.test?
|
34
|
-
assert_equal WebgistixService::SUCCESS_MESSAGE, response.message
|
36
|
+
assert_equal ActiveFulfillment::WebgistixService::SUCCESS_MESSAGE, response.message
|
35
37
|
end
|
36
38
|
|
37
39
|
def test_order_multiple_line_items
|
38
|
-
@line_items.push(
|
39
|
-
{ :sku => 'WX-01-1020',
|
40
|
-
:quantity => 3
|
41
|
-
}
|
42
|
-
)
|
40
|
+
@line_items.push(:sku => 'WX-01-1020', :quantity => 3)
|
43
41
|
|
44
|
-
response = @service.fulfill(
|
42
|
+
response = @service.fulfill(SecureRandom.uuid, @address, @line_items, @options)
|
45
43
|
assert response.success?
|
46
44
|
assert response.test?
|
47
|
-
assert_equal WebgistixService::SUCCESS_MESSAGE, response.message
|
45
|
+
assert_equal ActiveFulfillment::WebgistixService::SUCCESS_MESSAGE, response.message
|
48
46
|
end
|
49
47
|
|
50
48
|
def test_invalid_sku_during_fulfillment
|
51
49
|
line_items = [ { :sku => 'invalid', :quantity => 1 } ]
|
52
|
-
response = @service.fulfill(
|
53
|
-
|
50
|
+
response = @service.fulfill(SecureRandom.uuid, @address, line_items, @options)
|
51
|
+
refute response.success?
|
54
52
|
assert response.test?
|
55
|
-
assert_equal WebgistixService::FAILURE_MESSAGE, response.message
|
53
|
+
assert_equal ActiveFulfillment::WebgistixService::FAILURE_MESSAGE, response.message
|
56
54
|
end
|
57
55
|
|
58
56
|
def test_invalid_credentials_during_fulfillment
|
59
|
-
service = WebgistixService.new(
|
57
|
+
service = ActiveFulfillment::WebgistixService.new(
|
60
58
|
:login => 'your@email.com',
|
61
|
-
:password => 'password'
|
59
|
+
:password => 'password'
|
60
|
+
)
|
62
61
|
|
63
|
-
response = service.fulfill(
|
64
|
-
|
62
|
+
response = service.fulfill(SecureRandom.uuid, @address, @line_items, @options)
|
63
|
+
refute response.success?
|
65
64
|
assert response.test?
|
66
65
|
assert_equal "Invalid Credentials", response.message
|
67
66
|
end
|
@@ -88,6 +87,7 @@ class RemoteWebgistixTest < Test::Unit::TestCase
|
|
88
87
|
'1254658', 'FAItest123', 'Flat Rate Test Order 4'
|
89
88
|
])
|
90
89
|
assert response.success?
|
90
|
+
p response
|
91
91
|
assert_equal ['4209073191018052136352154'], response.tracking_numbers['1254658']
|
92
92
|
assert_equal ['9101805213907472080032'], response.tracking_numbers['Flat Rate Test Order 4']
|
93
93
|
assert_nil response.tracking_numbers['FAItest123'] # 'Not Shipped'
|
@@ -98,10 +98,10 @@ class RemoteWebgistixTest < Test::Unit::TestCase
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def test_invalid_credentials
|
101
|
-
service = WebgistixService.new(
|
101
|
+
service = ActiveFulfillment::WebgistixService.new(
|
102
102
|
:login => 'your@email.com',
|
103
103
|
:password => 'password')
|
104
104
|
|
105
|
-
|
105
|
+
refute service.valid_credentials?
|
106
106
|
end
|
107
107
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,69 +1,44 @@
|
|
1
|
-
|
2
|
-
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
1
|
+
require 'bundler/setup'
|
3
2
|
|
4
|
-
require 'rubygems'
|
5
|
-
require 'bundler'
|
6
|
-
Bundler.setup
|
7
|
-
|
8
|
-
require 'minitest/autorun'
|
9
|
-
require 'digest/md5'
|
10
3
|
require 'active_fulfillment'
|
11
|
-
require 'active_utils'
|
12
|
-
require 'timecop'
|
13
4
|
|
5
|
+
require 'minitest/autorun'
|
14
6
|
require 'mocha/setup'
|
7
|
+
require 'timecop'
|
15
8
|
|
16
9
|
require 'logger'
|
17
|
-
|
18
|
-
|
19
|
-
module Test
|
20
|
-
module Unit
|
21
|
-
class TestCase < MiniTest::Unit::TestCase
|
22
|
-
include ActiveMerchant::Fulfillment
|
23
|
-
|
24
|
-
LOCAL_CREDENTIALS = ENV['HOME'] + '/.active_merchant/fixtures.yml' unless defined?(LOCAL_CREDENTIALS)
|
25
|
-
DEFAULT_CREDENTIALS = File.dirname(__FILE__) + '/fixtures.yml' unless defined?(DEFAULT_CREDENTIALS)
|
10
|
+
ActiveFulfillment::Service.logger = Logger.new(nil)
|
26
11
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
data = all_fixtures[key] || raise(StandardError, "No fixture data was found for '#{key}'")
|
33
|
-
|
34
|
-
data.dup
|
35
|
-
end
|
12
|
+
# This makes sure that Minitest::Test exists when an older version of Minitest
|
13
|
+
# (i.e. 4.x) is required by ActiveSupport.
|
14
|
+
unless defined?(Minitest::Test)
|
15
|
+
Minitest::Test = MiniTest::Unit::TestCase
|
16
|
+
end
|
36
17
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
18
|
+
module ActiveFulfillment::Test
|
19
|
+
module Fixtures
|
20
|
+
LOCAL_CREDENTIALS = ENV['HOME'] + '/.active_fulfillment/fixtures.yml' unless defined?(LOCAL_CREDENTIALS)
|
21
|
+
DEFAULT_CREDENTIALS = File.dirname(__FILE__) + '/fixtures.yml' unless defined?(DEFAULT_CREDENTIALS)
|
41
22
|
|
42
|
-
|
43
|
-
|
23
|
+
def fixtures(key)
|
24
|
+
data = all_fixtures[key] || raise(StandardError, "No fixture data was found for '#{key}'")
|
44
25
|
|
45
|
-
|
46
|
-
|
47
|
-
end
|
26
|
+
data.dup
|
27
|
+
end
|
48
28
|
|
49
|
-
|
50
|
-
|
29
|
+
def xml_fixture(path) # where path is like 'usps/beverly_hills_to_ottawa_response'
|
30
|
+
File.read(File.join(File.dirname(__FILE__),'fixtures','xml',"#{path}.xml"))
|
31
|
+
end
|
51
32
|
|
52
|
-
|
53
|
-
hash.each{|k,v| symbolize_keys(v)}
|
54
|
-
end
|
33
|
+
private
|
55
34
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
rescue => e
|
60
|
-
flunk "Expected #{error} but nothing raised" if e.class != error
|
61
|
-
end
|
62
|
-
end
|
35
|
+
def all_fixtures
|
36
|
+
@@fixtures ||= load_fixtures
|
37
|
+
end
|
63
38
|
|
64
|
-
|
65
|
-
|
66
|
-
|
39
|
+
def load_fixtures
|
40
|
+
file = File.exists?(LOCAL_CREDENTIALS) ? LOCAL_CREDENTIALS : DEFAULT_CREDENTIALS
|
41
|
+
YAML.load(File.read(file)).deep_symbolize_keys
|
67
42
|
end
|
68
43
|
end
|
69
44
|
end
|
data/test/unit/base_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class BaseTest < Test
|
4
|
-
include
|
3
|
+
class BaseTest < Minitest::Test
|
4
|
+
include ActiveFulfillment
|
5
5
|
|
6
6
|
def test_get_shipwire_by_string
|
7
7
|
assert_equal ShipwireService, Base.service('shipwire')
|
@@ -10,8 +10,8 @@ class BaseTest < Test::Unit::TestCase
|
|
10
10
|
def test_get_shipwire_by_name
|
11
11
|
assert_equal ShipwireService, Base.service(:shipwire)
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def test_get_unknown_service
|
15
|
-
|
15
|
+
assert_raises(NameError){ Base.service(:polar_north) }
|
16
16
|
end
|
17
17
|
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class AmazonMarketplaceWebServiceTest < Test
|
3
|
+
class AmazonMarketplaceWebServiceTest < Minitest::Test
|
4
|
+
include ActiveFulfillment::Test::Fixtures
|
5
|
+
|
4
6
|
def setup
|
5
|
-
@service = AmazonMarketplaceWebService.new(
|
7
|
+
@service = ActiveFulfillment::AmazonMarketplaceWebService.new(
|
6
8
|
:login => 'l',
|
7
9
|
:password => 'p'
|
8
10
|
)
|
@@ -36,6 +38,18 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
36
38
|
:phone => "(555)555-5555"
|
37
39
|
}
|
38
40
|
|
41
|
+
@long_address = {
|
42
|
+
:name => 'Mister Long Name The Third',
|
43
|
+
:company => 'Company Overflow Name Incorporated LLC',
|
44
|
+
:address1 => '100 Information Super Highway',
|
45
|
+
:address2 => 'Suite 66',
|
46
|
+
:city => 'Beverly Hills',
|
47
|
+
:state => 'CA',
|
48
|
+
:country => 'US',
|
49
|
+
:zip => '90210',
|
50
|
+
:phone => "(555)555-5555"
|
51
|
+
}
|
52
|
+
|
39
53
|
@canadian_address = {
|
40
54
|
:name => 'Johnny Bouchard',
|
41
55
|
:address1 => '100 Canuck St',
|
@@ -56,12 +70,12 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
56
70
|
end
|
57
71
|
|
58
72
|
def test_get_default_fulfillment_gateway
|
59
|
-
assert_equal AmazonMarketplaceWebService::ENDPOINTS[:us], @service.endpoint
|
73
|
+
assert_equal ActiveFulfillment::AmazonMarketplaceWebService::ENDPOINTS[:us], @service.endpoint
|
60
74
|
end
|
61
75
|
|
62
76
|
def test_create_service_with_different_fulfillment_gateway
|
63
|
-
service = AmazonMarketplaceWebService.new(:login => 'l', :password => 'p', :endpoint => :jp)
|
64
|
-
assert_equal AmazonMarketplaceWebService::ENDPOINTS[:jp], service.endpoint
|
77
|
+
service = ActiveFulfillment::AmazonMarketplaceWebService.new(:login => 'l', :password => 'p', :endpoint => :jp)
|
78
|
+
assert_equal ActiveFulfillment::AmazonMarketplaceWebService::ENDPOINTS[:jp], service.endpoint
|
65
79
|
end
|
66
80
|
|
67
81
|
def test_build_basic_api_query
|
@@ -74,9 +88,9 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
74
88
|
opts = @service.build_basic_api_query(options)
|
75
89
|
assert_equal expected_keys.sort, opts.keys.map(&:to_s).sort
|
76
90
|
assert_equal "l", opts["AWSAccessKeyId"]
|
77
|
-
assert_equal AmazonMarketplaceWebService::SIGNATURE_VERSION, opts["SignatureVersion"]
|
78
|
-
assert_equal "Hmac#{AmazonMarketplaceWebService::SIGNATURE_METHOD}", opts["SignatureMethod"]
|
79
|
-
assert_equal AmazonMarketplaceWebService::VERSION, opts["Version"]
|
91
|
+
assert_equal ActiveFulfillment::AmazonMarketplaceWebService::SIGNATURE_VERSION, opts["SignatureVersion"]
|
92
|
+
assert_equal "Hmac#{ActiveFulfillment::AmazonMarketplaceWebService::SIGNATURE_METHOD}", opts["SignatureMethod"]
|
93
|
+
assert_equal ActiveFulfillment::AmazonMarketplaceWebService::VERSION, opts["Version"]
|
80
94
|
end
|
81
95
|
|
82
96
|
def test_build_inventory_list_request
|
@@ -93,7 +107,7 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
93
107
|
end
|
94
108
|
|
95
109
|
def test_create_signature
|
96
|
-
service = AmazonMarketplaceWebService.new(:login => "0PExampleR2", :password => "sekrets")
|
110
|
+
service = ActiveFulfillment::AmazonMarketplaceWebService.new(:login => "0PExampleR2", :password => "sekrets")
|
97
111
|
expected_signature = "39XxH6iKLysjjDmWZSkyr2z8iSxfECHBYE1Pd0Qqpwo%3D"
|
98
112
|
options = {
|
99
113
|
"AWSAccessKeyId" => "0PExampleR2",
|
@@ -107,16 +121,23 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
107
121
|
"Version" => "2009-01-01"
|
108
122
|
}
|
109
123
|
|
110
|
-
uri = URI.parse("https://#{AmazonMarketplaceWebService::ENDPOINTS[:us]}")
|
124
|
+
uri = URI.parse("https://#{ActiveFulfillment::AmazonMarketplaceWebService::ENDPOINTS[:us]}")
|
111
125
|
|
112
126
|
assert_equal expected_signature, service.sign(:POST, uri, options)
|
113
127
|
end
|
114
128
|
|
115
129
|
def test_verify_amazon_response
|
116
|
-
service = AmazonMarketplaceWebService.new(:login => "AKIAFJPPO5KLY6G4XO7Q", :password => "aaa")
|
117
|
-
|
118
|
-
|
119
|
-
|
130
|
+
service = ActiveFulfillment::AmazonMarketplaceWebService.new(:login => "AKIAFJPPO5KLY6G4XO7Q", :password => "aaa")
|
131
|
+
post_params = {
|
132
|
+
AWSAccessKeyId: "AKIAFJPPO5KLY6G4XO7Q",
|
133
|
+
Marketplace: "ATVPDKIKX0DER",
|
134
|
+
Merchant: "A047950713KM6AGKQCBRD",
|
135
|
+
SignatureMethod: "HmacSHA256",
|
136
|
+
SignatureVersion: "2",
|
137
|
+
Signature: "b0hxWov1RfBOqNk77UDfNRRZmf3tkdM7vuNa/olfnWg=",
|
138
|
+
SignedString: "This should be ignored."
|
139
|
+
}
|
140
|
+
assert service.amazon_request?("POST", "https://www.vendor.com/mwsApp1", "/orders/listRecentOrders.jsp?sessionId=123", post_params)
|
120
141
|
end
|
121
142
|
|
122
143
|
def test_build_address
|
@@ -147,6 +168,10 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
147
168
|
assert_equal expected_items, @service.build_address(@commercial_address)
|
148
169
|
end
|
149
170
|
|
171
|
+
def test_build_address_truncates_name_to_length
|
172
|
+
assert_equal "Company Overflow Name Incorporated LLC - Mister Lo", @service.build_address(@long_address)["DestinationAddress.Name"]
|
173
|
+
end
|
174
|
+
|
150
175
|
def test_build_address_upcases_postal_code
|
151
176
|
address = @service.build_address(@canadian_address)
|
152
177
|
assert_equal address["DestinationAddress.PostalCode"], "H0H0H0"
|
@@ -184,11 +209,11 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
184
209
|
end
|
185
210
|
|
186
211
|
def test_integrated_registration_url_creation
|
187
|
-
service = AmazonMarketplaceWebService.new(:login => "AKIAFJPPO5KLY6G4XO7Q", :password => "aaa", :app_id => "1014f5ad-c359-4e86-8e50-bb8f8e431a9")
|
212
|
+
service = ActiveFulfillment::AmazonMarketplaceWebService.new(:login => "AKIAFJPPO5KLY6G4XO7Q", :password => "aaa", :app_id => "1014f5ad-c359-4e86-8e50-bb8f8e431a9")
|
188
213
|
options = {
|
189
214
|
"returnPathAndParameters" => "/orders/listRecentOrders.jsp?sessionId=123"
|
190
215
|
}
|
191
|
-
expected_registration_url = "#{AmazonMarketplaceWebService::REGISTRATION_URI.to_s}?AWSAccessKeyId=AKIAFJPPO5KLY6G4XO7Q&SignatureMethod=HmacSHA256&SignatureVersion=2&id=1014f5ad-c359-4e86-8e50-bb8f8e431a9&returnPathAndParameters=%2Forders%2FlistRecentOrders.jsp%3FsessionId%3D123&Signature=zpZyHd8rMf5gg5rpO5ri5RGUi0kks03ZkhAtPm4npVk%3D"
|
216
|
+
expected_registration_url = "#{ActiveFulfillment::AmazonMarketplaceWebService::REGISTRATION_URI.to_s}?AWSAccessKeyId=AKIAFJPPO5KLY6G4XO7Q&SignatureMethod=HmacSHA256&SignatureVersion=2&id=1014f5ad-c359-4e86-8e50-bb8f8e431a9&returnPathAndParameters=%2Forders%2FlistRecentOrders.jsp%3FsessionId%3D123&Signature=zpZyHd8rMf5gg5rpO5ri5RGUi0kks03ZkhAtPm4npVk%3D"
|
192
217
|
assert_equal expected_registration_url, service.registration_url(options)
|
193
218
|
end
|
194
219
|
|
@@ -213,7 +238,7 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
213
238
|
|
214
239
|
def test_invalid_arguments
|
215
240
|
http_response = build_mock_response(invalid_params_response, "", 500)
|
216
|
-
@service.expects(:ssl_post).raises(
|
241
|
+
@service.expects(:ssl_post).raises(ActiveUtils::ResponseError.new(http_response))
|
217
242
|
response = @service.fulfill('12345678', @address, @line_items, @options)
|
218
243
|
assert !response.success?
|
219
244
|
assert_equal "MalformedInput: timestamp must follow ISO8601", response.params['response_comment']
|
@@ -221,12 +246,12 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
221
246
|
|
222
247
|
def test_missing_order_date
|
223
248
|
@options.delete(:order_date)
|
224
|
-
|
249
|
+
assert_raises(ArgumentError) { @service.fulfill('12345678', @address, @line_items, @options) }
|
225
250
|
end
|
226
251
|
|
227
252
|
def test_missing_shipping_method
|
228
253
|
@options.delete(:shipping_method)
|
229
|
-
|
254
|
+
assert_raises(ArgumentError) { @service.fulfill('12345678', @address, @line_items, @options) }
|
230
255
|
end
|
231
256
|
|
232
257
|
def test_get_service_status
|
@@ -239,6 +264,12 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
239
264
|
def test_get_inventory
|
240
265
|
@service.expects(:ssl_post).returns(xml_fixture('amazon_mws/inventory_list_inventory_supply'))
|
241
266
|
|
267
|
+
@service.class.logger.expects(:info).with do |message|
|
268
|
+
assert_match /ListInventorySupplyResult/, message
|
269
|
+
assert /MWSAuthToken/ !~ message
|
270
|
+
assert /AWSAccessKeyId/ !~ message
|
271
|
+
end
|
272
|
+
|
242
273
|
response = @service.fetch_stock_levels
|
243
274
|
assert response.success?
|
244
275
|
assert_equal 202, response.stock_levels['GN-00-01A']
|
@@ -273,7 +304,7 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
273
304
|
http_response = build_mock_response(response_from_503, "", 503)
|
274
305
|
@service.expects(:ssl_post).with() { |uri, query, headers|
|
275
306
|
query.include?('ListInventorySupplyByNextToken') && query.include?('NextToken')
|
276
|
-
}.raises(
|
307
|
+
}.raises(ActiveUtils::ResponseError.new(http_response))
|
277
308
|
|
278
309
|
response = @service.fetch_stock_levels
|
279
310
|
assert !response.success?
|
@@ -328,7 +359,7 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
328
359
|
|
329
360
|
@service.expects(:ssl_post).times(3).
|
330
361
|
returns(xml_fixture('amazon_mws/fulfillment_get_fulfillment_order')).
|
331
|
-
raises(
|
362
|
+
raises(ActiveUtils::ResponseError.new(response)).
|
332
363
|
returns(xml_fixture('amazon_mws/fulfillment_get_fulfillment_order_2'))
|
333
364
|
|
334
365
|
response = @service.fetch_tracking_numbers(['extern_id_1154539615776', 'dafdfafsdafdafasdfa', 'extern_id_1154539615777'])
|
@@ -344,7 +375,7 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
344
375
|
|
345
376
|
@service.expects(:ssl_post).twice.
|
346
377
|
returns(xml_fixture('amazon_mws/fulfillment_get_fulfillment_order')).
|
347
|
-
raises(
|
378
|
+
raises(ActiveUtils::ResponseError.new(response))
|
348
379
|
|
349
380
|
response = @service.fetch_tracking_numbers(['extern_id_1154539615776', 'ERROR', 'extern_id_1154539615777'])
|
350
381
|
assert !response.success?
|
@@ -353,7 +384,7 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
353
384
|
|
354
385
|
def test_404_error
|
355
386
|
http_response = build_mock_response(response_from_404, "Not Found", "404")
|
356
|
-
@service.expects(:ssl_post).raises(
|
387
|
+
@service.expects(:ssl_post).raises(ActiveUtils::ResponseError.new(http_response))
|
357
388
|
|
358
389
|
response = @service.fulfill('987654321', @address, @line_items, @options)
|
359
390
|
assert !response.success?
|
@@ -366,9 +397,8 @@ class AmazonMarketplaceWebServiceTest < Test::Unit::TestCase
|
|
366
397
|
|
367
398
|
def test_building_address_skips_nil_values
|
368
399
|
@address[:address2] = nil
|
369
|
-
|
370
|
-
|
371
|
-
end
|
400
|
+
hash = @service.send(:build_address, @address)
|
401
|
+
refute hash.key?("DestinationAddress.Line2")
|
372
402
|
end
|
373
403
|
|
374
404
|
def test_building_a_full_query_does_not_cause_query_to_fail
|