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_equal(
67 CommandList::HAS_FORWARDING,
68 CommandList::HAS_FORWARDING & CommandList.for("registered").sync.to_a
69 )
70 end
71 em :test_for_registered_with_fwd
72
73 def test_for_registered_with_credit_card
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_equal(
89 CommandList::HAS_CREDIT_CARD,
90 CommandList::HAS_CREDIT_CARD & CommandList.for("registered").sync.to_a
91 )
92 end
93 em :test_for_registered_with_credit_card
94
95 def test_for_registered_with_currency
96 CommandList::REDIS.expect(
97 :get,
98 EMPromise.resolve(nil),
99 ["catapult_fwd-1"]
100 )
101 CommandList::Customer.expect(
102 :for_jid,
103 EMPromise.resolve(OpenStruct.new(
104 registered?: OpenStruct.new(phone: "1"),
105 currency: :USD
106 )),
107 ["registered"]
108 )
109
110 assert_equal(
111 CommandList::HAS_CURRENCY,
112 CommandList::HAS_CURRENCY & CommandList.for("registered").sync.to_a
113 )
114 end
115 em :test_for_registered_with_currency
116end