- 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>
102 lines
2.7 KiB
Ruby
102 lines
2.7 KiB
Ruby
require "test_helper"
|
|
|
|
class EmailNotificationsIntegrationTest < ActionDispatch::IntegrationTest
|
|
include ActiveJob::TestHelper
|
|
|
|
def setup
|
|
@user = User.create!(
|
|
email: "test@example.com",
|
|
password: "password123",
|
|
first_name: "Test",
|
|
last_name: "User"
|
|
)
|
|
|
|
@event = Event.create!(
|
|
name: "Test Event",
|
|
slug: "test-event",
|
|
description: "A test event for integration testing",
|
|
state: :published,
|
|
venue_name: "Test Venue",
|
|
venue_address: "123 Test Street",
|
|
latitude: 40.7128,
|
|
longitude: -74.0060,
|
|
start_time: 1.week.from_now,
|
|
end_time: 1.week.from_now + 4.hours,
|
|
user: @user
|
|
)
|
|
|
|
@ticket_type = TicketType.create!(
|
|
name: "General Admission",
|
|
description: "General admission ticket",
|
|
price_cents: 2500,
|
|
quantity: 100,
|
|
sale_start_at: 1.day.ago,
|
|
sale_end_at: 1.day.from_now,
|
|
event: @event
|
|
)
|
|
|
|
@order = Order.create!(
|
|
user: @user,
|
|
event: @event,
|
|
status: "draft",
|
|
total_amount_cents: 2500,
|
|
payment_attempts: 0
|
|
)
|
|
|
|
@ticket = Ticket.create!(
|
|
order: @order,
|
|
ticket_type: @ticket_type,
|
|
first_name: "Test",
|
|
last_name: "User",
|
|
price_cents: 2500,
|
|
status: "draft"
|
|
)
|
|
end
|
|
|
|
test "sends purchase confirmation email when order is marked as paid" do
|
|
# Mock PDF generation to avoid QR code issues
|
|
@ticket.stubs(:to_pdf).returns("fake_pdf_content")
|
|
|
|
assert_emails 1 do
|
|
@order.mark_as_paid!
|
|
end
|
|
|
|
assert_equal "paid", @order.status
|
|
assert_equal "active", @ticket.reload.status
|
|
end
|
|
|
|
test "event reminder email can be sent to users with active tickets" do
|
|
# Setup: mark order as paid and activate tickets
|
|
@ticket.stubs(:to_pdf).returns("fake_pdf_content")
|
|
@order.mark_as_paid!
|
|
|
|
# Clear any emails from the setup
|
|
ActionMailer::Base.deliveries.clear
|
|
|
|
assert_emails 1 do
|
|
TicketMailer.event_reminder(@user, @event, 7).deliver_now
|
|
end
|
|
|
|
email = ActionMailer::Base.deliveries.last
|
|
assert_equal [ @user.email ], email.to
|
|
assert_equal "Rappel : #{@event.name} dans une semaine", email.subject
|
|
end
|
|
|
|
test "event reminder job schedules emails for users with tickets" do
|
|
# Setup: mark order as paid and activate tickets
|
|
@ticket.stubs(:to_pdf).returns("fake_pdf_content")
|
|
@order.mark_as_paid!
|
|
|
|
# Clear any emails from the setup
|
|
ActionMailer::Base.deliveries.clear
|
|
|
|
# Perform the job
|
|
EventReminderJob.perform_now(@event.id, 7)
|
|
|
|
assert_equal 1, ActionMailer::Base.deliveries.size
|
|
email = ActionMailer::Base.deliveries.last
|
|
assert_equal [ @user.email ], email.to
|
|
assert_match "une semaine", email.subject
|
|
end
|
|
end
|