Use blather error method

Stephen Paul Weber created

Change summary

sgx-bwmsgsv2.rb        | 24 +++---------------------
test/test_component.rb |  8 ++++++++
2 files changed, 11 insertions(+), 21 deletions(-)

Detailed changes

sgx-bwmsgsv2.rb 🔗

@@ -169,24 +169,6 @@ module SGXbwmsgsv2
 		panic(e)
 	end
 
-	def self.error_msg(orig, query_node, type, name, _text=nil)
-		orig.type = :error
-
-		error = Nokogiri::XML::Node.new 'error', orig.document
-		error['type'] = type
-		orig.add_child(error)
-
-		suberr = Nokogiri::XML::Node.new name, orig.document
-		suberr['xmlns'] = 'urn:ietf:params:xml:ns:xmpp-stanzas'
-		error.add_child(suberr)
-
-		orig.add_child(query_node) if query_node
-
-		# TODO: add some explanatory xml:lang='en' text (see text param)
-		puts "RESPONSE3: #{orig.inspect}"
-		return orig
-	end
-
 	# workqueue_count MUST be 0 or else Blather uses threads!
 	setup ARGV[0], ARGV[1], ARGV[2], ARGV[3], nil, nil, workqueue_count: 0
 
@@ -418,8 +400,8 @@ module SGXbwmsgsv2
 				to_catapult_possible_oob(m, num_dest, *creds)
 			end
 		}.catch { |e|
-			if e.is_a?(Array) && e.length == 2
-				write_to_stream error_msg(m.reply, m.body, *e)
+			if e.is_a?(Array) && (e.length == 2 || e.length == 3)
+				write_to_stream m.as_error(e[1], e[0], e[2])
 			else
 				EMPromise.reject(e)
 			end
@@ -726,7 +708,7 @@ module SGXbwmsgsv2
 			EMPromise.reject(:done)
 		end.catch { |e|
 			if e.is_a?(Array) && (e.length == 2 || e.length == 3)
-				write_to_stream error_msg(i.reply, qn, *e)
+				write_to_stream i.as_error(e[1], e[0], e[2])
 			elsif e != :done
 				EMPromise.reject(e)
 			end

test/test_component.rb 🔗

@@ -32,6 +32,10 @@ class ComponentTest < Minitest::Test
 		).element_name
 	end
 
+	def xmpp_error_text(error)
+		error.find_first("ns:text", ns: Blather::StanzaError::STANZA_ERR_NS)&.text
+	end
+
 	def process_stanza(s)
 		SGXbwmsgsv2.send(:client).receive_data(s)
 		raise $panic if $panic
@@ -251,6 +255,10 @@ class ComponentTest < Minitest::Test
 		error = stanza.find_first("error")
 		assert_equal "cancel", error["type"]
 		assert_equal "conflict", xmpp_error_name(error)
+		assert_equal(
+			"Another user exists for +15550000000",
+			xmpp_error_text(error)
+		)
 	end
 	em :test_ibr_conflict
 end