require "test_helper" class EventReminderSchedulerJobTest < ActiveJob::TestCase def setup @event = events(:concert_event) end test "schedules weekly reminders for events starting in 7 days" do # Set event to start in exactly 7 days @event.update(start_time: 7.days.from_now.beginning_of_day + 10.hours) assert_enqueued_with(job: EventReminderJob, args: [@event.id, 7]) do EventReminderSchedulerJob.perform_now end end test "schedules daily reminders for events starting tomorrow" do # Set event to start tomorrow @event.update(start_time: 1.day.from_now.beginning_of_day + 20.hours) assert_enqueued_with(job: EventReminderJob, args: [@event.id, 1]) do EventReminderSchedulerJob.perform_now end end test "schedules day-of reminders for events starting today" do # Set event to start today @event.update(start_time: Time.current.beginning_of_day + 21.hours) assert_enqueued_with(job: EventReminderJob, args: [@event.id, 0]) do EventReminderSchedulerJob.perform_now end end test "does not schedule reminders for draft events" do @event.update(state: :draft, start_time: 7.days.from_now.beginning_of_day + 10.hours) assert_no_enqueued_jobs(only: EventReminderJob) do EventReminderSchedulerJob.perform_now end end test "does not schedule reminders for cancelled events" do @event.update(state: :canceled, start_time: 7.days.from_now.beginning_of_day + 10.hours) assert_no_enqueued_jobs(only: EventReminderJob) do EventReminderSchedulerJob.perform_now end end end