From 45931f86bee93d39cb9cea454412b9523d64bd08 Mon Sep 17 00:00:00 2001
From: Jarek Radosz <jradosz@gmail.com>
Date: Wed, 3 Feb 2021 18:12:22 +0100
Subject: [PATCH] DEV: Remove bulk group admin endpoints (#11949)

Originally added in 47e25648dfa200ac266a6311ba585827638d2bcc. Looks like all related code was removed in c82b2dcc24c06634e64a6c388c18a815f039c608 and b76731d722c099f64446f18fbf92026be7cfd225.
---
 app/controllers/admin/groups_controller.rb    | 35 -----------------
 config/locales/client.en.yml                  |  4 --
 config/routes.rb                              |  3 --
 spec/requests/admin/groups_controller_spec.rb | 38 -------------------
 4 files changed, 80 deletions(-)

diff --git a/app/controllers/admin/groups_controller.rb b/app/controllers/admin/groups_controller.rb
index eba7042ba10..3c84ff92981 100644
--- a/app/controllers/admin/groups_controller.rb
+++ b/app/controllers/admin/groups_controller.rb
@@ -1,41 +1,6 @@
 # frozen_string_literal: true
 
 class Admin::GroupsController < Admin::AdminController
-  def bulk
-  end
-
-  def bulk_perform
-    group = Group.find_by(id: params[:group_id].to_i)
-    raise Discourse::NotFound unless group
-    users_added = 0
-
-    users = (params[:users] || []).map { |user| user.downcase!; user }
-    valid_emails = {}
-    valid_usernames = {}
-
-    valid_users = User.joins(:user_emails)
-      .where("username_lower IN (:users) OR lower(user_emails.email) IN (:users)", users: users)
-      .pluck(:id, :username_lower, :"user_emails.email")
-
-    valid_users.map! do |id, username_lower, email|
-      valid_emails[email] = valid_usernames[username_lower] = id
-      id
-    end
-
-    valid_users.uniq!
-    invalid_users = users.reject { |u| valid_emails[u] || valid_usernames[u] }
-    group.bulk_add(valid_users) if valid_users.present?
-    users_added = valid_users.count
-
-    response = success_json.merge(users_not_added: invalid_users)
-
-    if users_added > 0
-      response[:message] = I18n.t('groups.success.bulk_add', count: users_added)
-    end
-
-    render json: response
-  end
-
   def create
     guardian.ensure_can_create_group!
 
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index d764896ab30..f3f023fb4de 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -3752,10 +3752,6 @@ en:
             available: "Group name is available"
             not_available: "Group name is not available"
             blank: "Group name cannot be blank"
-        bulk_add:
-          title: "Bulk Add to Group"
-          complete_users_not_added: "These users were not added (make sure they have an account):"
-          paste: "Paste a list of usernames or emails, one per line:"
         add_members:
           as_owner: "Set user(s) as owner(s) of this group"
         manage:
diff --git a/config/routes.rb b/config/routes.rb
index dd704accb53..222505a31d9 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -100,9 +100,6 @@ Discourse::Application.routes.draw do
       end
       resources :groups, except: [:create], constraints: AdminConstraint.new do
         collection do
-          get 'bulk'
-          get 'bulk-complete' => 'groups#bulk'
-          put 'bulk' => 'groups#bulk_perform'
           put "automatic_membership_count" => "groups#automatic_membership_count"
         end
       end
diff --git a/spec/requests/admin/groups_controller_spec.rb b/spec/requests/admin/groups_controller_spec.rb
index 03a606e2367..c0053113e47 100644
--- a/spec/requests/admin/groups_controller_spec.rb
+++ b/spec/requests/admin/groups_controller_spec.rb
@@ -237,44 +237,6 @@ RSpec.describe Admin::GroupsController do
     end
   end
 
-  describe "#bulk_perform" do
-    fab!(:group) do
-      Fabricate(:group,
-        name: "test",
-        primary_group: true,
-        title: 'WAT',
-        grant_trust_level: 3
-      )
-    end
-
-    fab!(:user) { Fabricate(:user, trust_level: 2) }
-    fab!(:user2) { Fabricate(:user, trust_level: 4) }
-
-    it "can assign users to a group by email or username" do
-      Jobs.run_immediately!
-
-      put "/admin/groups/bulk.json", params: {
-        group_id: group.id, users: [user.username.upcase, user2.email, 'doesnt_exist']
-      }
-
-      expect(response.status).to eq(200)
-
-      user.reload
-      expect(user.primary_group).to eq(group)
-      expect(user.title).to eq("WAT")
-      expect(user.trust_level).to eq(3)
-
-      user2.reload
-      expect(user2.primary_group).to eq(group)
-      expect(user2.title).to eq("WAT")
-      expect(user2.trust_level).to eq(4)
-
-      json = response.parsed_body
-      expect(json['message']).to eq("2 users have been added to the group.")
-      expect(json['users_not_added'][0]).to eq("doesnt_exist")
-    end
-  end
-
   context "#destroy" do
     it 'should return the right response for an invalid group_id' do
       max_id = Group.maximum(:id).to_i