Files
DotNetAngular/tests/Application.UnitTest/Services/EmailServiceTests.cs
T
2026-06-10 23:37:08 +02:00

61 lines
1.9 KiB
C#

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();
}
}