diff options
author | Azul <azul@riseup.net> | 2016-09-19 09:51:38 +0200 |
---|---|---|
committer | Azul <azul@riseup.net> | 2016-09-19 09:51:38 +0200 |
commit | a1c7d68b05f142322a190b450971d27c076310a9 (patch) | |
tree | 75b171436d9f1109025904fda4cc650b2570a74b /test | |
parent | d3c9ec2c815a4cd79cfaf40d1de0365fdec90cb2 (diff) |
refactor: separate handler chain from dispatcher
Handler Chain is of handlers that respond to call.
Invoking handle(*args) on the chain will call the handlers with the given args
until one of them returns a result that is truethy (i.e. not false or nil).
Extracted from the dispatcher so we can also handle exceptions there in the
future. (So that if one of the network connections to the request_handlers
fails we can continue while still tracking the failed exception.)
Diffstat (limited to 'test')
-rw-r--r-- | test/unit/handler_chain_test.rb | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/test/unit/handler_chain_test.rb b/test/unit/handler_chain_test.rb new file mode 100644 index 0000000..067f11e --- /dev/null +++ b/test/unit/handler_chain_test.rb @@ -0,0 +1,45 @@ +require 'test_helper' +require 'nickserver/handler_chain' + +class HandlerChainTest < Minitest::Test + + def test_initialization + assert chain + end + + def test_noop + assert_nil chain.handle + end + + def test_triggering_handlers + handler_mock.expect :call, nil, [:a, :b] + chain handler_mock + chain.handle :a, :b + handler_mock.verify + end + + def test_returns_handler_result + chain handler_with_nil, handler_with_result + assert_equal :result, chain.handle + end + + + protected + + def chain(*handlers) + @chain ||= Nickserver::HandlerChain.new(*handlers) + end + + def handler_mock + @handler ||= Minitest::Mock.new + end + + def handler_with_nil + Proc.new {} + end + + def handler_with_result + Proc.new { :result } + end + +end |