# frozen_string_literal: true require "test_helper" require "command_list" CommandList::Customer = Minitest::Mock.new CommandList::REDIS = Minitest::Mock.new class CommandListTest < Minitest::Test def test_for_no_customer CommandList::Customer.expect( :for_jid, EMPromise.reject("not found"), ["none"] ) assert_instance_of CommandList, CommandList.for("none").sync end em :test_for_no_customer def test_for_unregistered CommandList::Customer.expect( :for_jid, EMPromise.resolve(OpenStruct.new(registered?: false)), ["unregistered"] ) assert_instance_of CommandList, CommandList.for("unregistered").sync end em :test_for_unregistered def test_for_registered CommandList::REDIS.expect( :get, EMPromise.resolve(nil), ["catapult_fwd-1"] ) CommandList::Customer.expect( :for_jid, EMPromise.resolve(OpenStruct.new( registered?: OpenStruct.new(phone: "1"), payment_methods: EMPromise.resolve([]) )), ["registered"] ) assert_equal( ["CommandList::Registered"], CommandList.for("registered").sync .class.ancestors.map(&:name).grep(/\ACommandList::/) ) end em :test_for_registered def test_for_registered_with_fwd CommandList::REDIS.expect( :get, EMPromise.resolve("tel:1"), ["catapult_fwd-1"] ) CommandList::Customer.expect( :for_jid, EMPromise.resolve(OpenStruct.new( registered?: OpenStruct.new(phone: "1"), payment_methods: EMPromise.resolve([]) )), ["registered"] ) assert_kind_of( CommandList::HasForwarding, CommandList.for("registered").sync ) end em :test_for_registered_with_fwd def test_for_registered_with_billing CommandList::REDIS.expect( :get, EMPromise.resolve(nil), ["catapult_fwd-1"] ) CommandList::Customer.expect( :for_jid, EMPromise.resolve(OpenStruct.new( registered?: OpenStruct.new(phone: "1"), plan_name: "test", payment_methods: EMPromise.resolve([:boop]) )), ["registered"] ) assert_kind_of( CommandList::HasBilling, CommandList.for("registered").sync ) end em :test_for_registered_with_billing def test_for_registered_with_forwarding_and_billing CommandList::REDIS.expect( :get, EMPromise.resolve("tel:1"), ["catapult_fwd-1"] ) CommandList::Customer.expect( :for_jid, EMPromise.resolve(OpenStruct.new( registered?: OpenStruct.new(phone: "1"), plan_name: "test", payment_methods: EMPromise.resolve([:boop]) )), ["registered"] ) result = CommandList.for("registered").sync assert_kind_of CommandList::HasForwarding, result assert_kind_of CommandList::HasBilling, result end em :test_for_registered_with_forwarding_and_billing end