86 lines
2.7 KiB
C#
86 lines
2.7 KiB
C#
using Omika.Core.Contracts.Clients;
|
|
using Omika.Core.Contracts.Common;
|
|
|
|
namespace Omika.Tests.Contracts;
|
|
|
|
/// <summary>
|
|
/// Tests des contrats Clients : séparation liste / détail / création /
|
|
/// modification et absence de champs physiques.
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|