Premiere commit - Omika
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user