Skip to content

Commit

Permalink
Fixes #2508 Do not export calculation methods with Individual when th…
Browse files Browse the repository at this point in the history
…ere is only one possible value
  • Loading branch information
rwmcintosh committed Jan 11, 2023
1 parent 6300852 commit 95ea5df
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,13 @@
using PKSim.Presentation.DTO.Mappers;
using System.Collections.Generic;
using System.Linq;
using OSPSuite.Core.Qualification;
using OSPSuite.Utility.Extensions;
using PKSim.Core.Extensions;
using PKSim.Core.Repositories;
using static PKSim.Core.CoreConstants;
using CalculationMethod = OSPSuite.Core.Domain.CalculationMethod;
using Species = PKSim.Core.Model.Species;

namespace PKSim.Presentation.Mappers
{
Expand All @@ -19,11 +25,13 @@ public interface IIndividualToIndividualBuildingBlockMapper : IPathAndValueBuild
public class IndividualToIndividualBuildingBlockMapper : PathAndValueBuildingBlockMapper<Individual, IndividualBuildingBlock, IndividualParameter>, IIndividualToIndividualBuildingBlockMapper
{
private readonly ICalculationMethodToCategoryCalculationMethodDTOMapper _calculationMethodDTOMapper;
private readonly ICalculationMethodCategoryRepository _calculationMethodCategoryRepository;

public IndividualToIndividualBuildingBlockMapper(IObjectBaseFactory objectBaseFactory, IEntityPathResolver entityPathResolver, IApplicationConfiguration applicationConfiguration,
ILazyLoadTask lazyLoadTask, ICalculationMethodToCategoryCalculationMethodDTOMapper calculationMethodDTOMapper) : base(objectBaseFactory, entityPathResolver, applicationConfiguration, lazyLoadTask)
ILazyLoadTask lazyLoadTask, ICalculationMethodToCategoryCalculationMethodDTOMapper calculationMethodDTOMapper, ICalculationMethodCategoryRepository calculationMethodCategoryRepository) : base(objectBaseFactory, entityPathResolver, applicationConfiguration, lazyLoadTask)
{
_calculationMethodDTOMapper = calculationMethodDTOMapper;
_calculationMethodCategoryRepository = calculationMethodCategoryRepository;
}

protected override IReadOnlyList<IParameter> AllParametersFor(Individual individual)
Expand All @@ -46,13 +54,17 @@ public override IndividualBuildingBlock MapFrom(Individual input)
addOriginDataToBuildingBlock(buildingBlock, Assets.PKSimConstants.UI.Weight, input.OriginData.Weight);
addOriginDataToBuildingBlock(buildingBlock, Assets.PKSimConstants.UI.Population, input.OriginData.Population?.DisplayName);

input.OriginData.AllCalculationMethods().MapAllUsing(_calculationMethodDTOMapper)
input.OriginData.AllCalculationMethods().Where(cm => hasMoreThanOneOption(cm, input.Species)).MapAllUsing(_calculationMethodDTOMapper)
.Each(x => addOriginDataToBuildingBlock(buildingBlock, x.DisplayName, x.CategoryItem.DisplayName));

buildingBlock.OriginData.ValueOrigin = input.OriginData.ValueOrigin.Clone();

return buildingBlock;
}
private bool hasMoreThanOneOption(CalculationMethod calculationMethod, Species species)
{
return _calculationMethodCategoryRepository.FindBy(calculationMethod.Category).AllForSpecies(species).HasAtLeastTwo();
}

private void addOriginDataToBuildingBlock(IndividualBuildingBlock buildingBlock, string key, OriginDataParameter parameter)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
using OSPSuite.Core.Domain.Services;
using PKSim.Core;
using PKSim.Core.Model;
using PKSim.Core.Repositories;
using PKSim.Infrastructure;
using PKSim.Presentation.DTO;
using PKSim.Presentation.DTO.Mappers;
using PKSim.Presentation.Mappers;

