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,61 @@
using Omika.Core.Compatibility;
namespace Omika.Tests.Compatibility;
/// <summary>
/// Tests de <see cref="LegacyEntityReference"/> : conservation de la provenance
/// (Batik / Omika) sans exposer les noms HFSQL, et identifiant public stable.
/// </summary>
public class LegacyEntityReferenceTests
{
[Fact]
public void FromLegacyId_IsBatikAndKeepsNumericId()
{
var reference = LegacyEntityReference.FromLegacyId(42);
Assert.Equal(DatabaseSchemaVersion.Batik, reference.Source);
Assert.Equal(42, reference.NumericId);
Assert.Equal("42", reference.PublicIdentifier);
}
[Fact]
public void FromGuid_KeepsEntityGuidAndSchemaVersion()
{
var guid = Guid.NewGuid();
var reference = LegacyEntityReference.FromGuid(DatabaseSchemaVersion.Omika, guid);
Assert.Equal(DatabaseSchemaVersion.Omika, reference.Source);
Assert.Equal(guid, reference.EntityGuid);
Assert.Equal(guid.ToString("D"), reference.PublicIdentifier);
}
[Fact]
public void FromBusinessKey_UsesBusinessKey()
{
var reference = LegacyEntityReference.FromBusinessKey("BK-2026-01");
Assert.Equal("BK-2026-01", reference.BusinessKey);
Assert.Equal("BK-2026-01", reference.PublicIdentifier);
}
[Fact]
public void PhysicalGuid_IsNotInterpretedAsGuid()
{
var reference = new LegacyEntityReference(DatabaseSchemaVersion.Batik, PhysicalGuid: "1A2B-étrange");
Assert.Equal(DatabaseSchemaVersion.Batik, reference.Source);
Assert.Null(reference.EntityGuid);
Assert.Equal("1A2B-étrange", reference.PhysicalGuid);
}
[Fact]
public void Reference_DoesNotCarryConnectionSecret()
{
var reference = LegacyEntityReference.FromLegacyId(7);
var publicProperties = reference.GetType().GetProperties();
Assert.DoesNotContain(publicProperties, p => p.Name.Contains("Password", StringComparison.Ordinal));
Assert.DoesNotContain(publicProperties, p => p.Name.Contains("ConnectionString", StringComparison.Ordinal));
Assert.DoesNotContain(publicProperties, p => p.Name.Contains("MotDePasse", StringComparison.Ordinal));
}
}
@@ -0,0 +1,47 @@
using Omika.Core.Compatibility;
namespace Omika.Tests.Compatibility;
/// <summary>
/// Tests de <see cref="SchemaCapabilities"/> : le code métier peut savoir si une
/// fonctionnalité est disponible selon la version de base, sans connaître la
/// structure physique.
/// </summary>
public class SchemaCapabilitiesTests
{
[Fact]
public void Batik_DoesNotSupportNewAppointmentModel()
{
SchemaCapabilities batik = SchemaCapabilities.ForBatik();
Assert.Equal(DatabaseSchemaVersion.Batik, batik.Version);
Assert.False(batik.SupportsNewAppointmentModel);
Assert.False(batik.SupportsBusinessKeys);
Assert.False(batik.SupportsRoles);
}
[Fact]
public void Omika_SupportsNewFeatures()
{
SchemaCapabilities omika = SchemaCapabilities.ForOmika();
Assert.Equal(DatabaseSchemaVersion.Omika, omika.Version);
Assert.True(omika.SupportsNewAppointmentModel);
Assert.True(omika.SupportsBusinessKeys);
Assert.True(omika.SupportsEntityGuids);
Assert.True(omika.SupportsRoles);
Assert.True(omika.SupportsModificationTracking);
Assert.True(omika.SupportsReportModels);
Assert.True(omika.SupportsDocumentFields);
}
[Fact]
public void Capabilities_AreConfigurablePerInstance()
{
var custom = SchemaCapabilities.ForBatik() with { SupportsRoles = true };
Assert.True(custom.SupportsRoles);
// L'instance de base n'est pas mutée (record immutable).
Assert.False(SchemaCapabilities.ForBatik().SupportsRoles);
}
}