diff options
| -rw-r--r-- | test/integration/api/cert_test.rb | 30 | ||||
| -rw-r--r-- | test/support/api_integration_test.rb | 23 | ||||
| -rw-r--r-- | test/support/assert_responses.rb | 30 | ||||
| -rw-r--r-- | test/support/browser_integration_test.rb | 1 | 
4 files changed, 79 insertions, 5 deletions
diff --git a/test/integration/api/cert_test.rb b/test/integration/api/cert_test.rb new file mode 100644 index 0000000..74d439a --- /dev/null +++ b/test/integration/api/cert_test.rb @@ -0,0 +1,30 @@ +require 'test_helper' + +class CertTest < ApiIntegrationTest + +  test "retrieve eip cert" do +    login +    get '/1/cert', {}, RACK_ENV +    assert_text_response +    assert_response_includes "BEGIN RSA PRIVATE KEY" +    assert_response_includes "END RSA PRIVATE KEY" +    assert_response_includes "BEGIN CERTIFICATE" +    assert_response_includes "END CERTIFICATE" +  end + +  test "fetching certs requires login by default" do +    get '/1/cert', {}, RACK_ENV +    assert_json_response error: I18n.t(:not_authorized) +  end + +  test "retrieve anonymous eip cert" do +    with_config allow_anonymous_certs: true do +      get '/1/cert', {}, RACK_ENV +      assert_text_response +      assert_response_includes "BEGIN RSA PRIVATE KEY" +      assert_response_includes "END RSA PRIVATE KEY" +      assert_response_includes "BEGIN CERTIFICATE" +      assert_response_includes "END CERTIFICATE" +    end +  end +end diff --git a/test/support/api_integration_test.rb b/test/support/api_integration_test.rb new file mode 100644 index 0000000..50c528b --- /dev/null +++ b/test/support/api_integration_test.rb @@ -0,0 +1,23 @@ +class ApiIntegrationTest < ActionDispatch::IntegrationTest + +  DUMMY_TOKEN = Token.new +  RACK_ENV = {'HTTP_AUTHORIZATION' => %Q(Token token="#{DUMMY_TOKEN.to_s}")} + +  def login(user = nil) +    @user ||= user ||= FactoryGirl.create(:user) +    @token ||= DUMMY_TOKEN +    @token.user_id = @user.id +    @token.last_seen_at = Time.now +    @token.save +  end + +  teardown do +    if @user && @user.persisted? +      Identity.destroy_all_for @user +      @user.reload.destroy +    end +    if @token && @token.persisted? +      @token.reload.destroy +    end +  end +end diff --git a/test/support/assert_responses.rb b/test/support/assert_responses.rb index b01166f..19c2768 100644 --- a/test/support/assert_responses.rb +++ b/test/support/assert_responses.rb @@ -8,21 +8,27 @@ module AssertResponses      @response || last_response    end -  def assert_attachement_filename(name) -    assert_equal %Q(attachment; filename="#{name}"), -      get_response.headers["Content-Disposition"] +  def content_type +    get_response.content_type.to_s.split(';').first    end    def json_response +    return nil unless content_type == 'application/json'      response = JSON.parse(get_response.body)      response.respond_to?(:with_indifferent_access) ?        response.with_indifferent_access :        response    end +  def assert_text_response(body = nil) +    assert_equal 'text/plain', content_type +    unless body.nil? +      assert_equal body, get_response.body +    end +  end +    def assert_json_response(object) -    assert_equal 'application/json', -      get_response.content_type.to_s.split(';').first +    assert_equal 'application/json', content_type      if object.is_a? Hash        object.stringify_keys! if object.respond_to? :stringify_keys!        assert_equal object, json_response @@ -35,6 +41,20 @@ module AssertResponses      object.stringify_keys! if object.respond_to? :stringify_keys!      assert_json_response :errors => object    end + +  # checks for the presence of a key in a json response +  # or a string in a text response +  def assert_response_includes(string_or_key) +    response = json_response || get_response.body +    assert response.include?(string_or_key), +      "response should have included #{string_or_key}" +  end + +  def assert_attachement_filename(name) +    assert_equal %Q(attachment; filename="#{name}"), +      get_response.headers["Content-Disposition"] +  end +  end  class ::ActionController::TestCase diff --git a/test/support/browser_integration_test.rb b/test/support/browser_integration_test.rb index 1c872ff..4fec59f 100644 --- a/test/support/browser_integration_test.rb +++ b/test/support/browser_integration_test.rb @@ -54,6 +54,7 @@ class BrowserIntegrationTest < ActionDispatch::IntegrationTest    end    # currently this only works for tests with poltergeist. +  # ApiIntegrationTest has a working implementation for RackTest    def login(user = nil)      @user ||= user ||= FactoryGirl.create(:user)      token = Token.create user_id: user.id  | 
