diff --git a/lib/customer.rb b/lib/customer.rb index 164e449b2cba7f87c56a911e4100fedecc7a9387..1147106a469309e95eb555e1203f092c97d2be74 100644 --- a/lib/customer.rb +++ b/lib/customer.rb @@ -24,7 +24,7 @@ class Customer def_delegators :@plan, :active?, :activate_plan_starting_now, :bill_plan, :currency, :merchant_account, :plan_name, :minute_limit, :message_limit, :monthly_overage_limit, :activation_date, - :expires_at, :monthly_price, :save_plan!, :auto_top_up_amount + :expires_at, :monthly_price, :save_plan! def_delegators :@sgx, :deregister!, :register!, :registered?, :set_ogm_url, :fwd, :transcription_enabled def_delegators :@usage, :usage_report, :message_usage, :incr_message_usage @@ -84,6 +84,15 @@ class Customer EMPromise.resolve(self) end + def auto_top_up_amount + if @plan.auto_top_up_amount.positive? && + balance < -@plan.auto_top_up_amount + 5 + -balance + @plan.auto_top_up_amount + else + @plan.auto_top_up_amount + end + end + def unused_invites InvitesRepo.new(DB).unused_invites(customer_id) end diff --git a/test/test_low_balance.rb b/test/test_low_balance.rb index ef0aa16fd330d69dfbd03926a83f75634a8c7eab..67884f9813b5460b8036a3f86073a70362051c3a 100644 --- a/test/test_low_balance.rb +++ b/test/test_low_balance.rb @@ -138,6 +138,44 @@ class LowBalanceTest < Minitest::Test end em :test_notify! + def test_very_low_balance_notify! + customer = Minitest::Mock.new(customer( + balance: -100, + auto_top_up_amount: 15 + )) + auto_top_up = LowBalance::AutoTopUp.new(customer) + + tx = PromiseMock.new + tx.expect(:insert, EMPromise.resolve(nil)) + LowBalance::AutoTopUp::Transaction.expect( + :sale, + tx, + [customer, { amount: 110 }] + ) + auto_top_up.notify! + assert_mock tx + end + em :test_very_low_balance_notify! + + def test_border_low_balance_notify! + customer = Minitest::Mock.new(customer( + balance: -11, + auto_top_up_amount: 15 + )) + auto_top_up = LowBalance::AutoTopUp.new(customer) + + tx = PromiseMock.new + tx.expect(:insert, EMPromise.resolve(nil)) + LowBalance::AutoTopUp::Transaction.expect( + :sale, + tx, + [customer, { amount: 21 }] + ) + auto_top_up.notify! + assert_mock tx + end + em :test_border_low_balance_notify! + def test_decline_notify! @customer.expect( :stanza_to,