From 76636986736fabe854d47e4662088856fc3cc356 Mon Sep 17 00:00:00 2001 From: Akinori MUSHA Date: Thu, 19 Jan 2017 15:37:27 +0900 Subject: [PATCH] Webmock 2 does not support matching body for multipart/form-data https://github.com/bblimke/webmock/issues/623 --- spec/models/agents/post_agent_spec.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/spec/models/agents/post_agent_spec.rb b/spec/models/agents/post_agent_spec.rb index e811f8a1..b9dc8260 100644 --- a/spec/models/agents/post_agent_spec.rb +++ b/spec/models/agents/post_agent_spec.rb @@ -158,9 +158,14 @@ describe Agents::PostAgent do it 'makes a multipart request when receiving a file_pointer' do WebMock.reset! stub_request(:post, "http://www.example.com/"). - with(:body => "-------------RubyMultipartPost\r\nContent-Disposition: form-data; name=\"default\"\r\n\r\nvalue\r\n-------------RubyMultipartPost\r\nContent-Disposition: form-data; name=\"file\"; filename=\"local.path\"\r\nContent-Length: 8\r\nContent-Type: \r\nContent-Transfer-Encoding: binary\r\n\r\ntestdata\r\n-------------RubyMultipartPost--\r\n\r\n", - :headers => {'Accept-Encoding'=>'gzip,deflate', 'Content-Length'=>'307', 'Content-Type'=>'multipart/form-data; boundary=-----------RubyMultipartPost', 'User-Agent'=>'Huginn - https://github.com/cantino/huginn'}). - to_return(:status => 200, :body => "", :headers => {}) + with(headers: { + 'Accept-Encoding' => 'gzip,deflate', + 'Content-Type' => /\Amultipart\/form-data; boundary=/, + 'User-Agent' => 'Huginn - https://github.com/cantino/huginn' + }) { |request| + qboundary = Regexp.quote(request.headers['Content-Type'][/ boundary=(.+)/, 1]) + /\A--#{qboundary}\r\nContent-Disposition: form-data; name="default"\r\n\r\nvalue\r\n--#{qboundary}\r\nContent-Disposition: form-data; name="file"; filename="local.path"\r\nContent-Length: 8\r\nContent-Type: \r\nContent-Transfer-Encoding: binary\r\n\r\ntestdata\r\n--#{qboundary}--\r\n\r\n\z/ === request.body + }.to_return(status: 200, body: "", headers: {}) event = Event.new(payload: {file_pointer: {agent_id: 111, file: 'test'}}) io_mock = mock() mock(@checker).get_io(event) { StringIO.new("testdata") }