require 'test_helper'

class RemoteUSPSReturnsTest < ActiveSupport::TestCase
  include ActiveShipping::Test::Credentials
  include ActiveShipping::Test::Fixtures

  def setup
    begin
      creds = credentials(:usps_returns)
      @carrier = USPSReturns.new
      @external_return_label_request =
        ExternalReturnLabelRequest.from_hash(
          :merchant_account_id => creds[:merchant_account_id],
          :mid => creds[:mid],
          :customer_name => 'Joe Dirt',
          :customer_address1 => '122 W Hudson St',
          :customer_address2 => 'Unit 2',
          :customer_city => 'New York',
          :customer_state => 'NY',
          :customer_zipcode => '10013',
          :label_format => 'No Instructions',
          :label_definition => '4X6',
          :recipient_bcc => 'test@gmail.com',
          :service_type_code => '020',
          :address_override_notification => 'true',
          :address_validation => 'true',
          :call_center_or_self_service => 'Customer'
        )
    rescue NoCredentialsFound => e
      skip(e.message)
    end
  end

  def test_external_return_label_request
    assert_silent do
      @carrier.external_return_label_request(@external_return_label_request, :test => true)
    end
  end

  def test_external_return_label_with_bad_account
    assert_raises ResponseError do
      @external_return_label_request.merchant_account_id = "1234"
      @carrier.external_return_label_request(@external_return_label_request, :test => true)
    end
  end

  def test_external_return_label_with_address_validation_false
    assert_silent do
      @external_return_label_request.address_validation = false
      @carrier.external_return_label_request(@external_return_label_request, :test => true)
    end
  end

  def test_external_return_label_with_address_validation_false_and_bad_address
    assert_silent do
      @external_return_label_request.address_validation = false
      @external_return_label_request.customer_state = 'NJ'
      @external_return_label_request.customer_zipcode = '08829'
      @carrier.external_return_label_request(@external_return_label_request, :test => true)
    end
  end

  def test_external_return_label_with_address_validation_true_and_bad_address
    assert_raises ResponseError do
      @external_return_label_request.address_validation = true
      @external_return_label_request.customer_state = 'NJ'
      @external_return_label_request.customer_zipcode = '08829'
      @carrier.external_return_label_request(@external_return_label_request, :test => true)
    end
  end

end