test_tel_selections.rb

  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