Files
Omika/tests/Omika.Tests/Services/AnnulationRendezVousDescriptionTests.cs
T
2026-10-23 18:46:50 +02:00

104 lines
3.9 KiB
C#

using Omika.Core.Services;
namespace Omika.Tests.Services;
/// <summary>
/// Tests de la règle métier unique de composition de la mention d'annulation :
/// le mot « Note », le nom du collaborateur entre parenthèses, puis son message
/// (<c>Note (DUPONT Jean) : Client absent</c>). Cette règle est partagée par le
/// serveur (repositories Batik/Omika) et l'application mobile (copie locale
/// offline-first), qui doivent écrire exactement le même texte.
/// </summary>
public class AnnulationRendezVousDescriptionTests
{
[Fact]
public void ComposerNote_MessageEtNom_InscritNoteNomPuisMessage()
{
string? note = AnnulationRendezVousDescription.ComposerNote("Client absent", "Jean DUPONT");
Assert.Equal("Note (Jean DUPONT) : Client absent", note);
}
[Fact]
public void ComposerNote_NomInconnu_InscritNoteEtMessageSansParentheses()
{
// Aucun nom connu : aucune parenthèse vide ne doit apparaître.
Assert.Equal("Note : Client absent", AnnulationRendezVousDescription.ComposerNote("Client absent", null));
Assert.Equal("Note : Client absent", AnnulationRendezVousDescription.ComposerNote("Client absent", " "));
}
[Fact]
public void ComposerNote_SansMessage_NeComposeRien()
{
// Sans message du collaborateur, RIEN n'est inscrit dans la description :
// la mention trace une note, pas l'annulation elle-même (le statut, le
// motif et l'origine portent déjà l'information). Le nom seul n'est jamais
// inscrit.
Assert.Null(AnnulationRendezVousDescription.ComposerNote(null, "Jean DUPONT"));
Assert.Null(AnnulationRendezVousDescription.ComposerNote(" ", "Jean DUPONT"));
}
[Fact]
public void ComposerNote_AucuneInformation_RetourneNull()
{
Assert.Null(AnnulationRendezVousDescription.ComposerNote(null, null));
Assert.Null(AnnulationRendezVousDescription.ComposerNote(" ", " "));
}
[Fact]
public void ComposerNote_NettoieLesEspaces()
{
Assert.Equal(
"Note (Jean DUPONT) : Client absent",
AnnulationRendezVousDescription.ComposerNote(" Client absent ", " Jean DUPONT "));
}
[Fact]
public void Concatener_DescriptionExistante_AjouteLaMentionSurUneNouvelleLigne()
{
string? resultat = AnnulationRendezVousDescription.Concatener(
"Description initiale", "Client absent", "Jean DUPONT");
Assert.Equal(
"Description initiale" + Environment.NewLine + "Note (Jean DUPONT) : Client absent",
resultat);
}
[Fact]
public void Concatener_DescriptionVide_RetourneLaMentionSeule()
{
Assert.Equal(
"Note (Jean DUPONT) : Client absent",
AnnulationRendezVousDescription.Concatener(null, "Client absent", "Jean DUPONT"));
Assert.Equal(
"Note (Jean DUPONT) : Client absent",
AnnulationRendezVousDescription.Concatener(" ", "Client absent", "Jean DUPONT"));
}
[Fact]
public void Concatener_AucuneNote_LaisseLaDescriptionInchangee()
{
Assert.Equal(
"Description initiale",
AnnulationRendezVousDescription.Concatener("Description initiale", null, null));
// Un nom sans message ne modifie jamais la description.
Assert.Equal(
"Description initiale",
AnnulationRendezVousDescription.Concatener("Description initiale", null, "Jean DUPONT"));
}
[Fact]
public void Concatener_MentionDejaPresente_EstIdempotent()
{
// Rejeu d'une opération de synchronisation dont la réponse a été perdue :
// la mention ne doit jamais être ajoutée deux fois.
string description = "Description initiale" + Environment.NewLine
+ "Note (Jean DUPONT) : Client absent";
string? resultat = AnnulationRendezVousDescription.Concatener(description, "Client absent", "Jean DUPONT");
Assert.Equal(description, resultat);
}
}