Я пытаюсь запустить следующий юнит-тест:
def test_passwordchange
# check success
assert_equal @longbob, Usuario.autenticar("longbob", "longtest")
#change password
@longbob.password = "nonbobpasswd"
@longbob.password_confirmation = "nonbobpasswd"
assert @longbob.save!
#new password works
assert_equal @longbob, Usuario.autenticar("longbob", "nonbobpasswd")
#old pasword doesn't work anymore
assert_nil Usuario.autenticar("longbob", "longtest")
#change back again
@longbob.password = "longtest"
@longbob.password_confirmation = "longtest"
assert @longbob.save!
assert_equal @longbob, Usuario.autenticar("longbob", "longtest")
assert_nil Usuario.autenticar("longbob", "nonbobpasswd")
end
Тем не менее, он выдает ошибку в 1-й строке, содержащей "assert_equal", который говорит:
<#<Usuario ID: 1000003, login: "longbob", hashed_password: "078cf6ae2de80ed6c004c8c8576a5572e077a52c", salt: "1000", nombre: nil, apellido: nil, email: "lbob@mcbob.com", telefono: nil, tipo_usuario: nil, foto: nil, bol_activo: nil>> expected but was <nil>.
Вот мой метод аутентификации:
def self.authenticate (login, pass)
u=find(:first, :conditions=>["login = ?", login])
return nil if u.nil?
return u if Usuario.encrypt(pass, u.salt)==u.hashed_password
nil
end
Кроме того, я определил следующее:
def password=(pass)
@password=pass
self.salt = Usuario.random_string(10) if !self.salt?
self.hashed_password = Usuario.encrypt(@password, self.salt)
end
Итак, я думаю, что это должно обновлять hashed_password каждый раз, когда я переназначаю что-то на «пароль» ..Да?
Что происходит?
Спасибо.
ОБНОВЛЕНИЕ: Я заметил, что если я изменюсь:
assert_equal @ longbob , Usuario.autenticar ("longbob", "nonbobpasswd")
до
assert_equal @ longbob2 , Usuario.autenticar ("longbob", "nonbobpasswd")
Он проходит этот тест, но не проходит в следующей строке ... Выдает ту же ошибку ...Что с этим?