diff --git a/app/logical/user_name_validator.rb b/app/logical/user_name_validator.rb index 4ac8368e9..0bffa0fa7 100644 --- a/app/logical/user_name_validator.rb +++ b/app/logical/user_name_validator.rb @@ -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 diff --git a/test/unit/user_name_change_request_test.rb b/test/unit/user_name_change_request_test.rb index cb0218c66..14aafc648 100644 --- a/test/unit/user_name_change_request_test.rb +++ b/test/unit/user_name_change_request_test.rb @@ -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 diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index 820d3ab3e..9fb64346d 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -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