From e8611609ac8d897cffccd45b67016d8c921c6231 Mon Sep 17 00:00:00 2001 From: "Carlos A. da Silva" Date: Thu, 15 Oct 2009 16:54:04 -0300 Subject: [PATCH] Send confirmation instructions only works if the record is not confirmed. --- lib/devise/models/confirmable.rb | 8 +++++--- test/integration/confirmable_test.rb | 2 +- test/models/confirmable_test.rb | 11 +++++++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/devise/models/confirmable.rb b/lib/devise/models/confirmable.rb index 09b9811b..8ba303f8 100644 --- a/lib/devise/models/confirmable.rb +++ b/lib/devise/models/confirmable.rb @@ -59,9 +59,11 @@ module Devise # confirming it's account # def reset_confirmation! - reset_confirmation - reset_perishable_token! - send_confirmation_instructions + unless_confirmed do + reset_confirmation + reset_perishable_token! + send_confirmation_instructions + end end private diff --git a/test/integration/confirmable_test.rb b/test/integration/confirmable_test.rb index 7721f028..01ec71c2 100644 --- a/test/integration/confirmable_test.rb +++ b/test/integration/confirmable_test.rb @@ -3,7 +3,7 @@ require 'test/test_helper' class UsersConfirmationTest < ActionController::IntegrationTest test 'user should be able to request a new confirmation' do - user = create_user + user = create_user(:confirm => false) ActionMailer::Base.deliveries.clear visit new_user_session_path diff --git a/test/models/confirmable_test.rb b/test/models/confirmable_test.rb index 0f9d8c45..36743b96 100644 --- a/test/models/confirmable_test.rb +++ b/test/models/confirmable_test.rb @@ -112,8 +112,6 @@ class ConfirmableTest < ActiveSupport::TestCase test 'should reset confirmation status when sending the confirmation instructions' do user = create_user assert_not user.confirmed? - user.confirm! - assert user.confirmed? confirmation_user = User.send_confirmation_instructions(:email => user.email) assert_not user.reload.confirmed? end @@ -150,4 +148,13 @@ class ConfirmableTest < ActiveSupport::TestCase user.save! assert_not user.reload.confirmed? end + + test 'should not be able to send instructions if the user is already confirmed' do + user = create_user + user.confirm! + assert_not user.reset_confirmation! + assert user.confirmed? + assert user.errors[:email].present? + assert_equal 'already confirmed', user.errors[:email] + end end