require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
require File.expand_path(File.dirname(__FILE__) + "/client_api/spec_helper")

# NEXT_MAJOR_VERSION remove these tests
# SamsungPayCard has been deprecated
xdescribe Braintree::SamsungPayCard do
  it "can create from payment method nonce" do
    customer = Braintree::Customer.create!

    result = Braintree::PaymentMethod.create(
      :payment_method_nonce => Braintree::Test::Nonce::SamsungPayDiscover,
      :customer_id => customer.id,
      :cardholder_name => "Jenny Block",
      :billing_address => {
          :first_name => "New First Name",
          :last_name => "New Last Name",
          :company => "New Company",
          :street_address => "123 New St",
          :extended_address => "Apt New",
          :locality => "New City",
          :region => "New State",
          :postal_code => "56789",
          :country_name => "United States of America"
      },
    )
    expect(result).to be_success

    samsung_pay_card = result.payment_method
    expect(samsung_pay_card).to be_a(Braintree::SamsungPayCard)
    expect(samsung_pay_card.billing_address).not_to be_nil
    expect(samsung_pay_card.bin).not_to be_nil
    expect(samsung_pay_card.cardholder_name).not_to be_nil
    expect(samsung_pay_card.card_type).not_to be_nil
    expect(samsung_pay_card.commercial).not_to be_nil
    expect(samsung_pay_card.country_of_issuance).not_to be_nil
    expect(samsung_pay_card.created_at).not_to be_nil
    expect(samsung_pay_card.customer_id).not_to be_nil
    expect(samsung_pay_card.customer_location).not_to be_nil
    expect(samsung_pay_card.debit).not_to be_nil
    expect(samsung_pay_card.default?).not_to be_nil
    expect(samsung_pay_card.durbin_regulated).not_to be_nil
    expect(samsung_pay_card.expiration_date).not_to be_nil
    expect(samsung_pay_card.expiration_month).not_to be_nil
    expect(samsung_pay_card.expiration_year).not_to be_nil
    expect(samsung_pay_card.expired?).not_to be_nil
    expect(samsung_pay_card.healthcare).not_to be_nil
    expect(samsung_pay_card.image_url).not_to be_nil
    expect(samsung_pay_card.issuing_bank).not_to be_nil
    expect(samsung_pay_card.last_4).not_to be_nil
    expect(samsung_pay_card.payroll).not_to be_nil
    expect(samsung_pay_card.prepaid).not_to be_nil
    expect(samsung_pay_card.product_id).not_to be_nil
    expect(samsung_pay_card.source_card_last_4).not_to be_nil
    expect(samsung_pay_card.subscriptions).not_to be_nil
    expect(samsung_pay_card.token).not_to be_nil
    expect(samsung_pay_card.unique_number_identifier).not_to be_nil
    expect(samsung_pay_card.updated_at).not_to be_nil

    customer = Braintree::Customer.find(customer.id)
    expect(customer.samsung_pay_cards.size).to eq(1)
    expect(customer.samsung_pay_cards.first).to eq(samsung_pay_card)
  end

  it "returns cardholder_name and billing_address" do
    customer = Braintree::Customer.create!

    result = Braintree::PaymentMethod.create(
      :payment_method_nonce => Braintree::Test::Nonce::SamsungPayDiscover,
      :customer_id => customer.id,
      :cardholder_name => "Jenny Block",
      :billing_address => {
          :first_name => "New First Name",
          :last_name => "New Last Name",
          :company => "New Company",
          :street_address => "123 New St",
          :extended_address => "Apt New",
          :locality => "New City",
          :region => "New State",
          :postal_code => "56789",
          :country_name => "United States of America"
      },
    )

    expect(result).to be_success
    expect(result.payment_method.cardholder_name).to eq("Jenny Block")

    address = result.payment_method.billing_address
    expect(address.first_name).to eq("New First Name")
    expect(address.last_name).to eq("New Last Name")
    expect(address.company).to eq("New Company")
    expect(address.street_address).to eq("123 New St")
    expect(address.extended_address).to eq("Apt New")
    expect(address.locality).to eq("New City")
    expect(address.region).to eq("New State")
    expect(address.postal_code).to eq("56789")
  end

  it "can search for transactions" do
    transaction_create_result = Braintree::Transaction.sale(
      :payment_method_nonce => Braintree::Test::Nonce::SamsungPayDiscover,
      :amount => "47.00",
    )
    expect(transaction_create_result).to be_success
    transaction_id = transaction_create_result.transaction.id

    search_results = Braintree::Transaction.search do |search|
      search.id.is transaction_id
      search.payment_instrument_type.is Braintree::PaymentInstrumentType::SamsungPayCard
    end
    expect(search_results.first.id).to eq(transaction_id)
  end

  it "can create transaction from nonce and vault" do
    customer = Braintree::Customer.create!

    result = Braintree::Transaction.sale(
      :payment_method_nonce => Braintree::Test::Nonce::SamsungPayDiscover,
      :customer_id => customer.id,
      :amount => "47.00",
      :options => {:store_in_vault => true},
    )
    expect(result).to be_success

    samsung_pay_card_details = result.transaction.samsung_pay_card_details
    expect(samsung_pay_card_details.bin).not_to be_nil
    expect(samsung_pay_card_details.card_type).not_to be_nil
    expect(samsung_pay_card_details.commercial).not_to be_nil
    expect(samsung_pay_card_details.country_of_issuance).not_to be_nil
    expect(samsung_pay_card_details.customer_location).not_to be_nil
    expect(samsung_pay_card_details.debit).not_to be_nil
    expect(samsung_pay_card_details.durbin_regulated).not_to be_nil
    expect(samsung_pay_card_details.expiration_date).not_to be_nil
    expect(samsung_pay_card_details.expiration_month).not_to be_nil
    expect(samsung_pay_card_details.expiration_year).not_to be_nil
    expect(samsung_pay_card_details.healthcare).not_to be_nil
    expect(samsung_pay_card_details.image_url).not_to be_nil
    expect(samsung_pay_card_details.issuing_bank).not_to be_nil
    expect(samsung_pay_card_details.last_4).not_to be_nil
    expect(samsung_pay_card_details.payroll).not_to be_nil
    expect(samsung_pay_card_details.prepaid).not_to be_nil
    expect(samsung_pay_card_details.product_id).not_to be_nil
    expect(samsung_pay_card_details.source_card_last_4).not_to be_nil
    expect(samsung_pay_card_details.source_card_last_4).to eq("3333")
    expect(samsung_pay_card_details.token).not_to be_nil
  end
end