test_transaction.rb

 1# frozen_string_literal: true
 2
 3require "test_helper"
 4require "transaction"
 5
 6Transaction::DB = Minitest::Mock.new
 7Transaction::BRAINTREE = Minitest::Mock.new
 8
 9class TransactionTest < Minitest::Test
10	FAKE_BRAINTREE_TRANSACTION =
11		OpenStruct.new(
12			customer_details: OpenStruct.new(id: "customer"),
13			id: "transaction",
14			created_at: Time.at(0),
15			amount: 123
16		)
17
18	def test_sale_fails
19		braintree_transaction = Minitest::Mock.new
20		Transaction::BRAINTREE.expect(:transaction, braintree_transaction)
21		braintree_transaction.expect(
22			:sale,
23			EMPromise.resolve(
24				OpenStruct.new(success?: false)
25			),
26			[Hash]
27		)
28		assert_raises do
29			Transaction.sale(
30				"merchant_usd",
31				OpenStruct.new(token: "token"),
32				123
33			).sync
34		end
35	end
36	em :test_sale_fails
37
38	def test_sale
39		braintree_transaction = Minitest::Mock.new
40		Transaction::BRAINTREE.expect(:transaction, braintree_transaction)
41		braintree_transaction.expect(
42			:sale,
43			EMPromise.resolve(
44				OpenStruct.new(
45					success?: true,
46					transaction: FAKE_BRAINTREE_TRANSACTION
47				)
48			),
49			[{
50				amount: 123,
51				payment_method_token: "token",
52				merchant_account_id: "merchant_usd",
53				options: { submit_for_settlement: true }
54			}]
55		)
56		result = Transaction.sale(
57			"merchant_usd",
58			OpenStruct.new(token: "token"),
59			123
60		).sync
61		assert_kind_of Transaction, result
62	end
63	em :test_sale
64
65	def test_insert
66		Transaction::DB.expect(
67			:exec_defer,
68			EMPromise.resolve(nil),
69			[
70				String,
71				["customer", "transaction", Time.at(0), 123]
72			]
73		)
74		Transaction.new(FAKE_BRAINTREE_TRANSACTION).insert.sync
75	end
76	em :test_insert
77end