Skip to content

Commit

Permalink
FIX: Rename User#usernames that clashes with Group#name. (#6069)
Browse files Browse the repository at this point in the history
  • Loading branch information
tgxworld committed Jul 9, 2018
1 parent 96aca6d commit 4172e1d
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
29 changes: 29 additions & 0 deletions app/jobs/scheduled/fix_user_usernames_and_groups_names_clash.rb
@@ -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
15 changes: 15 additions & 0 deletions spec/jobs/fix_user_usernames_and_group_names_clash_spec.rb
@@ -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

1 comment on commit 4172e1d

@discoursebot
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This commit has been mentioned on Discourse Meta. There might be relevant details there:

https://meta.discourse.org/t/recent-changes-to-api-requests/91967/5

Please sign in to comment.