# frozen_string_literal: true require "test_helper" require "low_balance" ExpiringLock::REDIS = Minitest::Mock.new CustomerPlan::REDIS = Minitest::Mock.new Customer::REDIS = Minitest::Mock.new class LowBalanceTest < Minitest::Test def test_for_locked ExpiringLock::REDIS.expect( :exists, EMPromise.resolve(1), ["jmp_customer_low_balance-test"] ) assert_kind_of LowBalance::Locked, LowBalance.for(customer).sync end em :test_for_locked def test_for_no_auto_top_up ExpiringLock::REDIS.expect( :exists, EMPromise.resolve(0), ["jmp_customer_low_balance-test"] ) Customer::REDIS.expect( :smembers, EMPromise.resolve([]), ["jmp_customer_btc_addresses-test"] ) ExpiringLock::REDIS.expect( :setex, EMPromise.resolve(nil), ["jmp_customer_low_balance-test", 60 * 60 * 24 * 7, Time] ) assert_kind_of( LowBalance, LowBalance.for(customer).sync ) assert_mock ExpiringLock::REDIS end em :test_for_no_auto_top_up def test_for_auto_top_up ExpiringLock::REDIS.expect( :exists, EMPromise.resolve(0), ["jmp_customer_low_balance-test"] ) ExpiringLock::REDIS.expect( :setex, EMPromise.resolve(nil), ["jmp_customer_low_balance-test", 60 * 60 * 24 * 7, Time] ) assert_kind_of( LowBalance::AutoTopUp, LowBalance.for(customer(auto_top_up_amount: 15)).sync ) assert_mock ExpiringLock::REDIS end em :test_for_auto_top_up class AutoTopUpTest < Minitest::Test LowBalance::AutoTopUp::Transaction = Minitest::Mock.new def setup @customer = customer(auto_top_up_amount: 100) @auto_top_up = LowBalance::AutoTopUp.new(@customer) end def test_notify! tx = PromiseMock.new tx.expect(:insert, EMPromise.resolve(nil)) LowBalance::AutoTopUp::Transaction.expect( :sale, tx, [@customer, { amount: 100 }] ) @auto_top_up.notify! assert_mock tx end em :test_notify! end end