From 672d8ea4babaf0cad393644e98fbb3e646821ad8 Mon Sep 17 00:00:00 2001 From: Phillip Davis Date: Mon, 26 Jan 2026 18:08:48 -0500 Subject: [PATCH] fix undefined method 'catch_after' in Q.for problem was that AvailableNumber.for sometimes returned a promise, sometimes not, causing us to try to call `catch_after` on a Tn --- lib/tel_selections.rb | 13 ++++++++----- test/test_tel_selections.rb | 31 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/lib/tel_selections.rb b/lib/tel_selections.rb index dbaa63624dac37da25c99388ad77d30487961557..27ab730f06669c7b1a23dbc454e796fc883def70 100644 --- a/lib/tel_selections.rb +++ b/lib/tel_selections.rb @@ -127,16 +127,19 @@ class TelSelections end class AvailableNumber + # @return [EMPromise] + # @note You should assume that this method will throw an NPE + # or another error of similar severity if it returns a non-promise def self.for(form, **kwargs) qs = form.field("q")&.value.to_s.strip - return Tn.for_pending_value(qs) if qs =~ /\A\+1\d{10}\Z/ + if qs =~ /\A\+1\d{10}\Z/ + return EMPromise.resolve(Tn.for_pending_value(qs)) + end Q.for(feelinglucky(qs, form), **kwargs).then do |q| new( - q.iris_query - &.merge(enableTNDetail: true, LCA: false), - q.sql_query, Quantity.for(form), - fallback: q.fallback, **kwargs + q.iris_query&.merge(enableTNDetail: true, LCA: false), + q.sql_query, Quantity.for(form), fallback: q.fallback, **kwargs ) end end diff --git a/test/test_tel_selections.rb b/test/test_tel_selections.rb index b2898e84fb02adebc6cee5bd33878630c9373bcd..a30e395e9121ceff3cef37194604d401cdc144f1 100644 --- a/test/test_tel_selections.rb +++ b/test/test_tel_selections.rb @@ -175,6 +175,37 @@ class TelSelectionsTest < Minitest::Test ) end em :test_local_inventory + + def test_local_inventory_whole_number_query + stub_request( + :get, + "https://dashboard.bandwidth.com/v1.0/accounts//availableNumbers" \ + "?city=Kitchener-Waterloo&enableTNDetail=true&lCA=false&" \ + "quantity=10&state=ON" + ).to_return(status: 200, body: "") + + db = FakeDB.new( + ["ON", "Kitchener-Waterloo"] => [{ + "tel" => "+122655512345", + "region" => "ON", + "locality" => "Kitchener-Waterloo" + }] + ) + form = Blather::Stanza::X.new + form.fields = [{ var: "q", value: "+12265551234" }] + tn = execute_command do + TelSelections::ChooseTel::AvailableNumber + .for( + form, + redis: FakeRedis.new, db: db, memcache: FakeMemcache.new + ).sync + end + assert_equal( + "+12265551234", + tn.tel + ) + end + em :test_local_inventory_whole_number_query end class TnOptionTest < Minitest::Test