Helper to fetch customer's vcard-temp

Stephen Paul Weber created

Change summary

lib/customer.rb       |  8 +++++++-
test/test_customer.rb | 13 +++++++++++++
2 files changed, 20 insertions(+), 1 deletion(-)

Detailed changes

lib/customer.rb 🔗

@@ -67,13 +67,19 @@ class Customer
 		stanza = stanza.dup
 		stanza.to = jid.with(resource: stanza.to&.resource)
 		stanza.from = stanza.from.with(domain: CONFIG[:component][:jid])
-		BLATHER << stanza
+		block_given? ? yield(stanza) : (BLATHER << stanza)
 	end
 
 	def stanza_from(stanza)
 		BLATHER << @sgx.stanza(stanza)
 	end
 
+	def fetch_vcard_temp(from_tel=nil)
+		iq = Blather::Stanza::Iq::Vcard.new(:get)
+		iq.from = Blather::JID.new(from_tel, CONFIG[:component][:jid])
+		stanza_to(iq, &IQ_MANAGER.method(:write)).then(&:vcard)
+	end
+
 	def sip_account
 		SipAccount.find(customer_id)
 	end

test/test_customer.rb 🔗

@@ -8,6 +8,7 @@ Customer::BRAINTREE = Minitest::Mock.new
 Customer::ELECTRUM = Minitest::Mock.new
 Customer::REDIS = Minitest::Mock.new
 Customer::DB = Minitest::Mock.new
+Customer::IQ_MANAGER = Minitest::Mock.new
 CustomerPlan::DB = Minitest::Mock.new
 CustomerUsage::REDIS = Minitest::Mock.new
 CustomerUsage::DB = Minitest::Mock.new
@@ -109,6 +110,18 @@ class CustomerTest < Minitest::Test
 		Customer::BLATHER.verify
 	end
 
+	def test_fetch_vcard_temp
+		result = Blather::Stanza::Iq::Vcard.new(:result)
+		result.vcard["FN"] = "name"
+		Customer::IQ_MANAGER.expect(
+			:method,
+			->(*) { EMPromise.resolve(result) },
+			[:write]
+		)
+		assert_equal "name", customer.fetch_vcard_temp("+15551234567").sync["FN"]
+	end
+	em :test_fetch_vcard_temp
+
 	def test_customer_usage_report
 		report_for = (Date.today..(Date.today - 1))
 		report_for.first.downto(report_for.last).each.with_index do |day, idx|