public async Task SendCodeThroughEmailTest() { Crypto.SecretToken = Crypto.RandomString(); var smtp = new MailSmtpProvider { Id = Guid.NewGuid(), Host = "smtp.live.com", Port = 25, Ssl = false, SenderDisplayName = "Weixing Chen", SenderMailAddress = "*****@*****.**", CredentialName = "*****@*****.**", Password = "", IsInUse = true }; //Config CredentialName & Password before running this test if (string.IsNullOrEmpty(smtp.CredentialName) || string.IsNullOrEmpty(smtp.Password)) { return; } using var mailDb = new DbContextOptionsBuilder <MailDbContext>().UseInMemoryDatabase("UnitTest").CreateDbContext(); using var twoFactorDb = new DbContextOptionsBuilder <TwoFactorDbContext>().UseInMemoryDatabase("UnitTest").CreateDbContext(); mailDb.Add(smtp); mailDb.SaveChanges(); var sendTo = "*****@*****.**"; var principal = PrincipalUser.Personate(1, "TestUser", null); var mailSender = new MailSender(mailDb); var twoFactorManager = new TwoFactorManager(twoFactorDb, principal, null, mailSender); var sentResult = await twoFactorManager.SendCodeThroughEmailAsync(sendTo); var row = twoFactorDb.TwoFactorCodes.FirstOrDefault(); Assert.IsTrue(sentResult.Ok); Assert.IsNotNull(row); Assert.AreEqual(sendTo, row.SentTo); Assert.IsFalse(row.IsUsed); var verifyResult = await twoFactorManager.VerifyCodeAsync(sendTo, row.Code, true); row = twoFactorDb.TwoFactorCodes.FirstOrDefault(); Assert.IsTrue(verifyResult.Ok); Assert.AreEqual(sendTo, row.SentTo); Assert.IsTrue(row.IsUsed); mailDb.Database.EnsureDeleted(); twoFactorDb.Database.EnsureDeleted(); }
public async Task SendAsyncTest() { Crypto.SecretToken = Crypto.RandomString(); //attention: fill the required values to run this test var smtp = new MailSmtpProvider { Id = Guid.NewGuid(), Host = "smtp.live.com", Port = 25, Ssl = false, SenderDisplayName = "Weixing Chen", SenderMailAddress = "*****@*****.**", CredentialName = "*****@*****.**", Password = "", IsInUse = true }; if (string.IsNullOrEmpty(smtp.CredentialName) || string.IsNullOrEmpty(smtp.Password)) { return; } using var db = new DbContextOptionsBuilder <MailDbContext>().UseInMemoryDatabase("UnitTest").CreateDbContext(); db.Add(smtp); db.SaveChanges(); var sender = new MailSender(db); var mail = new MailMessage { Subject = $"Husky.Mail Unit Test - {DateTime.Now:yyyy-M-d H:mm}", Body = "<div style='color:navy'>Greeting</div>", IsHtml = true, To = new List <MailAddress> { new MailAddress { Name = "Weixing", Address = "*****@*****.**" } }, Cc = new List <MailAddress> { new MailAddress { Name = "Weixing", Address = "*****@*****.**" } }, Attachments = new List <MailAttachment> { new MailAttachment { Name = "DummyAttachment.zip", ContentType = "application/x-zip-compressed", ContentStream = new MemoryStream(Crypto.RandomBytes()) } } }; string strReadFromCallback = null; await sender.SendAsync(mail, arg => strReadFromCallback = arg.MailMessage.Body); var mailRecord = db.MailRecords .AsNoTracking() .Include(x => x.Smtp) .Include(x => x.Attachments) .OrderBy(x => x.Id) .LastOrDefault(); Assert.IsNotNull(mailRecord); Assert.AreEqual(mailRecord.Subject, mail.Subject); Assert.AreEqual(mailRecord.Body, mail.Body); Assert.AreEqual(mailRecord.IsHtml, mail.IsHtml); Assert.AreEqual(mailRecord.Smtp.Id, smtp.Id); Assert.AreEqual(mailRecord.To, string.Join(";", mail.To.Select(x => x.ToString()))); Assert.AreEqual(mailRecord.Cc, string.Join(";", mail.Cc.Select(x => x.ToString()))); Assert.AreEqual(mailRecord.Attachments.Count, mail.Attachments.Count); Assert.AreEqual(mailRecord.Attachments.First().Name, mail.Attachments.First().Name); Assert.AreEqual(mailRecord.Attachments.First().ContentStream.Length, mail.Attachments.First().ContentStream.Length); Assert.AreEqual(mailRecord.Body, strReadFromCallback); Assert.AreEqual(mailRecord.IsSuccessful, true); Assert.IsTrue(string.IsNullOrEmpty(mailRecord.Exception)); db.Database.EnsureDeleted(); } }