diff --git a/lib/mountebank/helper.rb b/lib/mountebank/helper.rb index 083ea40..765aae4 100644 --- a/lib/mountebank/helper.rb +++ b/lib/mountebank/helper.rb @@ -34,6 +34,6 @@ def call(environment) end if ::Faraday::Middleware.respond_to? :register_middleware - ::Faraday::Response.register_middleware :symbolize_keys => lambda { Mountebank::SymbolizeKeys } + ::Faraday::Response.register_middleware :symbolize_keys => Mountebank::SymbolizeKeys end end diff --git a/lib/mountebank/imposter.rb b/lib/mountebank/imposter.rb index e3e065d..134a216 100644 --- a/lib/mountebank/imposter.rb +++ b/lib/mountebank/imposter.rb @@ -1,6 +1,6 @@ module Mountebank class Imposter - attr_reader :port, :protocol, :name, :stubs, :requests, :matches, :mode + attr_reader :port, :protocol, :name, :stubs, :requests, :matches, :mode, :record_requests PROTOCOL_HTTP = 'http' PROTOCOL_HTTPS = 'https' @@ -26,7 +26,7 @@ def initialize(data={}) def self.build(port, protocol=PROTOCOL_HTTP, options={}) raise 'Invalid port number' unless port.is_a? Integer raise 'Invalid protocol' unless PROTOCOLS.include?(protocol) - + data = {port: port, protocol: protocol}.merge(options) Mountebank::Imposter.new(data) end @@ -104,7 +104,7 @@ def serializable_hash data[:requests] = @requests unless @requests.empty? data[:matches] = @matches unless @matches.empty? data[:mode] = @mode unless @mode.nil? - + data[:recordRequests] = @record_requests unless @record_requests.nil? data end @@ -127,6 +127,7 @@ def set_attributes(data) @requests = data[:requests] || [] @matches = data[:matches] || [] @mode = data[:mode] || nil + @record_requests = data[:record_requests] || data[:recordRequests] || false end end end diff --git a/lib/mountebank/network.rb b/lib/mountebank/network.rb index 6a41380..9d77b41 100644 --- a/lib/mountebank/network.rb +++ b/lib/mountebank/network.rb @@ -1,5 +1,4 @@ require 'faraday' -require 'faraday_middleware' module Mountebank class Network diff --git a/mountebank.gemspec b/mountebank.gemspec index 39edaa7..a85c71b 100644 --- a/mountebank.gemspec +++ b/mountebank.gemspec @@ -18,11 +18,10 @@ Gem::Specification.new do |spec| spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] - spec.add_runtime_dependency "faraday", "~>0.9.0" - spec.add_runtime_dependency "faraday_middleware" - spec.add_development_dependency "bundler", "~> 1.7" - spec.add_development_dependency "rake", "~> 10.0" - spec.add_development_dependency "dotenv", "~> 1.0.0" + spec.add_runtime_dependency "faraday", "~>2.0.0" + spec.add_development_dependency "bundler", "~> 2.3" + spec.add_development_dependency "rake", "~> 13.0" + spec.add_development_dependency "dotenv", "~> 2.7.6" spec.add_development_dependency "rspec" spec.add_development_dependency "pry" end diff --git a/spec/mountebank/imposter_spec.rb b/spec/mountebank/imposter_spec.rb index 0759758..3526345 100644 --- a/spec/mountebank/imposter_spec.rb +++ b/spec/mountebank/imposter_spec.rb @@ -17,6 +17,7 @@ expect(imposter.stubs).to be_empty expect(imposter.requests).to be_empty expect(imposter.mode).to be_nil + expect(imposter.record_requests).to be_falsey end end @@ -173,7 +174,7 @@ end it 'adds new stub' do - expect(imposter.to_json).to eq("{\"port\":#{port},\"protocol\":\"#{protocol}\",\"name\":\"imposter_#{port}\",\"stubs\":[{\"responses\":[{\"is\":{\"statusCode\":200,\"body\":\"ohai you\"}}]}]}") + expect(imposter.to_json).to eq("{\"port\":#{port},\"protocol\":\"#{protocol}\",\"name\":\"imposter_#{port}\",\"stubs\":[{\"responses\":[{\"is\":{\"statusCode\":200,\"body\":\"ohai you\"}}]}],\"recordRequests\":false}") end it 'is valid imposter' do @@ -253,7 +254,29 @@ let(:imposter) { Mountebank::Imposter.build(port, protocol) } it 'returns valid data' do - expect(imposter.replayable_data).to eq({port:port, protocol:protocol, name:"imposter_#{port}"}) + expect(imposter.replayable_data).to eq({port:port, protocol:protocol, name:"imposter_#{port}", recordRequests: false}) end end -end \ No newline at end of file + + describe '#record_requests' do + let(:imposter) { Mountebank::Imposter.build(port, protocol, {record_requests: true}) } + + it 'records requests' do + response1 = Mountebank::Stub::HttpResponse.create(200, {}, 'hello recorder') + data1 = {equals: {path:'/test_recording'}} + data2 = {equals: {method:'GET'}} + predicate1 = Mountebank::Stub::Predicate.new(data1) + predicate2 = Mountebank::Stub::Predicate.new(data2) + imposter.add_stub(response1, [predicate1, predicate2]) + imposter.save! + + expect(imposter.replayable_data).to include({recordRequests: true}) + imposter.reload + expect(imposter.requests).to match_array([]) + test_url('http://127.0.0.1:4545/test_recording') + imposter.reload + expect(imposter.requests.size).to be(1) + expect(imposter.requests.first[:path]).to match("/test_recording") + end + end +end