Migrate subscribe to mailchimp newsletter job to sidekiq worker (#5423)
* Start migrating job to sidekiq worker * Only check for badge jobs queued to sidekiq
This commit is contained in:
parent
47c77dbee9
commit
5c9302f5f1
5 changed files with 46 additions and 12 deletions
|
|
@ -392,7 +392,7 @@ class User < ApplicationRecord
|
|||
return unless email.present? && email.include?("@")
|
||||
return if saved_changes["unconfirmed_email"] && saved_changes["confirmation_sent_at"]
|
||||
|
||||
Users::SubscribeToMailchimpNewsletterJob.perform_later(id)
|
||||
Users::SubscribeToMailchimpNewsletterWorker.perform_async(id)
|
||||
end
|
||||
|
||||
def a_sustaining_member?
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
module Users
|
||||
class SubscribeToMailchimpNewsletterWorker
|
||||
include Sidekiq::Worker
|
||||
sidekiq_options queue: :low_priority, retry: 10
|
||||
|
||||
def perform(user_id)
|
||||
user = User.find_by(id: user_id)
|
||||
|
||||
MailchimpBot.new(user).upsert if user
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -489,29 +489,31 @@ RSpec.describe User, type: :model do
|
|||
end
|
||||
|
||||
context "when callbacks are triggered after save" do
|
||||
describe "subscribing to mailchip newsletter" do
|
||||
it "enqueues SubscribeToMailchimpNewsletterJob" do
|
||||
expect do
|
||||
describe "subscribing to mailchimp newsletter" do
|
||||
let(:user) { build(:user) }
|
||||
|
||||
it "enqueues SubscribeToMailchimpNewsletterWorker" do
|
||||
sidekiq_assert_enqueued_with(job: Users::SubscribeToMailchimpNewsletterWorker, args: user.id) do
|
||||
user.save
|
||||
end.to have_enqueued_job(Users::SubscribeToMailchimpNewsletterJob).exactly(:once).with(user.id)
|
||||
end
|
||||
end
|
||||
|
||||
it "does not enqueue without an email" do
|
||||
expect do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Users::SubscribeToMailchimpNewsletterWorker) do
|
||||
user.update(email: "")
|
||||
end.not_to have_enqueued_job(Users::SubscribeToMailchimpNewsletterJob).exactly(:once).with(user.id)
|
||||
end
|
||||
end
|
||||
|
||||
it "does not enqueue with an invalid email" do
|
||||
expect do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Users::SubscribeToMailchimpNewsletterWorker) do
|
||||
user.update(email: "foobar")
|
||||
end.not_to have_enqueued_job(Users::SubscribeToMailchimpNewsletterJob).exactly(:once).with(user.id)
|
||||
end
|
||||
end
|
||||
|
||||
it "does not enqueue with an unconfirmed email" do
|
||||
expect do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Users::SubscribeToMailchimpNewsletterWorker) do
|
||||
user.update(unconfirmed_email: "bob@bob.com", confirmation_sent_at: Time.current)
|
||||
end.not_to have_enqueued_job(Users::SubscribeToMailchimpNewsletterJob).exactly(:once).with(user.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ RSpec.describe "Admin awards badges", type: :system do
|
|||
|
||||
it "notifies users of new badges" do
|
||||
assert_enqueued_jobs(2, only: BadgeAchievements::SendEmailNotificationJob) do
|
||||
sidekiq_assert_enqueued_jobs(2) do
|
||||
sidekiq_assert_enqueued_jobs(2, only: Notifications::NewBadgeAchievementWorker) do
|
||||
award_two_badges
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe Users::SubscribeToMailchimpNewsletterWorker, type: :worker do
|
||||
include_examples "#enqueues_on_correct_queue", "low_priority", 1
|
||||
|
||||
describe "#perform_now" do
|
||||
let(:worker) { subject }
|
||||
let(:user) { FactoryBot.create(:user) }
|
||||
|
||||
it "subscribes user to mailchimp newsletter" do
|
||||
mailchimp_bot = double
|
||||
allow(MailchimpBot).to receive(:new).and_return(mailchimp_bot)
|
||||
allow(mailchimp_bot).to receive(:upsert)
|
||||
|
||||
worker.perform(user.id)
|
||||
|
||||
expect(mailchimp_bot).to have_received(:upsert)
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Reference in a new issue