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 =
30 TelSelections::ChooseTel::AvailableNumber
31 .for(form)
32 .instance_variable_get(:@iris_query)
33 assert_equal(
34 { areaCode: "226", enableTNDetail: true, LCA: false, quantity: 10 },
35 iris_query
36 )
37 end
38
39 def test_for_rsm
40 form = Blather::Stanza::X.new
41 form.fields = [{ var: "q", value: "226" }]
42 Nokogiri::XML::Builder.with(form) do
43 set(xmlns: "http://jabber.org/protocol/rsm") do
44 max 500
45 end
46 end
47 iris_query =
48 TelSelections::ChooseTel::AvailableNumber
49 .for(form)
50 .instance_variable_get(:@iris_query)
51 assert_equal(
52 { areaCode: "226", enableTNDetail: true, LCA: false, quantity: 500 },
53 iris_query
54 )
55 end
56 end
57
58 class TnTest < Minitest::Test
59 def setup
60 @tn = TelSelections::ChooseTel::Tn.new(
61 full_number: "5551234567",
62 city: "Toronto",
63 state: "ON",
64 garbage: "stuff"
65 )
66 end
67
68 def test_to_s
69 assert_equal "(555) 123-4567 (Toronto, ON)", @tn.to_s
70 end
71
72 def test_tel
73 assert_equal "+15551234567", @tn.tel
74 end
75
76 def test_option
77 assert_equal(
78 Blather::Stanza::X::Field::Option.new(
79 label: "(555) 123-4567 (Toronto, ON)",
80 value: "+15551234567"
81 ),
82 @tn.option
83 )
84 end
85
86 def test_option_reference
87 ref = @tn.option.find("ns:reference", ns: "urn:xmpp:reference:0").first
88 assert_equal(
89 @tn.formatted_tel,
90 @tn.option.label[ref["begin"].to_i..ref["end"].to_i]
91 )
92 assert_equal "tel:+15551234567", ref["uri"]
93 end
94 end
95
96 class QTest < Minitest::Test
97 def test_for_area_code
98 q = TelSelections::ChooseTel::Q.for("226")
99 assert_equal({ areaCode: "226" }, q.iris_query)
100 end
101
102 def test_for_npanxx
103 q = TelSelections::ChooseTel::Q.for("226666")
104 assert_equal({ npaNxx: "226666" }, q.iris_query)
105 end
106
107 def test_for_npanxxx
108 q = TelSelections::ChooseTel::Q.for("2266667")
109 assert_equal({ npaNxxx: "2266667" }, q.iris_query)
110 end
111
112 def test_for_zip
113 q = TelSelections::ChooseTel::Q.for("90210")
114 assert_equal({ zip: "90210" }, q.iris_query)
115 end
116
117 def test_for_localvanity
118 q = TelSelections::ChooseTel::Q.for("~mboa")
119 assert_equal({ localVanity: "mboa" }, q.iris_query)
120 end
121
122 def test_for_state
123 q = TelSelections::ChooseTel::Q.for("ON")
124 assert_equal({ state: "ON" }, q.iris_query)
125 end
126
127 def test_for_citystate
128 q = TelSelections::ChooseTel::Q.for("Toronto, ON")
129 assert_equal({ city: "Toronto", state: "ON" }, q.iris_query)
130 end
131
132 def test_for_garbage
133 assert_raises { TelSelections::ChooseTel::Q.for("garbage") }
134 end
135 end
136end