Fixes
This commit is contained in:
123
test/jobs/invitations_mailer_test.rb
Normal file
123
test/jobs/invitations_mailer_test.rb
Normal file
@@ -0,0 +1,123 @@
|
||||
require "test_helper"
|
||||
|
||||
class InvitationsMailerTest < ActionMailer::TestCase
|
||||
setup do
|
||||
@user = users(:alice)
|
||||
@invitation_mail = InvitationsMailer.invite_user(@user)
|
||||
end
|
||||
|
||||
test "should queue invitation email job" do
|
||||
# Note: In test environment, deliver_later might not enqueue jobs the same way
|
||||
# This test focuses on the mail delivery functionality
|
||||
assert_nothing_raised do
|
||||
InvitationsMailer.invite_user(@user).deliver_later
|
||||
end
|
||||
end
|
||||
|
||||
test "should deliver invitation email successfully" do
|
||||
assert_emails 1 do
|
||||
InvitationsMailer.invite_user(@user).deliver_now
|
||||
end
|
||||
end
|
||||
|
||||
test "should have correct email content" do
|
||||
email = @invitation_mail
|
||||
|
||||
assert_equal "You're invited to join Clinch", email.subject
|
||||
assert_equal [@user.email_address], email.to
|
||||
assert_equal [], email.cc
|
||||
assert_equal [], email.bcc
|
||||
# From address is configured in ApplicationMailer
|
||||
assert_not_nil email.from
|
||||
assert email.from.is_a?(Array)
|
||||
end
|
||||
|
||||
test "should include user data in email body" do
|
||||
email = @invitation_mail
|
||||
# Use text_part to get the readable content
|
||||
email_text = email.text_part&.decoded || email.body.decoded
|
||||
|
||||
# Should include invitation-related text
|
||||
assert_includes email_text, "invited"
|
||||
assert_includes email_text, "Clinch"
|
||||
end
|
||||
|
||||
test "should handle different user statuses" do
|
||||
# Test with pending user
|
||||
pending_user = users(:bob)
|
||||
pending_user.status = :pending_invitation
|
||||
pending_user.save!
|
||||
|
||||
assert_emails 1 do
|
||||
InvitationsMailer.invite_user(pending_user).deliver_now
|
||||
end
|
||||
end
|
||||
|
||||
test "should queue multiple invitation emails" do
|
||||
users = [users(:alice), users(:bob)]
|
||||
|
||||
# Test that multiple deliveries don't raise errors
|
||||
assert_nothing_raised do
|
||||
users.each { |user| InvitationsMailer.invite_user(user).deliver_later }
|
||||
end
|
||||
|
||||
# Test synchronous delivery to verify functionality
|
||||
assert_emails 2 do
|
||||
users.each { |user| InvitationsMailer.invite_user(user).deliver_now }
|
||||
end
|
||||
end
|
||||
|
||||
test "should handle job with invalid user" do
|
||||
# Test behavior when user doesn't exist
|
||||
invalid_user_id = User.maximum(:id) + 1000
|
||||
|
||||
# This should not raise an error immediately (job is queued)
|
||||
assert_nothing_raised do
|
||||
assert_enqueued_jobs 1 do
|
||||
# Create a mail with non-persisted user for testing
|
||||
temp_user = User.new(id: invalid_user_id, email_address: "invalid@test.com")
|
||||
InvitationsMailer.invite_user(temp_user).deliver_later
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
test "should respect mailer configuration" do
|
||||
# Test that the mailer inherits from ApplicationMailer properly
|
||||
assert InvitationsMailer < ApplicationMailer
|
||||
assert_respond_to InvitationsMailer, :default
|
||||
end
|
||||
|
||||
test "should handle concurrent email deliveries" do
|
||||
# Simulate concurrent invitation deliveries
|
||||
users = User.limit(3)
|
||||
|
||||
# Test that multiple deliveries don't raise errors
|
||||
assert_nothing_raised do
|
||||
users.each do |user|
|
||||
InvitationsMailer.invite_user(user).deliver_later
|
||||
end
|
||||
end
|
||||
|
||||
# Test synchronous delivery to verify functionality
|
||||
assert_emails users.count do
|
||||
users.each do |user|
|
||||
InvitationsMailer.invite_user(user).deliver_now
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
test "should have proper email headers" do
|
||||
email = @invitation_mail
|
||||
|
||||
# Test common email headers
|
||||
assert_not_nil email.message_id
|
||||
assert_not_nil email.date
|
||||
|
||||
# Test content-type
|
||||
if email.html_part
|
||||
assert_includes email.content_type, "text/html"
|
||||
elsif email.text_part
|
||||
assert_includes email.content_type, "text/plain"
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user