user name changes: don't create feedback or modaction.
Don't create a neutral feedback, create a mod action, or dmail the user after changing a user's name. The name change is already recorded in /user_name_change_requests, so creating feedbacks and mod actions is redundant. They also expose private information (when a user deletes their account, old name changes aren't supposed to be visible any more).
This commit is contained in:
@@ -6,7 +6,7 @@ class UserNameChangeRequest < ApplicationRecord
|
||||
validates :desired_name, user_name: true
|
||||
validates_presence_of :original_name, :desired_name
|
||||
|
||||
after_create :approve!
|
||||
after_create :update_name!
|
||||
|
||||
def self.visible(viewer = CurrentUser.user)
|
||||
if viewer.is_admin?
|
||||
@@ -18,12 +18,8 @@ class UserNameChangeRequest < ApplicationRecord
|
||||
end
|
||||
end
|
||||
|
||||
def approve!
|
||||
user.update_attribute(:name, desired_name)
|
||||
body = "Your name change request has been approved. Be sure to log in with your new user name."
|
||||
Dmail.create_automated(:title => "Name change request approved", :body => body, :to_id => user_id)
|
||||
UserFeedback.create(:user_id => user_id, :category => "neutral", :body => "Name changed from #{original_name} to #{desired_name}")
|
||||
ModAction.log("Name changed from #{original_name} to #{desired_name}",:user_name_change)
|
||||
def update_name!
|
||||
user.update!(name: desired_name)
|
||||
end
|
||||
|
||||
def not_limited
|
||||
|
||||
@@ -5,51 +5,14 @@ class UserNameChangeRequestTest < ActiveSupport::TestCase
|
||||
setup do
|
||||
@admin = FactoryBot.create(:admin_user)
|
||||
@requester = FactoryBot.create(:user)
|
||||
CurrentUser.user = @requester
|
||||
CurrentUser.ip_addr = "127.0.0.1"
|
||||
end
|
||||
|
||||
teardown do
|
||||
CurrentUser.user = nil
|
||||
CurrentUser.ip_addr = nil
|
||||
end
|
||||
|
||||
context "approving a request" do
|
||||
setup do
|
||||
@change_request = UserNameChangeRequest.create(
|
||||
:user_id => @requester.id,
|
||||
:original_name => @requester.name,
|
||||
:desired_name => "abc"
|
||||
)
|
||||
CurrentUser.user = @admin
|
||||
end
|
||||
|
||||
should "create a dmail" do
|
||||
assert_difference("Dmail.count", 2) do
|
||||
@change_request.approve!
|
||||
end
|
||||
end
|
||||
|
||||
should "change the user's name" do
|
||||
@change_request.approve!
|
||||
@requester.reload
|
||||
assert_equal("abc", @requester.name)
|
||||
end
|
||||
|
||||
should "create feedback" do
|
||||
assert_difference("UserFeedback.count", 1) do
|
||||
@change_request.approve!
|
||||
end
|
||||
end
|
||||
|
||||
should "create mod action" do
|
||||
assert_difference("ModAction.count", 1) do
|
||||
@change_request.approve!
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "creating a new request" do
|
||||
should "change the user's name" do
|
||||
@change_request = create(:user_name_change_request, user_id: @requester.id, original_name: @requester.name, desired_name: "abc")
|
||||
assert_equal("abc", @requester.reload.name)
|
||||
end
|
||||
|
||||
should "not validate if the desired name already exists" do
|
||||
assert_difference("UserNameChangeRequest.count", 0) do
|
||||
req = UserNameChangeRequest.create(
|
||||
@@ -62,8 +25,7 @@ class UserNameChangeRequestTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
should "not convert the desired name to lower case" do
|
||||
uncr = FactoryBot.create(:user_name_change_request, user: @requester, original_name: "provence.", desired_name: "Provence")
|
||||
CurrentUser.scoped(@admin) { uncr.approve! }
|
||||
uncr = create(:user_name_change_request, user: @requester, original_name: "provence.", desired_name: "Provence")
|
||||
|
||||
assert_equal("Provence", @requester.name)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user