diff options
-rw-r--r-- | lib/nickserver/request_handlers/local_email_handler.rb | 7 | ||||
-rw-r--r-- | test/integration/dispatcher_test.rb | 16 | ||||
-rw-r--r-- | test/support/request_handler_test_helper.rb | 39 | ||||
-rw-r--r-- | test/unit/request_handlers/local_email_handler_test.rb | 45 |
4 files changed, 57 insertions, 50 deletions
diff --git a/lib/nickserver/request_handlers/local_email_handler.rb b/lib/nickserver/request_handlers/local_email_handler.rb index 1f2abc2..9e8ed48 100644 --- a/lib/nickserver/request_handlers/local_email_handler.rb +++ b/lib/nickserver/request_handlers/local_email_handler.rb @@ -9,7 +9,6 @@ module Nickserver def call(request) return nil unless request.email domain = Config.domain || request.domain - return missing_domain_response if domain.nil? || domain == '' email = EmailAddress.new(request.email) return nil unless email.domain?(domain) source.query email @@ -17,16 +16,10 @@ module Nickserver protected - attr_reader :domain - def source Nickserver::CouchDB::Source.new end - def missing_domain_response - ErrorResponse.new "HTTP request must include a Host header." - end - end end end diff --git a/test/integration/dispatcher_test.rb b/test/integration/dispatcher_test.rb index 60d252b..4ec823b 100644 --- a/test/integration/dispatcher_test.rb +++ b/test/integration/dispatcher_test.rb @@ -15,16 +15,12 @@ class Nickserver::DispatcherTest < Minitest::Test def test_missing_domain handle address: ['valid@email.tld'] - assert_response status: 500, content: "500 HTTP request must include a Host header.\n" + assert_response_from_hkp end def test_email_from_hkp handle address: ['valid@email.tld'], headers: { "Host" => "http://nickserver.me" } - source = Minitest::Mock.new - source.expect :query, Nickserver::Response.new(200, "fake content"), [Nickserver::EmailAddress] - Nickserver::Hkp::Source.stub :new, source do - assert_response status: 200, content: "200 fake content" - end + assert_response_from_hkp end def test_fingerprint_to_short @@ -62,6 +58,14 @@ class Nickserver::DispatcherTest < Minitest::Test responder.verify end + def assert_response_from_hkp + source = Minitest::Mock.new + source.expect :query, Nickserver::Response.new(200, "fake content"), [Nickserver::EmailAddress] + Nickserver::Hkp::Source.stub :new, source do + assert_response status: 200, content: "200 fake content" + end + end + def dispatcher Nickserver::Dispatcher.new responder end diff --git a/test/support/request_handler_test_helper.rb b/test/support/request_handler_test_helper.rb new file mode 100644 index 0000000..3ca89ba --- /dev/null +++ b/test/support/request_handler_test_helper.rb @@ -0,0 +1,39 @@ +module RequestHandlerTestHelper + + protected + + def assert_refuses(opts = {}) + assert_nil handle(request(opts)) + end + + def assert_handles(opts = {}) + assert handle(request(opts)) + end + + def assert_queries_for(*query_args, &block) + source_class.stub :new, source_expecting_query_for(*query_args), &block + end + + def source_expecting_query_for(*query_args) + source = Minitest::Mock.new + source.expect :query, 'response', query_args + source + end + + def assert_responds_with_error(msg, opts) + response = handle(request(opts)) + assert_equal 500, response.status + assert_equal "500 #{msg}\n", response.content + end + + def handle(request) + handler.call(request) + end + + def request(opts = {}) + params = {'address' => [opts[:email]]} + headers = {'Host' => opts[:domain]} + Nickserver::Request.new params, headers + end + +end diff --git a/test/unit/request_handlers/local_email_handler_test.rb b/test/unit/request_handlers/local_email_handler_test.rb index 8f303ec..1bfe264 100644 --- a/test/unit/request_handlers/local_email_handler_test.rb +++ b/test/unit/request_handlers/local_email_handler_test.rb @@ -1,7 +1,9 @@ require 'test_helper' +require 'support/request_handler_test_helper' require 'nickserver/request_handlers/local_email_handler' class LocalEmailHandlerTest < MiniTest::Test + include RequestHandlerTestHelper def test_no_email assert_refuses @@ -12,14 +14,13 @@ class LocalEmailHandlerTest < MiniTest::Test end def test_local_email - assert_handles email: 'me@local.tld', domain: 'local.tld' + assert_queries_for Nickserver::EmailAddress do + assert_handles email: 'me@local.tld', domain: 'local.tld' + end end def test_missing_host_header - Nickserver::Config.stub :domain, nil do - assert_responds_with_error "HTTP request must include a Host header.", - email: 'me@local.tld' - end + assert_refuses email: 'me@local.tld' end protected @@ -28,38 +29,8 @@ class LocalEmailHandlerTest < MiniTest::Test Nickserver::RequestHandlers::LocalEmailHandler.new end - def source - source = Minitest::Mock.new - source.expect :query, - 'response', - [Nickserver::EmailAddress] - source - end - - def assert_handles(opts) - Nickserver::CouchDB::Source.stub :new, source do - assert_equal 'response', handle(request(opts)) - end - end - - def assert_responds_with_error(msg, opts) - response = handle(request(opts)) - assert_equal 500, response.status - assert_equal "500 #{msg}\n", response.content - end - - def assert_refuses(opts = {}) - assert_nil handle(request(opts)) - end - - def handle(request) - handler.call(request) - end - - def request(opts = {}) - params = {'address' => [opts[:email]]} - headers = {'Host' => opts[:domain]} - Nickserver::Request.new params, headers + def source_class + Nickserver::CouchDB::Source end end |