From 60052d15ca02b1c40ed265bed6515880d2851b8f Mon Sep 17 00:00:00 2001 From: Azul Date: Thu, 10 Jul 2014 12:13:30 +0200 Subject: clean up and simplify error responses and test code --- test/support/api_integration_test.rb | 5 +++++ test/support/auth_test_helper.rb | 34 ++++++++++++++++++---------------- test/support/rack_test.rb | 7 ++++++- 3 files changed, 29 insertions(+), 17 deletions(-) (limited to 'test/support') diff --git a/test/support/api_integration_test.rb b/test/support/api_integration_test.rb index bd10f11..ccf7066 100644 --- a/test/support/api_integration_test.rb +++ b/test/support/api_integration_test.rb @@ -14,6 +14,11 @@ class ApiIntegrationTest < ActionDispatch::IntegrationTest @token.save end + def assert_login_required + assert_equal 401, get_response.status + assert_json_response error: I18n.t(:not_authorized_login) + end + teardown do if @user && @user.persisted? Identity.destroy_all_for @user diff --git a/test/support/auth_test_helper.rb b/test/support/auth_test_helper.rb index 38c2ea1..79d07d6 100644 --- a/test/support/auth_test_helper.rb +++ b/test/support/auth_test_helper.rb @@ -20,28 +20,30 @@ module AuthTestHelper end def assert_login_required - assert_access_denied(true, false) + assert_error_response :not_authorized_login, :unauthorized, login_url end - def assert_access_denied(denied = true, logged_in = true) - if denied - if @response.content_type == 'application/json' - assert_json_response('error' => I18n.t(:not_authorized)) - assert_response :unprocessable_entity - else - if logged_in - assert_equal({:alert => I18n.t(:not_authorized)}, flash.to_hash) - assert_redirected_to home_url - else - assert_equal({:alert => I18n.t(:not_authorized_login)}, flash.to_hash) - assert_redirected_to login_url - end - end + def assert_access_denied + assert_error_response :not_authorized, :forbidden, home_url + end + + def assert_error_response(message, status=nil, redirect=nil) + message = I18n.t(message) if message.is_a? Symbol + if @response.content_type == 'application/json' + status ||= :unprocessable_entity + assert_json_response('error' => message) + assert_response status else - assert flash[:alert].blank? + assert_equal({:alert => message}, flash.to_hash) + assert_redirected_to redirect end end + def assert_access_granted + assert flash[:alert].blank?, + "expected to have access but there was a flash alert" + end + def expect_logout expect_warden_logout @token.expects(:destroy) if @token diff --git a/test/support/rack_test.rb b/test/support/rack_test.rb index 806339a..83adf6c 100644 --- a/test/support/rack_test.rb +++ b/test/support/rack_test.rb @@ -13,7 +13,12 @@ class RackTest < ActiveSupport::TestCase def assert_access_denied assert_json_response('error' => I18n.t(:not_authorized)) - assert_response :unprocessable_entity + assert_response :forbidden + end + + def assert_login_required + assert_json_response('error' => I18n.t(:not_authorized_login)) + assert_response :unauthorized end # inspired by rails 4 -- cgit v1.2.3 From e8a3df62d14c8dd775811f4af885cf7e76d5d3f6 Mon Sep 17 00:00:00 2001 From: Azul Date: Thu, 17 Jul 2014 11:18:57 +0200 Subject: clean up error assertions in tests We're not testing the redirects anymore. But the error messages should be pretty clear already. We can start testing redirects again once we redirect to different places for different actions. --- test/support/api_integration_test.rb | 5 ----- test/support/assert_responses.rb | 19 +++++++++++++++++++ test/support/auth_test_helper.rb | 20 -------------------- test/support/rack_test.rb | 11 +---------- 4 files changed, 20 insertions(+), 35 deletions(-) (limited to 'test/support') diff --git a/test/support/api_integration_test.rb b/test/support/api_integration_test.rb index ccf7066..bd10f11 100644 --- a/test/support/api_integration_test.rb +++ b/test/support/api_integration_test.rb @@ -14,11 +14,6 @@ class ApiIntegrationTest < ActionDispatch::IntegrationTest @token.save end - def assert_login_required - assert_equal 401, get_response.status - assert_json_response error: I18n.t(:not_authorized_login) - end - teardown do if @user && @user.persisted? Identity.destroy_all_for @user diff --git a/test/support/assert_responses.rb b/test/support/assert_responses.rb index 19c2768..1c9d49d 100644 --- a/test/support/assert_responses.rb +++ b/test/support/assert_responses.rb @@ -55,6 +55,25 @@ module AssertResponses get_response.headers["Content-Disposition"] end + def assert_login_required + assert_error_response :not_authorized_login, :unauthorized + end + + def assert_access_denied + assert_error_response :not_authorized, :forbidden + end + + def assert_error_response(key, status=nil) + message = I18n.t(key) + if content_type == 'application/json' + status ||= :unprocessable_entity + assert_json_response('error' => key.to_s, 'message' => message) + assert_response status + else + assert_equal({:alert => message}, flash.to_hash) + end + end + end class ::ActionController::TestCase diff --git a/test/support/auth_test_helper.rb b/test/support/auth_test_helper.rb index 79d07d6..7af3341 100644 --- a/test/support/auth_test_helper.rb +++ b/test/support/auth_test_helper.rb @@ -19,26 +19,6 @@ module AuthTestHelper return @current_user end - def assert_login_required - assert_error_response :not_authorized_login, :unauthorized, login_url - end - - def assert_access_denied - assert_error_response :not_authorized, :forbidden, home_url - end - - def assert_error_response(message, status=nil, redirect=nil) - message = I18n.t(message) if message.is_a? Symbol - if @response.content_type == 'application/json' - status ||= :unprocessable_entity - assert_json_response('error' => message) - assert_response status - else - assert_equal({:alert => message}, flash.to_hash) - assert_redirected_to redirect - end - end - def assert_access_granted assert flash[:alert].blank?, "expected to have access but there was a flash alert" diff --git a/test/support/rack_test.rb b/test/support/rack_test.rb index 83adf6c..2c9fa9a 100644 --- a/test/support/rack_test.rb +++ b/test/support/rack_test.rb @@ -3,6 +3,7 @@ require_relative 'assert_responses' class RackTest < ActiveSupport::TestCase include Rack::Test::Methods include Warden::Test::Helpers + include AssertResponses CONFIG_RU = (Rails.root + 'config.ru').to_s OUTER_APP = Rack::Builder.parse_file(CONFIG_RU).first @@ -11,16 +12,6 @@ class RackTest < ActiveSupport::TestCase OUTER_APP end - def assert_access_denied - assert_json_response('error' => I18n.t(:not_authorized)) - assert_response :forbidden - end - - def assert_login_required - assert_json_response('error' => I18n.t(:not_authorized_login)) - assert_response :unauthorized - end - # inspired by rails 4 # -> actionpack/lib/action_dispatch/testing/assertions/response.rb def assert_response(type, message = nil) -- cgit v1.2.3