commit: d142544159dee7a93e31c886737e12c5bca8844a
parent: 7ac092513c3c298ad80cb80f7bee76ca8ed56235
Author: Matt Jankowski <mjankowski@thoughtbot.com>
Date: Wed, 10 May 2017 09:45:43 -0400
Spec coverage and refactor of digest mailer worker (#2961)
Diffstat:
2 files changed, 49 insertions(+), 2 deletions(-)
diff --git a/app/workers/digest_mailer_worker.rb b/app/workers/digest_mailer_worker.rb
@@ -5,10 +5,21 @@ class DigestMailerWorker
sidekiq_options queue: 'mailers'
+ attr_reader :user
+
def perform(user_id)
- user = User.find(user_id)
- return unless user.settings.notification_emails['digest']
+ @user = User.find(user_id)
+ deliver_digest if user_receives_digest?
+ end
+
+ private
+
+ def deliver_digest
NotificationMailer.digest(user.account).deliver_now!
user.touch(:last_emailed_at)
end
+
+ def user_receives_digest?
+ user.settings.notification_emails['digest']
+ end
end
diff --git a/spec/workers/digest_mailer_worker_spec.rb b/spec/workers/digest_mailer_worker_spec.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe DigestMailerWorker do
+ describe 'perform' do
+ let(:user) { Fabricate(:user, last_emailed_at: 3.days.ago) }
+
+ context 'for a user who receives digests' do
+ it 'sends the email' do
+ service = double(deliver_now!: nil)
+ allow(NotificationMailer).to receive(:digest).and_return(service)
+ update_user_digest_setting(true)
+ described_class.perform_async(user.id)
+
+ expect(NotificationMailer).to have_received(:digest)
+ expect(user.reload.last_emailed_at).to be_within(1).of(Time.now.utc)
+ end
+ end
+
+ context 'for a user who does not receive digests' do
+ it 'does not send the email' do
+ allow(NotificationMailer).to receive(:digest)
+ update_user_digest_setting(false)
+ described_class.perform_async(user.id)
+
+ expect(NotificationMailer).not_to have_received(:digest)
+ expect(user.last_emailed_at).to be_within(1).of(3.days.ago)
+ end
+ end
+
+ def update_user_digest_setting(value)
+ user.settings['notification_emails'] = user.settings['notification_emails'].merge('digest' => value)
+ end
+ end
+end