test(disco-info): user node returns user caps

Phillip Davis created

Change summary

test/property/generators/disco_info_iq.rb | 35 ++++++++++++++++++++
test/property/test_disco_info.rb          | 43 +++++++++++++++++++++++++
2 files changed, 78 insertions(+)

Detailed changes

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

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