# frozen_string_literal: true require "test_helper" require "tel_selections" class TelSelectionsTest < Minitest::Test def setup @manager = TelSelections.new(redis: FakeRedis.new) end def test_set_get assert_kind_of TelSelections::ChooseTel, @manager["jid@example.com"].sync @manager.set("jid@example.com", "+15555550000").sync assert_kind_of TelSelections::HaveTel, @manager["jid@example.com"].sync end em :test_set_get def test_choose_tel_have_tel jid = "jid@example.com" @manager.set(jid, "+15555550000").sync assert_equal "+15555550000", @manager[jid].then(&:choose_tel).sync end em :test_choose_tel_have_tel class AvailableNumberTest < Minitest::Test def test_for_no_rsm form = Blather::Stanza::X.new form.fields = [{ var: "q", value: "226" }] iris_query = TelSelections::ChooseTel::AvailableNumber .for(form) .instance_variable_get(:@iris_query) assert_equal( { areaCode: "226", enableTNDetail: true, quantity: 10 }, iris_query ) end def test_for_rsm form = Blather::Stanza::X.new form.fields = [{ var: "q", value: "226" }] Nokogiri::XML::Builder.with(form) do set(xmlns: "http://jabber.org/protocol/rsm") do max 500 end end iris_query = TelSelections::ChooseTel::AvailableNumber .for(form) .instance_variable_get(:@iris_query) assert_equal( { areaCode: "226", enableTNDetail: true, quantity: 500 }, iris_query ) end end class TnTest < Minitest::Test def setup @tn = TelSelections::ChooseTel::Tn.new( full_number: "5551234567", city: "Toronto", state: "ON", garbage: "stuff" ) end def test_to_s assert_equal "(555) 123-4567 (Toronto, ON)", @tn.to_s end def test_tel assert_equal "+15551234567", @tn.tel end def test_option assert_equal( Blather::Stanza::X::Field::Option.new( label: "(555) 123-4567 (Toronto, ON)", value: "+15551234567" ), @tn.option ) end def test_option_reference ref = @tn.option.find("ns:reference", ns: "urn:xmpp:reference:0").first assert_equal( @tn.formatted_tel, @tn.option.label[ref["begin"].to_i..ref["end"].to_i] ) assert_equal "tel:+15551234567", ref["uri"] end end class QTest < Minitest::Test def test_for_area_code q = TelSelections::ChooseTel::Q.for("226") assert_equal({ areaCode: "226" }, q.iris_query) end def test_for_npanxx q = TelSelections::ChooseTel::Q.for("226666") assert_equal({ npaNxx: "226666" }, q.iris_query) end def test_for_npanxxx q = TelSelections::ChooseTel::Q.for("2266667") assert_equal({ npaNxxx: "2266667" }, q.iris_query) end def test_for_zip q = TelSelections::ChooseTel::Q.for("90210") assert_equal({ zip: "90210" }, q.iris_query) end def test_for_localvanity q = TelSelections::ChooseTel::Q.for("~mboa") assert_equal({ localVanity: "mboa" }, q.iris_query) end def test_for_citystate q = TelSelections::ChooseTel::Q.for("Toronto, ON") assert_equal({ city: "Toronto", state: "ON" }, q.iris_query) end def test_for_garbage assert_raises { TelSelections::ChooseTel::Q.for("garbage") } end end end