From 603a95223ea90d0cfdd1ad329dc8f09c97e97202 Mon Sep 17 00:00:00 2001 From: bruno bornsztein Date: Fri, 27 Dec 2013 09:22:41 -0600 Subject: [PATCH] add authorizations controller test --- app/controllers/authorizations_controller.rb | 3 +- app/controllers/sessions_controller.rb | 7 +-- lib/community_engine/authenticated_system.rb | 22 +++---- .../authorizations_controller_test.rb | 60 +++++++++++++++++++ test/functional/sessions_controller_test.rb | 6 +- test/test_helper.rb | 8 --- 6 files changed, 79 insertions(+), 27 deletions(-) create mode 100644 test/functional/authorizations_controller_test.rb diff --git a/app/controllers/authorizations_controller.rb b/app/controllers/authorizations_controller.rb index 357d89b9..3fc36592 100644 --- a/app/controllers/authorizations_controller.rb +++ b/app/controllers/authorizations_controller.rb @@ -11,7 +11,8 @@ def create flash[:notice] = t('authorizations.create.success_existing_user', :provider => provider_name) elsif @auth.valid? flash[:notice] = t('authorizations.create.success_message', :provider => provider_name) - UserSession.create(@auth.user, true) + user_session = UserSession.create(@auth.user, true) + self.current_user = user_session.user end if logged_in? diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 197f5e22..e2217138 100755 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -1,11 +1,11 @@ -# This controller handles the login/logout function of the site. +# This controller handles the login/logout function of the site. class SessionsController < BaseController skip_before_filter :store_location, :only => [:new, :create] def index redirect_to :action => "new" - end + end def new redirect_to user_path(current_user) and return if current_user @@ -16,9 +16,8 @@ def create @user_session = UserSession.new(:login => params[:email], :password => params[:password], :remember_me => params[:remember_me]) if @user_session.save + self.current_user = @user_session.record #if current_user has been called before this, it will ne nil, so we have to make to reset it - current_user = @user_session.record #if current_user has been called before this, it will ne nil, so we have to make to reset it - flash[:notice] = :thanks_youre_now_logged_in.l redirect_back_or_default(dashboard_user_path(current_user)) else diff --git a/lib/community_engine/authenticated_system.rb b/lib/community_engine/authenticated_system.rb index 6b55e365..fb84aba8 100755 --- a/lib/community_engine/authenticated_system.rb +++ b/lib/community_engine/authenticated_system.rb @@ -1,19 +1,19 @@ module AuthenticatedSystem def update_last_seen_at return unless logged_in? - User.update_all ['sb_last_seen_at = ?', Time.now.utc], ['id = ?', current_user.id] + User.update_all ['sb_last_seen_at = ?', Time.now.utc], ['id = ?', current_user.id] current_user.sb_last_seen_at = Time.now.utc end - + def login_by_token end - + protected # Returns true or false if the user is logged in. def logged_in? current_user ? true : false end - + # Accesses the current user from the session. def current_user return @current_user if defined?(@current_user) @@ -23,7 +23,7 @@ def current_user # Create a user session without credentials. def current_user=(user) return if current_user # Use act_as_user= to switch to another user account - @current_user_session = UserSession.create(user, true) + @current_user_session = UserSession.create(user) @current_user = @current_user_session.record end @@ -76,9 +76,9 @@ def admin? logged_in? && current_user.admin? end def moderator? - logged_in? && current_user.moderator? + logged_in? && current_user.moderator? end - + # Redirect as appropriate when an access request fails. # # The default action is to redirect to the login screen. @@ -99,19 +99,19 @@ def access_denied render :text => "Couldn't authenticate you", :status => '401 Unauthorized' end accepts.js do - store_location + store_location render :update do |page| page.redirect_to login_path end and return false - end + end end false end - + # Inclusion hook to make #current_user and #logged_in? # available as ActionView helper methods. def self.included(base) - base.send :helper_method, :current_user, :current_user_session, :logged_in?, :admin?, :moderator? + base.send :helper_method, :current_user=, :current_user, :current_user_session, :logged_in?, :admin?, :moderator? end private diff --git a/test/functional/authorizations_controller_test.rb b/test/functional/authorizations_controller_test.rb new file mode 100644 index 00000000..ad4c63cd --- /dev/null +++ b/test/functional/authorizations_controller_test.rb @@ -0,0 +1,60 @@ +require 'test_helper' + +class AuthorizationsControllerTest < ActionController::TestCase + fixtures :all + + setup do + OmniAuth.config.test_mode = true + end + + + + test 'should create new authorization and log in' do + + set_ommniauth + + get :create + + user = UserSession.find.record + assert_redirected_to user_path(user) + end + + test 'should find existing authorization and log in' do + quentin = users(:quentin) + Authorization.create_from_hash(auth_hash(quentin.email), quentin) + set_ommniauth(quentin.email) + + get :create + + assert_redirected_to user_path(quentin) + end + + test 'should authorize existing logged-in user' do + quentin = users(:quentin) + login_as :quentin + + set_ommniauth(quentin.email) + + get :create + + assert_redirected_to user_path(quentin) + end + + + def set_ommniauth(email=nil) + OmniAuth.config.mock_auth[:facebook] = auth_hash(email) + request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:facebook] + end + + def auth_hash(email='email@example.com') + { + 'provider' => 'facebook', + "info" => { + 'nickname' => 'Omniauth-user', + 'email' => email + }, + 'uid' => '123545' + } + end + +end diff --git a/test/functional/sessions_controller_test.rb b/test/functional/sessions_controller_test.rb index 29dad0af..27dcdc7d 100755 --- a/test/functional/sessions_controller_test.rb +++ b/test/functional/sessions_controller_test.rb @@ -1,6 +1,6 @@ require 'test_helper' -class SessionsControllerTest < ActionController::TestCase +class SessionsControllerTest < ActionController::TestCase fixtures :all def test_should_login_and_redirect @@ -21,7 +21,7 @@ def test_should_logout assert_nil UserSession.find assert_response :redirect end - + def test_should_delete_token_on_logout login_as :quentin get :destroy @@ -42,7 +42,7 @@ def test_should_fail_cookie_login @request.cookies["user_credentials"] = {:value => {:value => 'invalid_token'}, :expires => nil} assert !@controller.send(:logged_in?) end - + def test_should_login_with_reset_password quentin = users(:quentin) quentin.reset_password diff --git a/test/test_helper.rb b/test/test_helper.rb index e332bb2c..c3bd4a3e 100755 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -17,14 +17,6 @@ ActiveSupport::TestCase.fixture_path = (Rails.root + "../fixtures").to_s #we want a string here, not a Pathname ActionController::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path -# OmniAuth.config.test_mode = true -# OmniAuth.config.mock_auth[:default] = { -# 'uid' => '123545' -# 'nickname' => 'Omniauth-user' -# 'email' => 'email@example.com' -# } - - class ActionController::TestCase setup :activate_authlogic end