Index: Riskeer/Storage/src/Riskeer.Storage.Core/Read/GrassCoverErosionOutwards/GrassCoverErosionOutwardsWaveConditionsCalculationEntityReadExtensions.cs =================================================================== diff -u -r877f0d6830122b89d78bc3e27aa3c61736617276 -rca92282be7ef20e40da013ba6503de4cf0811ba9 --- Riskeer/Storage/src/Riskeer.Storage.Core/Read/GrassCoverErosionOutwards/GrassCoverErosionOutwardsWaveConditionsCalculationEntityReadExtensions.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationEntityReadExtensions.cs) (revision 877f0d6830122b89d78bc3e27aa3c61736617276) +++ Riskeer/Storage/src/Riskeer.Storage.Core/Read/GrassCoverErosionOutwards/GrassCoverErosionOutwardsWaveConditionsCalculationEntityReadExtensions.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationEntityReadExtensions.cs) (revision ca92282be7ef20e40da013ba6503de4cf0811ba9) @@ -101,13 +101,41 @@ return; } - List waveConditionsOutputs = entity.GrassCoverErosionOutwardsWaveConditionsOutputEntities - .OrderBy(e => e.Order) - .Select(e => e.Read()) - .ToList(); - calculation.Output = GrassCoverErosionOutwardsWaveConditionsOutputFactory.CreateOutputWithWaveImpact(waveConditionsOutputs); + var waveRunUpOutput = new List(); + var waveImpactOutput = new List(); + foreach (GrassCoverErosionOutwardsWaveConditionsOutputEntity outputEntity in + entity.GrassCoverErosionOutwardsWaveConditionsOutputEntities.OrderBy(e => e.Order)) + { + if (outputEntity.OutputType == Convert.ToByte(GrassCoverErosionOutwardsWaveConditionsOutputType.WaveRunUp)) + { + waveRunUpOutput.Add(outputEntity.Read()); + } + + if (outputEntity.OutputType == Convert.ToByte(GrassCoverErosionOutwardsWaveConditionsOutputType.WaveImpact)) + { + waveImpactOutput.Add(outputEntity.Read()); + } + } + + calculation.Output = CreateGrassCoverErosionOutwardsWaveConditionsOutput(waveRunUpOutput, waveImpactOutput); } + private static GrassCoverErosionOutwardsWaveConditionsOutput CreateGrassCoverErosionOutwardsWaveConditionsOutput(IEnumerable waveRunUpOutput, + IEnumerable waveImpactOutput) + { + if (!waveImpactOutput.Any()) + { + return GrassCoverErosionOutwardsWaveConditionsOutputFactory.CreateOutputWithWaveRunUp(waveRunUpOutput); + } + + if (!waveRunUpOutput.Any()) + { + return GrassCoverErosionOutwardsWaveConditionsOutputFactory.CreateOutputWithWaveImpact(waveImpactOutput); + } + + return GrassCoverErosionOutwardsWaveConditionsOutputFactory.CreateOutputWithWaveRunUpAndWaveImpact(waveRunUpOutput, waveImpactOutput); + } + private static ForeshoreProfile GetDikeProfileValue(ForeshoreProfileEntity foreshoreProfileEntity, ReadConversionCollector collector) { Index: Riskeer/Storage/test/Riskeer.Storage.Core.Test/Read/GrassCoverErosionOutwards/GrassCoverErosionOutwardsWaveConditionsCalculationEntityReadExtensionsTest.cs =================================================================== diff -u -re1da963f397797ce6d47241e13c112ce24a6104c -rca92282be7ef20e40da013ba6503de4cf0811ba9 --- Riskeer/Storage/test/Riskeer.Storage.Core.Test/Read/GrassCoverErosionOutwards/GrassCoverErosionOutwardsWaveConditionsCalculationEntityReadExtensionsTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationEntityReadExtensionsTest.cs) (revision e1da963f397797ce6d47241e13c112ce24a6104c) +++ Riskeer/Storage/test/Riskeer.Storage.Core.Test/Read/GrassCoverErosionOutwards/GrassCoverErosionOutwardsWaveConditionsCalculationEntityReadExtensionsTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationEntityReadExtensionsTest.cs) (revision ca92282be7ef20e40da013ba6503de4cf0811ba9) @@ -230,11 +230,12 @@ } [Test] - public void Read_EntityWithCalculationOutputEntity_CalculationWithOutput() + public void Read_EntityWithCalculationOutputEntityWithWaveRunUpAndWaveImpact_CalculationWithOutput() { // Setup const double outputALevel = 0; - const double outputBLevel = 1; + const double outputBLevel = 1.1; + const double outputCLevel = 2.2; var entity = new GrassCoverErosionOutwardsWaveConditionsCalculationEntity { GrassCoverErosionOutwardsWaveConditionsOutputEntities = @@ -243,13 +244,22 @@ { WaterLevel = outputBLevel, Order = 1, - CalculationConvergence = Convert.ToByte(CalculationConvergence.NotCalculated) + CalculationConvergence = Convert.ToByte(CalculationConvergence.NotCalculated), + OutputType = Convert.ToByte(GrassCoverErosionOutwardsWaveConditionsOutputType.WaveRunUp) }, new GrassCoverErosionOutwardsWaveConditionsOutputEntity { WaterLevel = outputALevel, Order = 0, - CalculationConvergence = Convert.ToByte(CalculationConvergence.NotCalculated) + CalculationConvergence = Convert.ToByte(CalculationConvergence.NotCalculated), + OutputType = Convert.ToByte(GrassCoverErosionOutwardsWaveConditionsOutputType.WaveRunUp) + }, + new GrassCoverErosionOutwardsWaveConditionsOutputEntity + { + WaterLevel = outputCLevel, + Order = 2, + CalculationConvergence = Convert.ToByte(CalculationConvergence.NotCalculated), + OutputType = Convert.ToByte(GrassCoverErosionOutwardsWaveConditionsOutputType.WaveImpact) } } }; @@ -262,9 +272,99 @@ // Assert Assert.IsNotNull(calculation.Output); double accuracy = calculation.Output.WaveImpactOutput.First().WaterLevel.GetAccuracy(); + + Assert.AreEqual(2, calculation.Output.WaveRunUpOutput.Count()); + Assert.AreEqual(outputALevel, calculation.Output.WaveRunUpOutput.ElementAt(0).WaterLevel, accuracy); + Assert.AreEqual(outputBLevel, calculation.Output.WaveRunUpOutput.ElementAt(1).WaterLevel, accuracy); + + Assert.AreEqual(1, calculation.Output.WaveImpactOutput.Count()); + Assert.AreEqual(outputCLevel, calculation.Output.WaveImpactOutput.ElementAt(0).WaterLevel, accuracy); + } + + [Test] + public void Read_EntityWithCalculationOutputEntityWithWaveRunUp_CalculationWithOutput() + { + // Setup + const double outputALevel = 0; + const double outputBLevel = 1.1; + var entity = new GrassCoverErosionOutwardsWaveConditionsCalculationEntity + { + GrassCoverErosionOutwardsWaveConditionsOutputEntities = + { + new GrassCoverErosionOutwardsWaveConditionsOutputEntity + { + WaterLevel = outputBLevel, + Order = 1, + CalculationConvergence = Convert.ToByte(CalculationConvergence.NotCalculated), + OutputType = Convert.ToByte(GrassCoverErosionOutwardsWaveConditionsOutputType.WaveRunUp) + }, + new GrassCoverErosionOutwardsWaveConditionsOutputEntity + { + WaterLevel = outputALevel, + Order = 0, + CalculationConvergence = Convert.ToByte(CalculationConvergence.NotCalculated), + OutputType = Convert.ToByte(GrassCoverErosionOutwardsWaveConditionsOutputType.WaveRunUp) + } + } + }; + + var collector = new ReadConversionCollector(); + + // Call + GrassCoverErosionOutwardsWaveConditionsCalculation calculation = entity.Read(collector); + + // Assert + Assert.IsNotNull(calculation.Output); + double accuracy = calculation.Output.WaveRunUpOutput.First().WaterLevel.GetAccuracy(); + + Assert.AreEqual(2, calculation.Output.WaveRunUpOutput.Count()); + Assert.AreEqual(outputALevel, calculation.Output.WaveRunUpOutput.ElementAt(0).WaterLevel, accuracy); + Assert.AreEqual(outputBLevel, calculation.Output.WaveRunUpOutput.ElementAt(1).WaterLevel, accuracy); + + Assert.IsNull(calculation.Output.WaveImpactOutput); + } + + [Test] + public void Read_EntityWithCalculationOutputEntityWithWavImpact_CalculationWithOutput() + { + // Setup + const double outputALevel = 0; + const double outputBLevel = 1.1; + var entity = new GrassCoverErosionOutwardsWaveConditionsCalculationEntity + { + GrassCoverErosionOutwardsWaveConditionsOutputEntities = + { + new GrassCoverErosionOutwardsWaveConditionsOutputEntity + { + WaterLevel = outputBLevel, + Order = 1, + CalculationConvergence = Convert.ToByte(CalculationConvergence.NotCalculated), + OutputType = Convert.ToByte(GrassCoverErosionOutwardsWaveConditionsOutputType.WaveImpact) + }, + new GrassCoverErosionOutwardsWaveConditionsOutputEntity + { + WaterLevel = outputALevel, + Order = 0, + CalculationConvergence = Convert.ToByte(CalculationConvergence.NotCalculated), + OutputType = Convert.ToByte(GrassCoverErosionOutwardsWaveConditionsOutputType.WaveImpact) + } + } + }; + + var collector = new ReadConversionCollector(); + + // Call + GrassCoverErosionOutwardsWaveConditionsCalculation calculation = entity.Read(collector); + + // Assert + Assert.IsNotNull(calculation.Output); + double accuracy = calculation.Output.WaveImpactOutput.First().WaterLevel.GetAccuracy(); + Assert.AreEqual(2, calculation.Output.WaveImpactOutput.Count()); Assert.AreEqual(outputALevel, calculation.Output.WaveImpactOutput.ElementAt(0).WaterLevel, accuracy); Assert.AreEqual(outputBLevel, calculation.Output.WaveImpactOutput.ElementAt(1).WaterLevel, accuracy); + + Assert.IsNull(calculation.Output.WaveRunUpOutput); } private static void AssertRoundedDouble(double expectedValue, RoundedDouble actualValue)