Premiere commit - Omika
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
using System.Text.RegularExpressions;
|
||||
using Omika.App.Navigation;
|
||||
using Omika.Core.Observability;
|
||||
|
||||
namespace Omika.Tests.Observability;
|
||||
|
||||
/// <summary>
|
||||
/// T18 (§71/§72) : le mapping AppPage → ScreenCode est total, stable, au format
|
||||
/// UPPER_SNAKE_CASE ASCII, sans identifiant métier, sans nom technique de Page/ViewModel.
|
||||
/// </summary>
|
||||
public partial class DiagnosticScreenMappingTests
|
||||
{
|
||||
[Fact]
|
||||
public void Resolve_EveryAppPage_HasScreenCode()
|
||||
{
|
||||
foreach (AppPage page in Enum.GetValues<AppPage>())
|
||||
{
|
||||
Assert.True(
|
||||
DiagnosticScreenMapping.Resolve(page) is not null,
|
||||
$"AppPage.{page} n'a pas de ScreenCode : le mapping doit être TOTAL sur l'énumération.");
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Resolve_ProducesCatalogValues()
|
||||
{
|
||||
var catalog = new HashSet<string>(DiagnosticScreenCodes.All, StringComparer.Ordinal);
|
||||
|
||||
foreach (AppPage page in Enum.GetValues<AppPage>())
|
||||
{
|
||||
string code = DiagnosticScreenMapping.Resolve(page)!;
|
||||
Assert.Contains(code, catalog);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Resolve_Agenda_ReturnsAgenda()
|
||||
{
|
||||
Assert.Equal(DiagnosticScreenCodes.Agenda, DiagnosticScreenMapping.Resolve(AppPage.Home));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Resolve_SiteDetail_ReturnsSiteDetail()
|
||||
{
|
||||
Assert.Equal(DiagnosticScreenCodes.SiteDetail, DiagnosticScreenMapping.Resolve(AppPage.SiteDetail));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Resolve_InterventionSearch_ReturnsInterventionSearch()
|
||||
{
|
||||
Assert.Equal(DiagnosticScreenCodes.InterventionSearch, DiagnosticScreenMapping.Resolve(AppPage.Interventions));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ScreenCodes_AreUppercaseSnakeCaseAscii_WithoutIds()
|
||||
{
|
||||
var regex = UppercaseSnake();
|
||||
|
||||
foreach (string code in DiagnosticScreenCodes.All)
|
||||
{
|
||||
Assert.Matches(regex, code);
|
||||
// §72 : aucun ID métier dynamique (site/rendez-vous/intervention/user/GUID).
|
||||
Assert.DoesNotContain('-', code); // pas de GUID
|
||||
Assert.DoesNotContain(code, char.IsDigit); // pas de numéro d'ID
|
||||
Assert.DoesNotContain(code, char.IsLower); // pas de casse libre
|
||||
}
|
||||
}
|
||||
|
||||
[GeneratedRegex("^[A-Z][A-Z0-9_]*$")]
|
||||
private static partial Regex UppercaseSnake();
|
||||
}
|
||||
Reference in New Issue
Block a user