test_command_list.rb

  1# frozen_string_literal: true
  2
  3require "test_helper"
  4require "command"
  5require "command_list"
  6
  7CommandList::Customer = Minitest::Mock.new
  8CommandList::REDIS = Minitest::Mock.new
  9
 10class CommandListTest < Minitest::Test
 11	SETUP = begin
 12		[
 13			Command.new("no_customer", "", list_for: ->(**) { true }),
 14			Command.new("registered", "", list_for: ->(tel:, **) { !!tel }),
 15			Command.new("fwd", "", list_for: ->(fwd: nil, **) { !!fwd }),
 16			Command.new(
 17				"currency", "",
 18				list_for: ->(customer: nil, **) { !!customer&.currency }
 19			),
 20			Command.new(
 21				"cc", "",
 22				list_for: ->(payment_methods: [], **) { !payment_methods.empty? }
 23			)
 24		].each do |c|
 25			CommandList.register(c)
 26		end
 27	end
 28
 29	def test_for_no_customer
 30		assert_equal(
 31			["no_customer"],
 32			CommandList.for(nil).sync.map { |c| c[:node] }
 33		)
 34	end
 35	em :test_for_no_customer
 36
 37	def test_for_unregistered
 38		customer = OpenStruct.new(registered?: false)
 39		assert_equal(
 40			["no_customer"],
 41			CommandList.for(customer).sync.map { |c| c[:node] }
 42		)
 43	end
 44	em :test_for_unregistered
 45
 46	def test_for_registered
 47		CommandList::REDIS.expect(
 48			:get,
 49			EMPromise.resolve(nil),
 50			["catapult_fwd-1"]
 51		)
 52		customer = OpenStruct.new(
 53			registered?: OpenStruct.new(phone: "1"),
 54			payment_methods: EMPromise.resolve([])
 55		)
 56		assert_equal(
 57			["no_customer", "registered"],
 58			CommandList.for(customer).sync.map { |c| c[:node] }
 59		)
 60	end
 61	em :test_for_registered
 62
 63	def test_for_registered_with_fwd
 64		CommandList::REDIS.expect(
 65			:get,
 66			EMPromise.resolve("tel:1"),
 67			["catapult_fwd-1"]
 68		)
 69		customer = OpenStruct.new(
 70			registered?: OpenStruct.new(phone: "1"),
 71			payment_methods: EMPromise.resolve([])
 72		)
 73		assert_equal(
 74			["no_customer", "registered", "fwd"],
 75			CommandList.for(customer).sync.map { |c| c[:node] }
 76		)
 77	end
 78	em :test_for_registered_with_fwd
 79
 80	def test_for_registered_with_credit_card
 81		CommandList::REDIS.expect(
 82			:get,
 83			EMPromise.resolve(nil),
 84			["catapult_fwd-1"]
 85		)
 86		customer = OpenStruct.new(
 87			registered?: OpenStruct.new(phone: "1"),
 88			plan_name: "test",
 89			payment_methods: EMPromise.resolve([:boop])
 90		)
 91		assert_equal(
 92			["no_customer", "registered", "cc"],
 93			CommandList.for(customer).sync.map { |c| c[:node] }
 94		)
 95	end
 96	em :test_for_registered_with_credit_card
 97
 98	def test_for_registered_with_currency
 99		CommandList::REDIS.expect(
100			:get,
101			EMPromise.resolve(nil),
102			["catapult_fwd-1"]
103		)
104		customer = OpenStruct.new(
105			registered?: OpenStruct.new(phone: "1"),
106			currency: :USD
107		)
108		assert_equal(
109			["no_customer", "registered", "currency"],
110			CommandList.for(customer).sync.map { |c| c[:node] }
111		)
112	end
113	em :test_for_registered_with_currency
114end