1# frozen_string_literal: true
2
3require "test_helper"
4require "tel_selections"
5
6class TelSelectionsTest < Minitest::Test
7 def setup
8 @manager = TelSelections.new(redis: FakeRedis.new)
9 end
10
11 def test_set_get
12 assert_kind_of TelSelections::ChooseTel, @manager["jid@example.com"].sync
13 @manager.set("jid@example.com", "+15555550000").sync
14 assert_kind_of TelSelections::HaveTel, @manager["jid@example.com"].sync
15 end
16 em :test_set_get
17
18 def test_choose_tel_have_tel
19 jid = "jid@example.com"
20 @manager.set(jid, "+15555550000").sync
21 assert_equal "+15555550000", @manager[jid].then(&:choose_tel).sync
22 end
23 em :test_choose_tel_have_tel
24
25 class AvailableNumberTest < Minitest::Test
26 def test_for_no_rsm
27 form = Blather::Stanza::X.new
28 form.fields = [{ var: "q", value: "226" }]
29 iris_query = TelSelections::ChooseTel::AvailableNumber
30 .for(form)
31 .instance_variable_get(:@iris_query)
32 assert_equal(
33 { areaCode: "226", enableTNDetail: true, LCA: false, quantity: 10 },
34 iris_query
35 )
36 end
37
38 def test_for_rsm
39 form = Blather::Stanza::X.new
40 form.fields = [{ var: "q", value: "226" }]
41 Nokogiri::XML::Builder.with(form) do
42 set(xmlns: "http://jabber.org/protocol/rsm") do
43 max 500
44 end
45 end
46 iris_query = TelSelections::ChooseTel::AvailableNumber
47 .for(form)
48 .instance_variable_get(:@iris_query)
49 assert_equal(
50 { areaCode: "226", enableTNDetail: true, LCA: false, quantity: 500 },
51 iris_query
52 )
53 end
54 end
55
56 class TnTest < Minitest::Test
57 def setup
58 @tn = TelSelections::ChooseTel::Tn.new(
59 full_number: "5551234567",
60 city: "Toronto",
61 state: "ON",
62 garbage: "stuff"
63 )
64 end
65
66 def test_to_s
67 assert_equal "(555) 123-4567 (Toronto, ON)", @tn.to_s
68 end
69
70 def test_tel
71 assert_equal "+15551234567", @tn.tel
72 end
73
74 def test_option
75 assert_equal(
76 Blather::Stanza::X::Field::Option.new(
77 label: "(555) 123-4567 (Toronto, ON)",
78 value: "+15551234567"
79 ),
80 @tn.option
81 )
82 end
83
84 def test_option_reference
85 ref = @tn.option.find("ns:reference", ns: "urn:xmpp:reference:0").first
86 assert_equal(
87 @tn.formatted_tel,
88 @tn.option.label[ref["begin"].to_i..ref["end"].to_i]
89 )
90 assert_equal "tel:+15551234567", ref["uri"]
91 end
92 end
93
94 class QTest < Minitest::Test
95 def test_for_area_code
96 q = TelSelections::ChooseTel::Q.for("226")
97 assert_equal({ areaCode: "226" }, q.iris_query)
98 end
99
100 def test_for_npanxx
101 q = TelSelections::ChooseTel::Q.for("226666")
102 assert_equal({ npaNxx: "226666" }, q.iris_query)
103 end
104
105 def test_for_npanxxx
106 q = TelSelections::ChooseTel::Q.for("2266667")
107 assert_equal({ npaNxxx: "2266667" }, q.iris_query)
108 end
109
110 def test_for_zip
111 q = TelSelections::ChooseTel::Q.for("90210")
112 assert_equal({ zip: "90210" }, q.iris_query)
113 end
114
115 def test_for_localvanity
116 q = TelSelections::ChooseTel::Q.for("~mboa")
117 assert_equal({ localVanity: "mboa" }, q.iris_query)
118 end
119
120 def test_for_state
121 q = TelSelections::ChooseTel::Q.for("ON")
122 assert_equal({ state: "ON" }, q.iris_query)
123 end
124
125 def test_for_citystate
126 q = TelSelections::ChooseTel::Q.for("Toronto, ON")
127 assert_equal({ city: "Toronto", state: "ON" }, q.iris_query)
128 end
129
130 def test_for_garbage
131 assert_raises { TelSelections::ChooseTel::Q.for("garbage") }
132 end
133 end
134end