[Users] Fix switching names not updating the cache correctly

Regressed in7df64409d6
update_cache was not updated to normalize the username
This commit is contained in:
Earlopain 2023-07-31 23:14:39 +02:00
parent 12e996dc08
commit 66c66af58c
No known key found for this signature in database
GPG Key ID: 6CFB948E15246897
2 changed files with 41 additions and 13 deletions

View File

@ -197,7 +197,7 @@ class User < ApplicationRecord
def update_cache
Cache.write("uin:#{id}", name, expires_in: 4.hours)
Cache.write("uni:#{name}", id, expires_in: 4.hours)
Cache.write("uni:#{User.normalize_name(name)}", id, expires_in: 4.hours)
end
end

View File

@ -1,4 +1,4 @@
require 'test_helper'
require "test_helper"
class UserNameChangeRequestTest < ActiveSupport::TestCase
context "in all cases" do
@ -11,16 +11,16 @@ class UserNameChangeRequestTest < ActiveSupport::TestCase
context "approving a request" do
setup do
@change_request = UserNameChangeRequest.create(
:user_id => @requester.id,
:original_name => @requester.name,
:status => "pending",
:desired_name => "abc"
user_id: @requester.id,
original_name: @requester.name,
status: "pending",
desired_name: "abc",
)
CurrentUser.user = @admin
end
should "create a dmail" do
assert_difference("Dmail.count", 1) do
assert_difference(-> { Dmail.count }, 1) do
@change_request.approve!
end
end
@ -37,7 +37,7 @@ class UserNameChangeRequestTest < ActiveSupport::TestCase
end
should "create mod action" do
assert_difference("ModAction.count", 1) do
assert_difference(-> { ModAction.count }, 1) do
@change_request.approve!
end
end
@ -45,12 +45,12 @@ class UserNameChangeRequestTest < ActiveSupport::TestCase
context "creating a new request" 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(
:user_id => @requester.id,
:original_name => @requester.name,
:status => "pending",
:desired_name => @requester.name
user_id: @requester.id,
original_name: @requester.name,
status: "pending",
desired_name: @requester.name,
)
assert_equal(["Desired name already exists"], req.errors.full_messages)
end
@ -64,4 +64,32 @@ class UserNameChangeRequestTest < ActiveSupport::TestCase
end
end
end
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
end