Premiere commit - Omika

This commit is contained in:
2026-10-23 18:46:50 +02:00
commit 8ea76c1b24
2155 changed files with 984301 additions and 0 deletions
@@ -0,0 +1,73 @@
using Omika.Core.Services;
using Xunit;
namespace Omika.Tests.Domain;
public class RubriqueSubstitutionEngineTests
{
[Fact]
public void Substitute_ReplacesTokensCaseInsensitively()
{
var values = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
["NomClient"] = "ACME",
["DateIntervention"] = "2026-08-06"
};
string result = RubriqueSubstitutionEngine.Substitute(
"Bonjour $NOMCLIENT$, intervention du $DateIntervention$.",
values);
Assert.Equal("Bonjour ACME, intervention du 2026-08-06.", result);
}
[Fact]
public void Substitute_LeavesUnknownTokensUntouched()
{
var values = new Dictionary<string, string> { ["NomClient"] = "ACME" };
string result = RubriqueSubstitutionEngine.Substitute(
"Bonjour $NomClient$ — $Inconnu$",
values);
Assert.Equal("Bonjour ACME — $Inconnu$", result);
}
[Fact]
public void Substitute_NullOrEmptyTemplate_ReturnsEmpty()
{
Assert.Equal(string.Empty, RubriqueSubstitutionEngine.Substitute(null, new Dictionary<string, string>()));
Assert.Equal(string.Empty, RubriqueSubstitutionEngine.Substitute(string.Empty, new Dictionary<string, string>()));
}
[Fact]
public void Substitute_UnclosedTokenIsLeftUntouched()
{
string result = RubriqueSubstitutionEngine.Substitute(
"Bonjour $NomClient",
new Dictionary<string, string> { ["NomClient"] = "ACME" });
Assert.Equal("Bonjour $NomClient", result);
}
[Fact]
public void ExtractTokens_ReturnsOrderedUniqueTokens()
{
IReadOnlyList<string> tokens = RubriqueSubstitutionEngine.ExtractTokens(
"$A$ puis $B$ et encore $a$");
Assert.Equal(["A", "B"], tokens);
}
[Fact]
public void FindUnknownTokens_ReturnsTokensMissingFromValues()
{
var values = new Dictionary<string, string> { ["A"] = "1" };
IReadOnlyList<string> unknown = RubriqueSubstitutionEngine.FindUnknownTokens(
"$A$ $B$ $A$",
values);
Assert.Equal(["B"], unknown);
}
}