* Remove digest e-mails * Remove digest-related codeclosed-social-glitch-2
@ -1,44 +0,0 @@ | |||
%table.email-table{ cellspacing: 0, cellpadding: 0 } | |||
%tbody | |||
%tr | |||
%td.email-body | |||
.email-container | |||
%table.content-section{ cellspacing: 0, cellpadding: 0 } | |||
%tbody | |||
%tr | |||
%td.content-cell.darker.hero-with-button | |||
.email-row | |||
.col-6 | |||
%table.column{ cellspacing: 0, cellpadding: 0 } | |||
%tbody | |||
%tr | |||
%td.column-cell.text-center.padded | |||
%h1= t 'notification_mailer.digest.title' | |||
%p.lead= t('notification_mailer.digest.body', since: l((@me.user_current_sign_in_at || @since).to_date, format: :short), instance: site_hostname) | |||
%table.button{ align: 'center', cellspacing: 0, cellpadding: 0 } | |||
%tbody | |||
%tr | |||
%td.button-primary | |||
= link_to web_url do | |||
%span= t 'notification_mailer.digest.action' | |||
- @notifications.each_with_index do |n, i| | |||
= render 'status', status: n.target_status, i: i | |||
- unless @follows_since.zero? | |||
%table.email-table{ cellspacing: 0, cellpadding: 0 } | |||
%tbody | |||
%tr | |||
%td.email-body | |||
.email-container | |||
%table.content-section{ cellspacing: 0, cellpadding: 0 } | |||
%tbody | |||
%tr | |||
%td.content-cell.content-start.border-top | |||
.email-row | |||
.col-6 | |||
%table.column{ cellspacing: 0, cellpadding: 0 } | |||
%tbody | |||
%tr | |||
%td.column-cell.text-center | |||
%p= t('notification_mailer.digest.new_followers_summary', count: @follows_since) |
@ -1,15 +0,0 @@ | |||
<%= raw t('application_mailer.salutation', name: display_name(@me)) %> | |||
<%= raw t('notification_mailer.digest.body', since: l(@me.user_current_sign_in_at || @since), instance: root_url) %> | |||
<% @notifications.each do |notification| %> | |||
* <%= raw t('notification_mailer.digest.mention', name: notification.from_account.pretty_acct) %> | |||
<%= raw extract_status_plain_text(notification.target_status) %> | |||
<%= raw t('application_mailer.view')%> <%= web_url("statuses/#{notification.target_status.id}") %> | |||
<% end %> | |||
<% if @follows_since > 0 %> | |||
<%= raw t('notification_mailer.digest.new_followers_summary', count: @follows_since) %> | |||
<% end %> |
@ -1,21 +0,0 @@ | |||
# frozen_string_literal: true | |||
class DigestMailerWorker | |||
include Sidekiq::Worker | |||
sidekiq_options queue: 'mailers' | |||
attr_reader :user | |||
def perform(user_id) | |||
@user = User.find(user_id) | |||
deliver_digest if @user.allows_digest_emails? | |||
end | |||
private | |||
def deliver_digest | |||
NotificationMailer.digest(user.account).deliver_now! | |||
user.touch(:last_emailed_at) | |||
end | |||
end |
@ -1,25 +0,0 @@ | |||
# frozen_string_literal: true | |||
class Scheduler::EmailScheduler | |||
include Sidekiq::Worker | |||
sidekiq_options retry: 0 | |||
FREQUENCY = 7.days.freeze | |||
SIGN_IN_OFFSET = 1.day.freeze | |||
def perform | |||
eligible_users.reorder(nil).find_each do |user| | |||
next unless user.allows_digest_emails? | |||
DigestMailerWorker.perform_async(user.id) | |||
end | |||
end | |||
private | |||
def eligible_users | |||
User.emailable | |||
.where('current_sign_in_at < ?', (FREQUENCY + SIGN_IN_OFFSET).ago) | |||
.where('last_emailed_at IS NULL OR last_emailed_at < ?', FREQUENCY.ago) | |||
end | |||
end |
@ -1,36 +0,0 @@ | |||
# 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 |