Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Read/HydraulicLocationEntityReadExtensions.cs =================================================================== diff -u -rc0532d07766ecad2566f7cfa4a97a9aeb6e8540c -r6bd6ee164acfd7946a2c17b697d16f4ad42a7732 --- Application/Ringtoets/src/Application.Ringtoets.Storage/Read/HydraulicLocationEntityReadExtensions.cs (.../HydraulicLocationEntityReadExtensions.cs) (revision c0532d07766ecad2566f7cfa4a97a9aeb6e8540c) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Read/HydraulicLocationEntityReadExtensions.cs (.../HydraulicLocationEntityReadExtensions.cs) (revision 6bd6ee164acfd7946a2c17b697d16f4ad42a7732) @@ -45,10 +45,12 @@ { throw new ArgumentNullException(nameof(entity)); } + if (collector == null) { throw new ArgumentNullException(nameof(collector)); } + if (collector.Contains(entity)) { return collector.Get(entity); @@ -59,46 +61,49 @@ entity.LocationX.ToNullAsNaN(), entity.LocationY.ToNullAsNaN()); - SetDesignWaterLevelCalculation(entity, hydraulicBoundaryLocation.DesignWaterLevelCalculation1); - SetWaveHeightCalculation(entity, hydraulicBoundaryLocation.WaveHeightCalculation1); + SetDesignWaterLevelCalculations(entity, hydraulicBoundaryLocation); + SetWaveHeightCalculations(entity, hydraulicBoundaryLocation); collector.Read(entity, hydraulicBoundaryLocation); return hydraulicBoundaryLocation; } - private static void SetWaveHeightCalculation(HydraulicLocationEntity entity, - HydraulicBoundaryLocationCalculation waveHeightCalculation) + private static void SetDesignWaterLevelCalculations(HydraulicLocationEntity entity, HydraulicBoundaryLocation hydraulicBoundaryLocation) { - waveHeightCalculation.InputParameters.ShouldIllustrationPointsBeCalculated = - Convert.ToBoolean(entity.ShouldWaveHeightIllustrationPointsBeCalculated); + SetHydraulicBoundaryLocationsCalculations(entity.HydraulicLocationCalculationEntity, + hydraulicBoundaryLocation.DesignWaterLevelCalculation1); + SetHydraulicBoundaryLocationsCalculations(entity.HydraulicLocationCalculationEntity1, + hydraulicBoundaryLocation.DesignWaterLevelCalculation2); + SetHydraulicBoundaryLocationsCalculations(entity.HydraulicLocationCalculationEntity2, + hydraulicBoundaryLocation.DesignWaterLevelCalculation3); + SetHydraulicBoundaryLocationsCalculations(entity.HydraulicLocationCalculationEntity3, + hydraulicBoundaryLocation.DesignWaterLevelCalculation4); + } - IHydraulicLocationOutputEntity waveHeightOutputEntity = - GetHydraulicLocationOutputEntity(entity, HydraulicLocationOutputType.WaveHeight); - if (waveHeightOutputEntity != null) - { - waveHeightCalculation.Output = waveHeightOutputEntity.Read(); - } + private static void SetWaveHeightCalculations(HydraulicLocationEntity entity, HydraulicBoundaryLocation hydraulicBoundaryLocation) + { + SetHydraulicBoundaryLocationsCalculations(entity.HydraulicLocationCalculationEntity4, + hydraulicBoundaryLocation.WaveHeightCalculation1); + SetHydraulicBoundaryLocationsCalculations(entity.HydraulicLocationCalculationEntity5, + hydraulicBoundaryLocation.WaveHeightCalculation2); + SetHydraulicBoundaryLocationsCalculations(entity.HydraulicLocationCalculationEntity6, + hydraulicBoundaryLocation.WaveHeightCalculation3); + SetHydraulicBoundaryLocationsCalculations(entity.HydraulicLocationCalculationEntity7, + hydraulicBoundaryLocation.WaveHeightCalculation4); } - private static void SetDesignWaterLevelCalculation(HydraulicLocationEntity entity, - HydraulicBoundaryLocationCalculation designWaterLevelCalculation) + private static void SetHydraulicBoundaryLocationsCalculations(HydraulicLocationCalculationEntity entity, + HydraulicBoundaryLocationCalculation calculation) { - designWaterLevelCalculation.InputParameters.ShouldIllustrationPointsBeCalculated = - Convert.ToBoolean(entity.ShouldDesignWaterLevelIllustrationPointsBeCalculated); + calculation.InputParameters.ShouldIllustrationPointsBeCalculated = + Convert.ToBoolean(entity.ShouldIllustrationPointsBeCalculated); - IHydraulicLocationOutputEntity designWaterLevelOutputEntity = - GetHydraulicLocationOutputEntity(entity, HydraulicLocationOutputType.DesignWaterLevel); - if (designWaterLevelOutputEntity != null) + HydraulicLocationOutputEntity outputEntity = entity.HydraulicLocationOutputEntities.SingleOrDefault(); + if (outputEntity != null) { - designWaterLevelCalculation.Output = designWaterLevelOutputEntity.Read(); + calculation.Output = outputEntity.Read(); } } - - private static IHydraulicLocationOutputEntity GetHydraulicLocationOutputEntity( - HydraulicLocationEntity entity, HydraulicLocationOutputType outputType) - { - return entity.HydraulicLocationOutputEntities.SingleOrDefault(e => e.HydraulicLocationOutputType == (byte) outputType); - } } } \ No newline at end of file Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/HydraulicLocationEntityReadExtensionsTest.cs =================================================================== diff -u -rcfc1ad28f543ae8ee0cb46ebb2767dc15de4493c -r6bd6ee164acfd7946a2c17b697d16f4ad42a7732 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/HydraulicLocationEntityReadExtensionsTest.cs (.../HydraulicLocationEntityReadExtensionsTest.cs) (revision cfc1ad28f543ae8ee0cb46ebb2767dc15de4493c) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/HydraulicLocationEntityReadExtensionsTest.cs (.../HydraulicLocationEntityReadExtensionsTest.cs) (revision 6bd6ee164acfd7946a2c17b697d16f4ad42a7732) @@ -61,24 +61,29 @@ } [Test] - public void Read_WithCollector_ReturnsHydraulicBoundaryLocationWithPropertiesSetAndEntityRegistered() + public void Read_WithCollectorAndEntitiesWithoutOutput_ReturnsHydraulicBoundaryLocationWithPropertiesSetAndEntityRegistered() { // Setup var random = new Random(21); long testId = random.Next(0, 400); const string testName = "testName"; double x = random.NextDouble(); double y = random.NextDouble(); - bool shouldDesignWaterLevelIllustrationPointsBeCalculated = random.NextBoolean(); - bool shouldWaveHeightIllustrationPointsBeCalculated = random.NextBoolean(); + var entity = new HydraulicLocationEntity { LocationId = testId, Name = testName, LocationX = x, LocationY = y, - ShouldDesignWaterLevelIllustrationPointsBeCalculated = Convert.ToByte(shouldDesignWaterLevelIllustrationPointsBeCalculated), - ShouldWaveHeightIllustrationPointsBeCalculated = Convert.ToByte(shouldWaveHeightIllustrationPointsBeCalculated) + HydraulicLocationCalculationEntity = CreateCalculationEntity(random.Next()), + HydraulicLocationCalculationEntity1 = CreateCalculationEntity(random.Next()), + HydraulicLocationCalculationEntity2 = CreateCalculationEntity(random.Next()), + HydraulicLocationCalculationEntity3 = CreateCalculationEntity(random.Next()), + HydraulicLocationCalculationEntity4 = CreateCalculationEntity(random.Next()), + HydraulicLocationCalculationEntity5 = CreateCalculationEntity(random.Next()), + HydraulicLocationCalculationEntity6 = CreateCalculationEntity(random.Next()), + HydraulicLocationCalculationEntity7 = CreateCalculationEntity(random.Next()) }; var collector = new ReadConversionCollector(); @@ -93,13 +98,23 @@ Assert.AreEqual(x, location.Location.X, 1e-6); Assert.AreEqual(y, location.Location.Y, 1e-6); - HydraulicBoundaryLocationCalculation designWaterLevelCalculation = location.DesignWaterLevelCalculation1; - Assert.AreEqual(shouldDesignWaterLevelIllustrationPointsBeCalculated, designWaterLevelCalculation.InputParameters.ShouldIllustrationPointsBeCalculated); - Assert.IsFalse(designWaterLevelCalculation.HasOutput); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity, + location.DesignWaterLevelCalculation1); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity1, + location.DesignWaterLevelCalculation2); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity2, + location.DesignWaterLevelCalculation3); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity3, + location.DesignWaterLevelCalculation4); - HydraulicBoundaryLocationCalculation waveHeightCalculation = location.WaveHeightCalculation1; - Assert.AreEqual(shouldWaveHeightIllustrationPointsBeCalculated, waveHeightCalculation.InputParameters.ShouldIllustrationPointsBeCalculated); - Assert.IsFalse(waveHeightCalculation.HasOutput); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity4, + location.WaveHeightCalculation1); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity5, + location.WaveHeightCalculation2); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity6, + location.WaveHeightCalculation3); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity7, + location.WaveHeightCalculation4); Assert.IsTrue(collector.Contains(entity)); } @@ -109,41 +124,17 @@ { // Setup var random = new Random(21); - double designWaterLevel = random.NextDouble(); - double waveHeight = random.NextDouble(); - var designWaterLevelOutputEntity = new HydraulicLocationOutputEntity - { - HydraulicLocationOutputType = (byte) HydraulicLocationOutputType.DesignWaterLevel, - Result = designWaterLevel, - TargetProbability = random.NextDouble(), - TargetReliability = random.NextDouble(), - CalculatedProbability = random.NextDouble(), - CalculatedReliability = random.NextDouble(), - CalculationConvergence = (byte) CalculationConvergence.NotCalculated - }; - var waveHeightOutputEntity = new HydraulicLocationOutputEntity - { - HydraulicLocationOutputType = (byte) HydraulicLocationOutputType.WaveHeight, - Result = waveHeight, - TargetProbability = random.NextDouble(), - TargetReliability = random.NextDouble(), - CalculatedProbability = random.NextDouble(), - CalculatedReliability = random.NextDouble(), - CalculationConvergence = (byte) CalculationConvergence.NotCalculated - }; - - bool shouldDesignWaterLevelIllustrationPointsBeCalculated = random.NextBoolean(); - bool shouldWaveHeightIllustrationPointsBeCalculated = random.NextBoolean(); var entity = new HydraulicLocationEntity { Name = "someName", - ShouldDesignWaterLevelIllustrationPointsBeCalculated = Convert.ToByte(shouldDesignWaterLevelIllustrationPointsBeCalculated), - ShouldWaveHeightIllustrationPointsBeCalculated = Convert.ToByte(shouldWaveHeightIllustrationPointsBeCalculated), - HydraulicLocationOutputEntities = - { - designWaterLevelOutputEntity, - waveHeightOutputEntity - } + HydraulicLocationCalculationEntity = CreateCalculationEntityWithOutputEntity(random.Next()), + HydraulicLocationCalculationEntity1 = CreateCalculationEntityWithOutputEntity(random.Next()), + HydraulicLocationCalculationEntity2 = CreateCalculationEntityWithOutputEntity(random.Next()), + HydraulicLocationCalculationEntity3 = CreateCalculationEntityWithOutputEntity(random.Next()), + HydraulicLocationCalculationEntity4 = CreateCalculationEntityWithOutputEntity(random.Next()), + HydraulicLocationCalculationEntity5 = CreateCalculationEntityWithOutputEntity(random.Next()), + HydraulicLocationCalculationEntity6 = CreateCalculationEntityWithOutputEntity(random.Next()), + HydraulicLocationCalculationEntity7 = CreateCalculationEntityWithOutputEntity(random.Next()) }; var collector = new ReadConversionCollector(); @@ -154,71 +145,41 @@ // Assert Assert.IsNotNull(location); - HydraulicBoundaryLocationCalculation designWaterLevelCalculation = location.DesignWaterLevelCalculation1; - Assert.AreEqual(shouldDesignWaterLevelIllustrationPointsBeCalculated, designWaterLevelCalculation.InputParameters.ShouldIllustrationPointsBeCalculated); - AssertHydraulicBoundaryLocationOutput(designWaterLevelOutputEntity, designWaterLevelCalculation.Output); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity, + location.DesignWaterLevelCalculation1); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity1, + location.DesignWaterLevelCalculation2); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity2, + location.DesignWaterLevelCalculation3); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity3, + location.DesignWaterLevelCalculation4); - HydraulicBoundaryLocationCalculation waveHeightCalculation = location.WaveHeightCalculation1; - Assert.AreEqual(shouldWaveHeightIllustrationPointsBeCalculated, waveHeightCalculation.InputParameters.ShouldIllustrationPointsBeCalculated); - AssertHydraulicBoundaryLocationOutput(waveHeightOutputEntity, waveHeightCalculation.Output); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity4, + location.WaveHeightCalculation1); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity5, + location.WaveHeightCalculation2); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity6, + location.WaveHeightCalculation3); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity7, + location.WaveHeightCalculation4); } [Test] public void Read_WithOutputAndIllustrationPoints_ReturnHydraulicBoundaryLocationWithExpectedOutputAndIllustrationPoints() { // Setup var random = new Random(21); - - const string windDirectionName = "Some wind direction"; - double windDirectionAngle = random.NextDouble(); - var designWaterLevelIllustrationPointEntity = new GeneralResultSubMechanismIllustrationPointEntity - { - GoverningWindDirectionName = windDirectionName, - GoverningWindDirectionAngle = windDirectionAngle - }; - var waveHeightIllustrationPointEntity = new GeneralResultSubMechanismIllustrationPointEntity - { - GoverningWindDirectionName = windDirectionName, - GoverningWindDirectionAngle = windDirectionAngle - }; - - double designWaterLevel = random.NextDouble(); - double waveHeight = random.NextDouble(); - var designWaterLevelOutputEntity = new HydraulicLocationOutputEntity - { - HydraulicLocationOutputType = (byte) HydraulicLocationOutputType.DesignWaterLevel, - Result = designWaterLevel, - TargetProbability = random.NextDouble(), - TargetReliability = random.NextDouble(), - CalculatedProbability = random.NextDouble(), - CalculatedReliability = random.NextDouble(), - CalculationConvergence = (byte) CalculationConvergence.NotCalculated, - GeneralResultSubMechanismIllustrationPointEntity = designWaterLevelIllustrationPointEntity - }; - var waveHeightOutputEntity = new HydraulicLocationOutputEntity - { - HydraulicLocationOutputType = (byte) HydraulicLocationOutputType.WaveHeight, - Result = waveHeight, - TargetProbability = random.NextDouble(), - TargetReliability = random.NextDouble(), - CalculatedProbability = random.NextDouble(), - CalculatedReliability = random.NextDouble(), - CalculationConvergence = (byte) CalculationConvergence.NotCalculated, - GeneralResultSubMechanismIllustrationPointEntity = waveHeightIllustrationPointEntity - }; - - bool shouldDesignWaterLevelIllustrationPointsBeCalculated = random.NextBoolean(); - bool shouldWaveHeightIllustrationPointsBeCalculated = random.NextBoolean(); var entity = new HydraulicLocationEntity { Name = "someName", - ShouldDesignWaterLevelIllustrationPointsBeCalculated = Convert.ToByte(shouldDesignWaterLevelIllustrationPointsBeCalculated), - ShouldWaveHeightIllustrationPointsBeCalculated = Convert.ToByte(shouldWaveHeightIllustrationPointsBeCalculated), - HydraulicLocationOutputEntities = - { - designWaterLevelOutputEntity, - waveHeightOutputEntity - } + HydraulicLocationCalculationEntity = CreateCalculationEntityWithOutputAndGeneralResultEntity(random.Next()), + HydraulicLocationCalculationEntity1 = CreateCalculationEntityWithOutputAndGeneralResultEntity(random.Next()), + HydraulicLocationCalculationEntity2 = CreateCalculationEntityWithOutputAndGeneralResultEntity(random.Next()), + HydraulicLocationCalculationEntity3 = CreateCalculationEntityWithOutputAndGeneralResultEntity(random.Next()), + HydraulicLocationCalculationEntity4 = CreateCalculationEntityWithOutputAndGeneralResultEntity(random.Next()), + HydraulicLocationCalculationEntity5 = CreateCalculationEntityWithOutputAndGeneralResultEntity(random.Next()), + HydraulicLocationCalculationEntity6 = CreateCalculationEntityWithOutputAndGeneralResultEntity(random.Next()), + HydraulicLocationCalculationEntity7 = CreateCalculationEntityWithOutputAndGeneralResultEntity(random.Next()) }; var collector = new ReadConversionCollector(); @@ -229,13 +190,23 @@ // Assert Assert.IsNotNull(location); - HydraulicBoundaryLocationCalculation designWaterLevelCalculation = location.DesignWaterLevelCalculation1; - Assert.AreEqual(shouldDesignWaterLevelIllustrationPointsBeCalculated, designWaterLevelCalculation.InputParameters.ShouldIllustrationPointsBeCalculated); - AssertHydraulicBoundaryLocationOutput(designWaterLevelOutputEntity, designWaterLevelCalculation.Output); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity, + location.DesignWaterLevelCalculation1); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity1, + location.DesignWaterLevelCalculation2); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity2, + location.DesignWaterLevelCalculation3); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity3, + location.DesignWaterLevelCalculation4); - HydraulicBoundaryLocationCalculation waveHeightCalculation = location.WaveHeightCalculation1; - Assert.AreEqual(shouldWaveHeightIllustrationPointsBeCalculated, waveHeightCalculation.InputParameters.ShouldIllustrationPointsBeCalculated); - AssertHydraulicBoundaryLocationOutput(waveHeightOutputEntity, waveHeightCalculation.Output); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity4, + location.WaveHeightCalculation1); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity5, + location.WaveHeightCalculation2); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity6, + location.WaveHeightCalculation3); + AssertHydraulicBoundaryLocationCalculation(entity.HydraulicLocationCalculationEntity7, + location.WaveHeightCalculation4); } [Test] @@ -257,8 +228,69 @@ Assert.AreSame(location1, location2); } - private static void AssertHydraulicBoundaryLocationOutput(IHydraulicLocationOutputEntity expected, HydraulicBoundaryLocationOutput actual) + private static HydraulicLocationCalculationEntity CreateCalculationEntity(int seed) { + var random = new Random(seed); + + return new HydraulicLocationCalculationEntity + { + ShouldIllustrationPointsBeCalculated = Convert.ToByte(random.NextBoolean()) + }; + } + + private static HydraulicLocationOutputEntity CreateHydraulicOutputEntity(int seed) + { + var random = new Random(seed); + var hydraulicLocationOutputEntity = new HydraulicLocationOutputEntity + { + Result = random.NextDouble(), + TargetProbability = random.NextDouble(), + TargetReliability = random.NextDouble(), + CalculatedProbability = random.NextDouble(), + CalculatedReliability = random.NextDouble(), + CalculationConvergence = (byte) CalculationConvergence.NotCalculated + }; + return hydraulicLocationOutputEntity; + } + + private static HydraulicLocationCalculationEntity CreateCalculationEntityWithOutputEntity(int seed) + { + HydraulicLocationCalculationEntity calculationEntity = CreateCalculationEntity(seed); + calculationEntity.HydraulicLocationOutputEntities.Add(CreateHydraulicOutputEntity(seed)); + + return calculationEntity; + } + + private static HydraulicLocationCalculationEntity CreateCalculationEntityWithOutputAndGeneralResultEntity(int seed) + { + var random = new Random(seed); + var generalResultEntity = new GeneralResultSubMechanismIllustrationPointEntity + { + GoverningWindDirectionName = "A wind direction", + GoverningWindDirectionAngle = random.NextDouble() + }; + + HydraulicLocationOutputEntity hydraulicLocationOutputEntity = CreateHydraulicOutputEntity(seed); + hydraulicLocationOutputEntity.GeneralResultSubMechanismIllustrationPointEntity = generalResultEntity; + + HydraulicLocationCalculationEntity calculationEntity = CreateCalculationEntity(seed); + calculationEntity.HydraulicLocationOutputEntities.Add(hydraulicLocationOutputEntity); + + return calculationEntity; + } + + private static void AssertHydraulicBoundaryLocationCalculation(HydraulicLocationCalculationEntity expected, + HydraulicBoundaryLocationCalculation actual) + { + Assert.AreEqual(Convert.ToBoolean(expected.ShouldIllustrationPointsBeCalculated), + actual.InputParameters.ShouldIllustrationPointsBeCalculated); + + AssertHydraulicBoundaryLocationOutput(expected.HydraulicLocationOutputEntities.SingleOrDefault(), + actual.Output); + } + + private static void AssertHydraulicBoundaryLocationOutput(HydraulicLocationOutputEntity expected, HydraulicBoundaryLocationOutput actual) + { if (expected == null) { Assert.IsNull(actual);