Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

147 lines (121 sloc) 4.111 kb
require File.dirname(__FILE__) + '/../spec_helper'
ActionController::Routing::Routes.draw do |map|
map.connect ':controller/:action/:id'
end
class TwitterAuthTestController < ApplicationController
before_filter :login_required, :only => [:login_required_action]
def login_required_action
render :text => "You are logged in!"
end
def fail_auth
authentication_failed('Auth FAIL.')
end
def pass_auth
if params[:message]
authentication_succeeded(params[:message])
else
authentication_succeeded
end
end
def access_denied_action
access_denied
end
def redirect_back_action
redirect_back_or_default(params[:to] || '/')
end
def logout_keeping_session_action
logout_keeping_session!
redirect_back_or_default('/')
end
end
describe TwitterAuthTestController do
%w(authentication_failed authentication_succeeded current_user authorized? login_required access_denied store_location redirect_back_or_default logout_keeping_session!).each do |m|
it "should respond to the extension method '#{m}'" do
controller.should respond_to(m)
end
end
describe "#authentication_failed" do
it 'should set the flash[:error] to the message passed in' do
get :fail_auth
flash[:error].should == 'Auth FAIL.'
end
it 'should redirect to the root' do
get :fail_auth
should redirect_to('/')
end
end
describe "#authentication_succeeded" do
it 'should set the flash[:notice] to a default success message' do
get :pass_auth
flash[:notice].should == 'You have logged in successfully.'
end
it 'should be able ot receive a custom message' do
get :pass_auth, :message => 'Eat at Joes.'
flash[:notice].should == 'Eat at Joes.'
end
end
describe '#current_user' do
it 'should find the user based on the session user_id' do
user = Factory.create(:twitter_oauth_user)
request.session[:user_id] = user.id
controller.send(:current_user).should == user
end
it 'should return nil if there is no user matching that id' do
request.session[:user_id] = 2345
controller.send(:current_user).should be_nil
end
it 'should memoize the result (and not do a double find)' do
user = Factory.create(:twitter_oauth_user)
User.should_receive(:find_by_id).once.and_return(user)
controller.send(:current_user).should == user
controller.send(:current_user).should == user
end
end
describe "#authorized?" do
it 'should be true if there is a current_user' do
user = Factory.create(:twitter_oauth_user)
controller.stub!(:current_user).and_return(user)
controller.send(:authorized?).should be_true
end
it 'should be false if there is not current_user' do
controller.stub!(:current_user).and_return(nil)
controller.send(:authorized?).should be_false
end
end
describe '#access_denied' do
it 'should redirect to the login path' do
get :access_denied_action
should redirect_to(login_path)
end
it 'should store the location first' do
controller.should_receive(:store_location).once
get :access_denied_action
end
end
describe '#redirect_back_or_default' do
it 'should redirect if there is a session[:return_to]' do
request.session[:return_to] = '/'
get :redirect_back_action, :to => '/notroot'
should redirect_to('/')
end
it 'should redirect to the default provided otherwise' do
get :redirect_back_action, :to => '/someurl'
should redirect_to('/someurl')
end
end
describe 'logout_keeping_session!' do
before do
@user = Factory.create(:twitter_oauth_user)
request.session[:user_id] = @user.id
end
it 'should unset session[:user_id]' do
get :logout_keeping_session_action
request.session[:user_id].should be_nil
end
it 'should unset current_user' do
controller.send(:current_user).should == @user
get :logout_keeping_session_action
controller.send(:current_user).should be_nil
end
end
end
Jump to Line
Something went wrong with that request. Please try again.