dotnet unit tests
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
using Application.Models;
|
||||
using Application.Services;
|
||||
using MailKit.Net.Smtp;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using MimeKit;
|
||||
using NSubstitute;
|
||||
|
||||
namespace Application.UnitTest.Services;
|
||||
|
||||
public class EmailServiceTests
|
||||
{
|
||||
private readonly IConfiguration _configuration = Substitute.For<IConfiguration>();
|
||||
private readonly ISmtpClient _smtpClient = Substitute.For<ISmtpClient>();
|
||||
private readonly EmailService _sut;
|
||||
|
||||
public EmailServiceTests()
|
||||
{
|
||||
_configuration["EmailSettings:From"].Returns("sender@gmail.com");
|
||||
_configuration["EmailSettings:SmtpServer"].Returns("smtp.gmail.com");
|
||||
_configuration["EmailSettings:Password"].Returns("app-password");
|
||||
|
||||
_sut = new EmailService(_configuration, () => _smtpClient);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SendEmailAsync_ShouldConnectAndAuthenticate()
|
||||
{
|
||||
var request = new EmailRequest("recipient@example.com", "Test Subject", "<p>Hello</p>");
|
||||
|
||||
_sut.SendEmailAsync(request);
|
||||
|
||||
_smtpClient.Received(1).Connect("smtp.gmail.com", 465, true);
|
||||
_smtpClient.Received(1).Authenticate("sender@gmail.com", "app-password");
|
||||
_smtpClient.Received(1).Send(Arg.Any<MimeMessage>());
|
||||
_smtpClient.Received(1).Disconnect(true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SendEmailAsync_ShouldSendMessageWithCorrectDetails()
|
||||
{
|
||||
var request = new EmailRequest("recipient@example.com", "Welcome!", "<h1>Hi</h1>");
|
||||
|
||||
_sut.SendEmailAsync(request);
|
||||
|
||||
_smtpClient.Received(1).Send(Arg.Is<MimeMessage>(msg =>
|
||||
msg.To.Mailboxes.Any(m => m.Address == "recipient@example.com") &&
|
||||
msg.Subject == "Welcome!"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SendEmailAsync_ShouldDisposeClient_AfterSending()
|
||||
{
|
||||
var request = new EmailRequest("recipient@example.com", "Subject", "Body");
|
||||
|
||||
_sut.SendEmailAsync(request);
|
||||
|
||||
_smtpClient.Received(1).Disconnect(true);
|
||||
_smtpClient.Received(1).Dispose();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user