Files
aperonight/test/integration/email_notifications_integration_test.rb
kbe ce0752bbda 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>
2025-09-06 20:21:01 +02:00

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