1# frozen_string_literal: true
2
3require "test_helper"
4require "buy_account_credit_form"
5require "customer"
6require "credit_card_sale"
7
8CustomerFinancials::BRAINTREE = Minitest::Mock.new
9CustomerFinancials::REDIS = Minitest::Mock.new
10TrustLevelRepo::REDIS = Minitest::Mock.new
11TrustLevelRepo::DB = Minitest::Mock.new
12
13class BuyAccountCreditFormTest < Minitest::Test
14 def setup
15 @payment_method = OpenStruct.new(card_type: "Test", last_4: "1234")
16 @max_top_up_amount = 130
17 @form = BuyAccountCreditForm.new(
18 BigDecimal("15.1234"),
19 PaymentMethods.new([@payment_method]),
20 @max_top_up_amount
21 )
22 end
23
24 def test_for
25 braintree_customer = Minitest::Mock.new
26 CustomerFinancials::BRAINTREE.expect(:customer, braintree_customer)
27 CustomerFinancials::REDIS.expect(:smembers, [], ["block_credit_cards"])
28 braintree_customer.expect(
29 :find,
30 EMPromise.resolve(OpenStruct.new(payment_methods: [])),
31 ["test"]
32 )
33
34 TrustLevelRepo::REDIS.expect(
35 :get,
36 EMPromise.resolve("Customer"),
37 ["jmp_customer_trust_level-test"]
38 )
39 TrustLevelRepo::REDIS.expect(
40 :get,
41 EMPromise.resolve(nil),
42 ["jmp_customer_activater-test"]
43 )
44 CustomerPlan::DB.expect(
45 :query_one, {}, [String, "test"]
46 )
47 TrustLevelRepo::DB.expect(
48 :query_one,
49 EMPromise.resolve({}),
50 [String, "test"], default: {}
51 )
52 TrustLevelRepo::DB.expect(
53 :query_one,
54 EMPromise.resolve({}),
55 [String, "test"], default: {}
56 )
57
58 assert_kind_of(
59 BuyAccountCreditForm,
60 BuyAccountCreditForm.for(customer).sync
61 )
62
63 assert_mock CustomerPlan::DB
64 assert_mock TrustLevelRepo::REDIS
65 assert_mock TrustLevelRepo::DB
66 end
67 em :test_for
68
69 def test_form
70 iq_form = @form.form
71 assert_equal :form, iq_form.type
72 assert_equal "Buy Account Credit", iq_form.title
73 assert_equal(
74 [
75 Blather::Stanza::X::Field.new(
76 type: "fixed",
77 label: "Current balance",
78 value: "$15.12"
79 ),
80 Blather::Stanza::X::Field.new(
81 type: "list-single",
82 var: "payment_method",
83 label: "Credit card to pay with",
84 required: true,
85 options: [{ label: "Test 1234", value: "0" }]
86 ),
87 Blather::Stanza::X::Field.new(
88 var: "amount",
89 label: "Amount of credit to buy",
90 required: true
91 )
92 ],
93 iq_form.fields
94 )
95 end
96
97 def test_parse_amount
98 iq_form = Blather::Stanza::X.new
99 iq_form.fields = [{ var: "amount", value: "123" }]
100 assert_equal "123", @form.parse(iq_form)[:amount]
101 end
102
103 def test_parse_payment_method
104 iq_form = Blather::Stanza::X.new
105 iq_form.fields = [
106 { var: "payment_method", value: "0" },
107 { var: "amount", value: "15" }
108 ]
109 assert_equal @payment_method, @form.parse(iq_form)[:payment_method]
110 end
111
112 def test_parse_amount_too_low
113 iq_form = Blather::Stanza::X.new
114 iq_form.fields = [
115 { var: "payment_method", value: "0" },
116 { var: "amount", value: "10" }
117 ]
118 assert_raises(AmountTooLowError) do
119 @form.parse(iq_form)
120 end
121 end
122end