Forum: Ruby on Rails Replicating Form Behaviour in Functional Test

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
7541a70a0f9268020d566c567c27c277?d=identicon&s=25 Adam (Guest)
on 2008-12-05 15:03
(Received via mailing list)
Hi,

I'm really struggling getting a controller test to pass while the form
that uses the method operates correctly.

I would really welcome a second pair of eyes to help me find out what
I'm missing.

The test

  def test_set_password
    @request.session[:user] = users(:admin)

    put :set_password, :id => users(:one).id, :user => {:password =>
"newpass", :password_confirmation => "newpass"}

    assert User.authenticate(users(:one).username, "newpass")
    assert_redirected_to user_path(assigns(:user))
  end

The controller method

  # POST
  def set_password
    @user = User.find(params[:id])

    respond_to do |format|
      if @user.update_attributes(params[:user])
        flash[:notice] = 'Password updated.'
        format.html { redirect_to(@user) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit_password" }
        format.xml  { render :xml => @user.errors, :status
=> :unprocessable_entity }
      end
    end
  end

The view:  edit_password.html.erb

<%= error_messages_for :user %>

<h3><%= @user.username%></h3>

<% form_for @user, :url => {:id => @user.id, :action =>
"set_password"}  do |f|  %>
  <p>
  <%= f.label :password %><br />
    <%= f.password_field :password %>
  </p>

  <p>
    <%= f.label :password_confirmation, "Confirm Password" %><br />
    <%= f.password_field :password_confirmation %>
  </p>

  <p>
    <%= submit_tag "Change" %>
  </p>
<% end %>

<%= link_to 'Back', @user %>


The view works but the test fails.

Thanks in advance,

Adam
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-05 16:28
(Received via mailing list)
On 5 Dec 2008, at 14:02, Adam wrote:

>
>
> The view works but the test fails.
>
You need to work out why. stick a breakpoint in the action (or in
whatever before filters may be relevant) and see what happens

Fred
7541a70a0f9268020d566c567c27c277?d=identicon&s=25 Adam (Guest)
on 2008-12-06 14:00
(Received via mailing list)
OK, thanks Fred. I guess it's nothing obvious which is sort of
reassuring.

Adam

On Dec 5, 3:27 pm, Frederick Cheung <frederick.che...@gmail.com>
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-06 14:09
(Received via mailing list)
On Dec 6, 12:59 pm, Adam <adam.b...@gmail.com> wrote:
> OK, thanks Fred. I guess it's nothing obvious which is sort of
> reassuring.
>
Well there is one thing that I refrained from commenting upon because
I've no idea how you do your authentication, but in my apps

@request.session[:user] = users(:admin)

would be

@request.session[:user] = users(:admin).id

But that should be quite obvious if you look at test.log (it would say
that processing was halted because the authorization filter redirected
or rendered)

Fred
7541a70a0f9268020d566c567c27c277?d=identicon&s=25 Adam (Guest)
on 2008-12-06 14:34
(Received via mailing list)
OK, thanks for that advice.

It's not the problem the test is railing on the first assertion. It's
the update of the user record that's failing for some reason.

Adam

On Dec 6, 1:08 pm, Frederick Cheung <frederick.che...@gmail.com>
This topic is locked and can not be replied to.