From 52dd8385f876f8eb84496cfa0a7e958a692d4f11 Mon Sep 17 00:00:00 2001 From: evazion Date: Fri, 3 Apr 2020 23:00:25 -0500 Subject: [PATCH] Fix #4383: Save and display deleted usernames for mods+. Name changes for deleted users are already visible to mods, so the only thing we need to do here is to generate a name change before the user is deleted. --- app/logical/user_deletion.rb | 4 ++-- test/unit/user_deletion_test.rb | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/logical/user_deletion.rb b/app/logical/user_deletion.rb index 1d3b96cba..f3b283855 100644 --- a/app/logical/user_deletion.rb +++ b/app/logical/user_deletion.rb @@ -57,8 +57,8 @@ class UserDeletion raise ValidationError.new("New name could not be found") end - user.name = name - user.save! + request = UserNameChangeRequest.new(user: user, desired_name: name, original_name: user.name) + request.save!(validate: false) # XXX don't validate so that the 1 name change per week rule doesn't interfere end def validate diff --git a/test/unit/user_deletion_test.rb b/test/unit/user_deletion_test.rb index dca99dca9..267eb2904 100644 --- a/test/unit/user_deletion_test.rb +++ b/test/unit/user_deletion_test.rb @@ -27,7 +27,7 @@ class UserDeletionTest < ActiveSupport::TestCase context "a valid user deletion" do setup do - @user = create(:user, email_address: build(:email_address)) + @user = create(:user, name: "foo", email_address: build(:email_address)) @deletion = UserDeletion.new(@user, "password") end @@ -41,6 +41,15 @@ class UserDeletionTest < ActiveSupport::TestCase assert_equal("user_#{@user.id}", @user.reload.name) end + should "generate a user name change request" do + assert_difference("UserNameChangeRequest.count") do + @deletion.delete! + end + + assert_equal("foo", UserNameChangeRequest.last.original_name) + assert_equal("user_#{@user.id}", UserNameChangeRequest.last.desired_name) + end + should "reset the password" do @deletion.delete! assert_equal(false, @user.authenticate_password("password"))