test/faraday_middleware_test.rb in circuitbox-0.7.0 vs test/faraday_middleware_test.rb in circuitbox-0.8.0
- old
+ new
@@ -1,41 +1,115 @@
require 'test_helper'
-require_relative '../lib/circuitbox/faraday_middleware'
+require 'circuitbox/faraday_middleware'
+class SentialException < StandardError; end
+
class Circuitbox
class FaradayMiddlewareTest < Minitest::Test
+ attr_reader :app
def setup
@app = gimme
- @env = gimme
- give(@env).url { 'URL' }
+ end
- @middleware = FaradayMiddleware.new @app,
- :identifier => 'ID',
- :exceptions => [StandardError]
+ def test_default_identifier
+ env = { url: "sential" }
+ assert_equal FaradayMiddleware.new(app).identifier.call(env), "sential"
end
- def test_should_use_env_url_proc_if_not_provided_as_identifier
- middleware = FaradayMiddleware.new @app, :exceptions => gimme
- assert middleware.identifier.is_a?(Proc)
- assert_equal 'URL', middleware.identifier.call(@env)
+ def test_overwrite_identifier
+ middleware = FaradayMiddleware.new(app, identifier: "sential")
+ assert_equal middleware.identifier, "sential"
end
- def test_should_use_request_error_if_not_provided_as_exception
- middleware = FaradayMiddleware.new @app, :identifier => 'ID'
- assert_equal [Faraday::Error::TimeoutError],
- middleware.exceptions
+ def test_overwrite_default_value_generator_lambda
+ stub_circuitbox
+ env = { url: "url" }
+ give(circuitbox).circuit("url", anything) { circuit }
+ default_value_generator = lambda { |_| :sential }
+ middleware = FaradayMiddleware.new(app,
+ circuitbox: circuitbox,
+ default_value: default_value_generator)
+ assert_equal middleware.call(env), :sential
end
- def test_successful_call
- @middleware.call(@env)
+ def test_overwrite_default_value_generator_static_value
+ stub_circuitbox
+ env = { url: "url" }
+ give(circuitbox).circuit("url", anything) { circuit }
+ middleware = FaradayMiddleware.new(app, circuitbox: circuitbox, default_value: :sential)
+ assert_equal middleware.call(env), :sential
end
- def test_failed_call
- assert_raises Circuitbox::RequestError do
- give(@env).success? { false }
- @middleware.on_complete(@env)
- end
+ def test_default_exceptions
+ middleware = FaradayMiddleware.new(app)
+ assert_includes middleware.exceptions, Faraday::Error::TimeoutError
+ assert_includes middleware.exceptions, FaradayMiddleware::RequestFailed
end
+ def test_overwrite_exceptions
+ middleware = FaradayMiddleware.new(app, exceptions: [SentialException])
+ assert_includes middleware.exceptions, SentialException
+ end
+
+ def test_pass_circuit_breaker_run_options
+ stub_circuitbox
+ give(circuit).run(:sential)
+ give(circuitbox).circuit("url", anything) { circuit }
+ env = { url: "url", circuit_breaker_run_options: :sential }
+ middleware = FaradayMiddleware.new(app, circuitbox: circuitbox)
+ middleware.call(env)
+ verify(circuit).run(:sential)
+ end
+
+ def test_pass_circuit_breaker_options
+ stub_circuitbox
+ env = { url: "url" }
+ expected_circuit_breaker_options = {
+ sential: :sential,
+ exceptions: FaradayMiddleware::DEFAULT_EXCEPTIONS,
+ volume_threshold: 10
+ }
+ give(circuitbox).circuit("url", expected_circuit_breaker_options) { circuit }
+ options = { circuitbox: circuitbox, circuit_breaker_options: { sential: :sential } }
+ middleware = FaradayMiddleware.new(app, options)
+ middleware.call(env)
+
+ verify(circuitbox).circuit("url", expected_circuit_breaker_options)
+ end
+
+ def test_overwrite_circuitbreaker_default_value
+ stub_circuitbox
+ env = { url: "url", circuit_breaker_default_value: :sential }
+ give(circuitbox).circuit("url", anything) { circuit }
+ middleware = FaradayMiddleware.new(app, circuitbox: circuitbox)
+ assert_equal middleware.call(env), :sential
+ end
+
+ def test_return_value_closed_circuit
+ stub_circuitbox
+ env = { url: "url" }
+ give(circuit).run(anything) { :sential }
+ give(circuitbox).circuit("url", anything) { circuit }
+ middleware = FaradayMiddleware.new(app, circuitbox: circuitbox)
+ assert_equal middleware.call(env), :sential
+ end
+
+ def test_return_null_response_for_open_circuit
+ stub_circuitbox
+ env = { url: "url" }
+ give(circuit).run(anything) { nil }
+ give(circuitbox).circuit("url", anything) { circuit }
+ response = FaradayMiddleware.new(app, circuitbox: circuitbox).call(env)
+ assert_kind_of Faraday::Response, response
+ assert_equal response.status, 503
+ assert response.finished?
+ refute response.success?
+ end
+
+ attr_reader :circuitbox, :circuit
+ def stub_circuitbox
+ @circuitbox = gimme
+ @circuit = gimme
+ end
end
end