60 lines
1.6 KiB
Ruby
60 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
describe Jobs::TopicReminder do
|
|
fab!(:admin) { Fabricate(:admin) }
|
|
|
|
fab!(:topic) do
|
|
Fabricate(:topic_timer,
|
|
user: admin,
|
|
status_type: TopicTimer.types[:reminder]
|
|
).topic
|
|
end
|
|
|
|
it "should be able to create a reminder" do
|
|
topic_timer = topic.topic_timers.first
|
|
freeze_time 1.day.from_now
|
|
|
|
expect {
|
|
described_class.new.execute(topic_timer_id: topic_timer.id)
|
|
}.to change { Notification.count }.by(1)
|
|
expect(admin.notifications.where(notification_type: Notification.types[:topic_reminder]).first&.topic_id).to eq(topic.id)
|
|
expect(TopicTimer.where(id: topic_timer.id).first).to be_nil
|
|
end
|
|
|
|
it "does nothing if it was trashed before the scheduled time" do
|
|
topic_timer = topic.topic_timers.first
|
|
topic_timer.trash!(Discourse.system_user)
|
|
|
|
freeze_time(1.day.from_now)
|
|
|
|
expect {
|
|
described_class.new.execute(topic_timer_id: topic_timer.id)
|
|
}.to_not change { Notification.count }
|
|
end
|
|
|
|
it "does nothing if job runs too early" do
|
|
topic_timer = topic.topic_timers.first
|
|
topic_timer.update_attribute(:execute_at, 8.hours.from_now)
|
|
|
|
freeze_time(6.hours.from_now)
|
|
|
|
expect {
|
|
described_class.new.execute(topic_timer_id: topic_timer.id)
|
|
}.to_not change { Notification.count }
|
|
end
|
|
|
|
it "does nothing if topic was deleted" do
|
|
topic_timer = topic.topic_timers.first
|
|
topic.trash!
|
|
|
|
freeze_time(1.day.from_now)
|
|
|
|
expect {
|
|
described_class.new.execute(topic_timer_id: topic_timer.id)
|
|
}.to_not change { Notification.count }
|
|
end
|
|
|
|
end
|