FIX: Rename `User#usernames` that clashes with `Group#name`. (#6069)
This commit is contained in:
parent
96aca6d7e6
commit
4172e1dd52
|
@ -0,0 +1,29 @@
|
|||
module Jobs
|
||||
class FixUserUsernamesAndGroupNamesClash < Jobs::Scheduled
|
||||
every 1.week
|
||||
|
||||
def execute(args)
|
||||
User.joins("LEFT JOIN groups ON lower(groups.name) = users.username_lower")
|
||||
.where("groups.id IS NOT NULL")
|
||||
.find_each do |user|
|
||||
|
||||
suffix = 1
|
||||
old_username = user.username
|
||||
|
||||
loop do
|
||||
user.username = "#{old_username}#{suffix}"
|
||||
suffix += 1
|
||||
break if user.valid?
|
||||
end
|
||||
|
||||
new_username = user.username
|
||||
user.username = old_username
|
||||
|
||||
UsernameChanger.new(
|
||||
user,
|
||||
new_username
|
||||
).change(asynchronous: false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,15 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Jobs::FixUserUsernamesAndGroupNamesClash do
|
||||
it 'update usernames of users that clashes with a group name' do
|
||||
user = Fabricate(:user)
|
||||
Fabricate(:user, username: 'test1')
|
||||
group = Fabricate(:group, name: 'test')
|
||||
user.update_columns(username: 'test', username_lower: 'test')
|
||||
|
||||
Jobs::FixUserUsernamesAndGroupNamesClash.new.execute({})
|
||||
|
||||
expect(user.reload.username).to eq('test2')
|
||||
expect(group.reload.name).to eq('test')
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue