You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

sessions_controller_test.rb 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. # frozen_string_literal: true
  2. # Redmine - project management software
  3. # Copyright (C) 2006-2019 Jean-Philippe Lang
  4. #
  5. # This program is free software; you can redistribute it and/or
  6. # modify it under the terms of the GNU General Public License
  7. # as published by the Free Software Foundation; either version 2
  8. # of the License, or (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18. require File.expand_path('../../test_helper', __FILE__)
  19. class SessionsControllerTest < Redmine::ControllerTest
  20. include Redmine::I18n
  21. tests WelcomeController
  22. fixtures :users, :email_addresses
  23. def setup
  24. Rails.application.config.redmine_verify_sessions = true
  25. end
  26. def teardown
  27. Rails.application.config.redmine_verify_sessions = false
  28. end
  29. def test_session_token_should_be_updated
  30. token = Token.create!(:user_id => 2, :action => 'session', :created_on => 10.hours.ago, :updated_on => 10.hours.ago)
  31. created = token.reload.created_on
  32. get :index, :session => {
  33. :user_id => 2,
  34. :tk => token.value
  35. }
  36. assert_response :success
  37. token.reload
  38. assert_equal created.to_i, token.created_on.to_i
  39. assert_not_equal created.to_i, token.updated_on.to_i
  40. assert token.updated_on > created
  41. end
  42. def test_user_session_should_not_be_reset_if_lifetime_and_timeout_disabled
  43. created = 2.years.ago
  44. token = Token.create!(:user_id => 2, :action => 'session', :created_on => created, :updated_on => created)
  45. with_settings :session_lifetime => '0', :session_timeout => '0' do
  46. get :index, :session => {
  47. :user_id => 2,
  48. :tk => token.value
  49. }
  50. assert_response :success
  51. end
  52. end
  53. def test_user_session_without_token_should_be_reset
  54. get :index, :session => {
  55. :user_id => 2
  56. }
  57. assert_redirected_to 'http://test.host/login?back_url=http%3A%2F%2Ftest.host%2F'
  58. end
  59. def test_expired_user_session_should_be_reset_if_lifetime_enabled
  60. created = 2.days.ago
  61. token = Token.create!(:user_id => 2, :action => 'session', :created_on => created, :updated_on => created)
  62. with_settings :session_timeout => '720' do
  63. get :index, :session => {
  64. :user_id => 2,
  65. :tk => token.value
  66. }
  67. assert_redirected_to 'http://test.host/login?back_url=http%3A%2F%2Ftest.host%2F'
  68. end
  69. end
  70. def test_valid_user_session_should_not_be_reset_if_lifetime_enabled
  71. created = 3.hours.ago
  72. token = Token.create!(:user_id => 2, :action => 'session', :created_on => created, :updated_on => created)
  73. with_settings :session_timeout => '720' do
  74. get :index, :session => {
  75. :user_id => 2,
  76. :tk => token.value
  77. }
  78. assert_response :success
  79. end
  80. end
  81. def test_expired_user_session_should_be_reset_if_timeout_enabled
  82. created = 4.hours.ago
  83. token = Token.create!(:user_id => 2, :action => 'session', :created_on => created, :updated_on => created)
  84. with_settings :session_timeout => '60' do
  85. get :index, :session => {
  86. :user_id => 2,
  87. :tk => token.value
  88. }
  89. assert_redirected_to 'http://test.host/login?back_url=http%3A%2F%2Ftest.host%2F'
  90. end
  91. end
  92. def test_valid_user_session_should_not_be_reset_if_timeout_enabled
  93. created = 10.minutes.ago
  94. token = Token.create!(:user_id => 2, :action => 'session', :created_on => created, :updated_on => created)
  95. with_settings :session_timeout => '60' do
  96. get :index, :session => {
  97. :user_id => 2,
  98. :tk => token.value
  99. }
  100. assert_response :success
  101. end
  102. end
  103. def test_expired_user_session_should_be_restarted_if_autologin
  104. created = 2.hours.ago
  105. token = Token.create!(:user_id => 2, :action => 'session', :created_on => created, :updated_on => created)
  106. with_settings :session_lifetime => '720', :session_timeout => '60', :autologin => 7 do
  107. autologin_token = Token.create!(:user_id => 2, :action => 'autologin', :created_on => 1.day.ago)
  108. @request.cookies['autologin'] = autologin_token.value
  109. get :index, :session => {
  110. :user_id => 2,
  111. :tk => token.value
  112. }
  113. assert_equal 2, session[:user_id]
  114. assert_response :success
  115. assert_not_equal token.value, session[:tk]
  116. end
  117. end
  118. def test_expired_user_session_should_set_locale
  119. set_language_if_valid 'it'
  120. user = User.find(2)
  121. user.language = 'fr'
  122. user.save!
  123. created = 4.hours.ago
  124. token = Token.create!(:user_id => 2, :action => 'session', :created_on => created, :updated_on => created)
  125. with_settings :session_timeout => '60' do
  126. get :index, :session => {
  127. :user_id => user.id,
  128. :tk => token.value
  129. }
  130. assert_redirected_to 'http://test.host/login?back_url=http%3A%2F%2Ftest.host%2F'
  131. assert_include "Veuillez vous reconnecter", flash[:error]
  132. assert_equal :fr, current_language
  133. end
  134. end
  135. def test_anonymous_session_should_not_be_reset
  136. with_settings :session_lifetime => '720', :session_timeout => '60' do
  137. get :index
  138. assert_response :success
  139. end
  140. end
  141. end