You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

EmailerTests.cs 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using Diligent.WebAPI.Business.Services;
  2. using Diligent.WebAPI.Business.Services.Interfaces;
  3. using Diligent.WebAPI.Business.Settings;
  4. using Diligent.WebAPI.Contracts.Exceptions;
  5. using Diligent.WebAPI.Contracts.Models;
  6. using Microsoft.Extensions.Logging;
  7. using Microsoft.Extensions.Options;
  8. using NSubstitute.ExceptionExtensions;
  9. using System.Net.Mail;
  10. namespace Diligent.WebAPI.Tests.Services
  11. {
  12. public class EmailerTests
  13. {
  14. private readonly IOptions<MailSettings> _settings;
  15. private readonly ILogger<Emailer> _logger = Substitute.For<ILogger<Emailer>>();
  16. private readonly DiligEmail _email;
  17. private readonly MailMessage _message;
  18. private readonly List<string> _emailAddresses;
  19. private readonly List<string> _emailAddressesCC;
  20. private readonly MailSettings _mailSettings;
  21. public EmailerTests()
  22. {
  23. _emailAddresses = new List<string> { "dzenis@dilig.net", "meris@dilig.net" };
  24. _emailAddressesCC = new List<string> { "ermin@dilig.net", "safet@dilig.net" };
  25. _email = new DiligEmail
  26. {
  27. To = "dzenis@dilig.net;meris@dilig.net",
  28. Subject = "Forget password",
  29. Body = "Forget password"
  30. };
  31. _message = new MailMessage
  32. {
  33. Subject = "Forget password",
  34. Body = "Forget password",
  35. IsBodyHtml = false,
  36. Sender = new MailAddress("htcenter@dilig.net", "hrcenter"),
  37. From = new MailAddress("htcenter@dilig.net")
  38. };
  39. _message.To.Add(string.Join(",", _emailAddresses));
  40. _message.CC.Add(string.Join(",", _emailAddressesCC));
  41. _mailSettings = new MailSettings
  42. {
  43. SmtpFrom = "htcenter@dilig.net",
  44. SmtpFromName = "hrcenter",
  45. SmtpServer = "gmail",
  46. SmtpPassword = "Password123?",
  47. SmtpPort = 5000,
  48. SmtpUsername = "hrcenter",
  49. SmtpUseSSL = true
  50. };
  51. _settings = Options.Create<MailSettings>(_mailSettings);
  52. }
  53. [Fact]
  54. public void CreateEmail_ShouldReturnDiligEmail_WhenArgumentsAreSent()
  55. {
  56. Emailer emailer = new Emailer(_settings, _logger);
  57. var result = emailer.CreateEmail(new List<string>() { "dzenis@dilig.net","meris@dilig.net"},
  58. "Forget password","Forget password");
  59. result.Should().Be(_email);
  60. }
  61. [Fact]
  62. public void CreateEmail_ShouldThrowArgumentException_WhenListOfReceiveresIsEmpty()
  63. {
  64. Emailer emailer = new Emailer(_settings, _logger);
  65. Assert.Throws<ArgumentException>( () => emailer.CreateEmail(new List<string>(), "Forget password",
  66. "Forget password"));
  67. }
  68. [Fact]
  69. public void GetMailMessage_ShouldReturnMailMessage_WhenArgumentsAreSent()
  70. {
  71. Emailer emailer = new Emailer(_settings, _logger);
  72. var result = emailer.GetMailMessage(_emailAddresses,
  73. "Forget password","Forget password",false,_emailAddressesCC);
  74. result.Subject.Should().Be(_message.Subject);
  75. result.Body.Should().Be(_message.Body);
  76. result.IsBodyHtml.Should().Be(_message.IsBodyHtml);
  77. result.Sender.Should().Be(_message.Sender);
  78. result.From.Should().Be(_message.From);
  79. result.To.Should().HaveCount(_message.To.Count());
  80. result.CC.Should().HaveCount(_message.CC.Count());
  81. }
  82. [Fact]
  83. public void GetMailMessage_ShouldThrowArgumentException_WhenListOfReceiveresIsEmpty()
  84. {
  85. Emailer emailer = new Emailer(_settings, _logger);
  86. Assert.Throws<ArgumentException>(() => emailer.GetMailMessage(new List<string>(), "Forget password",
  87. "Forget password"));
  88. }
  89. [Fact]
  90. public void GetSmtpClient_ShouldReturnGetSmtpClient_WhenSettingsArePresent()
  91. {
  92. Emailer emailer = new Emailer(_settings, _logger);
  93. var result = emailer.GetSmtpClient();
  94. result.EnableSsl.Should().Be(_mailSettings.SmtpUseSSL);
  95. result.Port.Should().Be(_mailSettings.SmtpPort);
  96. result.Host.Should().Be(_mailSettings.SmtpServer);
  97. }
  98. [Fact]
  99. public void SendEmailAsync_ShouldThrowArgumentException_WhenListOfReceiveresIsEmpty()
  100. {
  101. Emailer emailer = new Emailer(_settings, _logger);
  102. Assert.ThrowsAsync<ArgumentException>(async () => await emailer.SendEmailAsync(new List<string>(), "Forget password",
  103. "Forget password"));
  104. }
  105. //[Fact]
  106. //public async Task SendEmailAndWriteToDbAsync_ShouldReturnDiligEmail_WhenArgumentsAreSent()
  107. //{
  108. // Emailer emailer = new Emailer(_settings, _logger);
  109. // emailer.When(x => x.SendEmailAsync(Arg.Any<List<string>>(),Arg.Any<string>(), Arg.Any<string>(), Arg.Any<bool>(), Arg.Any<List<string>>())).ReturnsForAll(true);
  110. // var result = emailer.SendEmailAndWriteToDbAsync(new List<string>() { "dzenis@dilig.net", "meris@dilig.net" },
  111. // "Forget password", "Forget password");
  112. // result.Should().Be(_email);
  113. //}
  114. }
  115. }