using Omika.Core.Contracts.Clients; using Omika.Core.Contracts.Common; namespace Omika.Tests.Contracts; /// /// Tests des contrats Clients : séparation liste / détail / création / /// modification et absence de champs physiques. /// public class ClientContractTests { [Fact] public void ClientSummaryDto_ContainsOnlyListFields() { var summary = new ClientSummaryDto { Id = "CL-001", Code = "C001", Nom = "Ville de Lyon", Type = "Collectivité", Statut = "Actif", Ville = "Lyon", Telephone = "04 00 00 00 00", EstBloque = false, EstArchive = false }; Assert.Equal("CL-001", summary.Id); Assert.Equal("Ville de Lyon", summary.Nom); Assert.False(summary.EstArchive); } [Fact] public void ClientDetailsDto_CanHoldCollections() { var details = new ClientDetailsDto { Id = "CL-001", Nom = "Ville de Lyon", Adresses = [new AdresseDto { Id = "AD-1", Etiquette = "Mairie" }], Contacts = [new ContactDto { Id = "CT-1", Nom = "Dupont", Prenom = "Jean" }], Sites = [new SiteDto { Id = "ST-1", Nom = "Hôtel de ville" }] }; Assert.Single(details.Adresses); Assert.Single(details.Contacts); Assert.Single(details.Sites); Assert.Equal("Hôtel de ville", details.Sites[0].Nom); } [Fact] public void CreateClientRequest_DoesNotAcceptPhysicalIdOrAuditFields() { var request = new CreateClientRequest { Nom = "Client test" }; Assert.Null(request.AdressePrincipale); Assert.Null(request.Coordonnees); // Aucune propriété d'audit ou identifiant physique ne doit être acceptée. foreach (var property in typeof(CreateClientRequest).GetProperties()) { Assert.DoesNotContain("Pkid", property.Name, StringComparison.OrdinalIgnoreCase); Assert.DoesNotContain("DateCreation", property.Name, StringComparison.OrdinalIgnoreCase); Assert.DoesNotContain("ModifiePar", property.Name, StringComparison.OrdinalIgnoreCase); } } [Fact] public void UpdateClientRequest_AllowsOptionalBloquage() { var request = new UpdateClientRequest { Nom = "Renommé", EstBloque = true }; Assert.True(request.EstBloque); Assert.Equal("Renommé", request.Nom); } [Fact] public void SearchClientsRequest_HasNoPhysicalPrefix() { var request = new SearchClientsRequest { Nom = "Lyon", Statut = "Actif" }; Assert.Equal("Lyon", request.Nom); Assert.Equal("Actif", request.Statut); } }