test_low_balance.rb

 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