otwarchive-symphonyarchive/spec/support/shared_examples/mailer_shared_examples.rb

65 lines
2.3 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
shared_examples_for "a multipart email" do
it "generates a multipart message (plain text and html)" do
expect(email.body.parts.length).to eq(2)
expect(email.body.parts.map(&:content_type)).to eq(["text/plain; charset=UTF-8", "text/html; charset=UTF-8"])
end
it "does not have exposed HTML" do
expect(email).not_to have_html_part_content("<")
end
end
shared_examples_for "a translated email" do
it "does not have missing translations in HTML version" do
expect(email).not_to have_html_part_content("translation missing")
end
it "does not have missing translations in text version" do
expect(email).not_to have_text_part_content("translation missing")
end
end
shared_examples_for "an email with a valid sender" do
it "is delivered from Archive of Our Own <do-not-reply@example.org>" do
expect(email).to deliver_from("Archive of Our Own <#{ArchiveConfig.RETURN_ADDRESS}>")
end
end
shared_examples_for "an unsent email" do
it "is not delivered" do
expect(email.message).to be_a(ActionMailer::Base::NullMail)
end
end
shared_examples "it retries and fails on" do |error|
it "retries 3 times and ultimately fails with a #{error}" do
assert_performed_jobs 3, only: ApplicationMailerJob do
expect { subject.deliver_later }.to raise_exception(error)
end
end
end
shared_examples "an email with a deleted work with draft chapters attached" do
it "has html and txt attachments" do
filename = work.title.gsub(/\s/, "_")
expect(email.attachments.length).to eq(2)
expect(email.attachments).to contain_exactly(
an_object_having_attributes(filename: "#{filename}.html"),
an_object_having_attributes(filename: "#{filename}.txt")
)
end
it "includes draft chapters in attachments" do
filename = work.title.gsub(/\s/, "_")
html_attachment = email.attachments["#{filename}.html"].body.raw_source
txt_attachment = email.attachments["#{filename}.txt"].body.raw_source
decoded_html_content = Base64.decode64(html_attachment)
decoded_txt_content = Base64.decode64(txt_attachment)
work.chapters.where(posted: false).each do |draft_chapter|
expect(decoded_html_content).to have_content(draft_chapter.content)
expect(decoded_txt_content).to have_content(draft_chapter.content)
end
end
end