# frozen_string_literal: true require "test_helper" require "customer_info" API::REDIS = FakeRedis.new CustomerPlan::REDIS = Minitest::Mock.new PlanInfo::DB = FakeDB.new( ["test"] => [ { "start_date" => Time.parse("2020-01-01"), "activation_date" => Time.parse("2021-01-01") } ] ) class CustomerInfoTest < Minitest::Test def test_info_does_not_crash sgx = Minitest::Mock.new sgx.expect(:registered?, false) sgx.expect(:registered?, false) CustomerPlan::REDIS.expect( :get, EMPromise.resolve(nil), ["jmp_customer_auto_top_up_amount-test"] ) CustomerPlan::DB.expect( :query_defer, EMPromise.resolve([{ "start_date" => Time.now }]), [String, ["test"]] ) cust = customer(sgx: sgx, plan_name: "test_usd") assert cust.info.sync.form assert_mock sgx end em :test_info_does_not_crash def test_admin_info_does_not_crash sgx = Minitest::Mock.new sgx.expect(:registered?, false) sgx.expect(:registered?, false) fwd = CustomerFwd.for(uri: "tel:+12223334444", timeout: 15) sgx.expect(:fwd, fwd) CustomerPlan::REDIS.expect( :get, EMPromise.resolve(nil), ["jmp_customer_auto_top_up_amount-test"] ) CustomerPlan::DB.expect( :query_defer, EMPromise.resolve([{ "start_date" => Time.now }]), [String, ["test"]] ) cust = customer(sgx: sgx, plan_name: "test_usd") assert cust.admin_info.sync.form assert_mock sgx end em :test_admin_info_does_not_crash def test_inactive_info_does_not_crash sgx = Minitest::Mock.new sgx.expect(:registered?, false) sgx.expect(:registered?, false) plan = CustomerPlan.new("test", plan: nil, expires_at: nil) cust = Customer.new( "test", Blather::JID.new("test@example.net"), plan: plan, sgx: sgx ) assert cust.info.sync.form assert_mock sgx end em :test_inactive_info_does_not_crash def test_inactive_admin_info_does_not_crash sgx = Minitest::Mock.new sgx.expect(:registered?, false) sgx.expect(:registered?, false) sgx.expect(:fwd, CustomerFwd::None.new(uri: nil, timeout: nil)) plan = CustomerPlan.new("test", plan: nil, expires_at: nil) cust = Customer.new( "test", Blather::JID.new("test@example.net"), plan: plan, sgx: sgx ) assert cust.admin_info.sync.form assert_mock sgx end em :test_inactive_admin_info_does_not_crash def test_legacy_customer_info_does_not_crash cust = LegacyCustomer.new( Blather::JID.new("legacy@example.com"), "+12223334444" ) assert cust.info.sync.form end em :test_legacy_customer_info_does_not_crash def test_legacy_customer_admin_info_does_not_crash cust = LegacyCustomer.new( Blather::JID.new("legacy@example.com"), "+12223334444" ) assert cust.admin_info.sync.form end em :test_legacy_customer_admin_info_does_not_crash def test_missing_customer_admin_info_does_not_crash cust = CustomerInfoForm::NoCustomer.new assert cust.admin_info.form end em :test_missing_customer_admin_info_does_not_crash end