85 lines
3.0 KiB
C#
85 lines
3.0 KiB
C#
using Omika.Core.Domain.Entities.Clients;
|
|
using Omika.Data.HfSql.Mapping;
|
|
using Omika.Data.Mapping.Batik;
|
|
using BatikClientRow = Omika.Data.HfSql.Models.Batik.ClientRow;
|
|
|
|
namespace Omika.Tests.HfSql.Mapping;
|
|
|
|
/// <summary>
|
|
/// Test de bout en bout du pipeline de lecture Client sans base réelle :
|
|
/// résultat tabulaire simulé (dictionnaire colonne → valeur, comme le
|
|
/// retournerait <c>IHfsqlConnection.QueryAsync</c>) → <see cref="HfsqlRowMapper"/>
|
|
/// → <see cref="BatikClientMapper"/> → <see cref="Client"/> canonique.
|
|
///
|
|
/// Aucun ODBC, aucun HFSQL, aucune base : uniquement des objets en mémoire.
|
|
/// </summary>
|
|
public class HfsqlRowMapperPipelineTests
|
|
{
|
|
[Fact]
|
|
public void Pipeline_SimulatedSqlResult_ToCanonicalClient()
|
|
{
|
|
// 1. Résultat tabulaire simulé (ce que QueryAsync retournerait).
|
|
var sqlRow = new Dictionary<string, object?>
|
|
{
|
|
["CL_PKID"] = 42L,
|
|
["CL_Nom"] = "Ville de Lyon",
|
|
["CL_CodeClient"] = "C001",
|
|
["CL_CodeTVA"] = "FR123456789",
|
|
["CL_SIREN"] = "123456789",
|
|
["CL_SIRET"] = "12345678900012",
|
|
["CL_Blocage"] = true,
|
|
["CL_RaisonBlocage"] = "Litige en cours",
|
|
["Archive"] = false,
|
|
["CL_Email"] = "contact@lyon.fr",
|
|
["CL_Tel"] = "0472000000"
|
|
};
|
|
|
|
// 2. Résultat tabulaire → Row physique Batik.
|
|
BatikClientRow row = HfsqlRowMapper.Map<BatikClientRow>(sqlRow);
|
|
|
|
Assert.Equal(42L, row.CLPKID);
|
|
Assert.Equal("Ville de Lyon", row.CLNom);
|
|
Assert.Equal("C001", row.CLCodeClient);
|
|
Assert.True(row.CLBlocage);
|
|
|
|
// 3. Row physique → Client canonique (mapper Batik existant).
|
|
var result = BatikClientMapper.Map(row);
|
|
|
|
Client client = result.Value;
|
|
|
|
Assert.Equal("C001", client.Code);
|
|
Assert.Equal("Ville de Lyon", client.Nom);
|
|
Assert.Equal("FR123456789", client.CodeTva);
|
|
Assert.Equal("123456789", client.Siren);
|
|
Assert.Equal("12345678900012", client.Siret);
|
|
Assert.True(client.EstBloque);
|
|
Assert.Equal("Litige en cours", client.RaisonBlocage);
|
|
Assert.False(client.EstArchive);
|
|
Assert.NotNull(client.Coordonnees);
|
|
Assert.Equal("contact@lyon.fr", client.Coordonnees!.Email);
|
|
Assert.Equal("0472000000", client.Coordonnees!.Phone);
|
|
}
|
|
|
|
[Fact]
|
|
public void Pipeline_SimulatedSqlResult_WithMissingColumns_StillMaps()
|
|
{
|
|
// Un SELECT ciblé (liste) ne ramène que quelques colonnes.
|
|
var sqlRow = new Dictionary<string, object?>
|
|
{
|
|
["CL_PKID"] = 7L,
|
|
["CL_Nom"] = "Mairie de Paris"
|
|
};
|
|
|
|
BatikClientRow row = HfsqlRowMapper.Map<BatikClientRow>(sqlRow);
|
|
var result = BatikClientMapper.Map(row);
|
|
|
|
Client client = result.Value;
|
|
|
|
Assert.Equal(7L, row.CLPKID);
|
|
Assert.Equal("Mairie de Paris", client.Nom);
|
|
Assert.Null(client.Code);
|
|
Assert.Null(client.Coordonnees);
|
|
Assert.False(client.EstBloque);
|
|
}
|
|
}
|