98 lines
4.1 KiB
C#
98 lines
4.1 KiB
C#
using System.Reflection;
|
|
using Omika.Data.HfSql.Metadata;
|
|
|
|
namespace Omika.Tests;
|
|
|
|
/// <summary>
|
|
/// Tests de cohérence des modèles physiques HFSQL générés à partir du
|
|
/// dictionnaire de compatibilité Batik / Omika (docs/schema-compatibilite-batik-omika.json).
|
|
///
|
|
/// Ces tests valident que les classes générées portent bien leurs attributs
|
|
/// de mapping : nom de table, nom de fichier disque, clé primaire, rubriques
|
|
/// HFSQL physiques et marquage des rubriques « zombie ».
|
|
/// </summary>
|
|
public class HfSqlModelTests
|
|
{
|
|
[Theory]
|
|
[InlineData("Omika.Data.HfSql.Models.Omika.DocumentRow")]
|
|
[InlineData("Omika.Data.HfSql.Models.Omika.InterventionRow")]
|
|
[InlineData("Omika.Data.HfSql.Models.Omika.RDVPlanningRow")]
|
|
[InlineData("Omika.Data.HfSql.Models.Batik.DocumentRow")]
|
|
[InlineData("Omika.Data.HfSql.Models.Batik.InterventionRow")]
|
|
public void Model_HasHfSqlTableAttribute(string typeName)
|
|
{
|
|
Type? type = Type.GetType(typeName + ", Omika.Data");
|
|
Assert.NotNull(type);
|
|
|
|
HfSqlTableAttribute? attr = type!.GetCustomAttribute<HfSqlTableAttribute>();
|
|
Assert.NotNull(attr);
|
|
Assert.False(string.IsNullOrWhiteSpace(attr!.TableName));
|
|
}
|
|
|
|
[Fact]
|
|
public void OmikaDocumentRow_HasExpectedMapping()
|
|
{
|
|
Type type = typeof(Omika.Data.HfSql.Models.Omika.DocumentRow);
|
|
|
|
HfSqlTableAttribute? table = type.GetCustomAttribute<HfSqlTableAttribute>();
|
|
Assert.NotNull(table);
|
|
Assert.Equal("Document", table!.TableName);
|
|
Assert.Equal("Document.fic", table.DiskName);
|
|
Assert.Contains("ProtectionStd", table.Groups);
|
|
Assert.Contains("Omika", table.SchemaVersions);
|
|
|
|
PropertyInfo pk = type.GetProperty(nameof(Omika.Data.HfSql.Models.Omika.DocumentRow.DCPKID))
|
|
?? throw new InvalidOperationException("Propriété DCPKID introuvable.");
|
|
Assert.NotNull(pk.GetCustomAttribute<HfSqlPrimaryKeyAttribute>());
|
|
|
|
PropertyInfo zombie = type.GetProperty(nameof(Omika.Data.HfSql.Models.Omika.DocumentRow.DCCategorie))
|
|
?? throw new InvalidOperationException("Propriété DCCategorie introuvable.");
|
|
HfSqlColumnAttribute? column = zombie.GetCustomAttribute<HfSqlColumnAttribute>();
|
|
Assert.NotNull(column);
|
|
Assert.Equal("DC_Categorie", column!.ColumnName);
|
|
Assert.True(column.IsZombie);
|
|
Assert.NotNull(zombie.GetCustomAttribute<HfSqlLegacyFieldAttribute>());
|
|
}
|
|
|
|
[Fact]
|
|
public void OmikaDocumentRow_HasOmikaOnlyColumns()
|
|
{
|
|
Type type = typeof(Omika.Data.HfSql.Models.Omika.DocumentRow);
|
|
|
|
PropertyInfo cleCategorie = type.GetProperty(nameof(Omika.Data.HfSql.Models.Omika.DocumentRow.DCCleCategorie))
|
|
?? throw new InvalidOperationException("Propriété DCCleCategorie introuvable.");
|
|
HfSqlColumnAttribute? column = cleCategorie.GetCustomAttribute<HfSqlColumnAttribute>();
|
|
Assert.NotNull(column);
|
|
Assert.True(column!.IsOmikaOnly);
|
|
}
|
|
|
|
[Fact]
|
|
public void BatikInterventionCollaborateur_ExistsOnlyInBatik()
|
|
{
|
|
// La table Intervention_Collaborateur n'existe que dans l'ancienne base.
|
|
Type? batik = Type.GetType("Omika.Data.HfSql.Models.Batik.InterventionCollaborateurRow, Omika.Data");
|
|
Type? omika = Type.GetType("Omika.Data.HfSql.Models.Omika.InterventionCollaborateurRow, Omika.Data");
|
|
|
|
Assert.NotNull(batik);
|
|
Assert.Null(omika);
|
|
|
|
HfSqlTableAttribute? attr = batik!.GetCustomAttribute<HfSqlTableAttribute>();
|
|
Assert.NotNull(attr);
|
|
Assert.Equal(["Batik"], attr!.SchemaVersions);
|
|
}
|
|
|
|
[Fact]
|
|
public void OmikaOnlyTables_HaveNoBatikCounterpart()
|
|
{
|
|
string[] omikaOnly = ["DocAide", "CategorieAcces", "ElementModifie", "ElementSupprime",
|
|
"Etats", "ModeleRapport", "RDVCollaborateur", "RDVContact", "RDVPlanning", "Role", "RubriquesDocument"];
|
|
|
|
foreach (string table in omikaOnly)
|
|
{
|
|
string typeName = "Omika.Data.HfSql.Models.Omika." + table + "Row, Omika.Data";
|
|
Type? omikaType = Type.GetType(typeName);
|
|
Assert.NotNull(omikaType);
|
|
}
|
|
}
|
|
}
|