require 'test_helper'

class RemoteListTransactionsTest < Test::Unit::TestCase

  def setup
    @environment = Spreedly::Environment.new(remote_test_environment_key, remote_test_access_secret)
  end

  def test_invalid_login
    assert_invalid_login do |environment|
      environment.list_transactions
    end
  end

  def test_successfully_list_transactions
    gateway_token = @environment.add_gateway(:test).token
    card_token = create_card_on(@environment).token

    t1 = @environment.purchase_on_gateway(gateway_token, card_token, 144)
    t2 = @environment.authorize_on_gateway(gateway_token, card_token, 444)
    t3 = @environment.capture_transaction(t2.token, amount: 22)

    first_twenty = @environment.list_transactions
    assert_equal 20, first_twenty.size
    assert_kind_of Spreedly::Model, first_twenty.first

    transactions = @environment.list_transactions(t1.token)
    assert_equal 2, transactions.size
    assert_kind_of(Spreedly::Authorization, transactions.first)
    assert_kind_of(Spreedly::Capture, transactions.last)

    assert_equal 444, transactions.first.amount
    assert_equal 22, transactions.last.amount
  end

  def test_successfully_list_transactions_for_a_payment_method
    gateway_token = @environment.add_gateway(:test).token
    card_token = create_card_on(@environment).token

    t1 = @environment.purchase_on_gateway(gateway_token, card_token, 144)
    t2 = @environment.authorize_on_gateway(gateway_token, card_token, 444)
    t3 = @environment.capture_transaction(t2.token, amount: 22)

    all = @environment.list_transactions(nil, card_token)
    assert_equal 5, all.size
    assert_kind_of Spreedly::Model, all.first

    next_group = @environment.list_transactions(t1.token, card_token)
    assert_equal 2, next_group.size
    assert_kind_of(Spreedly::Authorization, next_group.first)
    assert_kind_of(Spreedly::Capture, next_group.last)

    assert_equal 444, next_group.first.amount
    assert_equal 22, next_group.last.amount
  end

  def test_list_transactions_non_existent_payment_method
    assert_raise_with_message(Spreedly::NotFoundError, "Unable to find the specified payment method.") do
       @environment.list_transactions(nil, 'nonExistentToken')
    end
  end

end