Add email message characterization tests
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using MimeKit;
|
||||
using Sarand.Net.Standard.Base.Email;
|
||||
|
||||
namespace Sarand.UnitTests.Standard.Base.Email
|
||||
{
|
||||
[TestClass]
|
||||
public class SaEmailConsole_Tester
|
||||
{
|
||||
// --- Test Support ---
|
||||
|
||||
private class TestEmailConsole : SaEmailConsole
|
||||
{
|
||||
public MimeMessage CreateMessage(SaEmailData emailData)
|
||||
{
|
||||
return CreateMailMessage(emailData);
|
||||
}
|
||||
}
|
||||
|
||||
// --- Message Content ---
|
||||
|
||||
[TestMethod]
|
||||
public void CreateMailMessage_PopulatesAddressesSubjectAndTextBody()
|
||||
{
|
||||
SaEmailData emailData = CreateEmailData();
|
||||
emailData.AddressesTo.Add("to@example.com");
|
||||
emailData.AddressesCc.Add("cc@example.com");
|
||||
emailData.AddressesBcc.Add("bcc@example.com");
|
||||
emailData.Config.Message.AddressesBcc.Add("configured-bcc@example.com");
|
||||
emailData.Subject = "Test subject";
|
||||
emailData.MessageBody = "Test body";
|
||||
|
||||
MimeMessage message = new TestEmailConsole().CreateMessage(emailData);
|
||||
|
||||
Assert.AreEqual("sender@example.com", ((MailboxAddress)message.From.Single()).Address);
|
||||
Assert.AreEqual("to@example.com", ((MailboxAddress)message.To.Single()).Address);
|
||||
Assert.AreEqual("cc@example.com", ((MailboxAddress)message.Cc.Single()).Address);
|
||||
CollectionAssert.AreEquivalent(
|
||||
new[] { "bcc@example.com", "configured-bcc@example.com" },
|
||||
message.Bcc.Mailboxes.Select(address => address.Address).ToArray());
|
||||
Assert.AreEqual("Test subject", message.Subject);
|
||||
Assert.AreEqual("Test body", message.TextBody);
|
||||
Assert.IsNull(message.HtmlBody);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void CreateMailMessage_PopulatesHtmlBody()
|
||||
{
|
||||
SaEmailData emailData = CreateEmailData();
|
||||
emailData.HtmlBody = true;
|
||||
emailData.MessageBody = "<p>Test body</p>";
|
||||
|
||||
MimeMessage message = new TestEmailConsole().CreateMessage(emailData);
|
||||
|
||||
Assert.AreEqual("<p>Test body</p>", message.HtmlBody);
|
||||
Assert.IsNull(message.TextBody);
|
||||
}
|
||||
|
||||
// --- Attachments ---
|
||||
|
||||
[TestMethod]
|
||||
public void CreateMailMessage_PopulatesAttachment()
|
||||
{
|
||||
SaEmailData emailData = CreateEmailData();
|
||||
emailData.Attachments.Add(new SaEmailAttachmentData("text", "plain")
|
||||
{
|
||||
Filename = "test.txt",
|
||||
Data = Encoding.UTF8.GetBytes("Attachment content")
|
||||
});
|
||||
|
||||
MimeMessage message = new TestEmailConsole().CreateMessage(emailData);
|
||||
MimePart attachment = (MimePart)message.Attachments.Single();
|
||||
|
||||
Assert.AreEqual("test.txt", attachment.FileName);
|
||||
Assert.AreEqual("text/plain", attachment.ContentType.MimeType);
|
||||
Assert.AreEqual(ContentDisposition.Attachment, attachment.ContentDisposition.Disposition);
|
||||
Assert.AreEqual(ContentEncoding.Base64, attachment.ContentTransferEncoding);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void CreateMailMessage_UsesDefaultAttachmentFilename()
|
||||
{
|
||||
SaEmailData emailData = CreateEmailData();
|
||||
emailData.Attachments.Add(new SaEmailAttachmentData("application", "octet-stream")
|
||||
{
|
||||
Data = new byte[] { 1, 2, 3 }
|
||||
});
|
||||
|
||||
MimeMessage message = new TestEmailConsole().CreateMessage(emailData);
|
||||
MimePart attachment = (MimePart)message.Attachments.Single();
|
||||
|
||||
Assert.AreEqual("Attachment_001.dat", attachment.FileName);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void CreateMailMessage_PopulatesInlineAttachment()
|
||||
{
|
||||
SaEmailData emailData = CreateEmailData();
|
||||
emailData.HtmlBody = true;
|
||||
emailData.MessageBody = "<img src=\"cid:test-image@example.com\">";
|
||||
emailData.Attachments.Add(new SaEmailAttachmentData("image", "png")
|
||||
{
|
||||
Filename = "test.png",
|
||||
ContentId = "test-image@example.com",
|
||||
Data = new byte[] { 1, 2, 3 },
|
||||
Inline = true
|
||||
});
|
||||
|
||||
MimeMessage message = new TestEmailConsole().CreateMessage(emailData);
|
||||
MimePart attachment = message.BodyParts.OfType<MimePart>().Single(part => part.ContentId == "test-image@example.com");
|
||||
|
||||
Assert.AreEqual("test.png", attachment.FileName);
|
||||
Assert.AreEqual(ContentDisposition.Inline, attachment.ContentDisposition.Disposition);
|
||||
Assert.AreEqual("<img src=\"cid:test-image@example.com\">", message.HtmlBody);
|
||||
}
|
||||
|
||||
// --- Formatting and Tag Tests ---
|
||||
|
||||
[TestMethod]
|
||||
public void DynamicEmailTags_AreMatchedAndReplacedCaseInsensitively()
|
||||
{
|
||||
SaEmailData emailData = CreateEmailData();
|
||||
emailData.MessageBody = "Before [#Test.Tag] after [#TEST.TAG].";
|
||||
|
||||
Assert.IsTrue(SaEmailConsole.EmailContainsTag(emailData, "[#test.tag]"));
|
||||
|
||||
SaEmailConsole.ReplaceDynamicEmailTag(emailData, "[#test.tag]", "replacement");
|
||||
|
||||
Assert.AreEqual("Before replacement after replacement.", emailData.MessageBody);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FormatAttachmentContentId_ReplacesAddressAndWhitespaceCharacters()
|
||||
{
|
||||
Assert.AreEqual("test_image_name@saxonite.com", SaEmailConsole.FormatAttachmentContentId("test @ image name"));
|
||||
}
|
||||
|
||||
// --- Test Data ---
|
||||
|
||||
private static SaEmailData CreateEmailData()
|
||||
{
|
||||
SaEmailConfig config = new SaEmailConfig("UnitTest");
|
||||
config.Message.AddressFrom = "sender@example.com";
|
||||
|
||||
return new SaEmailData
|
||||
{
|
||||
Config = config,
|
||||
Subject = "Unit test subject",
|
||||
MessageBody = ""
|
||||
};
|
||||
}
|
||||
|
||||
// --- The End ---
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user