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