diff test/integration/account_test.rb @ 1464:261b3d9a4903 redmine-2.4

Update to Redmine 2.4 branch rev 12663
author Chris Cannam
date Tue, 14 Jan 2014 14:37:42 +0000
parents 433d4f72a19b
children e248c7af89ec
line wrap: on
line diff
--- a/test/integration/account_test.rb	Fri Jun 14 09:05:06 2013 +0100
+++ b/test/integration/account_test.rb	Tue Jan 14 14:37:42 2014 +0000
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2012  Jean-Philippe Lang
+# Copyright (C) 2006-2013  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -18,7 +18,7 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 begin
-  require 'mocha'
+  require 'mocha/setup'
 rescue
   # Won't run some tests
 end
@@ -45,7 +45,7 @@
     # User logs in with 'autologin' checked
     post '/login', :username => user.login, :password => 'admin', :autologin => 1
     assert_redirected_to '/my/page'
-    token = Token.find :first
+    token = Token.first
     assert_not_nil token
     assert_equal user, token.user
     assert_equal 'autologin', token.action
@@ -59,7 +59,7 @@
     user.update_attribute :last_login_on, nil
     assert_nil user.reload.last_login_on
 
-    # User comes back with his autologin cookie
+    # User comes back with user's autologin cookie
     cookies[:autologin] = token.value
     get '/my/page'
     assert_response :success
@@ -68,6 +68,33 @@
     assert_not_nil user.reload.last_login_on
   end
 
+  def test_autologin_should_use_autologin_cookie_name
+    Token.delete_all
+    Redmine::Configuration.stubs(:[]).with('autologin_cookie_name').returns('custom_autologin')
+    Redmine::Configuration.stubs(:[]).with('autologin_cookie_path').returns('/')
+    Redmine::Configuration.stubs(:[]).with('autologin_cookie_secure').returns(false)
+
+    with_settings :autologin => '7' do
+      assert_difference 'Token.count' do
+        post '/login', :username => 'admin', :password => 'admin', :autologin => 1
+      end
+      assert_response 302
+      assert cookies['custom_autologin'].present?
+      token = cookies['custom_autologin']
+
+      # Session is cleared
+      reset!
+      cookies['custom_autologin'] = token
+      get '/my/page'
+      assert_response :success
+
+      assert_difference 'Token.count', -1 do
+        post '/logout'
+      end
+      assert cookies['custom_autologin'].blank?
+    end
+  end
+
   def test_lost_password
     Token.delete_all
 
@@ -79,7 +106,7 @@
     post "account/lost_password", :mail => 'jSmith@somenet.foo'
     assert_redirected_to "/login"
 
-    token = Token.find(:first)
+    token = Token.first
     assert_equal 'recovery', token.action
     assert_equal 'jsmith@somenet.foo', token.user.mail
     assert !token.expired?
@@ -91,7 +118,9 @@
     assert_select 'input[name=new_password]'
     assert_select 'input[name=new_password_confirmation]'
 
-    post "account/lost_password", :token => token.value, :new_password => 'newpass123', :new_password_confirmation => 'newpass123'
+    post "account/lost_password",
+         :token => token.value, :new_password => 'newpass123',
+         :new_password_confirmation => 'newpass123'
     assert_redirected_to "/login"
     assert_equal 'Password was successfully updated.', flash[:notice]
 
@@ -99,6 +128,35 @@
     assert_equal 0, Token.count
   end
 
+  def test_user_with_must_change_passwd_should_be_forced_to_change_its_password
+    User.find_by_login('jsmith').update_attribute :must_change_passwd, true
+
+    post '/login', :username => 'jsmith', :password => 'jsmith'
+    assert_redirected_to '/my/page'
+    follow_redirect!
+    assert_redirected_to '/my/password'
+
+    get '/issues'
+    assert_redirected_to '/my/password'
+  end
+
+  def test_user_with_must_change_passwd_should_be_able_to_change_its_password
+    User.find_by_login('jsmith').update_attribute :must_change_passwd, true
+
+    post '/login', :username => 'jsmith', :password => 'jsmith'
+    assert_redirected_to '/my/page'
+    follow_redirect!
+    assert_redirected_to '/my/password'
+    follow_redirect!
+    assert_response :success
+    post '/my/password', :password => 'jsmith', :new_password => 'newpassword', :new_password_confirmation => 'newpassword'
+    assert_redirected_to '/my/account'
+    follow_redirect!
+    assert_response :success
+
+    assert_equal false, User.find_by_login('jsmith').must_change_passwd?
+  end
+
   def test_register_with_automatic_activation
     Setting.self_registration = '3'
 
@@ -106,8 +164,10 @@
     assert_response :success
     assert_template 'account/register'
 