Expand All @@ -22,6 +24,8 @@ public class concern_for_IndividualToIndividualBuildingBlockMapper : ContextSpec
private ILazyLoadTask _lazyLoadTask;
private ICalculationMethodToCategoryCalculationMethodDTOMapper _calculationMethodDTOMapper;
private EntityPathResolverForSpecs _objectPathFactory;
private ICalculationMethodCategoryRepository _calculationMethodCategoryRepository;
private static CalculationMethodCategory _category1;

protected override void Context()
{
Expand All @@ -30,25 +34,60 @@ protected override void Context()
_applicationConfiguration = new PKSimConfiguration();
_objectPathFactory = new EntityPathResolverForSpecs();
_objectBaseFactory = A.Fake<IObjectBaseFactory>();
_calculationMethodDTOMapper = A.Fake<ICalculationMethodToCategoryCalculationMethodDTOMapper>();
var representationInfoRepository = A.Fake<IRepresentationInfoRepository>();
_calculationMethodDTOMapper = new CalculationMethodToCategoryCalculationMethodDTOMapper(representationInfoRepository);
A.CallTo(() => representationInfoRepository.InfoFor(A<RepresentationObjectType>._, A<string>._)).Returns(new RepresentationInfo { DisplayName = "displayName" });

_calculationMethodCategoryRepository = A.Fake<ICalculationMethodCategoryRepository>();
updateOriginDataForTest(_individual.OriginData);

A.CallTo(() => _objectBaseFactory.Create<IndividualBuildingBlock>()).Returns(new IndividualBuildingBlock());
A.CallTo(() => _objectBaseFactory.Create<IndividualParameter>()).Returns(new IndividualParameter());
sut = new IndividualToIndividualBuildingBlockMapper(_objectBaseFactory, _objectPathFactory, _applicationConfiguration, _lazyLoadTask, _calculationMethodDTOMapper);
sut = new IndividualToIndividualBuildingBlockMapper(_objectBaseFactory, _objectPathFactory, _applicationConfiguration, _lazyLoadTask, _calculationMethodDTOMapper, _calculationMethodCategoryRepository);
}

private static void updateOriginDataForTest(OriginData originData)
private void updateOriginDataForTest(OriginData originData)
{
originData.Gender.DisplayName = originData.Gender.Name;
originData.Population.DisplayName = originData.Population.Name;
originData.Age = new OriginDataParameter(1, "year", "Age");
originData.GestationalAge = new OriginDataParameter(52, "weeks", "Gestational Age");

_category1 = new CalculationMethodCategory();


var calculationMethod = new CalculationMethod
{
DisplayName = "method1",
Category = "category1",
};
calculationMethod.AddSpecies(_individual.Species.Name);

originData.CalculationMethodCache.AddCalculationMethod(calculationMethod);
_category1.Add(calculationMethod);

calculationMethod = new CalculationMethod
{
DisplayName = "method2",
Category = "category1",
};
calculationMethod.AddSpecies(_individual.Species.Name);

_category1.Add(calculationMethod);

calculationMethod = new CalculationMethod
{
Category = "category2",
Name = "calculationMethod1"

};
originData.CalculationMethodCache.AddCalculationMethod(calculationMethod);
originData.DiseaseState = new DiseaseState
{
DisplayName = "A Disease"
};

A.CallTo(() => _calculationMethodCategoryRepository.FindBy("category1")).Returns(_category1);
}
}

Expand All @@ -75,6 +114,9 @@ public void the_properties_of_the_building_block_should_match()
// the count is 0 here because we intentionally left these out to make sure only populated origin data would be mapped
_buildingBlock.OriginData.AllDataItems.Count(x => x.Name.Equals("Height")).ShouldBeEqualTo(0);
_buildingBlock.OriginData.AllDataItems.Count(x => x.Name.Equals("BMI")).ShouldBeEqualTo(0);

_buildingBlock.OriginData.AllDataItems.Count(x => x.Name.Equals("displayName")).ShouldBeEqualTo(1);
_buildingBlock.OriginData.AllDataItems.Count.ShouldBeEqualTo(8);
}
}
}

0 comments on commit 95ea5df

Please sign in to comment.