test_command_list.rb

  1# frozen_string_literal: true
  2
  3require "test_helper"
  4require "command_list"
  5
  6CommandList::Customer = Minitest::Mock.new
  7CommandList::REDIS = Minitest::Mock.new
  8
  9class CommandListTest < Minitest::Test
 10	def test_for_no_customer
 11		CommandList::Customer.expect(
 12			:for_jid,
 13			EMPromise.reject("not found"),
 14			["none"]
 15		)
 16		assert_instance_of CommandList, CommandList.for("none").sync
 17	end
 18	em :test_for_no_customer
 19
 20	def test_for_unregistered
 21		CommandList::Customer.expect(
 22			:for_jid,
 23			EMPromise.resolve(OpenStruct.new(registered?: false)),
 24			["unregistered"]
 25		)
 26		assert_instance_of CommandList, CommandList.for("unregistered").sync
 27	end
 28	em :test_for_unregistered
 29
 30	def test_for_registered
 31		CommandList::REDIS.expect(
 32			:get,
 33			EMPromise.resolve(nil),
 34			["catapult_fwd-1"]
 35		)
 36		CommandList::Customer.expect(
 37			:for_jid,
 38			EMPromise.resolve(OpenStruct.new(
 39				registered?: OpenStruct.new(phone: "1"),
 40				payment_methods: EMPromise.resolve([])
 41			)),
 42			["registered"]
 43		)
 44		assert_equal(
 45			["CommandList::Registered"],
 46			CommandList.for("registered").sync
 47			.class.ancestors.map(&:name).grep(/\ACommandList::/)
 48		)
 49	end
 50	em :test_for_registered
 51
 52	def test_for_registered_with_fwd
 53		CommandList::REDIS.expect(
 54			:get,
 55			EMPromise.resolve("tel:1"),
 56			["catapult_fwd-1"]
 57		)
 58		CommandList::Customer.expect(
 59			:for_jid,
 60			EMPromise.resolve(OpenStruct.new(
 61				registered?: OpenStruct.new(phone: "1"),
 62				payment_methods: EMPromise.resolve([])
 63			)),
 64			["registered"]
 65		)
 66		assert_kind_of(
 67			CommandList::HasForwarding,
 68			CommandList.for("registered").sync
 69		)
 70	end
 71	em :test_for_registered_with_fwd
 72
 73	def test_for_registered_with_billing
 74		CommandList::REDIS.expect(
 75			:get,
 76			EMPromise.resolve(nil),
 77			["catapult_fwd-1"]
 78		)
 79		CommandList::Customer.expect(
 80			:for_jid,
 81			EMPromise.resolve(OpenStruct.new(
 82				registered?: OpenStruct.new(phone: "1"),
 83				plan_name: "test",
 84				payment_methods: EMPromise.resolve([:boop])
 85			)),
 86			["registered"]
 87		)
 88		assert_kind_of(
 89			CommandList::HasBilling,
 90			CommandList.for("registered").sync
 91		)
 92	end
 93	em :test_for_registered_with_billing
 94
 95	def test_for_registered_with_forwarding_and_billing
 96		CommandList::REDIS.expect(
 97			:get,
 98			EMPromise.resolve("tel:1"),
 99			["catapult_fwd-1"]
100		)
101		CommandList::Customer.expect(
102			:for_jid,
103			EMPromise.resolve(OpenStruct.new(
104				registered?: OpenStruct.new(phone: "1"),
105				plan_name: "test",
106				payment_methods: EMPromise.resolve([:boop])
107			)),
108			["registered"]
109		)
110		result = CommandList.for("registered").sync
111		assert_kind_of CommandList::HasForwarding, result
112		assert_kind_of CommandList::HasBilling, result
113	end
114	em :test_for_registered_with_forwarding_and_billing
115end