Index: Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Service.Test/HeightStructuresCalculationServiceTest.cs =================================================================== diff -u -rc3c2bba57ff003c569aefa73e42ac6122fcf5bfa -r839b7622ac7d27765a7807ad067574c8f244d91e --- Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Service.Test/HeightStructuresCalculationServiceTest.cs (.../HeightStructuresCalculationServiceTest.cs) (revision c3c2bba57ff003c569aefa73e42ac6122fcf5bfa) +++ Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Service.Test/HeightStructuresCalculationServiceTest.cs (.../HeightStructuresCalculationServiceTest.cs) (revision 839b7622ac7d27765a7807ad067574c8f244d91e) @@ -28,9 +28,15 @@ using Rhino.Mocks; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Contribution; +using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.HeightStructures.Data; using Ringtoets.HeightStructures.Data.TestUtil; +using Ringtoets.HydraRing.Calculation.Calculator.Factory; +using Ringtoets.HydraRing.Calculation.Data; +using Ringtoets.HydraRing.Calculation.Data.Input.Structures; +using Ringtoets.HydraRing.Calculation.TestUtil; +using Ringtoets.HydraRing.Calculation.TestUtil.Calculator; using Ringtoets.HydraRing.Data; namespace Ringtoets.HeightStructures.Service.Test @@ -261,6 +267,96 @@ mockRepository.VerifyAll(); } + [Test] + [TestCase(true, false)] + [TestCase(true, true)] + [TestCase(false, false)] + public void Calculate_Always_InputPropertiesCorrectlySendToCalculator(bool useForeshore, bool useBreakWater) + { + // Setup + var heightStructuresFailureMechanism = new HeightStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + var assessmentSectionStub = CreateAssessmentSectionStub(heightStructuresFailureMechanism, mockRepository); + mockRepository.ReplayAll(); + + heightStructuresFailureMechanism.AddSection(new FailureMechanismSection("test section", new[] + { + new Point2D(0, 0), + new Point2D(1, 1) + })); + + HeightStructuresCalculation calculation = new TestHeightStructuresCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = assessmentSectionStub.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001) + } + }; + + if (useForeshore) + { + calculation.InputParameters.ForeshoreProfile = new ForeshoreProfile(new Point2D(0, 0), + new[] + { + new Point2D(1, 1), + new Point2D(2, 2) + }, + useBreakWater ? new BreakWater(BreakWaterType.Wall, 3.0) : null, + new ForeshoreProfile.ConstructionProperties()); + } + + var failureMechanismSection = heightStructuresFailureMechanism.Sections.First(); + + using (new HydraRingCalculatorFactoryConfig()) + { + var testStructuresOvertoppingCalculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).StructuresOvertoppingCalculator; + + // Call + new HeightStructuresCalculationService().Calculate(calculation, + assessmentSectionStub, + failureMechanismSection, + heightStructuresFailureMechanism.GeneralInput, + heightStructuresFailureMechanism.Contribution, + testDataPath); + + // Assert + StructuresOvertoppingCalculationInput[] overtoppingCalculationInputs = testStructuresOvertoppingCalculator.ReceivedInputs.ToArray(); + Assert.AreEqual(1, overtoppingCalculationInputs.Length); + + Assert.AreEqual(testDataPath, testStructuresOvertoppingCalculator.HydraulicBoundaryDatabaseDirectory); + Assert.AreEqual(assessmentSectionStub.Id, testStructuresOvertoppingCalculator.RingId); + + var actualInput = overtoppingCalculationInputs[0]; + + GeneralHeightStructuresInput generalInput = heightStructuresFailureMechanism.GeneralInput; + + var input = calculation.InputParameters; + var expectedInput = new StructuresOvertoppingCalculationInput(1300001, + new HydraRingSection(1, failureMechanismSection.GetSectionLength(), input.StructureNormalOrientation), + useForeshore ? input.ForeshoreGeometry.Select(c => new HydraRingForelandPoint(c.X, c.Y)) : new HydraRingForelandPoint[0], + useBreakWater ? new HydraRingBreakWater((int) input.BreakWater.Type, input.BreakWater.Height) : null, + generalInput.GravitationalAcceleration, + generalInput.ModelFactorOvertoppingFlow.Mean, generalInput.ModelFactorOvertoppingFlow.StandardDeviation, + calculation.InputParameters.LevelCrestStructure.Mean, calculation.InputParameters.LevelCrestStructure.StandardDeviation, + calculation.InputParameters.StructureNormalOrientation, + calculation.InputParameters.ModelFactorSuperCriticalFlow.Mean, calculation.InputParameters.ModelFactorSuperCriticalFlow.StandardDeviation, + calculation.InputParameters.AllowedLevelIncreaseStorage.Mean, calculation.InputParameters.AllowedLevelIncreaseStorage.StandardDeviation, + generalInput.ModelFactorStorageVolume.Mean, generalInput.ModelFactorStorageVolume.StandardDeviation, + calculation.InputParameters.StorageStructureArea.Mean, calculation.InputParameters.StorageStructureArea.CoefficientOfVariation, + generalInput.ModelFactorInflowVolume, + calculation.InputParameters.FlowWidthAtBottomProtection.Mean, calculation.InputParameters.FlowWidthAtBottomProtection.StandardDeviation, + calculation.InputParameters.CriticalOvertoppingDischarge.Mean, calculation.InputParameters.CriticalOvertoppingDischarge.CoefficientOfVariation, + calculation.InputParameters.FailureProbabilityStructureWithErosion, + calculation.InputParameters.WidthFlowApertures.Mean, calculation.InputParameters.WidthFlowApertures.CoefficientOfVariation, + calculation.InputParameters.DeviationWaveDirection, + calculation.InputParameters.StormDuration.Mean, calculation.InputParameters.StormDuration.CoefficientOfVariation); + + HydraRingDataEqualityHelper.AreEqual(expectedInput, actualInput); + } + mockRepository.VerifyAll(); + } + private static IAssessmentSection CreateAssessmentSectionStub(IFailureMechanism failureMechanism, MockRepository mockRepository) { var assessmentSectionStub = mockRepository.Stub(); Index: Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Service.Test/Ringtoets.HeightStructures.Service.Test.csproj =================================================================== diff -u -rc3c2bba57ff003c569aefa73e42ac6122fcf5bfa -r839b7622ac7d27765a7807ad067574c8f244d91e --- Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Service.Test/Ringtoets.HeightStructures.Service.Test.csproj (.../Ringtoets.HeightStructures.Service.Test.csproj) (revision c3c2bba57ff003c569aefa73e42ac6122fcf5bfa) +++ Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Service.Test/Ringtoets.HeightStructures.Service.Test.csproj (.../Ringtoets.HeightStructures.Service.Test.csproj) (revision 839b7622ac7d27765a7807ad067574c8f244d91e) @@ -86,6 +86,10 @@ {70F8CC9C-5BC8-4FB2-B201-EAE7FA8088C2} Ringtoets.HydraRing.Data + + {74CBA865-9338-447F-BAD9-28312446AE84} + Ringtoets.HydraRing.Calculation.TestUtil + {1C0017D8-35B5-4CA0-8FC7-A83F46DBDC99} Ringtoets.HeightStructures.Data Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/Calculator/TestHydraRingCalculatorFactory.cs =================================================================== diff -u -rb2306061789f5e34a6f0994552b4431d01d220f0 -r839b7622ac7d27765a7807ad067574c8f244d91e --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/Calculator/TestHydraRingCalculatorFactory.cs (.../TestHydraRingCalculatorFactory.cs) (revision b2306061789f5e34a6f0994552b4431d01d220f0) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/Calculator/TestHydraRingCalculatorFactory.cs (.../TestHydraRingCalculatorFactory.cs) (revision 839b7622ac7d27765a7807ad067574c8f244d91e) @@ -30,8 +30,8 @@ namespace Ringtoets.HydraRing.Calculation.TestUtil.Calculator { - public class TestHydraRingCalculatorFactory : IHydraRingCalculatorFactory { - + public class TestHydraRingCalculatorFactory : IHydraRingCalculatorFactory + { public readonly TestDesignWaterLevelCalculator DesignWaterLevelCalculator = new TestDesignWaterLevelCalculator(); public readonly TestDikeHeightCalculator DikeHeightCalculator = new TestDikeHeightCalculator(); public readonly TestOvertoppingCalculator OvertoppingCalculator = new TestOvertoppingCalculator(); @@ -105,26 +105,29 @@ public string OutputFileContent { get; set; } } - public class TestDikeHeightCalculator : TestHydraRingCalculator, IDikeHeightCalculator { + public class TestDikeHeightCalculator : TestHydraRingCalculator, IDikeHeightCalculator + { public double DikeHeight { get; set; } public string OutputFileContent { get; set; } } - public class TestDesignWaterLevelCalculator : TestHydraRingCalculator, IDesignWaterLevelCalculator { + public class TestDesignWaterLevelCalculator : TestHydraRingCalculator, IDesignWaterLevelCalculator + { public double DesignWaterLevel { get; set; } public double ReliabilityIndex { get; set; } public string OutputFileContent { get; set; } } - public class TestStructuresOvertoppingCalculator : TestHydraRingCalculator, IStructuresOvertoppingCalculator { + public class TestStructuresOvertoppingCalculator : TestHydraRingCalculator, IStructuresOvertoppingCalculator + { public double ExceedanceProbabilityBeta { get; set; } public string OutputFileContent { get; set; } } public class TestHydraRingCalculator { - public bool IsCanceled = false; public readonly List ReceivedInputs = new List(); + public bool IsCanceled = false; public string RingId { get; set; } public string HydraulicBoundaryDatabaseDirectory { get; set; } public bool EndInFailure { get; set; } @@ -138,7 +141,6 @@ ReceivedInputs.Add(input); } - public void Cancel() { IsCanceled = true; Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/HydraRingDataEqualityHelper.cs =================================================================== diff -u -r02670d8c9fceeaea5f829937a2eb269f3488c6b1 -r839b7622ac7d27765a7807ad067574c8f244d91e --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/HydraRingDataEqualityHelper.cs (.../HydraRingDataEqualityHelper.cs) (revision 02670d8c9fceeaea5f829937a2eb269f3488c6b1) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.TestUtil/HydraRingDataEqualityHelper.cs (.../HydraRingDataEqualityHelper.cs) (revision 839b7622ac7d27765a7807ad067574c8f244d91e) @@ -23,6 +23,7 @@ using NUnit.Framework; using Ringtoets.HydraRing.Calculation.Data; using Ringtoets.HydraRing.Calculation.Data.Input; +using Ringtoets.HydraRing.Calculation.Data.Input.Structures; using Ringtoets.HydraRing.Calculation.Data.Input.WaveConditions; namespace Ringtoets.HydraRing.Calculation.TestUtil @@ -56,6 +57,23 @@ AreEqual(expectedInput.Variables.ToArray(), actualInput.Variables.ToArray()); } + public static void AreEqual(StructuresOvertoppingCalculationInput expectedInput, StructuresOvertoppingCalculationInput actualInput) + { + Assert.AreEqual(expectedInput.FailureMechanismType, actualInput.FailureMechanismType); + Assert.AreEqual(expectedInput.CalculationTypeId, actualInput.CalculationTypeId); + Assert.AreEqual(expectedInput.VariableId, actualInput.VariableId); + Assert.AreEqual(expectedInput.HydraulicBoundaryLocationId, actualInput.HydraulicBoundaryLocationId); + Assert.AreEqual(expectedInput.Section.SectionId, actualInput.Section.SectionId); + + Assert.AreEqual(expectedInput.Beta, actualInput.Beta, accuracy); + Assert.AreEqual(expectedInput.Section.CrossSectionNormal, actualInput.Section.CrossSectionNormal, accuracy); + + AreEqual(expectedInput.BreakWater, actualInput.BreakWater); + AreEqual(expectedInput.Section, actualInput.Section); + AreEqual(expectedInput.ForelandsPoints.ToArray(), actualInput.ForelandsPoints.ToArray()); + AreEqual(expectedInput.Variables.ToArray(), actualInput.Variables.ToArray()); + } + private static void AreEqual(HydraRingBreakWater expectedBreakWater, HydraRingBreakWater actualBreakWater) { if (expectedBreakWater == null)