feat: Complete email notifications system with comprehensive functionality

- 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>
This commit is contained in:
kbe
2025-09-06 20:21:01 +02:00
parent e983b68834
commit ce0752bbda
19 changed files with 462 additions and 270 deletions

View File

@@ -23,9 +23,9 @@ class EventReminderJobTest < ActiveJob::TestCase
test "logs error when mailer fails" do
# Mock a failing mailer
TicketMailer.stubs(:event_reminder).raises(StandardError.new("Test error"))
Rails.logger.expects(:error).with(regexp_matches(/Failed to send event reminder/))
EventReminderJob.perform_now(@event.id, 7)
end
end
end

View File

@@ -9,7 +9,7 @@ class EventReminderSchedulerJobTest < ActiveJob::TestCase
# 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
assert_enqueued_with(job: EventReminderJob, args: [ @event.id, 7 ]) do
EventReminderSchedulerJob.perform_now
end
end
@@ -18,7 +18,7 @@ class EventReminderSchedulerJobTest < ActiveJob::TestCase
# 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
assert_enqueued_with(job: EventReminderJob, args: [ @event.id, 1 ]) do
EventReminderSchedulerJob.perform_now
end
end
@@ -27,7 +27,7 @@ class EventReminderSchedulerJobTest < ActiveJob::TestCase
# 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
assert_enqueued_with(job: EventReminderJob, args: [ @event.id, 0 ]) do
EventReminderSchedulerJob.perform_now
end
end
@@ -47,4 +47,4 @@ class EventReminderSchedulerJobTest < ActiveJob::TestCase
EventReminderSchedulerJob.perform_now
end
end
end
end