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