discourse/spec/jobs/notify_mailing_list_subscribers_spec.rb
Kiril Staikov aee943486a FEATURE:'No Echo' option for mailing list mode.
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.
2016-10-19 13:14:36 -04:00

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