Premiere commit - Omika
This commit is contained in:
@@ -0,0 +1,258 @@
|
||||
using Omika.Core.Compatibility;
|
||||
using Omika.Core.Domain.Entities.Planning;
|
||||
using Omika.Core.Domain.ValueObjects;
|
||||
using OmikaModels = Omika.Data.HfSql.Models.Omika;
|
||||
using OmikaMappers = Omika.Data.Mapping.Omika;
|
||||
|
||||
namespace Omika.Tests.Mapping;
|
||||
|
||||
/// <summary>
|
||||
/// Tests unitaires du mapping Omika de l'affectation Collaborateur d'un
|
||||
/// rendez-vous (table RDV_Collaborateur). Aucune base réelle : uniquement des
|
||||
/// objets en mémoire.
|
||||
/// </summary>
|
||||
public class OmikaRendezVousMapperTests
|
||||
{
|
||||
[Fact]
|
||||
public void MapCollaborateur_DateFinAnterieureADateDeb_NeLevePasEtPeriodeNull()
|
||||
{
|
||||
var row = new OmikaModels.RDVCollaborateurRow
|
||||
{
|
||||
RVCPKID = 1,
|
||||
RVCGUIDColb = "0f8fad5b-d9cb-469f-a165-70867728950e",
|
||||
RVCDateDeb = new DateTime(2026, 8, 19, 10, 0, 0),
|
||||
RVCDateFin = new DateTime(2026, 8, 19, 9, 0, 0), // antérieure → anomalie historique
|
||||
RVCResponsable = true,
|
||||
RVCTempsValide = true
|
||||
};
|
||||
|
||||
// Aucune DomainValidationException ne doit remonter.
|
||||
AffectationCollaborateur affectation = OmikaMappers.OmikaRendezVousMapper.MapCollaborateur(row);
|
||||
|
||||
Assert.NotNull(affectation);
|
||||
Assert.Null(affectation.PeriodeParticuliere);
|
||||
// L'affectation elle-même est conservée (identifiant + flags).
|
||||
Assert.NotNull(affectation.CollaborateurId);
|
||||
Assert.True(affectation.Responsable);
|
||||
Assert.True(affectation.TempsValide);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MapCollaborateur_PlageValide_PeriodeMappee()
|
||||
{
|
||||
var debut = new DateTime(2026, 8, 19, 9, 0, 0);
|
||||
var fin = new DateTime(2026, 8, 19, 10, 0, 0);
|
||||
var row = new OmikaModels.RDVCollaborateurRow
|
||||
{
|
||||
RVCDateDeb = debut,
|
||||
RVCDateFin = fin
|
||||
};
|
||||
|
||||
AffectationCollaborateur affectation = OmikaMappers.OmikaRendezVousMapper.MapCollaborateur(row);
|
||||
|
||||
Assert.NotNull(affectation.PeriodeParticuliere);
|
||||
Assert.Equal(debut, affectation.PeriodeParticuliere!.Start);
|
||||
Assert.Equal(fin, affectation.PeriodeParticuliere.End);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MapCollaborateur_DateEgale_PeriodeMappee()
|
||||
{
|
||||
var instant = new DateTime(2026, 8, 19, 9, 0, 0);
|
||||
var row = new OmikaModels.RDVCollaborateurRow
|
||||
{
|
||||
RVCDateDeb = instant,
|
||||
RVCDateFin = instant
|
||||
};
|
||||
|
||||
AffectationCollaborateur affectation = OmikaMappers.OmikaRendezVousMapper.MapCollaborateur(row);
|
||||
|
||||
Assert.NotNull(affectation.PeriodeParticuliere);
|
||||
Assert.Equal(instant, affectation.PeriodeParticuliere!.Start);
|
||||
Assert.Equal(instant, affectation.PeriodeParticuliere.End);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MapCollaborateur_DatesParDefaut_PeriodeNull()
|
||||
{
|
||||
var row = new OmikaModels.RDVCollaborateurRow
|
||||
{
|
||||
RVCDateDeb = default,
|
||||
RVCDateFin = default
|
||||
};
|
||||
|
||||
AffectationCollaborateur affectation = OmikaMappers.OmikaRendezVousMapper.MapCollaborateur(row);
|
||||
|
||||
Assert.Null(affectation.PeriodeParticuliere);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MapCollaborateur_PkNumeriqueFourni_SourceReferencePorteNumericIdEtEntityGuid()
|
||||
{
|
||||
Guid guid = Guid.Parse("0f8fad5b-d9cb-469f-a165-70867728950e");
|
||||
var row = new OmikaModels.RDVCollaborateurRow
|
||||
{
|
||||
RVCGUIDColb = guid.ToString("D")
|
||||
};
|
||||
|
||||
AffectationCollaborateur affectation =
|
||||
OmikaMappers.OmikaRendezVousMapper.MapCollaborateur(row, collaborateurNumericId: 42);
|
||||
|
||||
Assert.NotNull(affectation.SourceReference);
|
||||
Assert.Equal(42, affectation.SourceReference!.NumericId);
|
||||
Assert.Equal(guid, affectation.SourceReference.EntityGuid);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MapCollaborateur_SansPkNumerique_SourceReferenceSansNumericId()
|
||||
{
|
||||
Guid guid = Guid.Parse("0f8fad5b-d9cb-469f-a165-70867728950e");
|
||||
var row = new OmikaModels.RDVCollaborateurRow
|
||||
{
|
||||
RVCGUIDColb = guid.ToString("D")
|
||||
};
|
||||
|
||||
AffectationCollaborateur affectation =
|
||||
OmikaMappers.OmikaRendezVousMapper.MapCollaborateur(row);
|
||||
|
||||
Assert.NotNull(affectation.SourceReference);
|
||||
Assert.Null(affectation.SourceReference!.NumericId);
|
||||
Assert.Equal(guid, affectation.SourceReference.EntityGuid);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Map_RVIdInterPresent_InterventionSourceReferenceAvecGUID()
|
||||
{
|
||||
var interventionGuid = Guid.Parse("11111111-1111-1111-1111-111111111111");
|
||||
var row = new OmikaModels.RDVPlanningRow
|
||||
{
|
||||
RVPKID = 1,
|
||||
GUID = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
||||
RVDate = new DateOnly(2026, 8, 19),
|
||||
RVIdInter = 105
|
||||
};
|
||||
var interventionGuids = new Dictionary<long, Guid> { [105] = interventionGuid };
|
||||
|
||||
CanonicalMappingResult<RendezVous> mapped =
|
||||
OmikaMappers.OmikaRendezVousMapper.Map(row, null, interventionGuids);
|
||||
|
||||
Assert.NotNull(mapped.Value.InterventionSourceReference);
|
||||
Assert.Equal(105, mapped.Value.InterventionSourceReference.NumericId);
|
||||
Assert.Equal(interventionGuid, mapped.Value.InterventionSourceReference.EntityGuid);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Map_RVIdInterAbsent_InterventionSourceReferenceNull()
|
||||
{
|
||||
var row = new OmikaModels.RDVPlanningRow
|
||||
{
|
||||
RVPKID = 1,
|
||||
GUID = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
||||
RVDate = new DateOnly(2026, 8, 19),
|
||||
RVIdInter = 0
|
||||
};
|
||||
|
||||
CanonicalMappingResult<RendezVous> mapped =
|
||||
OmikaMappers.OmikaRendezVousMapper.Map(row, null, null);
|
||||
|
||||
Assert.Null(mapped.Value.InterventionSourceReference);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Map_RVIdInterOrphelin_InterventionSourceReferenceSansGUID()
|
||||
{
|
||||
var row = new OmikaModels.RDVPlanningRow
|
||||
{
|
||||
RVPKID = 1,
|
||||
GUID = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
||||
RVDate = new DateOnly(2026, 8, 19),
|
||||
RVIdInter = 999
|
||||
};
|
||||
|
||||
CanonicalMappingResult<RendezVous> mapped =
|
||||
OmikaMappers.OmikaRendezVousMapper.Map(row, null, new Dictionary<long, Guid>());
|
||||
|
||||
Assert.NotNull(mapped.Value.InterventionSourceReference);
|
||||
Assert.Equal(999, mapped.Value.InterventionSourceReference.NumericId);
|
||||
Assert.Null(mapped.Value.InterventionSourceReference.EntityGuid);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Map_AnnulationAvecReferentiel_LibellesOrigineEtMotifResolus()
|
||||
{
|
||||
// La fiche du rendez-vous affiche le motif et l'origine d'annulation : sans
|
||||
// résolution dans le référentiel, elle n'afficherait que le CODE du
|
||||
// paramètre (« O.ANU.RDV.E.CLI ») au lieu de son libellé.
|
||||
var row = new OmikaModels.RDVPlanningRow
|
||||
{
|
||||
RVPKID = 7,
|
||||
GUID = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
||||
RVDate = new DateOnly(2026, 8, 19),
|
||||
RVCleOrigineAnnu = "O.ANU.RDV.E.CLI",
|
||||
RVCleMotifAnnu = "M.ANU.RDV.ABS"
|
||||
};
|
||||
|
||||
var references = new Dictionary<string, OmikaModels.ParametreMetierRow>(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
["O.ANU.RDV.E.CLI"] = new OmikaModels.ParametreMetierRow
|
||||
{
|
||||
PAPKID = 10,
|
||||
PACLE = "O.ANU.RDV.E.CLI",
|
||||
PACategorie = "O.ANU.RDV",
|
||||
PALibelle = "Externe : Client"
|
||||
},
|
||||
["M.ANU.RDV.ABS"] = new OmikaModels.ParametreMetierRow
|
||||
{
|
||||
PAPKID = 11,
|
||||
PACLE = "M.ANU.RDV.ABS",
|
||||
PACategorie = "M.ANU.RDV",
|
||||
PALibelle = "Absent"
|
||||
}
|
||||
};
|
||||
|
||||
CanonicalMappingResult<RendezVous> mapped =
|
||||
OmikaMappers.OmikaRendezVousMapper.Map(row, references, null);
|
||||
|
||||
Assert.NotNull(mapped.Value.Annulation);
|
||||
Assert.Equal("O.ANU.RDV.E.CLI", mapped.Value.Annulation!.Origine!.Key);
|
||||
Assert.Equal("Externe : Client", mapped.Value.Annulation.Origine!.Label);
|
||||
Assert.Equal("M.ANU.RDV.ABS", mapped.Value.Annulation.Motif!.Key);
|
||||
Assert.Equal("Absent", mapped.Value.Annulation.Motif!.Label);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Map_AnnulationSansReferentiel_ConserveLaCleSansInventerDeLibelle()
|
||||
{
|
||||
var row = new OmikaModels.RDVPlanningRow
|
||||
{
|
||||
RVPKID = 8,
|
||||
GUID = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
||||
RVDate = new DateOnly(2026, 8, 19),
|
||||
RVCleMotifAnnu = "M.ANU.RDV.ABS"
|
||||
};
|
||||
|
||||
CanonicalMappingResult<RendezVous> mapped =
|
||||
OmikaMappers.OmikaRendezVousMapper.Map(row, null, null);
|
||||
|
||||
Assert.NotNull(mapped.Value.Annulation);
|
||||
Assert.Equal("M.ANU.RDV.ABS", mapped.Value.Annulation!.Motif!.Key);
|
||||
Assert.True(string.IsNullOrEmpty(mapped.Value.Annulation.Motif!.Label));
|
||||
Assert.Null(mapped.Value.Annulation.Origine);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Map_SansAnnulation_AucuneAnnulation()
|
||||
{
|
||||
var row = new OmikaModels.RDVPlanningRow
|
||||
{
|
||||
RVPKID = 9,
|
||||
GUID = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
||||
RVDate = new DateOnly(2026, 8, 19)
|
||||
};
|
||||
|
||||
CanonicalMappingResult<RendezVous> mapped =
|
||||
OmikaMappers.OmikaRendezVousMapper.Map(row, null, null);
|
||||
|
||||
Assert.Null(mapped.Value.Annulation);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user