diff --git a/test/property/generators/disco_info_iq.rb b/test/property/generators/disco_info_iq.rb new file mode 100644 index 0000000000000000000000000000000000000000..ab03498edf94d81200efcf1efa12f4e821b0e6e7 --- /dev/null +++ b/test/property/generators/disco_info_iq.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require "jennifer" +require_relative "../rantly_extensions/data_extensions" + +class DiscoInfoIQ + # @param redis [FakeRedis] + def initialize(redis) + @redis = redis + end + + include Jennifer.rant(self) { + jid { bare_jid } + phone(transient: true) { nanpa_phone } + target_node { choose(nanpa_phone, nil) } + + stanza derived_from(:target_node, :jid) do |target_node, jid| + iq = Blather::Stanza::DiscoInfo.new(:get) + iq.to = target_node ? "#{target_node}@component" : "component" + iq.from = jid + iq + end + + redis_state derived_from(:jid, :phone), transient: true do |jid, phone| + @redis.reset! + @redis.set("catapult_jid-", "HERE") + @redis.set("catapult_jid-#{phone}", jid) + @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_info.rb b/test/property/test_disco_info.rb new file mode 100644 index 0000000000000000000000000000000000000000..db201bf91cd5d8ba889556ee28d8d966e7bc4c85 --- /dev/null +++ b/test/property/test_disco_info.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require "test_helper" +require_relative "../../sgx-bwmsgsv2" +require "rantly/minitest_extensions" +require_relative "generators/disco_info_iq" + +def panic(e) + $panic = e +end + +class DiscoInfoPropertyTest < Minitest::Test + def setup + reset_stanzas! + reset_redis! + end + + def test_disco_info_get_for_user_returns_user_caps + property_of { + DiscoInfoIQ + .new(REDIS) + .target_node { nanpa_phone } + .generate + }.check { |_metadata, example| + process_stanza(example['stanza']) + + assert_equal 1, written.length + reply = written.shift + + assert_equal example['jid'], reply.to.to_s + + ns = 'http://jabber.org/protocol/disco#info' + ids = reply.query.find('.//ns:identity', ns: ns) + assert_equal 1, ids.length + assert_equal 'client', ids.first[:category] + assert_equal 'sms', ids.first[:type] + + feats = reply.query.find('.//ns:feature', ns: ns).map { |f| f[:var] } + assert_includes feats, 'urn:xmpp:receipts' + } + end + em :test_disco_info_get_for_user_returns_user_caps +end