Allow admins to delete users without emails (#6530) [deploy]
* Allow admins to delete users without emails * Guard against blank email addresses
This commit is contained in:
parent
83a59063fc
commit
02f86fedd7
5 changed files with 42 additions and 5 deletions
|
|
@ -58,7 +58,7 @@ class Internal::UsersController < Internal::ApplicationController
|
|||
@user = User.find(params[:id])
|
||||
begin
|
||||
Moderator::DeleteUser.call(admin: current_user, user: @user, user_params: user_params)
|
||||
flash[:success] = "@" + @user.username + " (email: " + @user.email + ", user_id: " + @user.id.to_s + ") has been fully deleted. If requested, old content may have been ghostified. If this is a GDPR delete, delete them from Mailchimp & Google Analytics."
|
||||
flash[:success] = "@#{@user.username} (email: #{@user.email.presence || 'no email'}, user_id: #{@user.id}) has been fully deleted. If requested, old content may have been ghostified. If this is a GDPR delete, delete them from Mailchimp & Google Analytics."
|
||||
rescue StandardError => e
|
||||
flash[:danger] = e.message
|
||||
end
|
||||
|
|
|
|||
|
|
@ -463,6 +463,8 @@ class User < ApplicationRecord
|
|||
end
|
||||
|
||||
def unsubscribe_from_newsletters
|
||||
return if email.blank?
|
||||
|
||||
MailchimpBot.new(self).unsubscribe_all_newsletters
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,9 @@ module Users
|
|||
return unless user
|
||||
|
||||
Users::Delete.call(user)
|
||||
NotifyMailer.account_deleted_email(user).deliver unless admin_delete
|
||||
return if admin_delete || user.email.blank?
|
||||
|
||||
NotifyMailer.account_deleted_email(user).deliver
|
||||
rescue StandardError => e
|
||||
DatadogStatsClient.count("users.delete", 1, tags: ["action:failed", "user_id:#{user.id}"])
|
||||
Rails.logger.error("Error while deleting user: #{e}")
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ RSpec.describe "internal/users", type: :request do
|
|||
end
|
||||
end
|
||||
|
||||
describe "GET internal/users/:id/edit" do
|
||||
describe "GET /internal/users/:id/edit" do
|
||||
it "redirects from /username/moderate" do
|
||||
get "/#{user.username}/moderate"
|
||||
expect(response).to redirect_to("/internal/users/#{user.id}")
|
||||
|
|
@ -39,14 +39,14 @@ RSpec.describe "internal/users", type: :request do
|
|||
end
|
||||
end
|
||||
|
||||
describe "POST internal/users/:id/banish" do
|
||||
describe "POST /internal/users/:id/banish" do
|
||||
it "bans user for spam" do
|
||||
post "/internal/users/#{user.id}/banish"
|
||||
expect(user.reload.username).to include("spam")
|
||||
end
|
||||
end
|
||||
|
||||
describe "DELETE internal/users/:id/remove_identity" do
|
||||
describe "DELETE /internal/users/:id/remove_identity" do
|
||||
it "removes the given identity" do
|
||||
identity = user.identities.first
|
||||
delete "/internal/users/#{user.id}/remove_identity", params: { user: { identity_id: identity.id } }
|
||||
|
|
|
|||
33
spec/system/internal/admin_deletes_user_spec.rb
Normal file
33
spec/system/internal/admin_deletes_user_spec.rb
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe "Admin deletes user", type: :system do
|
||||
let(:admin) { create(:user, :super_admin) }
|
||||
let(:user) { create(:user) }
|
||||
|
||||
before do
|
||||
sign_in admin
|
||||
visit "/internal/users/#{user.id}/edit"
|
||||
end
|
||||
|
||||
it "enqueues a job for deleting the user" do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Users::DeleteWorker) do
|
||||
click_button "☠️ Fully Delete User & All Activity ☠️"
|
||||
end
|
||||
|
||||
message = "@#{user.username} (email: #{user.email}, user_id: #{user.id}) has been fully deleted."
|
||||
expect(page).to have_content(message)
|
||||
end
|
||||
|
||||
# See: https://github.com/thepracticaldev/tech-private/issues/404
|
||||
it "deletes users when they have no email address" do
|
||||
user.update(email: nil)
|
||||
|
||||
sidekiq_perform_enqueued_jobs do
|
||||
click_button "☠️ Fully Delete User & All Activity ☠️"
|
||||
end
|
||||
|
||||
message = "@#{user.username} (email: no email, user_id: #{user.id}) has been fully deleted."
|
||||
expect(page).to have_content(message)
|
||||
expect(User.find_by(id: user.id)).to be_nil
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Reference in a new issue