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		assert_instance_of CommandList, CommandList.for(nil).sync
12	end
13	em :test_for_no_customer
14
15	def test_for_unregistered
16		customer = OpenStruct.new(registered?: false)
17		assert_instance_of CommandList, CommandList.for(customer).sync
18	end
19	em :test_for_unregistered
20
21	def test_for_registered
22		CommandList::REDIS.expect(
23			:get,
24			EMPromise.resolve(nil),
25			["catapult_fwd-1"]
26		)
27		customer = OpenStruct.new(
28			registered?: OpenStruct.new(phone: "1"),
29			payment_methods: EMPromise.resolve([])
30		)
31		assert_equal(
32			["CommandList::Registered"],
33			CommandList.for(customer).sync
34			.class.ancestors.map(&:name).grep(/\ACommandList::/)
35		)
36	end
37	em :test_for_registered
38
39	def test_for_registered_with_fwd
40		CommandList::REDIS.expect(
41			:get,
42			EMPromise.resolve("tel:1"),
43			["catapult_fwd-1"]
44		)
45		customer = OpenStruct.new(
46			registered?: OpenStruct.new(phone: "1"),
47			payment_methods: EMPromise.resolve([])
48		)
49		assert_equal(
50			CommandList::HAS_FORWARDING,
51			CommandList::HAS_FORWARDING & CommandList.for(customer).sync.to_a
52		)
53	end
54	em :test_for_registered_with_fwd
55
56	def test_for_registered_with_credit_card
57		CommandList::REDIS.expect(
58			:get,
59			EMPromise.resolve(nil),
60			["catapult_fwd-1"]
61		)
62		customer = OpenStruct.new(
63			registered?: OpenStruct.new(phone: "1"),
64			plan_name: "test",
65			payment_methods: EMPromise.resolve([:boop])
66		)
67		assert_equal(
68			CommandList::HAS_CREDIT_CARD,
69			CommandList::HAS_CREDIT_CARD & CommandList.for(customer).sync.to_a
70		)
71	end
72	em :test_for_registered_with_credit_card
73
74	def test_for_registered_with_currency
75		CommandList::REDIS.expect(
76			:get,
77			EMPromise.resolve(nil),
78			["catapult_fwd-1"]
79		)
80		customer = OpenStruct.new(
81			registered?: OpenStruct.new(phone: "1"),
82			currency: :USD
83		)
84
85		assert_equal(
86			CommandList::HAS_CURRENCY,
87			CommandList::HAS_CURRENCY & CommandList.for(customer).sync.to_a
88		)
89	end
90	em :test_for_registered_with_currency
91end