Fix #5143: Allow name changes with same name but changed case.

This commit is contained in:
evazion
2022-11-12 23:03:00 -06:00
parent 22f232f4e9
commit d053dc7356
3 changed files with 21 additions and 6 deletions

View File

@@ -18,9 +18,10 @@ class UserNameValidator < ActiveModel::EachValidator
def validate_each(rec, attr, name)
forbidden_characters = name.delete(ALLOWED_PUNCTUATION).chars.grep(/[[:punct:]]/).uniq
current_user = rec.is_a?(UserNameChangeRequest) ? rec.user : rec
if rec.new_record? && User.find_by_name(name).present?
rec.errors.add(attr, "already exists")
if User.without(current_user).find_by_name(name).present?
rec.errors.add(attr, "already taken")
elsif name.length <= 1
rec.errors.add(attr, "must be more than 1 character long")
elsif name.length >= 25

View File

@@ -3,8 +3,8 @@ require 'test_helper'
class UserNameChangeRequestTest < ActiveSupport::TestCase
context "in all cases" do
setup do
@admin = FactoryBot.create(:admin_user)
@requester = FactoryBot.create(:user)
@admin = create(:admin_user)
@requester = create(:user, name: "provence")
end
context "creating a new request" do
@@ -15,10 +15,11 @@ class UserNameChangeRequestTest < ActiveSupport::TestCase
should "not validate if the desired name already exists" do
assert_difference("UserNameChangeRequest.count", 0) do
req = build(:user_name_change_request, user: @requester, original_name: @requester.name, desired_name: @requester.name)
user = create(:user)
req = build(:user_name_change_request, user: user, original_name: user.name, desired_name: @requester.name)
req.valid?
assert_equal(["Desired name already exists"], req.errors.full_messages)
assert_equal(["Desired name already taken"], req.errors.full_messages)
end
end
@@ -27,6 +28,12 @@ class UserNameChangeRequestTest < ActiveSupport::TestCase
assert_equal("Provence", @requester.name)
end
should "allow the user to change the case of their name" do
uncr = create(:user_name_change_request, user: @requester, original_name: "provence", desired_name: "Provence")
assert_equal("Provence", @requester.name)
end
end
end
end

View File

@@ -151,6 +151,13 @@ class UserTest < ActiveSupport::TestCase
assert_equal(["Name can't contain whitespace"], user.errors.full_messages)
end
should "not conflict with an existing name" do
create(:user, name: "bkub")
user = build(:user, name: "BKUB")
user.save
assert_equal(["Name already taken"], user.errors.full_messages)
end
should "be less than 25 characters long" do
user = build(:user, name: "a"*25)
user.save