diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index de7722fe58b..163a3f0b73b 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -201,12 +201,15 @@ class UsersController < ApplicationController end def is_local_username - users = params[:usernames] - users = [params[:username]] if users.blank? - users.each(&:downcase!) + usernames = params[:usernames] + usernames = [params[:username]] if usernames.blank? + usernames.each(&:downcase!) - result = User.where(username_lower: users).pluck(:username_lower) - render json: {valid: result} + result = User.where(staged: false) + .where(username_lower: usernames) + .pluck(:username_lower) + + render json: { valid: result } end def render_available_true diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index 741a023d411..05aba09c9c5 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -1539,4 +1539,32 @@ describe UsersController do end + describe ".is_local_username" do + + let(:user) { Fabricate(:user) } + + it "finds the user" do + xhr :get, :is_local_username, username: user.username + expect(response).to be_success + json = JSON.parse(response.body) + expect(json["valid"][0]).to eq(user.username) + end + + it "supports multiples usernames" do + xhr :get, :is_local_username, usernames: [user.username, "system"] + expect(response).to be_success + json = JSON.parse(response.body) + expect(json["valid"].size).to eq(2) + end + + it "never includes staged accounts" do + staged = Fabricate(:user, staged: true) + xhr :get, :is_local_username, usernames: [staged.username] + expect(response).to be_success + json = JSON.parse(response.body) + expect(json["valid"].size).to eq(0) + end + + end + end