2024-02-25 12:15:55 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2023-07-31 17:14:39 -04:00
|
|
|
require "test_helper"
|
2013-03-26 01:03:42 -04:00
|
|
|
|
|
|
|
class UserNameChangeRequestTest < ActiveSupport::TestCase
|
|
|
|
context "in all cases" do
|
|
|
|
setup do
|
2022-11-25 15:06:54 -05:00
|
|
|
@admin = create(:admin_user)
|
|
|
|
@requester = create(:user)
|
2013-03-26 01:03:42 -04:00
|
|
|
CurrentUser.user = @requester
|
2017-04-04 15:25:03 -04:00
|
|
|
end
|
|
|
|
|
2013-03-26 01:03:42 -04:00
|
|
|
context "approving a request" do
|
|
|
|
setup do
|
|
|
|
@change_request = UserNameChangeRequest.create(
|
2023-07-31 17:14:39 -04:00
|
|
|
user_id: @requester.id,
|
|
|
|
original_name: @requester.name,
|
|
|
|
status: "pending",
|
|
|
|
desired_name: "abc",
|
2013-03-26 01:03:42 -04:00
|
|
|
)
|
|
|
|
CurrentUser.user = @admin
|
|
|
|
end
|
2022-04-05 12:50:34 -04:00
|
|
|
|
2013-03-26 01:03:42 -04:00
|
|
|
should "create a dmail" do
|
2023-07-31 17:14:39 -04:00
|
|
|
assert_difference(-> { Dmail.count }, 1) do
|
2013-03-26 01:03:42 -04:00
|
|
|
@change_request.approve!
|
|
|
|
end
|
|
|
|
end
|
2022-04-05 12:50:34 -04:00
|
|
|
|
2013-03-26 01:03:42 -04:00
|
|
|
should "change the user's name" do
|
|
|
|
@change_request.approve!
|
|
|
|
@requester.reload
|
|
|
|
assert_equal("abc", @requester.name)
|
|
|
|
end
|
2022-04-05 12:50:34 -04:00
|
|
|
|
2013-03-26 01:03:42 -04:00
|
|
|
should "clear the user name cache" do
|
|
|
|
@change_request.approve!
|
2022-11-29 13:14:09 -05:00
|
|
|
assert_equal("abc", Cache.fetch("uin:#{@requester.id}"))
|
2013-03-26 01:03:42 -04:00
|
|
|
end
|
|
|
|
end
|
2022-04-05 12:50:34 -04:00
|
|
|
|
2013-03-26 01:03:42 -04:00
|
|
|
context "creating a new request" do
|
|
|
|
should "not validate if the desired name already exists" do
|
2023-07-31 17:14:39 -04:00
|
|
|
assert_difference(-> { UserNameChangeRequest.count }, 0) do
|
2013-03-26 01:03:42 -04:00
|
|
|
req = UserNameChangeRequest.create(
|
2023-07-31 17:14:39 -04:00
|
|
|
user_id: @requester.id,
|
|
|
|
original_name: @requester.name,
|
|
|
|
status: "pending",
|
|
|
|
desired_name: @requester.name,
|
2013-03-26 01:03:42 -04:00
|
|
|
)
|
|
|
|
assert_equal(["Desired name already exists"], req.errors.full_messages)
|
|
|
|
end
|
|
|
|
end
|
2017-05-07 10:53:13 -04:00
|
|
|
|
|
|
|
should "not convert the desired name to lower case" do
|
2022-11-25 15:06:54 -05:00
|
|
|
uncr = create(:user_name_change_request, user: @requester, original_name: "provence.", desired_name: "Provence")
|
2022-11-26 09:20:15 -05:00
|
|
|
as(@admin) { uncr.approve! }
|
2017-05-07 10:53:13 -04:00
|
|
|
|
|
|
|
assert_equal("Provence", @requester.name)
|
|
|
|
end
|
2013-03-26 01:03:42 -04:00
|
|
|
end
|
|
|
|
end
|
2023-07-31 17:14:39 -04:00
|
|
|
|
|
|
|
context "when users switch names" do
|
|
|
|
setup do
|
|
|
|
# Uppercase usernames are relevant for the test because of normalization
|
|
|
|
@u1 = create(:user, name: "Aaa")
|
|
|
|
@u2 = create(:user, name: "Bbb")
|
|
|
|
|
|
|
|
# Fill cache with currently correct data
|
|
|
|
User.name_to_id("aaa")
|
|
|
|
User.name_to_id("bbb")
|
|
|
|
|
|
|
|
as(@u1) { UserNameChangeRequest.create(desired_name: "temporary", skip_limited_validation: true).approve! }
|
|
|
|
@u1.reload
|
|
|
|
|
|
|
|
as(@u2) { UserNameChangeRequest.create(desired_name: "Aaa", skip_limited_validation: true).approve! }
|
|
|
|
@u2.reload
|
|
|
|
|
|
|
|
as(@u1) { UserNameChangeRequest.create(desired_name: "Bbb", skip_limited_validation: true).approve! }
|
|
|
|
@u1.reload
|
|
|
|
end
|
|
|
|
|
|
|
|
should "update the user cache correcly" do
|
|
|
|
assert_equal("Bbb", @u1.name)
|
|
|
|
assert_equal("Aaa", @u2.name)
|
|
|
|
assert_equal(@u1.id, User.name_to_id(@u1.name))
|
|
|
|
assert_equal(@u2.id, User.name_to_id(@u2.name))
|
|
|
|
end
|
|
|
|
end
|
2013-03-26 01:03:42 -04:00
|
|
|
end
|