discourse/spec/jobs/pending_queued_posts_remind...

65 lines
2.3 KiB
Ruby

# frozen_string_literal: true
RSpec.describe Jobs::PendingQueuedPostsReminder do
let(:job) { described_class.new }
context "when notify_about_queued_posts_after is 0" do
before { SiteSetting.notify_about_queued_posts_after = 0 }
it "never emails" do
described_class.any_instance.expects(:should_notify_ids).never
expect { job.execute({}) }.to_not change { Post.count }
end
end
context "when notify_about_queued_posts_after accepts a float" do
before do
SiteSetting.notify_about_queued_posts_after = 0.25
job.last_notified_id = nil
end
it "creates system message if there are new queued posts" do
Fabricate(:reviewable_queued_post, created_at: 16.minutes.ago)
Fabricate(:reviewable_queued_post, created_at: 14.minutes.ago)
# expect 16 minute post to be picked up but not 14 min post
expect { job.execute({}) }.to change { Post.count }.by(1)
expect(
Topic.where(
subtype: TopicSubtype.system_message,
title: I18n.t("system_messages.queued_posts_reminder.subject_template", count: 1),
).exists?,
).to eq(true)
end
end
context "when notify_about_queued_posts_after is 24" do
before { SiteSetting.notify_about_queued_posts_after = 24 }
context "when we haven't been notified in a while" do
before { job.last_notified_id = nil }
it "doesn't create system message if there are no queued posts" do
expect { job.execute({}) }.to_not change { Post.count }
end
it "creates system message if there are new queued posts" do
Fabricate(:reviewable_queued_post, created_at: 48.hours.ago)
Fabricate(:reviewable_queued_post, created_at: 45.hours.ago)
expect { job.execute({}) }.to change { Post.count }.by(1)
expect(
Topic.where(
subtype: TopicSubtype.system_message,
title: I18n.t("system_messages.queued_posts_reminder.subject_template", count: 2),
).exists?,
).to eq(true)
end
end
it "doesn't create system message again about the same posts" do
reviewable = Fabricate(:reviewable_queued_post, created_at: 48.hours.ago)
job.last_notified_id = reviewable.id
expect { described_class.new.execute({}) }.to_not change { Post.count }
end
end
end