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