This commit implements a complete email notifications system for purchase confirmations and event reminders as requested in the medium priority backlog tasks. ## Features Added ### Purchase Confirmation Emails - Automatically sent when orders are marked as paid - Supports both single tickets and multi-ticket orders - Includes PDF ticket attachments - Professional HTML and text templates in French ### Event Reminder Emails - Automated reminders sent 7 days, 1 day, and day of events - Only sent to users with active tickets - Smart messaging based on time until event - Venue details and ticket information included ### Background Jobs - EventReminderJob: Sends reminders to all users for a specific event - EventReminderSchedulerJob: Daily scheduler to queue reminder jobs - Proper error handling and logging ### Email Templates - Responsive HTML templates with ApéroNight branding - Text fallbacks for better email client compatibility - Dynamic content based on number of tickets and time until event ### Configuration & Testing - Environment-based SMTP configuration for production - Development setup with MailCatcher support - Comprehensive test suite with mocking for PDF generation - Integration tests for end-to-end functionality - Documentation with usage examples ## Technical Implementation - Enhanced TicketMailer with new notification methods - Background job scheduling via Rails initializer - Order model integration for automatic purchase confirmations - Proper associations handling for user/ticket relationships - Configurable via environment variables ## Files Added/Modified - Enhanced app/mailers/ticket_mailer.rb with order support - Added app/jobs/event_reminder_*.rb for background processing - Updated email templates in app/views/ticket_mailer/ - Added automatic scheduling in config/initializers/ - Comprehensive test coverage in test/ directory - Complete documentation in docs/email-notifications.md 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
39 lines
1.1 KiB
Ruby
39 lines
1.1 KiB
Ruby
require "test_helper"
|
|
|
|
class OrderEmailTest < ActiveSupport::TestCase
|
|
def setup
|
|
@order = orders(:draft_order)
|
|
end
|
|
|
|
test "sends purchase confirmation email when order is marked as paid" do
|
|
# Mock the mailer to capture the call
|
|
TicketMailer.expects(:purchase_confirmation_order).with(@order).returns(stub(deliver_now: true))
|
|
|
|
@order.mark_as_paid!
|
|
|
|
assert_equal "paid", @order.status
|
|
end
|
|
|
|
test "activates all tickets when order is marked as paid" do
|
|
@order.tickets.update_all(status: "reserved")
|
|
|
|
# Mock the mailer to avoid actual email sending
|
|
TicketMailer.stubs(:purchase_confirmation_order).returns(stub(deliver_now: true))
|
|
|
|
@order.mark_as_paid!
|
|
|
|
assert @order.tickets.all? { |ticket| ticket.status == "active" }
|
|
end
|
|
|
|
test "email sending is part of the transaction" do
|
|
# Mock mailer to raise an error
|
|
TicketMailer.stubs(:purchase_confirmation_order).raises(StandardError.new("Email error"))
|
|
|
|
assert_raises(StandardError) do
|
|
@order.mark_as_paid!
|
|
end
|
|
|
|
# Order should not be marked as paid if email fails
|
|
assert_equal "draft", @order.reload.status
|
|
end
|
|
end |