# frozen_string_literal: true
require "test_helper"
require "transaction"
Transaction::DB = Minitest::Mock.new
Transaction::BRAINTREE = Minitest::Mock.new
class TransactionTest < Minitest::Test
FAKE_BRAINTREE_TRANSACTION =
OpenStruct.new(
customer_details: OpenStruct.new(id: "customer"),
id: "transaction",
created_at: Time.at(0),
amount: 123
)
def test_sale_fails
braintree_transaction = Minitest::Mock.new
Transaction::BRAINTREE.expect(:transaction, braintree_transaction)
braintree_transaction.expect(
:sale,
EMPromise.resolve(
OpenStruct.new(success?: false)
),
[Hash]
)
assert_raises do
Transaction.sale(
"merchant_usd",
OpenStruct.new(token: "token"),
123
).sync
end
end
em :test_sale_fails
def test_sale
braintree_transaction = Minitest::Mock.new
Transaction::BRAINTREE.expect(:transaction, braintree_transaction)
braintree_transaction.expect(
:sale,
EMPromise.resolve(
OpenStruct.new(
success?: true,
transaction: FAKE_BRAINTREE_TRANSACTION
)
),
[{
amount: 123,
payment_method_token: "token",
merchant_account_id: "merchant_usd",
options: { submit_for_settlement: true }
}]
)
result = Transaction.sale(
"merchant_usd",
OpenStruct.new(token: "token"),
123
).sync
assert_kind_of Transaction, result
end
em :test_sale
def test_insert
Transaction::DB.expect(
:exec_defer,
EMPromise.resolve(nil),
[
String,
["customer", "transaction", Time.at(0), 123]
]
)
Transaction.new(FAKE_BRAINTREE_TRANSACTION).insert.sync
end
em :test_insert
end