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; /// /// Test de bout en bout du pipeline de lecture Client sans base réelle : /// résultat tabulaire simulé (dictionnaire colonne → valeur, comme le /// retournerait IHfsqlConnection.QueryAsync) → /// → → canonique. /// /// Aucun ODBC, aucun HFSQL, aucune base : uniquement des objets en mémoire. /// public class HfsqlRowMapperPipelineTests { [Fact] public void Pipeline_SimulatedSqlResult_ToCanonicalClient() { // 1. Résultat tabulaire simulé (ce que QueryAsync retournerait). var sqlRow = new Dictionary { ["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(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 { ["CL_PKID"] = 7L, ["CL_Nom"] = "Mairie de Paris" }; BatikClientRow row = HfsqlRowMapper.Map(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); } }