-    post 'account/register', :user => {:login => "newuser", :language => "en", :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar",
-                             :password => "newpass123", :password_confirmation => "newpass123"}
+    post 'account/register',
+         :user => {:login => "newuser", :language => "en",
+                   :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar",
+                   :password => "newpass123", :password_confirmation => "newpass123"}
     assert_redirected_to '/my/account'
     follow_redirect!
     assert_response :success
@@ -122,8 +182,10 @@
   def test_register_with_manual_activation
     Setting.self_registration = '2'
 
-    post 'account/register', :user => {:login => "newuser", :language => "en", :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar",
-                             :password => "newpass123", :password_confirmation => "newpass123"}
+    post 'account/register',
+         :user => {:login => "newuser", :language => "en",
+                   :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar",
+                   :password => "newpass123", :password_confirmation => "newpass123"}
     assert_redirected_to '/login'
     assert !User.find_by_login('newuser').active?
   end
@@ -132,12 +194,14 @@
     Setting.self_registration = '1'
     Token.delete_all
 
-    post 'account/register', :user => {:login => "newuser", :language => "en", :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar",
-                             :password => "newpass123", :password_confirmation => "newpass123"}
+    post 'account/register',
+         :user => {:login => "newuser", :language => "en",
+                   :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar",
+                   :password => "newpass123", :password_confirmation => "newpass123"}
     assert_redirected_to '/login'
     assert !User.find_by_login('newuser').active?
 
-    token = Token.find(:first)
+    token = Token.first
     assert_equal 'register', token.action
     assert_equal 'newuser@foo.bar', token.user.mail
     assert !token.expired?
@@ -150,7 +214,9 @@
   def test_onthefly_registration
     # disable registration
     Setting.self_registration = '0'
-    AuthSource.expects(:authenticate).returns({:login => 'foo', :firstname => 'Foo', :lastname => 'Smith', :mail => 'foo@bar.com', :auth_source_id => 66})
+    AuthSource.expects(:authenticate).returns(
+      {:login => 'foo', :firstname => 'Foo', :lastname => 'Smith',
+       :mail => 'foo@bar.com', :auth_source_id => 66})
 
     post '/login', :username => 'foo', :password => 'bar'
     assert_redirected_to '/my/page'
@@ -164,7 +230,8 @@
   def test_onthefly_registration_with_invalid_attributes
     # disable registration
     Setting.self_registration = '0'
-    AuthSource.expects(:authenticate).returns({:login => 'foo', :lastname => 'Smith', :auth_source_id => 66})
+    AuthSource.expects(:authenticate).returns(
+      {:login => 'foo', :lastname => 'Smith', :auth_source_id => 66})
 
     post '/login', :username => 'foo', :password => 'bar'
     assert_response :success
@@ -174,7 +241,8 @@
     assert_no_tag :input, :attributes => { :name => 'user[login]' }
     assert_no_tag :input, :attributes => { :name => 'user[password]' }
 
-    post 'account/register', :user => {:firstname => 'Foo', :lastname => 'Smith', :mail => 'foo@bar.com'}
+    post 'account/register',
+         :user => {:firstname => 'Foo', :lastname => 'Smith', :mail => 'foo@bar.com'}
     assert_redirected_to '/my/account'
 
     user = User.find_by_login('foo')
@@ -182,4 +250,49 @@
     assert_equal 66, user.auth_source_id
     assert user.hashed_password.blank?
   end
+
+  def test_registered_user_should_be_able_to_get_a_new_activation_email
+    Token.delete_all
+
+    with_settings :self_registration => '1', :default_language => 'en' do
+      # register a new account
+      assert_difference 'User.count' do
+        assert_difference 'Token.count' do
+          post 'account/register',
+             :user => {:login => "newuser", :language => "en",
+                       :firstname => "New", :lastname => "User", :mail => "newuser@foo.bar",
+                       :password => "newpass123", :password_confirmation => "newpass123"}
+        end
+      end
+      user = User.order('id desc').first
+      assert_equal User::STATUS_REGISTERED, user.status
+      reset!
+
+      # try to use "lost password"
+      assert_no_difference 'ActionMailer::Base.deliveries.size' do
+        post '/account/lost_password', :mail => 'newuser@foo.bar'
+      end
+      assert_redirected_to '/account/lost_password'
+      follow_redirect!
+      assert_response :success
+      assert_select 'div.flash', :text => /new activation email/
+      assert_select 'div.flash a[href=/account/activation_email]'
+
+      # request a new action activation email
+      assert_difference 'ActionMailer::Base.deliveries.size' do
+        get '/account/activation_email'
+      end
+      assert_redirected_to '/login'
+      token = Token.order('id desc').first
+      activation_path = "/account/activate?token=#{token.value}"
+      assert_include activation_path, mail_body(ActionMailer::Base.deliveries.last)
+
+      # activate the account
+      get activation_path
+      assert_redirected_to '/login'
+
+      post '/login', :username => 'newuser', :password => 'newpass123'
+      assert_redirected_to '/my/page'
+    end
+  end
 end