Skip to content

Commit 6674ad8

Browse files
committed
Add a builder for SOAP envelopes
1 parent 387b6a0 commit 6674ad8

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

lib/croatia/fiscalizer/xml_builder.rb

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,25 @@ def echo(message)
133133
REXML::Document.new.tap do |doc|
134134
doc.add_element("tns:EchoRequest", {
135135
"xmlns:tns" => TNS,
136-
"xmlns:xsi" => XSI,
136+
"xmlns:xsi" => XSI
137137
}).text = message
138138
end
139139
end
140140

141+
def soap_envelope(document)
142+
REXML::Document.new.tap do |soap_doc|
143+
soap_doc << REXML::XMLDecl.new("1.0", "UTF-8")
144+
145+
envelope = soap_doc.add_element("soapenv:Envelope", {
146+
"xmlns:soapenv" => "http://schemas.xmlsoap.org/soap/envelope/"
147+
})
148+
149+
body = envelope.add_element("soapenv:Body")
150+
151+
body << document.root.deep_clone
152+
end
153+
end
154+
141155
private
142156

143157
def build(envelope:, invoice:, message_id:, timezone: Croatia::Fiscalizer::TZ, **options)

test/croatia/fiscalizer/xml_builder_test.rb

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,4 +798,43 @@ def test_echo_with_nil
798798

799799
assert_xml_equal expected_xml, document
800800
end
801+
802+
def test_soap_envelope
803+
# Create a simple document to wrap
804+
inner_doc = Croatia::Fiscalizer::XMLBuilder.echo("Test message")
805+
806+
# Wrap it in SOAP envelope
807+
soap_doc = Croatia::Fiscalizer::XMLBuilder.soap_envelope(inner_doc)
808+
809+
expected_xml = <<~XML
810+
<?xml version='1.0' encoding='UTF-8'?>
811+
<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
812+
<soapenv:Body>
813+
<tns:EchoRequest xmlns:tns='http://www.apis-it.hr/fin/2012/types/f73' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>Test message</tns:EchoRequest>
814+
</soapenv:Body>
815+
</soapenv:Envelope>
816+
XML
817+
818+
assert_xml_equal expected_xml, soap_doc
819+
end
820+
821+
def test_soap_envelope_with_empty_document
822+
# Create an empty document
823+
empty_doc = REXML::Document.new
824+
empty_doc.add_element("EmptyElement")
825+
826+
# Wrap it in SOAP envelope
827+
soap_doc = Croatia::Fiscalizer::XMLBuilder.soap_envelope(empty_doc)
828+
829+
expected_xml = <<~XML
830+
<?xml version='1.0' encoding='UTF-8'?>
831+
<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
832+
<soapenv:Body>
833+
<EmptyElement/>
834+
</soapenv:Body>
835+
</soapenv:Envelope>
836+
XML
837+
838+
assert_xml_equal expected_xml, soap_doc
839+
end
801840
end

0 commit comments

Comments
 (0)