Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Create/WaveImpactAsphaltCover/WaveImpactAsphaltCoverWaveConditionsCalculationCreateExtensions.cs =================================================================== diff -u -rac96d7c315129af851634ed5a4a6800b59ede718 -r0e60a22413535f2ead76d3b566ca5b667d436410 --- Application/Ringtoets/src/Application.Ringtoets.Storage/Create/WaveImpactAsphaltCover/WaveImpactAsphaltCoverWaveConditionsCalculationCreateExtensions.cs (.../WaveImpactAsphaltCoverWaveConditionsCalculationCreateExtensions.cs) (revision ac96d7c315129af851634ed5a4a6800b59ede718) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Create/WaveImpactAsphaltCover/WaveImpactAsphaltCoverWaveConditionsCalculationCreateExtensions.cs (.../WaveImpactAsphaltCoverWaveConditionsCalculationCreateExtensions.cs) (revision 0e60a22413535f2ead76d3b566ca5b667d436410) @@ -42,10 +42,15 @@ /// The object keeping track of create operations. /// The index at which resides within its parent. /// A new . - /// Thrown when is null. + /// Thrown when any parameter is null. internal static WaveImpactAsphaltCoverWaveConditionsCalculationEntity Create(this WaveImpactAsphaltCoverWaveConditionsCalculation calculation, PersistenceRegistry registry, int order) { + if (calculation == null) + { + throw new ArgumentNullException(nameof(calculation)); + } + if (registry == null) { throw new ArgumentNullException(nameof(registry)); @@ -58,37 +63,41 @@ Comments = calculation.Comments.Body.DeepClone() }; - SetInputParameters(entity, calculation, registry); + SetInputParameters(entity, calculation.InputParameters, registry); AddEntityForWaveImpactAsphaltCoverWaveConditionsOutput(calculation, entity); return entity; } - private static void SetInputParameters(WaveImpactAsphaltCoverWaveConditionsCalculationEntity entity, WaveImpactAsphaltCoverWaveConditionsCalculation calculation, PersistenceRegistry registry) + private static void SetInputParameters(WaveImpactAsphaltCoverWaveConditionsCalculationEntity entity, + AssessmentSectionCategoryWaveConditionsInput calculationInput, + PersistenceRegistry registry) { - HydraulicBoundaryLocation hydraulicBoundaryLocation = calculation.InputParameters.HydraulicBoundaryLocation; + HydraulicBoundaryLocation hydraulicBoundaryLocation = calculationInput.HydraulicBoundaryLocation; if (hydraulicBoundaryLocation != null) { entity.HydraulicLocationEntity = hydraulicBoundaryLocation.Create(registry, 0); } - if (calculation.InputParameters.ForeshoreProfile != null) + if (calculationInput.ForeshoreProfile != null) { - entity.ForeshoreProfileEntity = calculation.InputParameters.ForeshoreProfile.Create(registry, 0); + entity.ForeshoreProfileEntity = calculationInput.ForeshoreProfile.Create(registry, 0); } - entity.Orientation = calculation.InputParameters.Orientation; - entity.UseBreakWater = Convert.ToByte(calculation.InputParameters.UseBreakWater); - entity.BreakWaterType = (byte) calculation.InputParameters.BreakWater.Type; - entity.BreakWaterHeight = calculation.InputParameters.BreakWater.Height; - entity.UseForeshore = Convert.ToByte(calculation.InputParameters.UseForeshore); - entity.UpperBoundaryRevetment = calculation.InputParameters.UpperBoundaryRevetment; - entity.LowerBoundaryRevetment = calculation.InputParameters.LowerBoundaryRevetment; - entity.UpperBoundaryWaterLevels = calculation.InputParameters.UpperBoundaryWaterLevels; - entity.LowerBoundaryWaterLevels = calculation.InputParameters.LowerBoundaryWaterLevels; - entity.StepSize = Convert.ToByte(calculation.InputParameters.StepSize); + entity.Orientation = calculationInput.Orientation.ToNaNAsNull(); + entity.UseBreakWater = Convert.ToByte(calculationInput.UseBreakWater); + entity.BreakWaterType = (byte) calculationInput.BreakWater.Type; + entity.BreakWaterHeight = calculationInput.BreakWater.Height.ToNaNAsNull(); + entity.UseForeshore = Convert.ToByte(calculationInput.UseForeshore); + entity.UpperBoundaryRevetment = calculationInput.UpperBoundaryRevetment.ToNaNAsNull(); + entity.LowerBoundaryRevetment = calculationInput.LowerBoundaryRevetment.ToNaNAsNull(); + entity.UpperBoundaryWaterLevels = calculationInput.UpperBoundaryWaterLevels.ToNaNAsNull(); + entity.LowerBoundaryWaterLevels = calculationInput.LowerBoundaryWaterLevels.ToNaNAsNull(); + entity.StepSize = Convert.ToByte(calculationInput.StepSize); + entity.CategoryType = Convert.ToByte(calculationInput.CategoryType); } - private static void AddEntityForWaveImpactAsphaltCoverWaveConditionsOutput(WaveImpactAsphaltCoverWaveConditionsCalculation calculation, WaveImpactAsphaltCoverWaveConditionsCalculationEntity entity) + private static void AddEntityForWaveImpactAsphaltCoverWaveConditionsOutput(WaveImpactAsphaltCoverWaveConditionsCalculation calculation, + WaveImpactAsphaltCoverWaveConditionsCalculationEntity entity) { if (calculation.HasOutput) { Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/WaveImpactAsphaltCover/WaveImpactAsphaltCoverWaveConditionsCalculationCreateExtensionsTest.cs =================================================================== diff -u -r38414ee18cb869ba91e6b70abc4019a39ea2e08c -r0e60a22413535f2ead76d3b566ca5b667d436410 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/WaveImpactAsphaltCover/WaveImpactAsphaltCoverWaveConditionsCalculationCreateExtensionsTest.cs (.../WaveImpactAsphaltCoverWaveConditionsCalculationCreateExtensionsTest.cs) (revision 38414ee18cb869ba91e6b70abc4019a39ea2e08c) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/WaveImpactAsphaltCover/WaveImpactAsphaltCoverWaveConditionsCalculationCreateExtensionsTest.cs (.../WaveImpactAsphaltCoverWaveConditionsCalculationCreateExtensionsTest.cs) (revision 0e60a22413535f2ead76d3b566ca5b667d436410) @@ -20,13 +20,14 @@ // All rights reserved. using System; -using System.Collections.Generic; using System.Linq; using Application.Ringtoets.Storage.Create; using Application.Ringtoets.Storage.Create.WaveImpactAsphaltCover; using Application.Ringtoets.Storage.DbContext; using Core.Common.Base.Data; +using Core.Common.TestUtil; using NUnit.Framework; +using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Revetment.Data; @@ -38,26 +39,15 @@ [TestFixture] public class WaveImpactAsphaltCoverWaveConditionsCalculationCreateExtensionsTest { - private static IEnumerable ValidWaveConditionsInputs + [Test] + public void Create_CalculationNull_ThrowsArgumentNullException() { - get - { - yield return new TestCaseData(1.0, true, 3.58, 6.10, 3.40, 5.88, WaveConditionsInputStepSize.Half).SetName("ValuesSetBWTrueStepSizeHalf"); - yield return new TestCaseData(1.0, true, 3.58, 6.10, 3.40, 5.88, WaveConditionsInputStepSize.One).SetName("ValuesSetBWTrueStepSizeOne"); - yield return new TestCaseData(1.0, true, 3.58, 6.10, 3.40, 5.88, WaveConditionsInputStepSize.Two).SetName("ValuesSetBWTrueStepSizeTwo"); + // Call + TestDelegate call = () => ((WaveImpactAsphaltCoverWaveConditionsCalculation) null).Create(new PersistenceRegistry(), 0); - yield return new TestCaseData(1.0, false, 3.58, 6.10, 3.40, 5.88, WaveConditionsInputStepSize.Half).SetName("ValuesSetBWFalseStepSizeHalf"); - yield return new TestCaseData(1.0, false, 3.58, 6.10, 3.40, 5.88, WaveConditionsInputStepSize.One).SetName("ValuesSetBWFalseStepSizeOne"); - yield return new TestCaseData(1.0, false, 3.58, 6.10, 3.40, 5.88, WaveConditionsInputStepSize.Two).SetName("ValuesSetBWFalseStepSizeTwo"); - - yield return new TestCaseData(double.NaN, true, double.NaN, double.NaN, double.NaN, double.NaN, WaveConditionsInputStepSize.Half).SetName("NaNValuesBWTrueStepSizeHalf"); - yield return new TestCaseData(double.NaN, true, double.NaN, double.NaN, double.NaN, double.NaN, WaveConditionsInputStepSize.One).SetName("NaNValuesBWTrueStepSizeOne"); - yield return new TestCaseData(double.NaN, true, double.NaN, double.NaN, double.NaN, double.NaN, WaveConditionsInputStepSize.Two).SetName("NaNValuesBWTrueStepSizeTwo"); - - yield return new TestCaseData(double.NaN, false, double.NaN, double.NaN, double.NaN, double.NaN, WaveConditionsInputStepSize.Half).SetName("NaNValuesBWFalseStepSizeHalf"); - yield return new TestCaseData(double.NaN, false, double.NaN, double.NaN, double.NaN, double.NaN, WaveConditionsInputStepSize.One).SetName("NaNValuesBWFalseStepSizeOne"); - yield return new TestCaseData(double.NaN, false, double.NaN, double.NaN, double.NaN, double.NaN, WaveConditionsInputStepSize.Two).SetName("NaNValuesBWFalseStepSizeTwo"); - } + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("calculation", exception.ParamName); } [Test] @@ -75,33 +65,26 @@ } [Test] - [TestCaseSource(nameof(ValidWaveConditionsInputs))] - public void Create_CalculationWithPropertiesSet_ReturnCalculationEntity( - double orientation, bool useBreakWater, double lowerBoundaryRevetment, - double upperBoundaryRevetment, double lowerBoundaryWaterLevels, - double upperBoundaryWaterLevels, WaveConditionsInputStepSize stepSize) + public void Create_CalculationWithPropertiesSet_ReturnCalculationEntity() { // Setup - const string name = "Name"; - const string comments = "comments"; - const int order = 1234; + var random = new Random(21); + int order = random.Next(); + var calculation = new WaveImpactAsphaltCoverWaveConditionsCalculation { - Name = name, - Comments = - { - Body = comments - }, InputParameters = { - Orientation = (RoundedDouble) orientation, - UseBreakWater = useBreakWater, - UpperBoundaryRevetment = (RoundedDouble) upperBoundaryRevetment, - LowerBoundaryRevetment = (RoundedDouble) lowerBoundaryRevetment, - UpperBoundaryWaterLevels = (RoundedDouble) upperBoundaryWaterLevels, - LowerBoundaryWaterLevels = (RoundedDouble) lowerBoundaryWaterLevels, - StepSize = stepSize + Orientation = random.NextRoundedDouble(0, 360), + UseBreakWater = random.NextBoolean(), + UseForeshore = random.NextBoolean(), + UpperBoundaryRevetment = (RoundedDouble) 6.10, + LowerBoundaryRevetment = (RoundedDouble) 3.58, + UpperBoundaryWaterLevels = (RoundedDouble) 5.88, + LowerBoundaryWaterLevels = (RoundedDouble) 3.40, + StepSize = random.NextEnumValue(), + CategoryType = random.NextEnumValue() } }; @@ -111,27 +94,59 @@ WaveImpactAsphaltCoverWaveConditionsCalculationEntity entity = calculation.Create(registry, order); // Assert - Assert.AreEqual(name, entity.Name); - Assert.AreEqual(comments, entity.Comments); - - WaveConditionsInput input = calculation.InputParameters; - Assert.AreEqual(input.Orientation.Value, entity.Orientation); - Assert.AreEqual(Convert.ToByte(useBreakWater), entity.UseBreakWater); - Assert.AreEqual(Convert.ToByte(false), entity.UseForeshore); + AssessmentSectionCategoryWaveConditionsInput input = calculation.InputParameters; + Assert.AreEqual(input.Orientation, entity.Orientation, input.Orientation.GetAccuracy()); + Assert.AreEqual(Convert.ToByte(input.UseBreakWater), entity.UseBreakWater); + Assert.AreEqual(Convert.ToByte(input.UseForeshore), entity.UseForeshore); Assert.AreEqual(input.UpperBoundaryRevetment, entity.UpperBoundaryRevetment, input.UpperBoundaryRevetment.GetAccuracy()); Assert.AreEqual(input.LowerBoundaryRevetment, entity.LowerBoundaryRevetment, input.LowerBoundaryRevetment.GetAccuracy()); Assert.AreEqual(input.UpperBoundaryWaterLevels, entity.UpperBoundaryWaterLevels, input.UpperBoundaryWaterLevels.GetAccuracy()); Assert.AreEqual(input.LowerBoundaryWaterLevels, entity.LowerBoundaryWaterLevels, input.LowerBoundaryWaterLevels.GetAccuracy()); Assert.AreEqual(Convert.ToByte(input.StepSize), entity.StepSize); + Assert.AreEqual(Convert.ToByte(input.CategoryType), entity.CategoryType); Assert.AreEqual(order, entity.Order); - Assert.AreEqual(0, entity.WaveImpactAsphaltCoverWaveConditionsCalculationEntityId); Assert.IsNull(entity.CalculationGroupEntity); + CollectionAssert.IsEmpty(entity.WaveImpactAsphaltCoverWaveConditionsOutputEntities); Assert.IsNull(entity.ForeshoreProfileEntity); Assert.IsNull(entity.HydraulicLocationEntity); } [Test] + public void Create_CalculationWithNaNProperties_ReturnCalculationEntity() + { + // Setup + var calculation = new WaveImpactAsphaltCoverWaveConditionsCalculation + { + InputParameters = + { + Orientation = RoundedDouble.NaN, + UpperBoundaryRevetment = RoundedDouble.NaN, + LowerBoundaryRevetment = RoundedDouble.NaN, + UpperBoundaryWaterLevels = RoundedDouble.NaN, + LowerBoundaryWaterLevels = RoundedDouble.NaN, + BreakWater = + { + Height = RoundedDouble.NaN + } + } + }; + + var registry = new PersistenceRegistry(); + + // Call + WaveImpactAsphaltCoverWaveConditionsCalculationEntity entity = calculation.Create(registry, 1234); + + // Assert + Assert.IsNull(entity.Orientation); + Assert.IsNull(entity.UpperBoundaryRevetment); + Assert.IsNull(entity.LowerBoundaryRevetment); + Assert.IsNull(entity.UpperBoundaryWaterLevels); + Assert.IsNull(entity.LowerBoundaryWaterLevels); + Assert.IsNull(entity.BreakWaterHeight); + } + + [Test] public void Create_StringPropertiesDoNotShareReference() { // Setup @@ -152,13 +167,8 @@ WaveImpactAsphaltCoverWaveConditionsCalculationEntity entity = calculation.Create(registry, 0); // Assert - Assert.AreNotSame(name, entity.Name, - "To create stable binary representations/fingerprints, it's really important that strings are not shared."); - Assert.AreEqual(name, entity.Name); - - Assert.AreNotSame(comments, entity.Comments, - "To create stable binary representations/fingerprints, it's really important that strings are not shared."); - Assert.AreEqual(comments, entity.Comments); + TestHelper.AssertAreEqualButNotSame(calculation.Name, entity.Name); + TestHelper.AssertAreEqualButNotSame(calculation.Comments.Body, entity.Comments); } [Test]