Skip to content

Commit

Permalink
Move BadgeAchievements::SendEmailNotificationWorker to Sidekiq (#5779)…
Browse files Browse the repository at this point in the history
… [deploy]
  • Loading branch information
atsmith813 authored Jan 31, 2020
1 parent ba139f5 commit 783da4b
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 3 deletions.
4 changes: 2 additions & 2 deletions app/models/badge_achievement.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class BadgeAchievement < ApplicationRecord
validates :badge_id, uniqueness: { scope: :user_id }

after_create_commit :notify_recipient
after_create :send_email_notification
after_create_commit :send_email_notification
after_create :award_credits
before_validation :render_rewarding_context_message_html

Expand All @@ -32,7 +32,7 @@ def notify_recipient
def send_email_notification
return unless user.class.name == "User" && user.email.present? && user.email_badge_notifications

BadgeAchievements::SendEmailNotificationJob.perform_later(id)
BadgeAchievements::SendEmailNotificationWorker.perform_async(id)
end

def award_credits
Expand Down
14 changes: 14 additions & 0 deletions app/workers/badge_achievements/send_email_notification_worker.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module BadgeAchievements
class SendEmailNotificationWorker
include Sidekiq::Worker

sidekiq_options queue: :low_priority, retry: 10

def perform(badge_achievement_id)
badge_achievement = BadgeAchievement.find_by(id: badge_achievement_id)
return unless badge_achievement

NotifyMailer.new_badge_email(badge_achievement).deliver_now
end
end
end
2 changes: 1 addition & 1 deletion spec/system/internal/admin_awards_badges_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def award_two_badges
end

it "notifies users of new badges" do
assert_enqueued_jobs(2, only: BadgeAchievements::SendEmailNotificationJob) do
sidekiq_assert_enqueued_jobs(2, only: BadgeAchievements::SendEmailNotificationWorker) do
sidekiq_assert_enqueued_jobs(2, only: Notifications::NewBadgeAchievementWorker) do
award_two_badges
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
require "rails_helper"

RSpec.describe BadgeAchievements::SendEmailNotificationWorker, type: :worker do
let(:worker) { subject }

# passing in a random badge_achievement_id argument since the worker itself won't be executed
include_examples "#enqueues_on_correct_queue", "low_priority", [456]

describe "#perform_now" do
context "with badge achievement" do
let_it_be(:badge_achievement) { double }

before do
allow(BadgeAchievement).to receive(:find_by).with(id: 1).and_return(badge_achievement)
end

it "sends badge email" do
mailer = double
allow(mailer).to receive(:deliver_now)
allow(NotifyMailer).to receive(:new_badge_email).with(badge_achievement).and_return(mailer)

worker.perform(1)

expect(NotifyMailer).to have_received(:new_badge_email).with(badge_achievement)
expect(mailer).to have_received(:deliver_now)
end
end

context "without badge achievement" do
it "does not error" do
expect { worker.perform(nil) }.not_to raise_error
end

it "does not call NotifyMailer" do
allow(NotifyMailer).to receive(:new_badge_email)

worker.perform(nil)

expect(NotifyMailer).not_to have_received(:new_badge_email)
end
end
end
end

0 comments on commit 783da4b

Please sign in to comment.