From c97470e1a2c3853c2b933655645bcfa133e95bab Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 28 Sep 2021 08:59:34 -0500 Subject: [PATCH] Add auto-top-up to customer info report --- lib/customer_info.rb | 24 +++++++++++++++++- test/test_customer_info.rb | 52 +++++++++++++++----------------------- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/lib/customer_info.rb b/lib/customer_info.rb index 3e0ede3..5d1349f 100644 --- a/lib/customer_info.rb +++ b/lib/customer_info.rb @@ -8,15 +8,17 @@ require_relative "customer_plan" class CustomerInfo value_semantics do plan CustomerPlan + auto_top_up_amount Integer tel Either(String, nil) balance BigDecimal expires_at Either(Time, nil) end def self.for(customer, plan, expires_at) - customer.registered?.then do |registration| + fetch_inputs(customer, plan).then do |(auto_top_up_amount, registration)| new( plan: plan, + auto_top_up_amount: auto_top_up_amount, tel: registration ? registration.phone : nil, balance: customer.balance, expires_at: expires_at @@ -24,6 +26,13 @@ class CustomerInfo end end + def self.fetch_inputs(customer, plan) + EMPromise.all([ + plan.auto_top_up_amount, + customer.registered? + ]) + end + def account_status if plan.plan_name.nil? "Transitional" @@ -43,6 +52,18 @@ class CustomerInfo { var: "Renewal", value: "$%.4f / month" % plan.monthly_price } end + def auto_top_up + { + label: "Auto Top-up" + }.merge( + if auto_top_up_amount.positive? + { value: auto_top_up_amount.to_s, var: "auto_top_up_amount" } + else + { value: "No" } + end + ) + end + def fields [ { var: "Account Status", value: account_status }, @@ -50,6 +71,7 @@ class CustomerInfo { var: "Balance", value: "$%.4f" % balance }, monthly_amount, next_renewal, + auto_top_up, { var: "Currency", value: (plan.currency || "No Currency").to_s } ].compact end diff --git a/test/test_customer_info.rb b/test/test_customer_info.rb index a3840b7..b133f65 100644 --- a/test/test_customer_info.rb +++ b/test/test_customer_info.rb @@ -1,14 +1,22 @@ # frozen_string_literal: true require "test_helper" +require "customer_info" -API::REDIS = Minitest::Mock.new +API::REDIS = FakeRedis.new +CustomerPlan::REDIS = Minitest::Mock.new class CustomerInfoTest < Minitest::Test def test_info_does_not_crash sgx = Minitest::Mock.new sgx.expect(:registered?, EMPromise.resolve(nil)) + CustomerPlan::REDIS.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_auto_top_up_amount-test"] + ) + cust = customer(sgx: sgx) assert cust.info.sync.fields assert_mock sgx @@ -19,16 +27,10 @@ class CustomerInfoTest < Minitest::Test sgx = Minitest::Mock.new sgx.expect(:registered?, EMPromise.resolve(nil)) - API::REDIS.expect( - :exists, + CustomerPlan::REDIS.expect( + :get, EMPromise.resolve(nil), - ["catapult_cred-customer_test@jmp.chat"] - ) - - API::REDIS.expect( - :lindex, - EMPromise.resolve(nil), - ["catapult_cred-test@example.net", 0] + ["jmp_customer_auto_top_up_amount-test"] ) cust = customer(sgx: sgx) @@ -41,6 +43,12 @@ class CustomerInfoTest < Minitest::Test sgx = Minitest::Mock.new sgx.expect(:registered?, EMPromise.resolve(nil)) + CustomerPlan::REDIS.expect( + :get, + EMPromise.resolve(nil), + ["jmp_customer_auto_top_up_amount-test"] + ) + plan = CustomerPlan.new("test", plan: nil, expires_at: nil) cust = Customer.new( "test", @@ -57,16 +65,10 @@ class CustomerInfoTest < Minitest::Test sgx = Minitest::Mock.new sgx.expect(:registered?, EMPromise.resolve(nil)) - API::REDIS.expect( - :exists, + CustomerPlan::REDIS.expect( + :get, EMPromise.resolve(nil), - ["catapult_cred-customer_test@jmp.chat"] - ) - - API::REDIS.expect( - :lindex, - EMPromise.resolve(nil), - ["catapult_cred-test@example.net", 0] + ["jmp_customer_auto_top_up_amount-test"] ) plan = CustomerPlan.new("test", plan: nil, expires_at: nil) @@ -92,18 +94,6 @@ class CustomerInfoTest < Minitest::Test em :test_legacy_customer_info_does_not_crash def test_legacy_customer_admin_info_does_not_crash - API::REDIS.expect( - :exists, - EMPromise.resolve(nil), - ["catapult_cred-customer_@jmp.chat"] - ) - - API::REDIS.expect( - :lindex, - EMPromise.resolve(nil), - ["catapult_cred-legacy@example.com", 0] - ) - cust = LegacyCustomer.new( Blather::JID.new("legacy@example.com"), "+12223334444" -- 2.45.2