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 :desired_name, user_name: true
|
||||||
validates_presence_of :original_name, :desired_name
|
validates_presence_of :original_name, :desired_name
|
||||||
|
|
||||||
after_create :approve!
|
after_create :update_name!
|
||||||
|
|
||||||
def self.visible(viewer = CurrentUser.user)
|
def self.visible(viewer = CurrentUser.user)
|
||||||
if viewer.is_admin?
|
if viewer.is_admin?
|
||||||
@@ -18,12 +18,8 @@ class UserNameChangeRequest < ApplicationRecord
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def approve!
|
def update_name!
|
||||||
user.update_attribute(:name, desired_name)
|
user.update!(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)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def not_limited
|
def not_limited
|
||||||
|
|||||||
@@ -5,51 +5,14 @@ class UserNameChangeRequestTest < ActiveSupport::TestCase
|
|||||||
setup do
|
setup do
|
||||||
@admin = FactoryBot.create(:admin_user)
|
@admin = FactoryBot.create(:admin_user)
|
||||||
@requester = FactoryBot.create(: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
|
end
|
||||||
|
|
||||||
context "creating a new request" do
|
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
|
should "not validate if the desired name already exists" do
|
||||||
assert_difference("UserNameChangeRequest.count", 0) do
|
assert_difference("UserNameChangeRequest.count", 0) do
|
||||||
req = UserNameChangeRequest.create(
|
req = UserNameChangeRequest.create(
|
||||||
@@ -62,8 +25,7 @@ class UserNameChangeRequestTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
should "not convert the desired name to lower case" do
|
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")
|
uncr = create(:user_name_change_request, user: @requester, original_name: "provence.", desired_name: "Provence")
|
||||||
CurrentUser.scoped(@admin) { uncr.approve! }
|
|
||||||
|
|
||||||
assert_equal("Provence", @requester.name)
|
assert_equal("Provence", @requester.name)
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user