132 lines
4.3 KiB
C#
132 lines
4.3 KiB
C#
using Omika.Core.Contracts.Documents;
|
|
|
|
namespace Omika.Tests.Services;
|
|
|
|
/// <summary>
|
|
/// Verrouille la machine d'état de persistance du courriel (règles §1, §7-§9) :
|
|
/// <c>ME_EnvoyerMob</c> est INDÉPENDANT de <c>ME_Envoyer</c> (un envoi WinDev a
|
|
/// <c>ME_Envoyer=true</c> mais <c>ME_EnvoyerMob=false</c>).
|
|
///
|
|
/// <para>
|
|
/// Deux chemins donnent <c>ME_EnvoyerMob=true</c>, tous deux « envoyé depuis le
|
|
/// mobile » : (1) un envoi SMTP réussi par Omika ; (2) un envoi depuis une
|
|
/// MESSAGERIE EXTERNE confirmé par l'utilisateur (choix de messagerie
|
|
/// « Externe » — l'application n'a envoyé aucun courriel elle-même, elle
|
|
/// enregistre une déclaration).
|
|
/// </para>
|
|
/// </summary>
|
|
public class EmailEnregistrementStateMachineTests
|
|
{
|
|
// TEST MOBILE 1 : envoi réussi depuis Omika.
|
|
[Fact]
|
|
public void EnvoiReussiDepuisOmika_EnvoyerVrai_EnvoyerMobVrai_BrouillonFaux()
|
|
{
|
|
var enregistrement = new EmailEnregistrement
|
|
{
|
|
Brouillon = false,
|
|
Envoyer = true,
|
|
EnvoyerMob = true
|
|
};
|
|
|
|
Assert.True(enregistrement.Envoyer);
|
|
Assert.False(enregistrement.Brouillon);
|
|
Assert.True(enregistrement.EnvoyerMob);
|
|
}
|
|
|
|
// TEST MOBILE 2 : échec SMTP.
|
|
[Fact]
|
|
public void EchecSmtp_EnvoyerFaux_EnvoyerMobFaux_BrouillonVrai()
|
|
{
|
|
var enregistrement = new EmailEnregistrement
|
|
{
|
|
Brouillon = true,
|
|
Envoyer = false,
|
|
EnvoyerMob = false
|
|
};
|
|
|
|
Assert.False(enregistrement.Envoyer);
|
|
Assert.True(enregistrement.Brouillon);
|
|
Assert.False(enregistrement.EnvoyerMob);
|
|
}
|
|
|
|
// TEST MOBILE 3 : enregistrement sans envoi (brouillon).
|
|
[Fact]
|
|
public void EnregistrementSansEnvoi_EnvoyerFaux_EnvoyerMobFaux_BrouillonVrai()
|
|
{
|
|
var enregistrement = new EmailEnregistrement
|
|
{
|
|
Brouillon = true,
|
|
Envoyer = false,
|
|
EnvoyerMob = false
|
|
};
|
|
|
|
Assert.False(enregistrement.Envoyer);
|
|
Assert.True(enregistrement.Brouillon);
|
|
Assert.False(enregistrement.EnvoyerMob);
|
|
}
|
|
|
|
// TEST MOBILE 4 : un message envoyé par WinDev ne force jamais EnvoyerMob=true.
|
|
[Fact]
|
|
public void MessageEnvoyeParWinDev_EnvoyerVraiMaisEnvoyerMobFaux()
|
|
{
|
|
var enregistrement = new EmailEnregistrement
|
|
{
|
|
Brouillon = false,
|
|
Envoyer = true,
|
|
EnvoyerMob = false
|
|
};
|
|
|
|
// ME_EnvoyerMob est un champ DISTINCT de ME_Envoyer : il peut rester faux
|
|
// alors que le message a été envoyé par WinDev.
|
|
Assert.True(enregistrement.Envoyer);
|
|
Assert.False(enregistrement.EnvoyerMob);
|
|
}
|
|
|
|
// TEST MOBILE 4 (invariant) : EnvoyerMob n'est PAS dérivé de Envoyer.
|
|
[Fact]
|
|
public void EnvoyerMob_EstUnChampIndependantDeEnvoyer()
|
|
{
|
|
// Le record expose les deux drapeaux séparément : aucune dérivation
|
|
// EnvoyerMob = Envoyer n'est codée dans le contrat.
|
|
Assert.False(new EmailEnregistrement().EnvoyerMob);
|
|
Assert.False(new EmailEnregistrement().Envoyer);
|
|
}
|
|
|
|
// TEST MOBILE 5 : envoi déclaré depuis une MESSAGERIE EXTERNE (choix
|
|
// « Externe » + confirmation de l'utilisateur). Omika n'a envoyé aucun
|
|
// courriel, aucun expéditeur n'est connu, mais le message est bien « envoyé
|
|
// par le mobile » : EnvoyerMob = vrai, comme un envoi SMTP réussi.
|
|
[Fact]
|
|
public void EnvoiDeclareDepuisMessagerieExterne_EnvoyerMobVrai_SansExpediteur()
|
|
{
|
|
var enregistrement = new EmailEnregistrement
|
|
{
|
|
Brouillon = false,
|
|
Envoyer = true,
|
|
EnvoyerMob = true,
|
|
AdrExp = null
|
|
};
|
|
|
|
Assert.True(enregistrement.EnvoyerMob);
|
|
Assert.False(enregistrement.Brouillon);
|
|
Assert.Null(enregistrement.AdrExp);
|
|
}
|
|
|
|
// TEST MOBILE 5 (repli) : réponse « Non » à la confirmation — l'utilisateur
|
|
// n'a pas envoyé le courriel depuis sa messagerie : il reste un BROUILLON.
|
|
[Fact]
|
|
public void ReponseNonALaConfirmationExterne_ResteBrouillon()
|
|
{
|
|
var enregistrement = new EmailEnregistrement
|
|
{
|
|
Brouillon = true,
|
|
Envoyer = false,
|
|
EnvoyerMob = false
|
|
};
|
|
|
|
Assert.True(enregistrement.Brouillon);
|
|
Assert.False(enregistrement.Envoyer);
|
|
Assert.False(enregistrement.EnvoyerMob);
|
|
}
|
|
}
|