I have problem with understanding one code in Michael Hartl's tutorial.
In class PasswordResetsTest, in test "password resets" we took our user
from fixtures, we posted to password_resets_path with right mail and we
asserted that @user.reset_digest doesn't equal
@user.reload.reset_digest. Later, Michael said we need to use assigns
method to be able to patch to password_reset_path. He said it's because
our user from fixtures doesn't have reset_token, because it is created
only in create_reset_digest method. I understand it, but I don't get one
thing - why assert_not_equal with pre- and post- reload user's
reset_digest passes? I thought it goes like this: reset_digest is nil at
first, we post to password_resets_path, which is create action of
PasswordResets Controller; in this action we have create_reset_digest
method. Reset_digest isn't nil anymore, we reload it and our
assert_not_equal passes. But if so, @user from fixtures should also have
reset_token now (if its reset_digest was influenced by create action
(specifically create_reset_digest method). Can someone please take a
look?
require 'test_helper'
class PasswordResetsTest < ActionDispatch::IntegrationTest
def setup
ActionMailer::Base.deliveries.clear
@user = users(:michael)
end
test "password resets" do
get new_password_reset_path
assert_template 'password_resets/new'
# Invalid email
post password_resets_path, password_reset: { email: "" }
assert_not flash.empty?
assert_template 'password_resets/new'
# Valid email
post password_resets_path, password_reset: { email: @user.email }
assert_not_equal @user.reset_digest, @user.reload.reset_digest
assert_equal 1, ActionMailer::Base.deliveries.size
assert_not flash.empty?
assert_redirected_to root_url
# Password reset form
user = assigns(:user)
# Valid password & confirmation
patch password_reset_path(user.reset_token),
email: user.email,
user: { password: "foobaz",
password_confirmation: "foobaz" }
end
end
def create_reset_digest
self.reset_token = User.new_token
#creating reset_digest
end
def create
@user = User.find_by(email:
params[:password_reset][:email].downcase)
if @user
@user.create_reset_digest
[...]
end
end
--
Posted via http://www.ruby-forum.com/.
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/f09a73938ddbaac4f9272a0c48946a13%40ruby-forum.com.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment