require 'test_helper'
class JamesAndJamesTest < Minitest::Test
def setup
ActiveFulfillment::Base.mode = :test
@service = ActiveFulfillment::JamesAndJamesService.new(subdomain: "client", key: "secret")
@options = {
:shipping_method => 'UPS Ground'
}
@address = { :name => 'Fred Brooks',
:address1 => '1234 Penny Lane',
:city => 'Jonsetown',
:state => 'NC',
:country => 'US',
:zip => '23456',
:email => 'buyer@jadedpallet.com'
}
@line_items = [
{sku: '9999', quantity: 25}
]
end
def test_missing_key
assert_raises(ArgumentError) do
ActiveFulfillment::JamesAndJamesService.new
end
end
def test_credentials_present
assert ActiveFulfillment::JamesAndJamesService.new(subdomain: "client", key: "secret")
end
def test_successful_fulfillment
@service.expects(:ssl_post).returns(successful_response)
@options[:billing_address] = @address
response = @service.fulfill('123456', @address, @line_items, @options)
assert response.success?
assert response.test?
end
def test_failed_fulfillment
@service.expects(:ssl_post).returns(failure_response)
@options[:billing_address] = @address
response = @service.fulfill('123456', @address, @line_items, @options)
assert !response.success?
assert response.test?
end
def test_stock_levels
@service.expects(:ssl_get).returns(inventory_response)
response = @service.fetch_stock_levels
assert response.success?
assert_equal 99, response.stock['AAA']
assert_equal 9, response.stock['BBB']
end
def test_garbage_response
@service.expects(:ssl_post).returns(garbage_response)
@options[:billing_address] = @address
response = @service.fulfill('123456', @address, @line_items, @options)
assert !response.success?
end
private
def successful_response
'{"success": true, "valid": true, "test": true}'
end
def failure_response
'{"success": false, "test": true}'
end
def garbage_response
'/XML/shippingTest.asp, line 39'
end
def inventory_response
'{"success": true, "stock": {"AAA": 99, "BBB": 9}, "test": true}'
end
end