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