can someone please tell me why these test are failing?

1) Failure:
test_login_failure_with_nonexistent_screen_name(UserControllerTest) [./
test/functional/user_controller_test.rb:140]:
<"Invalid screen name/password combination"> expected but was
<nil>.

  2) Failure:
test_login_failure_with_wrong_password(UserControllerTest) [./test/
functional/user_controller_test.rb:155]:
<"Invalid screen name/password combination"> expected but was
<nil>.

---------------UserControllerTest-----------------------

# Test a login with invalid screen name.
  # Giving a Failure
  def test_login_failure_with_nonexistent_screen_name
    invalid_user = @valid_user
    invalid_user.screen_name = "no such user"
    try_to_login invalid_user
    assert_template "login"
    assert_equal "Invalid screen name/password combination",
flash[ :notice]
    # Make sure screen_name will be redisplayed, but not the
password.
    user = assigns(:user)
    assert_equal invalid_user.screen_name, user.screen_name
    assert_nil user.password
  end

  # Test a login with invalid password.
  # Giving a Failure
  def test_login_failure_with_wrong_password
    invalid_user = @valid_user
    # Construct an invalid password.
    invalid_user.password += "baz"
    try_to_login invalid_user
    assert_template "login"
    assert_equal "Invalid screen name/password combination",
flash[ :notice]
    # Make sure screen_name will be redisplayed, but not the
password.
    user = assigns(:user)
    assert_equal invalid_user.screen_name, user.screen_name
    assert_nil user.password
  end

-----------------------UserController---------------------------

  def login
    @title = "Log in to RailsSpace"
      if param_posted?(:user)
        @user = User.new(params[:user])
        user =
User.find_by_screen_name_and_password(@user.screen_name,
                                                     @user.password)
        if user
          user.login!(session)
          flash[:notice] = "User #{user.screen_name} logged in!"
          redirect_to_forwarding_url
        else
          # Don't show the password again in the view.
          @user.clear_password!
          flash[:notice] = "Invalid screen name/password combination"
        end
      end
    end

Is it possible your try_to_login method isn't doing a post? Because
the test and code you've provided look fine.

There is a couple of things here that would help to know to solve your
issue:

invalid_user = @valid_user
invalid_user.screen_name = "no such user"
try_to_login invalid_user

* try_to_login: is this a helper method that actually does a post?
* if so, it looks like you are passing a model rather than a hash of
parameters

In other words, I would expect to be seeing something like this:

post :login, 'user' => {'screen_name' => 'no such user', 'password' =>
'testing'}

maybe show us the try_to_login method may enable us to help you.

Thanks for your help Christopher and Nicholas. Here is the
try_to_login code in the user_controller_test.rb file:

private

  # Authorize a user.
  def authorize(user)
    @request.session[:user_id] = user.id
  end

  # Try to log a user in using the login action.
  def try_to_login(user)
    post :login, :user => { :screen_name => user.screen_name,
      :password => user.password }
  end

I'm wondering if the block if param_posted?(:user) is getting executed
at all. How about moving the following assertions before the flash
message assertion. What do you get when you run the test?

     # Make sure screen_name will be redisplayed, but not the
password.
    user = assigns(:user)
    assert_equal invalid_user.screen_name, user.screen_name
    assert_nil user.password

Acuta

Hi Nicholas,

I've moved the block you suggested to before the flash assertion but
still getting the same result:

ruby test/functional/user_controller_test.rb -n /test_login_failure/
Loaded suite test/functional/user_controller_test
Started
FF
Finished in 0.638922 seconds.

  1) Failure:
test_login_failure_with_nonexistent_screen_name(UserControllerTest)
[test/functional/user_controller_test.rb:180]:
<"Invalid screen name/password combination"> expected but was
<nil>.

  2) Failure:
test_login_failure_with_wrong_password(UserControllerTest) [test/
functional/user_controller_test.rb:196]:
<"Invalid screen name/password combination"> expected but was
<nil>.

2 tests, 8 assertions, 2 failures, 0 errors

Well, I'm stumped - I took your code and quickly setup a test app and
your assertions passed. Are you having problems with other flash
messages? How about changing the flash messages to see if that helps,
perhaps you have a funny character in there. Sorry I couldn't be of
further help.