module ActionMailer::TestCase::Behavior

def charset

def charset
  "UTF-8"
end

def encode(subject)

def encode(subject)
  Mail::Encodings.q_value_encode(subject, charset)
end

def initialize_test_deliveries

def initialize_test_deliveries
  set_delivery_method :test
  @old_perform_deliveries = ActionMailer::Base.perform_deliveries
  ActionMailer::Base.perform_deliveries = true
  ActionMailer::Base.deliveries.clear
end

def read_fixture(action)

https://guides.rubyonrails.org/testing.html#revenge-of-the-fixtures
an email inside a fixture. See the testing guide for a concrete example:
This is useful when testing mailers by being able to write the body of

Reads the fixture file for the given mailer.
def read_fixture(action)
  IO.readlines(File.join(Rails.root, "test", "fixtures", self.class.mailer_class.name.underscore, action))
end

def restore_delivery_method

def restore_delivery_method
  ActionMailer::Base.deliveries.clear
  ActionMailer::Base.delivery_method = @old_delivery_method
end

def restore_test_deliveries

def restore_test_deliveries
  restore_delivery_method
  ActionMailer::Base.perform_deliveries = @old_perform_deliveries
end

def set_delivery_method(method)

def set_delivery_method(method)
  @old_delivery_method = ActionMailer::Base.delivery_method
  ActionMailer::Base.delivery_method = method
end

def set_expected_mail

def set_expected_mail
  @expected = Mail.new
  @expected.content_type ["text", "plain", { "charset" => charset }]
  @expected.mime_version = "1.0"
end