require "spec_helper"
RSpec.describe Savon::Builder do
let(:globals) { Savon::GlobalOptions.new({ :endpoint => "http://example.co", :namespace => "http://v1.example.com" }) }
let(:no_wsdl) { Wasabi::Document.new }
it "building multipart request from inline content" do
locals = {
attachments: [
{ filename: 'x1.xml', content: 'abc1'},
{ filename: 'x2.xml', content: 'abc2'},
]
}
builder = Savon::Builder.new(:operation1, no_wsdl, globals, Savon::LocalOptions.new(locals))
request_body = builder.to_s
expect(request_body).to include('Content-Type')
expect(request_body).to match(/<[a-z]+:operation1>/)
locals[:attachments].each do |attachment|
expect(request_body).to match(/^Content-Location: #{attachment[:filename]}\s$/)
expect(request_body).to include(Base64.encode64(attachment[:content]).strip)
end
end
it "building multipart request from file" do
locals = {
attachments: {
'file.gz' => File.expand_path("../../fixtures/gzip/message.gz", __FILE__)
}
}
builder = Savon::Builder.new(:operation1, no_wsdl, globals, Savon::LocalOptions.new(locals))
request_body = builder.to_s
expect(request_body).to include('Content-Type')
expect(request_body).to match(/<[a-z]+:operation1>/)
locals[:attachments].each do |id, file|
expect(request_body).to match(/^Content-Location: #{id}\s$/)
expect(request_body.gsub("\r", "")).to include(Base64.encode64(File.read(file)).strip)
end
end
end