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		Customer::REDIS.expect(
28			:smembers,
29			EMPromise.resolve([]),
30			["jmp_customer_btc_addresses-test"]
31		)
32		ExpiringLock::REDIS.expect(
33			:setex,
34			EMPromise.resolve(nil),
35			["jmp_customer_low_balance-test", 60 * 60 * 24 * 7, Time]
36		)
37		assert_kind_of(
38			LowBalance,
39			LowBalance.for(customer).sync
40		)
41		assert_mock ExpiringLock::REDIS
42	end
43	em :test_for_no_auto_top_up
44
45	def test_for_auto_top_up
46		ExpiringLock::REDIS.expect(
47			:exists,
48			EMPromise.resolve(0),
49			["jmp_customer_low_balance-test"]
50		)
51		ExpiringLock::REDIS.expect(
52			:setex,
53			EMPromise.resolve(nil),
54			["jmp_customer_low_balance-test", 60 * 60 * 24 * 7, Time]
55		)
56		assert_kind_of(
57			LowBalance::AutoTopUp,
58			LowBalance.for(customer(auto_top_up_amount: 15)).sync
59		)
60		assert_mock ExpiringLock::REDIS
61	end
62	em :test_for_auto_top_up
63
64	class AutoTopUpTest < Minitest::Test
65		LowBalance::AutoTopUp::Transaction = Minitest::Mock.new
66
67		def setup
68			@customer = customer(auto_top_up_amount: 100)
69			@auto_top_up = LowBalance::AutoTopUp.new(@customer)
70		end
71
72		def test_notify!
73			tx = PromiseMock.new
74			tx.expect(:insert, EMPromise.resolve(nil))
75			LowBalance::AutoTopUp::Transaction.expect(
76				:sale,
77				tx,
78				[@customer, { amount: 100 }]
79			)
80			@auto_top_up.notify!
81			assert_mock tx
82		end
83		em :test_notify!
84	end
85end