166 lines
6.0 KiB
C#
166 lines
6.0 KiB
C#
using Omika.Core.Interfaces;
|
|
using Omika.Core.Services;
|
|
|
|
namespace Omika.Tests.Services;
|
|
|
|
/// <summary>
|
|
/// Tests unitaires de <see cref="MailKitEmailSender"/> : les validations qui
|
|
/// échouent AVANT toute connexion SMTP (configuration incomplète, destinataire
|
|
/// manquant) sont déterministes et testables sans serveur de messagerie.
|
|
///
|
|
/// Depuis la refonte de la résolution SMTP, le message utilisateur NOMME le champ
|
|
/// manquant (« Configuration SMTP « compte » incomplète : le serveur de messagerie
|
|
/// n'est pas renseigné. ») : le message générique unique ne permettait pas de
|
|
/// savoir quoi corriger, dans la fiche de la société ou dans les préférences.
|
|
/// </summary>
|
|
public class MailKitEmailSenderTests
|
|
{
|
|
private static SmtpConfiguration Config(
|
|
string? serveur = "smtp.test",
|
|
string? email = "expediteur@test.fr",
|
|
string? login = "expediteur@test.fr")
|
|
=> new()
|
|
{
|
|
Id = "cfg",
|
|
Email = email,
|
|
Login = login,
|
|
Serveur = serveur,
|
|
Port = 587,
|
|
Cryptage = 2
|
|
};
|
|
|
|
[Fact]
|
|
public async Task EnvoyerAsync_SansServeur_LeveConfigurationIncomplete()
|
|
{
|
|
var sender = new MailKitEmailSender();
|
|
|
|
EmailEnvoiException ex = await Assert.ThrowsAsync<EmailEnvoiException>(() =>
|
|
sender.EnvoyerAsync(
|
|
new EmailMessage { Sujet = "Sujet", Destinataires = new[] { "dest@test.fr" } },
|
|
Config(serveur: null)));
|
|
|
|
Assert.Equal(EmailEnvoiErreurType.ConfigurationIncomplete, ex.Type);
|
|
Assert.StartsWith("Configuration SMTP", ex.Message);
|
|
Assert.Contains("serveur", ex.Message, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnvoyerAsync_SansDestinataire_LeveDestinataireInvalide()
|
|
{
|
|
var sender = new MailKitEmailSender();
|
|
|
|
EmailEnvoiException ex = await Assert.ThrowsAsync<EmailEnvoiException>(() =>
|
|
sender.EnvoyerAsync(
|
|
new EmailMessage { Sujet = "Sujet", Destinataires = [] },
|
|
Config()));
|
|
|
|
Assert.Equal(EmailEnvoiErreurType.DestinataireInvalide, ex.Type);
|
|
Assert.Equal("Veuillez renseigner au moins un destinataire.", ex.Message);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnvoyerAsync_SansExpediteur_LeveConfigurationIncomplete()
|
|
{
|
|
var sender = new MailKitEmailSender();
|
|
|
|
EmailEnvoiException ex = await Assert.ThrowsAsync<EmailEnvoiException>(() =>
|
|
sender.EnvoyerAsync(
|
|
new EmailMessage { Sujet = "Sujet", Destinataires = new[] { "dest@test.fr" } },
|
|
Config(email: null, login: null)));
|
|
|
|
Assert.Equal(EmailEnvoiErreurType.ConfigurationIncomplete, ex.Type);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnvoyerAsync_SansMotDePasse_LeveConfigurationIncomplete()
|
|
{
|
|
var sender = new MailKitEmailSender();
|
|
|
|
EmailEnvoiException ex = await Assert.ThrowsAsync<EmailEnvoiException>(() =>
|
|
sender.EnvoyerAsync(
|
|
new EmailMessage { Sujet = "Sujet", Destinataires = new[] { "dest@test.fr" } },
|
|
Config()));
|
|
|
|
Assert.Equal(EmailEnvoiErreurType.ConfigurationIncomplete, ex.Type);
|
|
Assert.StartsWith("Configuration SMTP", ex.Message);
|
|
Assert.Contains("mot de passe", ex.Message, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
|
|
// ===== Validation de configuration avant connexion (aucun appel SMTP) =====
|
|
|
|
[Fact]
|
|
public async Task EnvoyerAsync_PortInvalide_LeveConfigurationIncomplete()
|
|
{
|
|
var sender = new MailKitEmailSender();
|
|
var config = new SmtpConfiguration
|
|
{
|
|
Id = "cfg",
|
|
Email = "expediteur@test.fr",
|
|
Login = "expediteur@test.fr",
|
|
Serveur = "smtp.test",
|
|
Port = 0,
|
|
Cryptage = 2,
|
|
MotDePasse = "secret"
|
|
};
|
|
|
|
EmailEnvoiException ex = await Assert.ThrowsAsync<EmailEnvoiException>(() =>
|
|
sender.EnvoyerAsync(
|
|
new EmailMessage { Sujet = "Sujet", Destinataires = new[] { "dest@test.fr" } },
|
|
config));
|
|
|
|
Assert.Equal(EmailEnvoiErreurType.ConfigurationIncomplete, ex.Type);
|
|
Assert.StartsWith("Configuration SMTP", ex.Message);
|
|
Assert.Contains("port", ex.Message, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnvoyerAsync_CryptageInvalide_LeveConfigurationIncomplete()
|
|
{
|
|
var sender = new MailKitEmailSender();
|
|
var config = new SmtpConfiguration
|
|
{
|
|
Id = "cfg",
|
|
Email = "expediteur@test.fr",
|
|
Login = "expediteur@test.fr",
|
|
Serveur = "smtp.test",
|
|
Port = 587,
|
|
Cryptage = 9,
|
|
MotDePasse = "secret"
|
|
};
|
|
|
|
EmailEnvoiException ex = await Assert.ThrowsAsync<EmailEnvoiException>(() =>
|
|
sender.EnvoyerAsync(
|
|
new EmailMessage { Sujet = "Sujet", Destinataires = new[] { "dest@test.fr" } },
|
|
config));
|
|
|
|
Assert.Equal(EmailEnvoiErreurType.ConfigurationIncomplete, ex.Type);
|
|
Assert.StartsWith("Configuration SMTP", ex.Message);
|
|
Assert.Contains("cryptage", ex.Message, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task EnvoyerAsync_LoginVideAvecMotDePasse_LeveConfigurationIncomplete()
|
|
{
|
|
var sender = new MailKitEmailSender();
|
|
var config = new SmtpConfiguration
|
|
{
|
|
Id = "cfg",
|
|
Email = "expediteur@test.fr",
|
|
Login = null,
|
|
Serveur = "smtp.test",
|
|
Port = 587,
|
|
Cryptage = 2,
|
|
MotDePasse = "secret"
|
|
};
|
|
|
|
EmailEnvoiException ex = await Assert.ThrowsAsync<EmailEnvoiException>(() =>
|
|
sender.EnvoyerAsync(
|
|
new EmailMessage { Sujet = "Sujet", Destinataires = new[] { "dest@test.fr" } },
|
|
config));
|
|
|
|
Assert.Equal(EmailEnvoiErreurType.ConfigurationIncomplete, ex.Type);
|
|
Assert.StartsWith("Configuration SMTP", ex.Message);
|
|
Assert.Contains("login", ex.Message, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
}
|