@@ -3,6 +3,7 @@
require_relative "churnbuster"
require_relative "credit_card_sale"
require_relative "expiring_lock"
+require_relative "onboarding"
require_relative "transaction"
class LowBalance
@@ -83,7 +84,8 @@ class LowBalance
def self.for(customer, target=0)
customer.payment_methods.then(&:default_payment_method).then do |method|
blocked?(method).then do |block|
- next AutoTopUp.new(customer, method, target) if block.zero?
+ next AutoTopUp.new(customer, method, target) if
+ block.zero? && !customer.jid.onboarding?
log.info(
"#{customer.customer_id} auto top up blocked #{block} #{method}"
@@ -2,6 +2,7 @@
require "test_helper"
require "low_balance"
+require "onboarding"
ExpiringLock::REDIS = Minitest::Mock.new
CustomerPlan::REDIS = Minitest::Mock.new
@@ -113,6 +114,51 @@ class LowBalanceTest < Minitest::Test
end
em :test_for_auto_top_up
+ def test_for_auto_top_up_onboarding
+ ExpiringLock::REDIS.expect(
+ :set,
+ EMPromise.resolve("OK"),
+ ["jmp_customer_low_balance-test", Time, "EX", 604800, "NX"]
+ )
+ CustomerFinancials::REDIS.expect(
+ :smembers,
+ EMPromise.resolve([]),
+ ["block_credit_cards"]
+ )
+ CustomerFinancials::REDIS.expect(
+ :smembers,
+ EMPromise.resolve([]),
+ ["jmp_customer_btc_addresses-test"]
+ )
+ LowBalance::AutoTopUp::REDIS.expect(
+ :exists,
+ 0,
+ ["jmp_auto_top_up_block-abcd"]
+ )
+ braintree_customer = Minitest::Mock.new
+ CustomerFinancials::BRAINTREE.expect(:customer, braintree_customer)
+ payment_methods = OpenStruct.new(payment_methods: [
+ OpenStruct.new(default?: true, unique_number_identifier: "abcd")
+ ])
+ braintree_customer.expect(
+ :find,
+ EMPromise.resolve(payment_methods),
+ ["test"]
+ )
+ assert_kind_of(
+ LowBalance,
+ LowBalance.for(customer(
+ auto_top_up_amount: 15,
+ jid: Blather::JID.new("test\\40onboarding.example.com@proxy")
+ )).sync
+ )
+ assert_mock ExpiringLock::REDIS
+ assert_mock CustomerFinancials::REDIS
+ assert_mock CustomerFinancials::BRAINTREE
+ assert_mock braintree_customer
+ end
+ em :test_for_auto_top_up_onboarding
+
def test_for_auto_top_up_blocked
ExpiringLock::REDIS.expect(
:set,