block AutoTopUp for onboarding customers

Phillip Davis created

Change summary

lib/low_balance.rb       |  4 ++
test/test_low_balance.rb | 46 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+), 1 deletion(-)

Detailed changes

lib/low_balance.rb 🔗

@@ -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}"

test/test_low_balance.rb 🔗

@@ -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,