From dc1564bde225cea73be7e059ceecd0863d6f21c0 Mon Sep 17 00:00:00 2001 From: Phillip Davis Date: Tue, 3 Mar 2026 16:08:11 -0500 Subject: [PATCH] test(disco-items): eligible tn shows port-out cmd --- test/property/generators/disco_items_iq.rb | 34 ++++++++++++++++++ test/property/test_disco_items.rb | 41 ++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 test/property/generators/disco_items_iq.rb create mode 100644 test/property/test_disco_items.rb diff --git a/test/property/generators/disco_items_iq.rb b/test/property/generators/disco_items_iq.rb new file mode 100644 index 0000000000000000000000000000000000000000..e5a108ed77fe4f85c5f8cfdec0996af17971be4b --- /dev/null +++ b/test/property/generators/disco_items_iq.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +require "jennifer" +require_relative "../rantly_extensions/data_extensions" + +class DiscoItemsIQ + # @param redis [FakeRedis] + def initialize(redis) + @redis = redis + end + + include Jennifer.rant(self) { + jid { bare_jid } + phone(transient: true) { nanpa_phone } + + stanza derived_from(:jid) do |jid| + di = Blather::Stanza::DiscoItems.new + di.type = :get + di.to = ARGV[0] + di.node = 'http://jabber.org/protocol/commands' + di.from = jid + di + end + + redis_state derived_from(:jid, :phone), transient: true do |jid, phone| + @redis.reset! + @redis.rpush("catapult_cred-#{jid}", 'acct', 'token', 'secret', phone) + end + + written_state(transient: true) { + SGXbwmsgsv2.instance_variable_set(:@written, []) + } + } +end diff --git a/test/property/test_disco_items.rb b/test/property/test_disco_items.rb new file mode 100644 index 0000000000000000000000000000000000000000..873f12f64785ce5852a8568ee27b7b61dba4d959 --- /dev/null +++ b/test/property/test_disco_items.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require "test_helper" +require_relative "../../sgx-bwmsgsv2" +require "rantly/minitest_extensions" +require_relative "generators/disco_items_iq" + +def panic(e) + $panic = e +end + +class DiscoItemsPropertyTest < Minitest::Test + def setup + reset_stanzas! + reset_redis! + end + + def test_eligible_tn_shows_port_out_pin_command + property_of { + DiscoItemsIQ.new(REDIS).generate + }.check { |_metadata, example| + BandwidthTNOptions.stub( + :tn_eligible_for_port_out_pin?, + EMPromise.resolve(true) + ) do + process_stanza(example['stanza']) + end + + assert_equal 1, written.length + reply = written.shift + + assert_equal example['jid'], reply.to.to_s + + ns = 'http://jabber.org/protocol/disco#items' + items = reply.query.find('.//ns:item', ns: ns) + assert_equal 1, items.length + assert_equal 'set-port-out-pin', items.first[:node] + } + end + em :test_eligible_tn_shows_port_out_pin_command +end