On 7/27/07, Justin Williams <[EMAIL PROTECTED]> wrote:
> Thanks for the help.
>
You're welcome
> I think I'm getting closer. I'm still not getting a redirect. I
> still think it's the same reason though. I say this because when I
> modify the last line of my spec to be render_template("index") instead
> of redirect, it says that it renders the login template.
>
> Am I putting the should_receive for has_role? in the wrong place?
>
> My modified code is below.
>
> def login
> if request.post?
Have you seen the restful authentication plugin? It would simplify your code.
I modified it for rSpec. You can view it in a working app here:
http://sample.caboo.se/empty_rails_app/trunk/app/controllers/session_controller.rb
> begin
> session[:user] = User.authenticate(params[:login][:email],
> params[:login][:password]).id
>
> # Redirect the user as appropriate
> if current_user.has_role?("tutor")
> redirect_to toolkit_path
return
Add a return here. You should get in the habit of putting a
"return" after a redirect
> end
> rescue
> flash[:warning] = "Your e-mail address or password is invalid."
> render :action => "login"
> end
> end
> end
>
> ------
>
> describe UsersController do
> controller_name :users
>
> before(:each) do
> @current_user = mock_model(User,
> :email => '[EMAIL PROTECTED]',
> :password => 'teamup'
> )
> controller.stub!(:current_user).and_return(@current_user)
> end
>
> it "should login as a tutor" do
These two lines aren't needed:
> @role = mock_model(Role, :title => 'tutor')
> @current_user.should_receive(:roles).once.and_return([EMAIL PROTECTED])
The point of refactoring the role stuff into "has_role?" is that the
implementation of "has_role" could be anything.
See how your controller doesn't know anything about "User.has_role?"
Your test shouldn't either. Just assume that it works. And test it
in the user model specs.
Put this line before the authenticate line and it all should work.
@current_user.should_receive(:has_role?).with('tutor').and_return true
>
> User.should_receive(:authenticate).with(@current_user.email,@current_user.password).and_return(@current_user)
>
> @current_user.should_receive(:has_role?).with('tutor').and_return(true)
> post :login, :login => {:email => @current_user.email, :password
> => @current_user.password}
> request.session[:user].should == @current_user.id
>
> should_be_logged_in
>
> response.should be_redirect
> response.should redirect_to(toolkit_path)
> end
> end
>
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users