Re: acts_as_authenticated plugin test help

Bala Paranj
Thu, 14 Dec 2006 04:38:03 -0000

I resolved my problem. For RESTful authentication, there is a
login_as(user) method in AuthenticatedTestHelper module that sets the
current user
in the session from the user fixtures. This is under the lib directory.

In my functional test, I have:

def test_should_show_billing_profile_for_valid_login
 login_as (:aaron)
 get :show, :id => :aaron.id
 assert_response :success
 assert_select "html:root>head>title", "BillingProfiles:
show"
end

users.yml looks like this:

quentin:
  id: 1
  login: quentin
  email: quentin-hcDgGtZH8xNBDgjK7y7TUQ@public.gmane.org
  salt: 7e3041ebc2fc05a40c60028e2c4901a81035d3cd
  crypted_password: 00742970dc9e6319f8019fd54864d3ea740f04b1 # test
  created_at: <%= 5.days.ago.to_s :db %>
aaron:
  id: 2
  login: aaron
  email: aaron-hcDgGtZH8xNBDgjK7y7TUQ@public.gmane.org
  salt: 7e3041ebc2fc05a40c60028e2c4901a81035d3cd
  crypted_password: 00742970dc9e6319f8019fd54864d3ea740f04b1 # test
  created_at: <%= 1.days.ago.to_s :db %>


class BillingProfilesController < ApplicationController

  before_filter :login_required

  def show
    @user = User.find(session[:user], :include => [:billing_profile])
    @billing_profile = @user.billing_profile

    respond_to do |format|
      format.html # show.rhtml
      format.xml  { render :xml => @billing_profile.to_xml }
    end
  end

The problem was that I was using session[:user_id] in my controller
whereas the RESTful authentication
module is using session[:user] as shown below:

module AuthenticatedTestHelper
  # Sets the current user in the session from the user fixtures.
  def login_as(user)
    @request.session[:user] = user ? users(user).id : nil
  end
....

So I changed my controller code to use session[:user] and my tests now
pass! The plugin itself has the API to help you do the functional
testing. Very nice indeed.

On 12/13/06, Bala Paranj
<bcparanj-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:
>
> The Rails Recipes book has a recipe that shows another way to deal with
this
> problem. It shows how to stub out the login functionality so that you can
> focus on the core application functionality.