require 'test_helper'
class FedExTest < ActiveSupport::TestCase
include ActiveShipping::Test::Fixtures
def setup
@carrier = FedEx.new(key: '1111', password: '2222', account: '3333', login: '4444')
end
def test_initialize_options_requirements
assert_raises(ArgumentError) { FedEx.new }
assert_raises(ArgumentError) { FedEx.new(login: '999999999') }
assert_raises(ArgumentError) { FedEx.new(password: '7777777') }
FedEx.new(key: '999999999', password: '7777777', account: '123', login: '123')
end
def test_business_days
today = DateTime.parse("Tue 12 Mar 2013 00:00:00-0400")
Timecop.freeze(today) do
assert_equal DateTime.parse("Wed 13 Mar 2013 00:00:00-0400"), @carrier.send(:business_days_from, today, 1)
assert_equal DateTime.parse("Fri 15 Mar 2013 00:00:00-0400"), @carrier.send(:business_days_from, today, 3)
assert_equal DateTime.parse("Mon 18 Mar 2013 00:00:00-0400"), @carrier.send(:business_days_from, today, 4)
assert_equal DateTime.parse("Tue 19 Mar 2013 00:00:00-0400"), @carrier.send(:business_days_from, today, 5)
end
end
def test_home_delivery_business_days
today = DateTime.parse("Tue 12 Mar 2013 00:00:00-0400")
Timecop.freeze(today) do
assert_equal DateTime.parse("Wed 13 Mar 2013 00:00:00-0400"), @carrier.send(:business_days_from, today, 1, true)
assert_equal DateTime.parse("Fri 15 Mar 2013 00:00:00-0400"), @carrier.send(:business_days_from, today, 3, true)
assert_equal DateTime.parse("Sat 16 Mar 2013 00:00:00-0400"), @carrier.send(:business_days_from, today, 4, true)
assert_equal DateTime.parse("Tue 19 Mar 2013 00:00:00-0400"), @carrier.send(:business_days_from, today, 5, true)
end
end
def test_turn_around_time_default
mock_response = xml_fixture('fedex/ottawa_to_beverly_hills_rate_response').gsub('2011-07-29', '')
today = Date.parse("Mon 11 Mar 2013")
Timecop.freeze(today) do
delivery_date = Date.today + 7.days # FIVE_DAYS in fixture response, plus weekend
timestamp = Time.now.iso8601
@carrier.expects(:commit).with do |request, _options|
parsed_response = Hash.from_xml(request)
parsed_response['RateRequest']['RequestedShipment']['ShipTimestamp'] == timestamp
end.returns(mock_response)
destination = ActiveShipping::Location.from(location_fixtures[:beverly_hills].to_hash, address_type: :commercial)
response = @carrier.find_rates location_fixtures[:ottawa], destination, package_fixtures[:book], test: true
assert_equal [delivery_date, delivery_date], response.rates.first.delivery_range
end
end
def test_turn_around_time
mock_response = xml_fixture('fedex/ottawa_to_beverly_hills_rate_response').gsub('2011-07-29', '')
Timecop.freeze(DateTime.new(2013, 3, 11)) do
delivery_date = Date.today + 8.days # FIVE_DAYS in fixture response, plus turn_around_time, plus weekend
timestamp = (Time.now + 1.day).iso8601
@carrier.expects(:commit).with do |request, _options|
parsed_response = Hash.from_xml(request)
parsed_response['RateRequest']['RequestedShipment']['ShipTimestamp'] == timestamp
end.returns(mock_response)
destination = ActiveShipping::Location.from(location_fixtures[:beverly_hills].to_hash, address_type: :commercial)
response = @carrier.find_rates location_fixtures[:ottawa], destination, package_fixtures[:book], turn_around_time: 24, test: true
assert_equal [delivery_date, delivery_date], response.rates.first.delivery_range
end
end
def test_transaction_id_sent_as_customer_transaction_id
transaction_id = '9999-test'
@carrier = FedEx.new(key: '1111', password: '2222', account: '3333', login: '4444', transaction_id: transaction_id)
@carrier.expects(:commit).with do |request, _options|
parsed_request = Hash.from_xml(request)
parsed_request['RateRequest']['TransactionDetail']['CustomerTransactionId'] == transaction_id
end.returns(xml_fixture('fedex/ottawa_to_beverly_hills_rate_response'))
destination = ActiveShipping::Location.from(location_fixtures[:beverly_hills].to_hash, address_type: :commercial)
@carrier.find_rates location_fixtures[:ottawa], destination, package_fixtures[:book], test: true
end
def test_building_request_with_address_type_commercial_should_not_include_residential
mock_response = xml_fixture('fedex/ottawa_to_beverly_hills_rate_response')
expected_request = xml_fixture('fedex/ottawa_to_beverly_hills_commercial_rate_request')
@carrier.expects(:ship_timestamp).returns(Time.parse("2009-07-20T12:01:55-04:00").in_time_zone('US/Eastern'))
@carrier.expects(:commit).with { |request, test_mode| Hash.from_xml(request) == Hash.from_xml(expected_request) && test_mode }.returns(mock_response)
destination = ActiveShipping::Location.from(location_fixtures[:beverly_hills].to_hash, address_type: :commercial)
@carrier.find_rates(location_fixtures[:ottawa],
destination,
package_fixtures.values_at(:book, :wii), test: true, saturday_delivery: true)
end
def test_building_request_with_no_saturday_delivery_should_not_have_saturday_option_set
mock_response = xml_fixture('fedex/ottawa_to_beverly_hills_rate_response')
expected_request = xml_fixture('fedex/ottawa_to_beverly_hills_no_saturday_rate_request')
@carrier.expects(:ship_timestamp).returns(Time.parse("2009-07-20T12:01:55-04:00").in_time_zone('US/Eastern'))
@carrier.expects(:commit).with { |request, test_mode| Hash.from_xml(request) == Hash.from_xml(expected_request) && test_mode }.returns(mock_response)
destination = ActiveShipping::Location.from(location_fixtures[:beverly_hills].to_hash)
@carrier.find_rates(location_fixtures[:ottawa],
destination,
package_fixtures.values_at(:book, :wii), test: true)
end
def test_building_freight_request_and_parsing_response
expected_request = xml_fixture('fedex/freight_rate_request')
mock_response = xml_fixture('fedex/freight_rate_response')
@carrier.expects(:ship_timestamp).returns(Time.parse("2013-11-01T14:04:01-07:00").in_time_zone('US/Pacific'))
@carrier.expects(:commit).with { |request, test_mode| Hash.from_xml(request) == Hash.from_xml(expected_request) && test_mode }.returns(mock_response)
# shipping and billing addresses below are provided by fedex test credentials
shipping_location = Location.new(address1: '1202 Chalet Ln',
address2: 'Do Not Delete - Test Account',
city: 'Harrison',
state: 'AR',
postal_code: '72601',
country: 'US')
billing_location = Location.new(address1: '2000 Freight LTL Testing',
address2: 'Do Not Delete - Test Account',
city: 'Harrison',
state: 'AR',
postal_code: '72601',
country: 'US')
freight_options = {
account: '5555',
billing_location: billing_location,
payment_type: 'SENDER',
freight_class: 'CLASS_050',
packaging: 'PALLET',
role: 'SHIPPER'
}
response = @carrier.find_rates(shipping_location,
location_fixtures[:ottawa],
[package_fixtures[:wii]], freight: freight_options, test: true, saturday_delivery: true)
assert_equal ["FedEx Freight Economy", "FedEx Freight Priority"], response.rates.map(&:service_name)
assert_equal [66263, 68513], response.rates.map(&:price)
assert response.success?, response.message
assert_instance_of Hash, response.params
assert_instance_of String, response.xml
assert_instance_of Array, response.rates
assert response.rates.length > 0, "There should've been more than 0 rates returned"
rate = response.rates.first
assert_equal 'FedEx', rate.carrier
assert_equal 'USD', rate.currency
assert_kind_of Integer, rate.total_price
assert_kind_of Integer, rate.price
assert_instance_of String, rate.service_name
assert_instance_of String, rate.service_code
assert_instance_of Array, rate.package_rates
assert_equal [package_fixtures[:wii]], rate.packages
package_rate = rate.package_rates.first
assert_instance_of Hash, package_rate
assert_instance_of Package, package_rate[:package]
assert_nil package_rate[:rate]
end
def test_building_request_and_parsing_response
expected_request = xml_fixture('fedex/ottawa_to_beverly_hills_rate_request')
mock_response = xml_fixture('fedex/ottawa_to_beverly_hills_rate_response')
@carrier.expects(:ship_timestamp).returns(Time.parse("2009-07-20T12:01:55-04:00").in_time_zone('US/Eastern'))
@carrier.expects(:commit).with { |request, test_mode| Hash.from_xml(request) == Hash.from_xml(expected_request) && test_mode }.returns(mock_response)
response = @carrier.find_rates(location_fixtures[:ottawa],
location_fixtures[:beverly_hills],
package_fixtures.values_at(:book, :wii), test: true, saturday_delivery: true)
assert_equal ["FedEx Ground"], response.rates.map(&:service_name)
assert_equal [3836], response.rates.map(&:price)
assert response.success?, response.message
assert_instance_of Hash, response.params
assert_instance_of String, response.xml
assert_instance_of Array, response.rates
assert response.rates.length > 0, "There should've been more than 0 rates returned"
rate = response.rates.first
assert_equal 'FedEx', rate.carrier
assert_equal 'CAD', rate.currency
assert_kind_of Integer, rate.total_price
assert_kind_of Integer, rate.price
assert_instance_of String, rate.service_name
assert_instance_of String, rate.service_code
assert_instance_of Array, rate.package_rates
assert_equal package_fixtures.values_at(:book, :wii), rate.packages
package_rate = rate.package_rates.first
assert_instance_of Hash, package_rate
assert_instance_of Package, package_rate[:package]
assert_nil package_rate[:rate]
end
def test_parsing_response_with_no_rate_reply
expected_request = xml_fixture('fedex/ottawa_to_beverly_hills_rate_request')
mock_response = xml_fixture('fedex/unknown_fedex_document_reply')
@carrier.expects(:ship_timestamp).returns(Time.parse("2009-07-20T12:01:55-04:00").in_time_zone('US/Eastern'))
@carrier.expects(:commit).with { |request, test_mode| Hash.from_xml(request) == Hash.from_xml(expected_request) && test_mode }.returns(mock_response)
exception = assert_raises(ActiveShipping::ResponseContentError) do
@carrier.find_rates(location_fixtures[:ottawa],
location_fixtures[:beverly_hills],
package_fixtures.values_at(:book, :wii), test: true, saturday_delivery: true)
end
message = "Invalid document \n\n#{mock_response}"
assert_equal message, exception.message
end
def test_parsing_response_with_no_system_code_for_one_rate_does_not_crash
mock_response = xml_fixture('fedex/freight_rate_response').gsub('FEDEX_FREIGHT_ECONOMY', '')
@carrier.expects(:commit).returns(mock_response)
@carrier.logger = Logger.new(StringIO.new)
@carrier.logger.expects(:warn).once.with("[FedexParseRateError] Some fields where missing in the response: #{mock_response}")
rates = @carrier.find_rates(location_fixtures[:ottawa], location_fixtures[:beverly_hills], package_fixtures.values_at(:book, :wii), test: true)
assert rates.rates.length == 1
assert_equal rates.rates[0].service_code, 'FEDEX_FREIGHT_PRIORITY'
end
def test_parsing_response_with_no_system_code_on_any_shipping_rate
mock_response = xml_fixture('fedex/freight_rate_response').gsub('FEDEX_FREIGHT_ECONOMY', '').gsub('FEDEX_FREIGHT_PRIORITY', '')
@carrier.expects(:commit).returns(mock_response)
@carrier.logger = Logger.new(StringIO.new)
@carrier.logger.expects(:warn).once.with("[FedexParseRateError] Some fields where missing in the response: #{mock_response}")
exception = assert_raises(ActiveShipping::ResponseError) do
@carrier.find_rates(location_fixtures[:ottawa], location_fixtures[:beverly_hills], package_fixtures.values_at(:book, :wii), test: true)
end
message = "The response from the carrier contained errors and could not be treated"
assert_equal exception.message, message
end
def test_service_name_for_code
FedEx::SERVICE_TYPES.each do |capitalized_name, readable_name|
assert_equal readable_name, FedEx.service_name_for_code(capitalized_name)
end
end
def test_service_name_for_code_handles_yet_unknown_codes
assert_equal "FedEx Express Saver Saturday Delivery", FedEx.service_name_for_code('FEDEX_EXPRESS_SAVER_SATURDAY_DELIVERY')
assert_equal "FedEx Some Weird Rate", FedEx.service_name_for_code('SOME_WEIRD_RATE')
end
def test_delivery_range_based_on_delivery_date
mock_response = xml_fixture('fedex/ottawa_to_beverly_hills_rate_response').gsub('CAD', 'UKL')
@carrier.expects(:commit).returns(mock_response)
rate_estimates = @carrier.find_rates(location_fixtures[:ottawa],
location_fixtures[:beverly_hills],
package_fixtures.values_at(:book, :wii), test: true)
delivery_date = Date.new(2011, 7, 29)
assert_equal delivery_date, rate_estimates.rates[0].delivery_date
assert_equal [delivery_date] * 2, rate_estimates.rates[0].delivery_range
end
def test_delivery_date_from_transit_time
mock_response = xml_fixture('fedex/raterequest_reply').gsub('CAD', 'UKL')
@carrier.expects(:commit).returns(mock_response)
today = Date.parse("Fri 15 Mar 2013")
Timecop.freeze(today) do
rate_estimates = @carrier.find_rates(location_fixtures[:ottawa],
location_fixtures[:beverly_hills],
package_fixtures.values_at(:book, :wii), test: true)
# the above fixture will specify a transit time of 5 days, with 2 weekend days accounted for
delivery_date = Date.today + 5 + 2
assert_equal delivery_date, rate_estimates.rates[0].delivery_date
end
end
def test_delivery_date_from_ground_home_transit_time
mock_response = xml_fixture('fedex/raterequest_response_with_ground_home_delivery')
@carrier.expects(:commit).returns(mock_response)
today = Date.parse("Thursday 04 Jun 2015")
Timecop.freeze(today) do
rate_estimates = @carrier.find_rates(location_fixtures[:ottawa],
location_fixtures[:beverly_hills],
package_fixtures.values_at(:book, :wii), test: true)
# the above fixture will specify a transit time of 3 days
# for ground home, sunday and monday are non-biz days
# so it is delivered on Tuesday
delivery_date = Date.today + 3 + 2
assert_equal delivery_date, rate_estimates.rates.first.delivery_date
end
end
def test_delivery_date_from_ground_home_transit_time_on_saturday
mock_response = xml_fixture('fedex/raterequest_response_with_ground_home_delivery')
@carrier.expects(:commit).returns(mock_response)
today = Date.parse("Wed 03 Jun 2015") #Wednesday
Timecop.freeze(today) do
rate_estimates = @carrier.find_rates(location_fixtures[:ottawa],
location_fixtures[:beverly_hills],
package_fixtures.values_at(:book, :wii), test: true)
# the above fixture will specify a transit time of 3 days
# since ground home delivers on Saturday, there is no delay
delivery_date = Date.today + 3
assert_equal delivery_date, rate_estimates.rates.first.delivery_date
end
end
def test_failure_to_parse_invalid_xml_results_in_a_useful_error
mock_response = xml_fixture('fedex/invalid_fedex_reply')
@carrier.expects(:commit).returns(mock_response)
assert_raises ActiveShipping::ResponseContentError do
@carrier.find_rates(
location_fixtures[:ottawa],
location_fixtures[:beverly_hills],
package_fixtures.values_at(:book, :wii),
test: true
)
end
end
def test_parsing_response_without_notifications
mock_response = xml_fixture('fedex/reply_without_notifications')
@carrier.expects(:commit).returns(mock_response)
response = @carrier.find_rates(
location_fixtures[:ottawa],
location_fixtures[:beverly_hills],
package_fixtures.values_at(:book, :wii),
test: true
)
assert_predicate response, :success?
end
### find_tracking_info
def test_response_transient_failure
mock_response = xml_fixture('fedex/tracking_response_failure_code_9045')
@carrier.expects(:commit).returns(mock_response)
error = assert_raises(ActiveShipping::ShipmentNotFound) do
@carrier.find_tracking_info('123456789013')
end
msg = 'Sorry, we are unable to process your tracking request. Please retry later, or contact Customer Service at 1.800.Go.FedEx(R) 800.463.3339.'
assert_equal msg, error.message
end
def test_response_with_failure_nested_in_track_details
mock_response = xml_fixture('fedex/tracking_response_failure_code_9080')
@carrier.expects(:commit).returns(mock_response)
error = assert_raises(ActiveShipping::ResponseContentError) do
@carrier.find_tracking_info('123456789013')
end
msg = 'Sorry, we are unable to process your tracking request. Please contact Customer Service at 1.800.Go.FedEx(R) 800.463.3339.'
assert_equal msg, error.message
end
def test_response_with_failure_nested_in_completed_track_details
mock_response = xml_fixture('fedex/tracking_response_unable_to_process')
@carrier.expects(:commit).returns(mock_response)
error = assert_raises(ActiveShipping::ResponseError) do
@carrier.find_tracking_info('123456789013')
end
msg = 'FAILURE - 6330: Sorry, we are unable to process your tracking request. Please retry later, or contact Customer Service at 1.800.Go.FedEx(R) 800.463.3339.'
assert_equal msg, error.message
end
def test_tracking_info_for_delivered_with_signature
mock_response = xml_fixture('fedex/tracking_response_delivered_with_signature')
@carrier.expects(:commit).returns(mock_response)
response = @carrier.find_tracking_info('449044304137821')
assert_equal '449044304137821', response.tracking_number
assert_equal 'AVILLALON', response.delivery_signature
assert response.delivered?
refute response.exception?
assert_equal Date.parse('2013-12-30'), response.ship_time
assert_nil response.scheduled_delivery_date
assert_equal Time.parse('2014-01-02T18:23:29Z'), response.actual_delivery_date
origin_address = ActiveShipping::Location.new(
city: 'JEFFERSONVILLE',
country: 'US',
state: 'IN'
)
assert_equal origin_address.to_hash, response.origin.to_hash
destination_address = ActiveShipping::Location.new(
city: 'Miami',
country: 'US',
state: 'FL'
)
assert_equal destination_address.to_hash, response.destination.to_hash
assert_equal 11, response.shipment_events.length
assert_equal 'Delivered', response.latest_event.name
assert_equal 'PU', response.shipment_events.first.type_code
assert_equal 'OC', response.shipment_events.second.type_code
assert_equal 'AR', response.shipment_events.third.type_code
end
def test_tracking_info_for_delivered_at_door
mock_response = xml_fixture('fedex/tracking_response_delivered_at_door')
@carrier.expects(:commit).returns(mock_response)
response = @carrier.find_tracking_info('403934084723025')
assert_equal '403934084723025', response.tracking_number
assert response.delivered?
refute response.exception?
assert_equal 10, response.shipment_events.length
assert_equal 'PU', response.shipment_events.first.type_code
assert_equal 'OC', response.shipment_events.second.type_code
assert_equal 'AR', response.shipment_events.third.type_code
assert_equal 'Delivered', response.latest_event.name
assert_equal 'DL', response.latest_event.type_code
assert_nil response.delivery_signature
end
def test_state_degrades_to_unknown
mock_response = xml_fixture('fedex/tracking_response_with_blank_state')
@carrier.expects(:commit).returns(mock_response)
response = @carrier.find_tracking_info('798701052354')
destination_address = ActiveShipping::Location.new(
city: 'SAITAMA',
country: 'Japan',
state: 'unknown'
)
assert_equal destination_address.to_hash, response.destination.to_hash
end
def test_tracking_info_for_in_transit
mock_response = xml_fixture('fedex/tracking_response_in_transit')
@carrier.expects(:commit).returns(mock_response)
response = @carrier.find_tracking_info('123456789012')
refute response.delivered?
refute response.exception?
assert_equal '123456789012', response.tracking_number
assert_equal :fedex, response.carrier
assert_equal 'FedEx', response.carrier_name
assert_equal :in_transit, response.status
assert_equal 'IT', response.status_code
assert_equal "Package available for clearance", response.status_description
assert_nil response.delivery_signature
assert_equal Time.parse('2014-11-17T22:39:00+11:00'), response.ship_time
assert_nil response.scheduled_delivery_date
assert_nil response.actual_delivery_date
assert_nil response.origin
destination_address = ActiveShipping::Location.new(
city: 'GRAFTON',
country: 'AU',
state: 'ON'
)
assert_equal destination_address.to_hash, response.destination.to_hash
assert_equal 1, response.shipment_events.length
assert_equal 'In transit', response.latest_event.name
assert_equal 'IT', response.latest_event.type_code
end
def test_tracking_info_for_shipment_exception
mock_response = xml_fixture('fedex/tracking_response_shipment_exception')
@carrier.expects(:commit).returns(mock_response)
response = @carrier.find_tracking_info('957794015041323')
assert_equal '957794015041323', response.tracking_number
refute response.delivered?
assert response.exception?
assert_equal :exception, response.status
assert_equal "Unable to deliver", response.status_description
assert_equal Date.parse('2014-01-27'), response.ship_time
assert_nil response.scheduled_delivery_date
assert_nil response.actual_delivery_date
origin_address = ActiveShipping::Location.new(
city: 'AUSTIN',
country: 'US',
state: 'TX'
)
assert_equal origin_address.to_hash, response.origin.to_hash
destination_address = ActiveShipping::Location.new(
city: 'GOOSE CREEK',
country: 'US',
state: 'SC'
)
assert_equal destination_address.to_hash, response.destination.to_hash
assert_equal 8, response.shipment_events.length
assert_equal "Shipment exception", response.latest_event.name
assert_equal "SE", response.latest_event.type_code
end
def test_tracking_info_without_status
mock_response = xml_fixture('fedex/tracking_response_multiple_results')
@carrier.expects(:commit).returns(mock_response)
error = assert_raises(ActiveShipping::ResponseError) do
@carrier.find_tracking_info('123456789012')
end
msg = 'Multiple matches were found. Specify a unqiue identifier: 2456987000~123456789012~FX, 2456979001~123456789012~FX, 2456979000~123456789012~FX'
assert_equal msg, error.message
end
def test_tracking_info_with_unknown_tracking_number
mock_response = xml_fixture('fedex/tracking_response_not_found')
@carrier.expects(:commit).returns(mock_response)
error = assert_raises(ActiveShipping::ShipmentNotFound) do
@carrier.find_tracking_info('123456789013')
end
msg = 'This tracking number cannot be found. Please check the number or contact the sender.'
assert_equal msg, error.message
end
def test_tracking_info_with_bad_tracking_number
mock_response = xml_fixture('fedex/tracking_response_bad_tracking_number')
@carrier.expects(:commit).returns(mock_response)
assert_raises(ActiveShipping::ResponseError) do
@carrier.find_tracking_info('abc')
end
end
def test_tracking_info_with_uncovered_error
mock_response = xml_fixture('fedex/tracking_response_invalid_tracking_number')
@carrier.expects(:commit).returns(mock_response)
error = assert_raises(ActiveShipping::ResponseContentError) do
@carrier.find_tracking_info('123456789013')
end
msg = 'Invalid tracking numbers. Please check the following numbers and resubmit.'
assert_equal msg, error.message
end
def test_tracking_info_with_empty_status_detail
mock_response = xml_fixture('fedex/tracking_response_empty_status_detail')
@carrier.expects(:commit).returns(mock_response)
response = @carrier.find_tracking_info('123456789012')
assert_equal '123456789012', response.tracking_number
assert_nil response.status_code
assert_nil response.status
assert_nil response.status_description
assert_nil response.delivery_signature
assert_empty response.shipment_events
end
def test_tracking_info_with_missing_status_code
mock_response = xml_fixture('fedex/tracking_response_missing_status_code')
@carrier.expects(:commit).returns(mock_response)
response = @carrier.find_tracking_info('123456789012')
assert_equal '123456789012', response.tracking_number
assert_nil response.status_code
assert_nil response.status
assert_nil response.status_description
assert_nil response.delivery_signature
assert_empty response.shipment_events
end
### create_shipment
def test_create_shipment
confirm_response = xml_fixture('fedex/create_shipment_response')
@carrier.stubs(:commit).returns(confirm_response)
response = @carrier.create_shipment(
location_fixtures[:beverly_hills],
location_fixtures[:new_york],
package_fixtures.values_at(:chocolate_stuff),
test: true
)
# These assertions are to check that the xml fixture is extracted properly.
assert_equal 1, response.labels.count
assert_equal response.labels.first.tracking_number, "794637052920"
assert_equal response.labels.first.img_data.size, 8286
end
def test_create_shipment_signature_option
packages = package_fixtures.values_at(:chocolate_stuff)
packages.each { |p| p.options[:signature_option] = :indirect }
result = Nokogiri::XML(@carrier.send(:build_shipment_request,
location_fixtures[:beverly_hills],
location_fixtures[:annapolis],
packages,
test: true))
assert_equal result.search('SpecialServicesRequested/SpecialServiceTypes').text, "SIGNATURE_OPTION"
assert_equal result.search('SpecialServicesRequested/SignatureOptionDetail').text.strip, "INDIRECT"
end
def test_create_shipment_reference
packages = package_fixtures.values_at(:wii)
packages.each do |p|
p.options[:reference_numbers] = [
{ value: "FOO-123" },
{ type: "INVOICE_NUMBER", value: "BAR-456" }
]
end
result = Nokogiri::XML(@carrier.send(:build_shipment_request,
location_fixtures[:beverly_hills],
location_fixtures[:annapolis],
packages,
test: true))
assert_equal result.search('RequestedPackageLineItems/CustomerReferences[first()]/Value').text, "FOO-123"
assert_equal result.search('RequestedPackageLineItems/CustomerReferences[first()]/CustomerReferenceType').text, "CUSTOMER_REFERENCE"
assert_equal result.search('RequestedPackageLineItems/CustomerReferences[last()]/Value').text, "BAR-456"
assert_equal result.search('RequestedPackageLineItems/CustomerReferences[last()]/CustomerReferenceType').text, "INVOICE_NUMBER"
end
def test_create_shipment_label_format_option
packages = package_fixtures.values_at(:chocolate_stuff)
result = Nokogiri::XML(@carrier.send(:build_shipment_request,
location_fixtures[:beverly_hills],
location_fixtures[:annapolis],
packages,
label_format: 'ZPLII',
test: true))
assert_equal result.search('RequestedShipment/LabelSpecification/ImageType').text, "ZPLII"
end
def test_create_shipment_default_label_stock_type
packages = package_fixtures.values_at(:wii)
result = Nokogiri::XML(@carrier.send(:build_shipment_request,
location_fixtures[:beverly_hills],
location_fixtures[:annapolis],
packages,
test: true))
assert_equal result.search('RequestedShipment/LabelSpecification/LabelStockType').text, FedEx::DEFAULT_LABEL_STOCK_TYPE
end
def test_create_shipment_label_stock_type
label_stock_type = 'PAPER_4X6'
packages = package_fixtures.values_at(:wii)
result = Nokogiri::XML(@carrier.send(:build_shipment_request,
location_fixtures[:beverly_hills],
location_fixtures[:annapolis],
packages,
test: true,
label_stock_type: label_stock_type))
assert_equal result.search('RequestedShipment/LabelSpecification/LabelStockType').text, label_stock_type
end
def test_maximum_address_field_length
assert_equal 35, @carrier.maximum_address_field_length
end
end