public async Task CreateMessage_returns_MailMessage_created_by_parser() { var html = @"Content-Type: text/html To: [email protected] From: [email protected] Subject: Test Subject <p>Hello, World!</p>"; var email = new Email("Test"); var renderer = new Mock <IEmailViewRender>(); renderer.Setup(r => r.RenderAsync(email)).Returns(Task.FromResult(html)); var parser = new Mock <IEmailParser>(); var emailOptions = new DefaultEmailServiceOptions(); emailOptions.PrepareSmtpClientAsync = () => null; var options = new Mock <IOptions <DefaultEmailServiceOptions> >(); options.SetupGet(o => o.Value).Returns(emailOptions); var logger = new Mock <ILogger <EmailService> >(); var service = new EmailService(renderer.Object, parser.Object, options.Object, logger.Object); var expectedMailMessage = new MimeMessage(); parser.Setup(p => p.ParseAsync(It.IsAny <string>(), email)).Returns(Task.FromResult(expectedMailMessage)); var actualMailMessage = await service.CreateMailMessageAsync(email); actualMailMessage.ShouldBeOfType <MimeMessage>(); parser.Verify(); renderer.Verify(); options.Verify(); }
public void Dependency_injection_smtpOtions3() { var serviceCollection = new ServiceCollection(); serviceCollection.AddOptions(); var viewEngine = new Mock <IRazorViewEngine>(); var tempDataProvider = new Mock <ITempDataProvider>(); var logger = new Mock <ILogger <EmailService> >(); serviceCollection.AddSingleton(logger.Object); serviceCollection.AddSingleton(viewEngine.Object); serviceCollection.AddSingleton(tempDataProvider.Object); serviceCollection.Configure <DefaultEmailServiceOptions>(o => { o.PrepareSmtpClientAsync = () => throw new FactExcetpionForSmtpCreation(); }); serviceCollection.AddPostal(); var services = serviceCollection.BuildServiceProvider(); var emailService = services.GetRequiredService <IEmailService>(); Assert.ThrowsAsync <FactExcetpionForSmtpCreation>(() => emailService.SendAsync(new Email("testView"))); DefaultEmailServiceOptions emailOptionField = GetInstanceField(typeof(EmailService), emailService, "options") as DefaultEmailServiceOptions; Assert.Throws <FactExcetpionForSmtpCreation>(() => emailOptionField.PrepareSmtpClientAsync().Result); }
public void Dependency_injection_smtpOtions1() { var configBuilder = new ConfigurationBuilder(); configBuilder.AddInMemoryCollection(new Dictionary <string, string>() { { "Host", "abc" }, { "Port", "12345" }, { "FromAddress", "qwerty" }, { "UserName", "zxcvbn" }, { "Password", "asdfgh" } }); var _configuration = configBuilder.Build(); var serviceCollection = new ServiceCollection(); serviceCollection.AddOptions(); var viewEngine = new Mock <IRazorViewEngine>(); var tempDataProvider = new Mock <ITempDataProvider>(); var logger = new Mock <ILogger <EmailService> >(); serviceCollection.AddSingleton(logger.Object); serviceCollection.AddSingleton(viewEngine.Object); serviceCollection.AddSingleton(tempDataProvider.Object); serviceCollection.Configure <DefaultEmailServiceOptions>(_configuration); serviceCollection.AddPostal(); var services = serviceCollection.BuildServiceProvider(); var emailService = services.GetRequiredService <IEmailService>(); var emailOption = services.GetRequiredService <IOptions <DefaultEmailServiceOptions> >().Value; DefaultEmailServiceOptions emailOptionField = GetInstanceField(typeof(EmailService), emailService, "options") as DefaultEmailServiceOptions; emailOption.Host.ShouldBe("abc"); emailOption.Port.ShouldBe(12345); emailOption.UserName.ShouldBe("zxcvbn"); emailOption.Password.ShouldBe("asdfgh"); emailOptionField.Host.ShouldBe("abc"); emailOptionField.Port.ShouldBe(12345); emailOptionField.UserName.ShouldBe("zxcvbn"); emailOptionField.Password.ShouldBe("asdfgh"); }
public void Dependency_injection_smtpOtions2() { var serviceCollection = new ServiceCollection(); serviceCollection.AddOptions(); var viewEngine = new Mock <IRazorViewEngine>(); var tempDataProvider = new Mock <ITempDataProvider>(); var logger = new Mock <ILogger <EmailService> >(); serviceCollection.AddSingleton(logger.Object); serviceCollection.AddSingleton(viewEngine.Object); serviceCollection.AddSingleton(tempDataProvider.Object); serviceCollection.Configure <DefaultEmailServiceOptions>(o => { o.Host = "abc"; o.Port = 12345; o.UserName = "******"; o.Password = "******"; o.PrepareSmtpClientAsync = () => Task.FromResult <SmtpClient>(new FactExcetpionForSmtpClient()); }); serviceCollection.AddPostal(); var services = serviceCollection.BuildServiceProvider(); var emailService = services.GetRequiredService <IEmailService>(); DefaultEmailServiceOptions emailOptionField = GetInstanceField(typeof(EmailService), emailService, "options") as DefaultEmailServiceOptions; emailOptionField.Host.ShouldBe("abc"); emailOptionField.Port.ShouldBe(12345); emailOptionField.UserName.ShouldBe("zxcvbn"); emailOptionField.Password.ShouldBe("asdfgh"); emailOptionField.PrepareSmtpClientAsync().Result.ShouldBeOfType <FactExcetpionForSmtpClient>(); }
public async Task LoadTemplates( string templateName, string culture, string expectedCulture, string defaultCulture) { var email = "alice@localhost"; var emailSender = new Mock <IEmailSender>(); var model = new Dictionary <string, object> { { "Name", "Foo" } }; emailSender .Setup(c => c.SendEmailAsync(It.IsAny <EmailMessage>())) .Returns(new Func <EmailMessage, Task>(async(emailMessage) => { Assert.NotNull(emailMessage); Assert.Equal(email, emailMessage.EmailTo); string subject = $"Subject {templateName} {expectedCulture} Foo"; Assert.Equal(subject, emailMessage.Subject); string html = $"HTML LayoutStart {expectedCulture} Html {templateName} {expectedCulture} Foo HTML LayoutEnd {expectedCulture}"; Assert.Equal(html, emailMessage.Html); string text = $"Text LayoutStart {expectedCulture} Text {templateName} {expectedCulture} Foo Text LayoutEnd {expectedCulture}"; Assert.Equal(text, emailMessage.Text); })); var logger = new NullLogger <DefaultEmailService>(); var options = new DefaultEmailServiceOptions { DefaultCulture = defaultCulture, TemplateDirectoryPath = "../../../Email/Templates" }; var httpContextAccessorMock = new Mock <IHttpContextAccessor>(); var emailService = new DefaultEmailService( options, logger, emailSender.Object, httpContextAccessorMock.Object); // Set culture CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture; CultureInfo originalUICulture = Thread.CurrentThread.CurrentUICulture; Thread.CurrentThread.CurrentCulture = new CultureInfo(culture, false); Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture, false); CultureInfo.CurrentCulture.ClearCachedData(); CultureInfo.CurrentUICulture.ClearCachedData(); // Send email await emailService.SendEmailAsync( templateName, email, model, true); // Reset UI Culture Thread.CurrentThread.CurrentCulture = originalCulture; Thread.CurrentThread.CurrentUICulture = originalUICulture; CultureInfo.CurrentCulture.ClearCachedData(); CultureInfo.CurrentUICulture.ClearCachedData(); }
//[Theory] //[InlineData("Template1", "en-US", "en-US", "en-US")] //[InlineData("Template1", "de-DE", "de-DE", "de-DE")] //[InlineData("Template1", "ru-RU", "en-US", "en-US")] public async Task LoadTemplates( string templateName, string culture, string expectedCulture, string defaultCulture) { string email = "alice@localhost"; Mock <IEmailSender> emailSender = new Mock <IEmailSender>(); Dictionary <string, object> model = new Dictionary <string, object> { { "Name", "Foo" } }; emailSender .Setup(c => c.SendEmailAsync(It.IsAny <EmailMessage>())) .Returns(new Func <EmailMessage, Task>((emailMessage) => { Assert.NotNull(emailMessage); Assert.Equal(email, emailMessage.EmailTo); string subject = $"Subject {templateName} {expectedCulture} Foo"; Assert.Equal(subject, emailMessage.Subject); string html = $"HTML LayoutStart {expectedCulture} Html {templateName} {expectedCulture} Foo HTML LayoutEnd {expectedCulture}"; Assert.Equal(html, emailMessage.Html); string text = $"Text LayoutStart {expectedCulture} Text {templateName} {expectedCulture} Foo Text LayoutEnd {expectedCulture}"; Assert.Equal(text, emailMessage.Text); return(Task.FromResult(0)); })); NullLogger <DefaultEmailService> logger = new NullLogger <DefaultEmailService>(); DefaultEmailServiceOptions options = new DefaultEmailServiceOptions { DefaultCulture = defaultCulture }; Mock <IHttpContextAccessor> httpContextAccessorMock = new Mock <IHttpContextAccessor>(); Mock <IResourceStore> resourceStoreMock = new Mock <IResourceStore>(); resourceStoreMock .Setup(c => c.GetEmailTemplateAsync( It.Is <string>(s => s.Equals(culture)), It.Is <string>(s => s.Equals(templateName)) )) .Returns(new Func <string, string, Task <Resource> >((tplCulture, tplKey) => { return(Task.FromResult(new Resource { Culture = tplCulture, Key = tplKey, Value = $"HTML LayoutStart {expectedCulture} Html {templateName} {expectedCulture} Foo HTML LayoutEnd {expectedCulture}" })); })); DefaultEmailService emailService = new DefaultEmailService( options, emailSender.Object, resourceStoreMock.Object, logger, new DefaultTokenizer()); // Set culture CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture; CultureInfo originalUICulture = Thread.CurrentThread.CurrentUICulture; Thread.CurrentThread.CurrentCulture = new CultureInfo(culture, false); Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture, false); CultureInfo.CurrentCulture.ClearCachedData(); CultureInfo.CurrentUICulture.ClearCachedData(); // Send email await emailService.SendEmailAsync( templateName, email, model, true); // Reset UI Culture Thread.CurrentThread.CurrentCulture = originalCulture; Thread.CurrentThread.CurrentUICulture = originalUICulture; CultureInfo.CurrentCulture.ClearCachedData(); CultureInfo.CurrentUICulture.ClearCachedData(); }