158 lines
5.0 KiB
C#
158 lines
5.0 KiB
C#
using System.Linq;
|
|
using System.Text;
|
|
using NUnit.Framework;
|
|
using MimeKit;
|
|
using Sarand.Net.Standard.Base.Email;
|
|
|
|
namespace Sarand.UnitTests.Standard.Base.Email
|
|
{
|
|
[TestFixture]
|
|
public class SaEmailConsole_Tester
|
|
{
|
|
// --- Definitions ---
|
|
|
|
private class TestEmailConsole : SaEmailConsole
|
|
{
|
|
public MimeMessage CreateMessage(SaEmailData emailData)
|
|
{
|
|
return CreateMailMessage(emailData);
|
|
}
|
|
}
|
|
|
|
// --- Message Content ---
|
|
|
|
[Test]
|
|
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.That(((MailboxAddress)message.From.Single()).Address, Is.EqualTo("sender@example.com"));
|
|
Assert.That(((MailboxAddress)message.To.Single()).Address, Is.EqualTo("to@example.com"));
|
|
Assert.That(((MailboxAddress)message.Cc.Single()).Address, Is.EqualTo("cc@example.com"));
|
|
Assert.That(
|
|
message.Bcc.Mailboxes.Select(address => address.Address).ToArray(),
|
|
Is.EquivalentTo(new[] { "bcc@example.com", "configured-bcc@example.com" }));
|
|
Assert.That(message.Subject, Is.EqualTo("Test subject"));
|
|
Assert.That(message.TextBody, Is.EqualTo("Test body"));
|
|
Assert.That(message.HtmlBody, Is.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void CreateMailMessage_PopulatesHtmlBody()
|
|
{
|
|
SaEmailData emailData = CreateEmailData();
|
|
emailData.HtmlBody = true;
|
|
emailData.MessageBody = "<p>Test body</p>";
|
|
|
|
MimeMessage message = new TestEmailConsole().CreateMessage(emailData);
|
|
|
|
Assert.That(message.HtmlBody, Is.EqualTo("<p>Test body</p>"));
|
|
Assert.That(message.TextBody, Is.Null);
|
|
}
|
|
|
|
// --- Attachments ---
|
|
|
|
[Test]
|
|
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.That(attachment.FileName, Is.EqualTo("test.txt"));
|
|
Assert.That(attachment.ContentType.MimeType, Is.EqualTo("text/plain"));
|
|
Assert.That(attachment.ContentDisposition.Disposition, Is.EqualTo(ContentDisposition.Attachment));
|
|
Assert.That(attachment.ContentTransferEncoding, Is.EqualTo(ContentEncoding.Base64));
|
|
}
|
|
|
|
[Test]
|
|
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.That(attachment.FileName, Is.EqualTo("Attachment_001.dat"));
|
|
}
|
|
|
|
[Test]
|
|
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.That(attachment.FileName, Is.EqualTo("test.png"));
|
|
Assert.That(attachment.ContentDisposition.Disposition, Is.EqualTo(ContentDisposition.Inline));
|
|
Assert.That(message.HtmlBody, Is.EqualTo("<img src=\"cid:test-image@example.com\">"));
|
|
}
|
|
|
|
// --- Formatting and Tag Tests ---
|
|
|
|
[Test]
|
|
public void DynamicEmailTags_AreMatchedAndReplacedCaseInsensitively()
|
|
{
|
|
SaEmailData emailData = CreateEmailData();
|
|
emailData.MessageBody = "Before [#Test.Tag] after [#TEST.TAG].";
|
|
|
|
Assert.That(SaEmailConsole.EmailContainsTag(emailData, "[#test.tag]"), Is.True);
|
|
|
|
SaEmailConsole.ReplaceDynamicEmailTag(emailData, "[#test.tag]", "replacement");
|
|
|
|
Assert.That(emailData.MessageBody, Is.EqualTo("Before replacement after replacement."));
|
|
}
|
|
|
|
[Test]
|
|
public void FormatAttachmentContentId_ReplacesAddressAndWhitespaceCharacters()
|
|
{
|
|
Assert.That(SaEmailConsole.FormatAttachmentContentId("test @ image name"), Is.EqualTo("test_image_name@saxonite.com"));
|
|
}
|
|
|
|
// --- 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 ---
|
|
}
|
|
}
|