discourse/spec/jobs/pending_reviewables_reminder_spec.rb
2022-08-04 11:05:02 +02:00

103 lines
3.0 KiB
Ruby

# frozen_string_literal: true
RSpec.describe Jobs::PendingReviewablesReminder do
let(:job) { described_class.new }
def create_flag(created_at)
PostActionCreator.create(Fabricate(:user), Fabricate(:post), :spam, created_at: created_at).reviewable
end
def execute
job.tap { job.execute({}) }
end
it "doesn't notify when there are no flags" do
expect(execute.sent_reminder).to eq(false)
end
context "when notify_about_flags_after is 0" do
before { SiteSetting.notify_about_flags_after = 0 }
it "never notifies" do
create_flag(50.hours.ago)
expect(execute.sent_reminder).to eq(false)
end
end
context "when notify_about_flags_after accepts a float" do
before { SiteSetting.notify_about_flags_after = 0.25 }
it "doesn't send message when flags are less than 15 minutes old" do
create_flag(14.minutes.ago)
expect(execute.sent_reminder).to eq(false)
end
it "sends message when there is a flag older than 15 minutes" do
create_flag(16.minutes.ago)
expect(execute.sent_reminder).to eq(true)
end
end
context "when notify_about_flags_after is 48" do
before do
SiteSetting.notify_about_flags_after = 48
described_class.clear_key
end
after do
described_class.clear_key
end
it "doesn't send message when flags are less than 48 hours old" do
create_flag(47.hours.ago)
expect(execute.sent_reminder).to eq(false)
end
it "doesn't send a message if there are no new flags older than 48 hours old" do
old_reviewable = create_flag(50.hours.ago)
create_flag(47.hours.ago)
described_class.last_notified_id = old_reviewable.id
execute
expect(job.sent_reminder).to eq(false)
expect(described_class.last_notified_id).to eq(old_reviewable.id)
end
it "sends message when there is a flag older than 48 hours" do
create_flag(49.hours.ago)
expect(execute.sent_reminder).to eq(true)
end
context "with reviewable_default_visibility" do
before do
create_flag(49.hours.ago)
create_flag(51.hours.ago)
end
it "doesn't send a message when `reviewable_default_visibility` is not met" do
Reviewable.set_priorities(medium: 3.0)
SiteSetting.reviewable_default_visibility = 'medium'
expect(execute.sent_reminder).to eq(false)
end
it "sends a message when `reviewable_default_visibility` is met" do
Reviewable.set_priorities(medium: 2.0)
SiteSetting.reviewable_default_visibility = 'medium'
expect(execute.sent_reminder).to eq(true)
end
end
it 'deletes previous messages' do
GroupMessage.create(
Group[:moderators].name, 'reviewables_reminder',
{ limit_once_per: false, message_params: { mentions: '', count: 1 } }
)
create_flag(49.hours.ago)
execute
expect(Topic.where(title: I18n.t("system_messages.reviewables_reminder.subject_template")).count).to eq(1)
end
end
end