<% end -%>
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 80484859d..3b22f3fe1 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -1369,3 +1369,5 @@ de:
error_invalid_size_parameter: Invalid size parameter
error_attachment_not_found: Attachment %{name} not found
field_twofa_scheme: Two-factor authentication scheme
+
+ text_user_destroy_confirmation: "Wollen Sie diesen Benutzer inklusive aller Referenzen darauf wirklich löschen? Dies kann nicht rückgängig gemacht werden. Oftmals ist es besser, einen Benutzer lediglich zu sperren. Geben Sie bitte zur Bestätigung den Login des Benutzers (%{login}) ein."
diff --git a/config/locales/en.yml b/config/locales/en.yml
index dce5bda76..b5899df75 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1344,3 +1344,5 @@ en:
twofa_text_backup_codes_hint: Use these codes instead of a one-time password should you not have access to your second factor. Each code can only be used once. It is recommended to print and store them in a safe place.
twofa_text_backup_codes_created_at: Backup codes generated %{datetime}.
twofa_backup_codes_already_shown: Backup codes cannot be shown again, please generate new backup codes if required.
+
+ text_user_destroy_confirmation: "Are you sure you want to delete this user and remove all references to them? This cannot be undone. Often, locking a user instead of deleting them is the better solution. To confirm, please enter their login (%{login}) below."
diff --git a/test/functional/users_controller_test.rb b/test/functional/users_controller_test.rb
index 459762c50..5883f344b 100644
--- a/test/functional/users_controller_test.rb
+++ b/test/functional/users_controller_test.rb
@@ -770,7 +770,7 @@ class UsersControllerTest < Redmine::ControllerTest
# if user is already locked, destroying should not send a second mail
# (for active admins see furtherbelow)
ActionMailer::Base.deliveries.clear
- delete :destroy, :params => {:id => 1}
+ delete :destroy, :params => {:id => 1, :confirm => User.find(1).login}
assert_nil ActionMailer::Base.deliveries.last
end
@@ -834,17 +834,41 @@ class UsersControllerTest < Redmine::ControllerTest
def test_destroy
assert_difference 'User.count', -1 do
- delete :destroy, :params => {:id => 2}
+ delete :destroy, :params => {:id => 2, :confirm => User.find(2).login}
end
assert_redirected_to '/users'
assert_nil User.find_by_id(2)
end
+ def test_destroy_with_lock_param_should_lock_instead
+ assert_no_difference 'User.count' do
+ delete :destroy, :params => {:id => 2, :lock => 'lock'}
+ end
+ assert_redirected_to '/users'
+ assert User.find_by_id(2).locked?
+ end
+
+ def test_destroy_should_require_confirmation
+ assert_no_difference 'User.count' do
+ delete :destroy, :params => {:id => 2}
+ end
+ assert_response :success
+ assert_select '.warning', :text => /Are you sure you want to delete this user/
+ end
+
+ def test_destroy_should_require_correct_confirmation
+ assert_no_difference 'User.count' do
+ delete :destroy, :params => {:id => 2, :confirm => 'wrong'}
+ end
+ assert_response :success
+ assert_select '.warning', :text => /Are you sure you want to delete this user/
+ end
+
def test_destroy_should_be_denied_for_non_admin_users
@request.session[:user_id] = 3
assert_no_difference 'User.count' do
- get :destroy, :params => {:id => 2}
+ delete :destroy, :params => {:id => 2, :confirm => User.find(2).login}
end
assert_response 403
end
@@ -852,14 +876,16 @@ class UsersControllerTest < Redmine::ControllerTest
def test_destroy_should_be_denied_for_anonymous
assert User.find(6).anonymous?
assert_no_difference 'User.count' do
- put :destroy, :params => {:id => 6}
+ delete :destroy, :params => {:id => 6, :confirm => User.find(6).login}
end
assert_response 404
end
def test_destroy_should_redirect_to_back_url_param
assert_difference 'User.count', -1 do
- delete :destroy, :params => {:id => 2, :back_url => '/users?name=foo'}
+ delete :destroy, :params => {:id => 2,
+ :confirm => User.find(2).login,
+ :back_url => '/users?name=foo'}
end
assert_redirected_to '/users?name=foo'
end
@@ -869,7 +895,7 @@ class UsersControllerTest < Redmine::ControllerTest
user.admin = true
user.save!
ActionMailer::Base.deliveries.clear
- delete :destroy, :params => {:id => user.id}
+ delete :destroy, :params => {:id => user.id, :confirm => user.login}
assert_not_nil (mail = ActionMailer::Base.deliveries.last)
assert_mail_body_match(