1# frozen_string_literal: true
2
3require "test_helper"
4require "low_balance"
5
6ExpiringLock::REDIS = Minitest::Mock.new
7CustomerPlan::REDIS = Minitest::Mock.new
8Customer::REDIS = Minitest::Mock.new
9
10class LowBalanceTest < Minitest::Test
11 def test_for_locked
12 ExpiringLock::REDIS.expect(
13 :exists,
14 EMPromise.resolve(1),
15 ["jmp_customer_low_balance-test"]
16 )
17 assert_kind_of LowBalance::Locked, LowBalance.for(customer).sync
18 end
19 em :test_for_locked
20
21 def test_for_no_auto_top_up
22 ExpiringLock::REDIS.expect(
23 :exists,
24 EMPromise.resolve(0),
25 ["jmp_customer_low_balance-test"]
26 )
27 CustomerPlan::REDIS.expect(
28 :get,
29 EMPromise.resolve(nil),
30 ["jmp_customer_auto_top_up_amount-test"]
31 )
32 Customer::REDIS.expect(
33 :smembers,
34 EMPromise.resolve([]),
35 ["jmp_customer_btc_addresses-test"]
36 )
37 ExpiringLock::REDIS.expect(
38 :setex,
39 EMPromise.resolve(nil),
40 ["jmp_customer_low_balance-test", 60 * 60 * 24 * 7, Time]
41 )
42 assert_kind_of(
43 LowBalance,
44 LowBalance.for(customer).sync
45 )
46 assert_mock ExpiringLock::REDIS
47 end
48 em :test_for_no_auto_top_up
49
50 def test_for_auto_top_up
51 ExpiringLock::REDIS.expect(
52 :exists,
53 EMPromise.resolve(0),
54 ["jmp_customer_low_balance-test"]
55 )
56 CustomerPlan::REDIS.expect(
57 :get,
58 EMPromise.resolve("15"),
59 ["jmp_customer_auto_top_up_amount-test"]
60 )
61 ExpiringLock::REDIS.expect(
62 :setex,
63 EMPromise.resolve(nil),
64 ["jmp_customer_low_balance-test", 60 * 60 * 24 * 7, Time]
65 )
66 assert_kind_of(
67 LowBalance::AutoTopUp,
68 LowBalance.for(customer).sync
69 )
70 assert_mock ExpiringLock::REDIS
71 end
72 em :test_for_auto_top_up
73
74 class AutoTopUpTest < Minitest::Test
75 LowBalance::AutoTopUp::Transaction = Minitest::Mock.new
76
77 def setup
78 @customer = customer
79 @auto_top_up = LowBalance::AutoTopUp.new(@customer, 100)
80 end
81
82 def test_notify!
83 tx = PromiseMock.new
84 tx.expect(:insert, EMPromise.resolve(nil))
85 LowBalance::AutoTopUp::Transaction.expect(
86 :sale,
87 tx,
88 [@customer, { amount: 100 }]
89 )
90 @auto_top_up.notify!
91 assert_mock tx
92 end
93 em :test_notify!
94 end
95end