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