mirror of
https://github.com/discourse/discourse.git
synced 2025-02-09 12:54:56 +00:00
aee943486a
Mailing list mode now includes the 'no echo' option: to only receive emails of posts not created by you. If you reply to an email thread in mailing list mode, your reply will not then be echoed back to you in a duplicate email by the system.
150 lines
5.5 KiB
Ruby
150 lines
5.5 KiB
Ruby
require "rails_helper"
|
|
|
|
describe Jobs::NotifyMailingListSubscribers do
|
|
|
|
context "with mailing list on" do
|
|
|
|
let(:user) { Fabricate(:user) }
|
|
|
|
before do
|
|
SiteSetting.default_email_mailing_list_mode = true
|
|
SiteSetting.default_email_mailing_list_mode_frequency = 1
|
|
end
|
|
|
|
context "SiteSetting.max_emails_per_day_per_user" do
|
|
|
|
it 'stops sending mail once limit is reached' do
|
|
SiteSetting.max_emails_per_day_per_user = 2
|
|
post = Fabricate(:post)
|
|
|
|
user.email_logs.create(email_type: 'blah', to_address: user.email, user_id: user.id)
|
|
user.email_logs.create(email_type: 'blah', to_address: user.email, user_id: user.id)
|
|
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
expect(EmailLog.where(user_id: user.id, skipped: true).count).to eq(1)
|
|
end
|
|
end
|
|
|
|
context "SiteSetting.bounce_score_threshold" do
|
|
|
|
it "stops sending mail once bounce threshold is reached" do
|
|
user.user_stat.update_columns(bounce_score: SiteSetting.bounce_score_threshold + 1)
|
|
post = Fabricate(:post)
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
expect(EmailLog.where(user_id: user.id, skipped: true).count).to eq(1)
|
|
end
|
|
|
|
end
|
|
|
|
context "totally skipped if mailing list mode disabled" do
|
|
|
|
it "sends no email to the user" do
|
|
SiteSetting.disable_mailing_list_mode = true
|
|
|
|
post = Fabricate(:post)
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
expect(EmailLog.count).to eq(0)
|
|
end
|
|
end
|
|
|
|
context "with a valid post authored by same user" do
|
|
let!(:post) { Fabricate(:post, user: user) }
|
|
|
|
it "doesn't send the email to the user if the frequency is set to 'always with no echo'" do
|
|
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 2)
|
|
UserNotifications.expects(:mailing_list_notify).never
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
end
|
|
|
|
it "sends the email to the user if the frequency is set to 'always'" do
|
|
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 1)
|
|
UserNotifications.expects(:mailing_list_notify).with(user, post).once
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
end
|
|
|
|
it "does not send the email to the user if the frequency is set to 'daily'" do
|
|
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 0)
|
|
UserNotifications.expects(:mailing_list_notify).never
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
end
|
|
end
|
|
|
|
context "with a valid post created by someone other than the user" do
|
|
let!(:post) { Fabricate(:post, user: user, user_id: 'different') }
|
|
|
|
it "sends the email to the user if the frequency is set to 'always with no echo'" do
|
|
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 2)
|
|
UserNotifications.expects(:mailing_list_notify).once
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
end
|
|
|
|
it "sends the email to the user if the frequency is set to 'always'" do
|
|
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 1)
|
|
UserNotifications.expects(:mailing_list_notify).once
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
end
|
|
|
|
it "does not send the email to the user if the frequency is set to 'daily'" do
|
|
user.user_option.update(mailing_list_mode: true, mailing_list_mode_frequency: 0)
|
|
UserNotifications.expects(:mailing_list_notify).never
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
end
|
|
end
|
|
|
|
context "with a deleted post" do
|
|
let!(:post) { Fabricate(:post, user: user, deleted_at: Time.now) }
|
|
|
|
it "doesn't send the email to the user" do
|
|
UserNotifications.expects(:mailing_list_notify).with(user, post).never
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
end
|
|
end
|
|
|
|
context "with a user_deleted post" do
|
|
let!(:post) { Fabricate(:post, user: user, user_deleted: true) }
|
|
|
|
it "doesn't send the email to the user" do
|
|
UserNotifications.expects(:mailing_list_notify).with(user, post).never
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
end
|
|
end
|
|
|
|
context "with a deleted topic" do
|
|
let!(:post) { Fabricate(:post, user: user) }
|
|
|
|
before do
|
|
post.topic.update_column(:deleted_at, Time.now)
|
|
end
|
|
|
|
it "doesn't send the email to the user" do
|
|
UserNotifications.expects(:mailing_list_notify).with(user, post).never
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
end
|
|
end
|
|
|
|
context "to an anonymous user" do
|
|
let(:user) { Fabricate(:anonymous) }
|
|
let!(:post) { Fabricate(:post, user: user) }
|
|
|
|
it "doesn't send the email to the user" do
|
|
UserNotifications.expects(:mailing_list_notify).with(user, post).never
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
context "with mailing list off" do
|
|
before { SiteSetting.stubs(:default_email_mailing_list_mode).returns(false) }
|
|
|
|
let(:user) { Fabricate(:user) }
|
|
let!(:post) { Fabricate(:post, user: user) }
|
|
|
|
it "doesn't send the email to the user" do
|
|
UserNotifications.expects(:mailing_list_notify).never
|
|
Jobs::NotifyMailingListSubscribers.new.execute(post_id: post.id)
|
|
end
|
|
end
|
|
|
|
end
|