Skip to content

Commit

Permalink
Worker/user self delete (#5698)
Browse files Browse the repository at this point in the history
* Moving user self delete job to sidekiq

* Refactor/user self delete worker
  • Loading branch information
maykonmenezes authored and mstruve committed Jan 27, 2020
1 parent ebf4320 commit 7ad7320
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 19 deletions.
2 changes: 1 addition & 1 deletion app/controllers/users_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ def confirm_destroy
def full_delete
set_tabs("account")
if @user.email?
Users::SelfDeleteJob.perform_later(@user.id)
Users::SelfDeleteWorker.perform_async(@user.id)
sign_out @user
flash[:global_notice] = "Your account deletion is scheduled. You'll be notified when it's deleted."
redirect_to root_path
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
module Users
class SelfDeleteJob < ApplicationJob
queue_as :users_self_delete
class SelfDeleteWorker
include Sidekiq::Worker

def perform(user_id, service = Users::Delete)
sidekiq_options queue: :high_priority, retry: 10

def perform(user_id)
user = User.find_by(id: user_id)
return unless user

service.call(user)
Users::Delete.call(user)
NotifyMailer.account_deleted_email(user).deliver
rescue StandardError => e
Rails.logger.error("Error while deleting user: #{e}")
Expand Down
4 changes: 2 additions & 2 deletions spec/requests/user/user_destroy_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@
end

it "schedules a user delete job" do
expect do
sidekiq_assert_enqueued_with(job: Users::SelfDeleteWorker) do
delete "/users/full_delete"
end.to have_enqueued_job(Users::SelfDeleteJob).with(user.id)
end
end

it "signs out" do
Expand Down
4 changes: 2 additions & 2 deletions spec/system/user/user_self_destroy_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
visit "/users/confirm_destroy/#{token}"
fill_in "delete__account__username__field", with: user.username
fill_in "delete__account__verification__field", with: "delete my account"
expect do
sidekiq_assert_enqueued_with(job: Users::SelfDeleteWorker) do
click_button "DELETE ACCOUNT"
end.to have_enqueued_job(Users::SelfDeleteJob)
end
end
end
Original file line number Diff line number Diff line change
@@ -1,43 +1,42 @@
require "rails_helper"

RSpec.describe Users::SelfDeleteJob, type: :job do
include_examples "#enqueues_job", "users_self_delete", 1

describe "#perform_now" do
RSpec.describe Users::SelfDeleteWorker, type: :worker do
describe "#perform" do
let(:user) { create(:user) }
let(:delete) { double }
let(:delete) { Users::Delete }
let(:worker) { subject }

before do
allow(delete).to receive(:call)
end

context "when user is found" do
it "calls the service when a user is found" do
described_class.perform_now(user.id, delete)
worker.perform(user.id)
expect(delete).to have_received(:call).with(user)
end

it "sends the notification" do
expect do
described_class.perform_now(user.id, delete)
worker.perform(user.id)
end.to change(ActionMailer::Base.deliveries, :count).by(1)
end

it "sends the correct notification" do
allow(NotifyMailer).to receive(:account_deleted_email).and_call_original
described_class.perform_now(user.id, delete)
worker.perform(user.id)
expect(NotifyMailer).to have_received(:account_deleted_email).with(user)
end
end

context "when user is not found" do
it "doesn't fail" do
described_class.perform_now(-1, delete)
worker.perform(-1)
end

it "doesn't send the notification" do
expect do
described_class.perform_now(-1, delete)
worker.perform(-1)
end.not_to change(ActionMailer::Base.deliveries, :count)
end
end
Expand Down

0 comments on commit 7ad7320

Please sign in to comment.