diff options
| -rw-r--r-- | lib/nickserver/dispatcher.rb | 3 | ||||
| -rw-r--r-- | test/integration/dispatcher_test.rb | 93 | ||||
| -rw-r--r-- | test/integration/nickserver_test.rb | 1 | ||||
| -rw-r--r-- | test/support/http_stub_helper.rb | 8 | 
4 files changed, 74 insertions, 31 deletions
diff --git a/lib/nickserver/dispatcher.rb b/lib/nickserver/dispatcher.rb index 9968e95..75f6083 100644 --- a/lib/nickserver/dispatcher.rb +++ b/lib/nickserver/dispatcher.rb @@ -14,8 +14,10 @@  #  require 'nickserver/request' +require 'nickserver/handler_chain'  require 'nickserver/request_handlers/invalid_email_handler'  require 'nickserver/request_handlers/local_email_handler' +require 'nickserver/request_handlers/leap_email_handler'  require 'nickserver/request_handlers/hkp_email_handler'  require 'nickserver/request_handlers/fingerprint_handler' @@ -45,6 +47,7 @@ module Nickserver      def handler_chain        HandlerChain.new RequestHandlers::InvalidEmailHandler,          RequestHandlers::LocalEmailHandler, +        RequestHandlers::LeapEmailHandler,          RequestHandlers::HkpEmailHandler,          RequestHandlers::FingerprintHandler,          Proc.new { Nickserver::Response.new(404, "404 Not Found\n") } diff --git a/test/integration/dispatcher_test.rb b/test/integration/dispatcher_test.rb index 60ad9d7..986972c 100644 --- a/test/integration/dispatcher_test.rb +++ b/test/integration/dispatcher_test.rb @@ -5,44 +5,51 @@ class Nickserver::DispatcherTest < Minitest::Test    def test_empty_query      handle -    assert_response status: 404, content: "404 Not Found\n" +    assert_response not_found    end    def test_invalid_query      handle address: ['asdf'] -    assert_response status: 500, content: "500 Not a valid address\n" +    assert_response error('Not a valid address') +  end + +  def test_fingerprint_to_short +    handle fingerprint: ['44F2F455E28'] +    assert_response error("Fingerprint invalid: 44F2F455E28") +  end + +  def test_fingerprint_is_not_hex +    handle fingerprint: ['X36E738D69173C13Z709E44F2F455E2824D18DDX'] +    assert_response error("Fingerprint invalid: X36E738D69173C13Z709E44F2F455E2824D18DDX")    end    def test_missing_domain      handle address: ['valid@email.tld'] -    assert_response_from_hkp +    stub_nicknym_not_available +    hkp_source.expect :query, success, [Nickserver::EmailAddress] +    assert_response success    end -  def test_email_from_hkp +  def test_email_via_hkp      handle address: ['valid@email.tld'], headers: { "Host" => "http://nickserver.me" } -    assert_response_from_hkp +    stub_nicknym_not_available +    hkp_source.expect :query, success, [Nickserver::EmailAddress] +    assert_response success    end -  def test_fingerprint_to_short -    handle fingerprint: ['44F2F455E28'] -    assert_response status: 500, content: "500 Fingerprint invalid: 44F2F455E28\n" -  end - -  def test_fingerprint_is_not_hex -    handle fingerprint: ['X36E738D69173C13Z709E44F2F455E2824D18DDX'] -    assert_response status: 500, -      content: "500 Fingerprint invalid: X36E738D69173C13Z709E44F2F455E2824D18DDX\n" +  def test_email_via_nicknym +    handle address: ['valid@email.tld'], headers: { "Host" => "http://nickserver.me" } +    nicknym_source.expect :available_for?, true, [String] +    nicknym_source.expect :query, success, [Nickserver::EmailAddress] +    assert_response success    end -  def test_get_key_with_fingerprint_from_hkp +  def test_get_key_with_fingerprint      handle fingerprint: ['E36E738D69173C13D709E44F2F455E2824D18DDF'] -    source = Minitest::Mock.new -    source.expect :get_key_by_fingerprint, -      Nickserver::Response.new(200, "fake key response"), +    stub_nicknym_not_available +    hkp_source.expect :get_key_by_fingerprint, success,        ['E36E738D69173C13D709E44F2F455E2824D18DDF'] -    Nickserver::Hkp::Source.stub :new, source do -      assert_response status: 200, content: "fake key response" -    end +    assert_response success    end    protected @@ -52,20 +59,46 @@ class Nickserver::DispatcherTest < Minitest::Test      @params = Hash[ params.map{ |k,v| [k.to_s, v] } ]    end -  def assert_response(args) -    responder.expect :respond, nil, [args[:status], args[:content]] -    dispatcher.respond_to @params, @headers -    responder.verify +  def assert_response(response) +    Nickserver::Nicknym::Source.stub :new, nicknym_source do +      Nickserver::Hkp::Source.stub :new, hkp_source do +        responder.expect :respond, nil, [response.status, response.content] +        dispatcher.respond_to @params, @headers +        responder.verify +      end +    end +  end + +  def hkp_source +    @hkp_source ||= Minitest::Mock.new    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: "fake content" +  def stub_nicknym_not_available +    def nicknym_source.available_for?(*_args) +      false      end    end +  def nicknym_source +    @nicknym_source ||= Minitest::Mock.new +  end + +  def success +    response status: 200, content: "fake content" +  end + +  def not_found +    response status: 404, content: "404 Not Found\n" +  end + +  def error(msg) +    response status: 500, content: "500 #{msg}\n" +  end + +  def response(options) +    Nickserver::Response.new(options[:status], options[:content]) +  end +    def dispatcher      Nickserver::Dispatcher.new responder    end diff --git a/test/integration/nickserver_test.rb b/test/integration/nickserver_test.rb index e367e06..a62c7f9 100644 --- a/test/integration/nickserver_test.rb +++ b/test/integration/nickserver_test.rb @@ -29,6 +29,7 @@ class NickserverTest < Minitest::Test    def test_GET_key_by_email_address_served_via_SKS      uid    = 'cloudadmin@leap.se'      key_id = 'E818C478D3141282F7590D29D041EB11B1647490' +    stub_nicknym_available_response 'leap.se', status: 404      stub_sks_vindex_reponse(uid, body: file_content(:leap_vindex_result))      stub_sks_get_reponse(key_id, body: file_content(:leap_public_key)) diff --git a/test/support/http_stub_helper.rb b/test/support/http_stub_helper.rb index 6b05f98..cb9b578 100644 --- a/test/support/http_stub_helper.rb +++ b/test/support/http_stub_helper.rb @@ -7,6 +7,11 @@ module HttpStubHelper      adapter.verify    end +  def stub_nicknym_available_response(domain, response = {}) +    stub_http_request :get, "https://#{domain}/provider.json", +      response: response +  end +    def stub_sks_vindex_reponse(uid, response = {})      stub_http_request :get, config.hkp_url,        query: {op: 'vindex', search: uid, exact: 'on', options: 'mr', fingerprint: 'on'}, @@ -28,8 +33,9 @@ module HttpStubHelper    def stub_http_request(verb, url, options = {})      response = {status: 200, body: ""}.merge(options.delete(:response) || {}) +    options = nil if options == {}      adapter.expect :get, [response[:status], response[:body]], -      [url, options] +      [url, options].compact    end    def adapter  | 
