Test user#reset_password
authorTom Hughes <tom@compton.nu>
Tue, 15 Oct 2013 20:27:25 +0000 (21:27 +0100)
committerTom Hughes <tom@compton.nu>
Tue, 15 Oct 2013 20:27:25 +0000 (21:27 +0100)
test/fixtures/users.yml
test/functional/user_controller_test.rb

index c1b7244cb71951e5008d18bbe1de31f401f0d34a..15e3cc3947831202b78b3516db730effc3270865 100644 (file)
@@ -46,6 +46,7 @@ inactive_user:
   terms_agreed: "2010-01-01 11:22:33"
   terms_seen: true
   languages: en
+  email_valid: false
   
 second_public_user:
   id: 4
index 381ec333ace11714f82669247f2ccfbbc8fa59ce..9cf48f4707c01ada7f43efa121dc977102b6aa9f 100644 (file)
@@ -425,6 +425,34 @@ class UserControllerTest < ActionController::TestCase
     assert_equal users(:public_user).email, ActionMailer::Base.deliveries.last.to[0]
   end
 
+  def test_reset_password
+    # Test a request with no token
+    get :reset_password
+    assert_response :bad_request
+
+    # Test a request with a bogus token
+    get :reset_password, :token => "made_up_token"
+    assert_response :redirect
+    assert_redirected_to :action => :lost_password
+
+    # Create a valid token for a user
+    token = User.find(users(:inactive_user).id).tokens.create
+
+    # Test a request with a valid token
+    get :reset_password, :token => token.token
+    assert_response :success
+    assert_template :reset_password
+
+    # Test setting a new password
+    post :reset_password, :token => token.token, :user => { :pass_crypt => "new_password", :pass_crypt_confirmation => "new_password" }
+    assert_response :redirect
+    assert_redirected_to :action => :login
+    user = User.find(users(:inactive_user).id)
+    assert_equal "active", user.status
+    assert_equal true, user.email_valid
+    assert_equal user, User.authenticate(:username => "inactive@openstreetmap.org", :password => "new_password")
+  end
+
   def test_user_update
     # Get a user to work with - note that this user deliberately
     # conflicts with uppercase_user in the email and display name