require 'rails_helper' RSpec.describe TicketArticleCommunicateEmailJob, type: :job do describe '#perform' do context 'for an email article' do let(:article) { create(:ticket_article, type_name: 'email') } let(:recipient_list) { [article.to, article.cc].reject(&:blank?).join(',') } before { allow(Rails.logger).to receive(:info) } # What we _really_ want is to expect an email to be sent. # So why are we testing log messages instead? # # Because so far, our attempts to test email dispatch have either # a) been closely tied to implementation, with lots of ugly mock objects; or # b) had to test faraway classes like Channel::Driver::Imap. # # In other words, this test is NOT set in stone, and very open to improvement. it 'records outgoing email dispatch to Rails log' do described_class.perform_now(article.id) expect(Rails.logger) .to have_received(:info) .with("Send email to: '#{recipient_list}' (from #{article.from})") end end end end