- Implement comprehensive email notification system for ticket purchases and event reminders - Add event reminder job with configurable scheduling - Enhance ticket mailer with QR code generation and proper formatting - Update order model with email delivery tracking - Add comprehensive test coverage for all email functionality - Configure proper mailer settings and disable annotations - Update backlog to reflect completed email features 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
51 lines
1.6 KiB
Ruby
51 lines
1.6 KiB
Ruby
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
|