Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs =================================================================== diff -u -r4ccad80019e668d21ad9754d529f94feedf7aec0 -rf1dba8f366d531b102d705ff31afb7b061c7d43e --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs (.../GrassCoverErosionInwardsPlugin.cs) (revision 4ccad80019e668d21ad9754d529f94feedf7aec0) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs (.../GrassCoverErosionInwardsPlugin.cs) (revision f1dba8f366d531b102d705ff31afb7b061c7d43e) @@ -494,11 +494,13 @@ #endregion - private static void ValidateAll(IEnumerable grassCoverErosionInwardsCalculations, IAssessmentSection assessmentSection) + private static void ValidateAll(IEnumerable grassCoverErosionInwardsCalculations, + GrassCoverErosionInwardsFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) { foreach (GrassCoverErosionInwardsCalculation calculation in grassCoverErosionInwardsCalculations) { - GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + GrassCoverErosionInwardsCalculationService.Validate(calculation, failureMechanism, assessmentSection); } } @@ -618,7 +620,7 @@ private static void ValidateAll(GrassCoverErosionInwardsFailureMechanismContext context) { - ValidateAll(context.WrappedData.Calculations.OfType(), context.Parent); + ValidateAll(context.WrappedData.Calculations.OfType(), context.WrappedData, context.Parent); } private void CalculateAll(GrassCoverErosionInwardsFailureMechanismContext context) @@ -847,7 +849,9 @@ private static void ValidateAll(GrassCoverErosionInwardsCalculationGroupContext context) { - ValidateAll(context.WrappedData.GetCalculations().OfType(), context.AssessmentSection); + ValidateAll(context.WrappedData.GetCalculations().OfType(), + context.FailureMechanism, + context.AssessmentSection); } private void CalculateAll(CalculationGroup group, GrassCoverErosionInwardsCalculationGroupContext context) @@ -918,7 +922,7 @@ private static void Validate(GrassCoverErosionInwardsCalculationContext context) { - GrassCoverErosionInwardsCalculationService.Validate(context.WrappedData, context.AssessmentSection); + GrassCoverErosionInwardsCalculationService.Validate(context.WrappedData, context.FailureMechanism, context.AssessmentSection); } private void Calculate(GrassCoverErosionInwardsCalculation calculation, GrassCoverErosionInwardsCalculationContext context) Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationActivity.cs =================================================================== diff -u -ra494bde768f1b989d31bff6a801a1816d6f9692e -rf1dba8f366d531b102d705ff31afb7b061c7d43e --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationActivity.cs (.../GrassCoverErosionInwardsCalculationActivity.cs) (revision a494bde768f1b989d31bff6a801a1816d6f9692e) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationActivity.cs (.../GrassCoverErosionInwardsCalculationActivity.cs) (revision f1dba8f366d531b102d705ff31afb7b061c7d43e) @@ -82,7 +82,7 @@ protected override bool Validate() { - return GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + return GrassCoverErosionInwardsCalculationService.Validate(calculation, failureMechanism, assessmentSection); } protected override void PerformCalculation() Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationService.cs =================================================================== diff -u -raee2e55bc9dbf0bbe1fac86898575c7faa33162c -rf1dba8f366d531b102d705ff31afb7b061c7d43e --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationService.cs (.../GrassCoverErosionInwardsCalculationService.cs) (revision aee2e55bc9dbf0bbe1fac86898575c7faa33162c) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationService.cs (.../GrassCoverErosionInwardsCalculationService.cs) (revision f1dba8f366d531b102d705ff31afb7b061c7d43e) @@ -69,17 +69,28 @@ /// the execution of the operation. /// /// The for which to validate the values. + /// The for which to validate the values. /// The for which to validate the values. /// true if has no validation errors; false otherwise. - public static bool Validate(GrassCoverErosionInwardsCalculation calculation, IAssessmentSection assessmentSection) + public static bool Validate(GrassCoverErosionInwardsCalculation calculation, + GrassCoverErosionInwardsFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) { CalculationServiceHelper.LogValidationBegin(); - string[] messages = ValidateInput(calculation.InputParameters, assessmentSection); + string[] hydraulicBoundaryDatabaseMessages = ValidateHydraulicBoundaryDatabase(assessmentSection).ToArray(); + CalculationServiceHelper.LogMessagesAsError(hydraulicBoundaryDatabaseMessages); + if (hydraulicBoundaryDatabaseMessages.Any()) + { + CalculationServiceHelper.LogValidationEnd(); + return false; + } + + string[] messages = ValidateInput(calculation.InputParameters, failureMechanism, assessmentSection).ToArray(); CalculationServiceHelper.LogMessagesAsError(messages); + ValidateNorms(calculation.InputParameters, failureMechanism, assessmentSection); CalculationServiceHelper.LogValidationEnd(); - return !messages.Any(); } @@ -313,13 +324,15 @@ Resources.GrassCoverErosionInwardsCalculationService_DikeHeight), 2, numberOfCalculators); - double norm = calculation.InputParameters.DikeHeightCalculationType == DikeHeightCalculationType.CalculateByAssessmentSectionNorm - ? assessmentSection.FailureMechanismContribution.Norm - : RingtoetsCommonDataCalculationService.ProfileSpecificRequiredProbability( - assessmentSection.FailureMechanismContribution.Norm, - failureMechanismContribution, - generalInput.N); + double norm = GetNormForDikeHeight(calculation.InputParameters, assessmentSection, generalInput, failureMechanismContribution); + var normValid = true; + TargetProbabilityCalculationServiceHelper.ValidateTargetProbability(norm, lm => normValid = false); + if (!normValid) + { + return null; + } + DikeHeightCalculationInput dikeHeightCalculationInput = CreateDikeHeightInput(calculation, norm, generalInput, hydraulicBoundaryDatabaseFilePath, @@ -370,13 +383,15 @@ Resources.GrassCoverErosionInwardsCalculationService_OvertoppingRate), numberOfCalculators, numberOfCalculators); - double norm = calculation.InputParameters.OvertoppingRateCalculationType == OvertoppingRateCalculationType.CalculateByAssessmentSectionNorm - ? assessmentSection.FailureMechanismContribution.Norm - : RingtoetsCommonDataCalculationService.ProfileSpecificRequiredProbability( - assessmentSection.FailureMechanismContribution.Norm, - failureMechanismContribution, - generalInput.N); + double norm = GetNormForOvertoppingRate(calculation.InputParameters, assessmentSection, generalInput, failureMechanismContribution); + var normValid = true; + TargetProbabilityCalculationServiceHelper.ValidateTargetProbability(norm, lm => normValid = false); + if (!normValid) + { + return null; + } + OvertoppingRateCalculationInput overtoppingRateCalculationInput = CreateOvertoppingRateInput(calculation, norm, generalInput, hydraulicBoundaryDatabaseFilePath, @@ -760,28 +775,28 @@ roughnessPoint.Roughness)).ToArray(); } - private static string[] ValidateInput(GrassCoverErosionInwardsInput inputParameters, IAssessmentSection assessmentSection) + private static IEnumerable ValidateHydraulicBoundaryDatabase(IAssessmentSection assessmentSection) { - var validationResults = new List(); - string preprocessorDirectory = assessmentSection.HydraulicBoundaryDatabase.EffectivePreprocessorDirectory(); string databaseFilePathValidationProblem = HydraulicBoundaryDatabaseHelper.ValidateFilesForCalculation(assessmentSection.HydraulicBoundaryDatabase.FilePath, preprocessorDirectory); if (!string.IsNullOrEmpty(databaseFilePathValidationProblem)) { - validationResults.Add(databaseFilePathValidationProblem); + yield return databaseFilePathValidationProblem; } string preprocessorDirectoryValidationProblem = HydraulicBoundaryDatabaseHelper.ValidatePreprocessorDirectory(preprocessorDirectory); if (!string.IsNullOrEmpty(preprocessorDirectoryValidationProblem)) { - validationResults.Add(preprocessorDirectoryValidationProblem); + yield return preprocessorDirectoryValidationProblem; } + } - if (validationResults.Any()) - { - return validationResults.ToArray(); - } + private static IEnumerable ValidateInput(GrassCoverErosionInwardsInput inputParameters, + GrassCoverErosionInwardsFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) + { + var validationResults = new List(); if (inputParameters.HydraulicBoundaryLocation == null) { @@ -800,9 +815,66 @@ validationResults.AddRange(new UseBreakWaterRule(inputParameters).Validate()); - return validationResults.ToArray(); + return validationResults; } + private static void ValidateNorms(GrassCoverErosionInwardsInput inputParameters, + GrassCoverErosionInwardsFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) + { + if (inputParameters.DikeHeightCalculationType != DikeHeightCalculationType.NoCalculation) + { + TargetProbabilityCalculationServiceHelper.ValidateTargetProbability( + GetNormForDikeHeight(inputParameters, + assessmentSection, + failureMechanism.GeneralInput, + failureMechanism.Contribution), + lm => CalculationServiceHelper.LogMessagesAsWarning(new[] + { + "HBN berekening kan niet worden uitgevoerd. " + lm + })); + } + + if (inputParameters.OvertoppingRateCalculationType != OvertoppingRateCalculationType.NoCalculation) + { + TargetProbabilityCalculationServiceHelper.ValidateTargetProbability( + GetNormForOvertoppingRate(inputParameters, + assessmentSection, + failureMechanism.GeneralInput, + failureMechanism.Contribution), + lm => CalculationServiceHelper.LogMessagesAsWarning(new[] + { + "Overslagdebiet berekening kan niet worden uitgevoerd. " + lm + })); + } + } + + private static double GetNormForDikeHeight(GrassCoverErosionInwardsInput input, + IAssessmentSection assessmentSection, + GeneralGrassCoverErosionInwardsInput generalInput, + double failureMechanismContribution) + { + return input.DikeHeightCalculationType == DikeHeightCalculationType.CalculateByAssessmentSectionNorm + ? assessmentSection.FailureMechanismContribution.Norm + : RingtoetsCommonDataCalculationService.ProfileSpecificRequiredProbability( + assessmentSection.FailureMechanismContribution.Norm, + failureMechanismContribution, + generalInput.N); + } + + private static double GetNormForOvertoppingRate(GrassCoverErosionInwardsInput input, + IAssessmentSection assessmentSection, + GeneralGrassCoverErosionInwardsInput generalInput, + double failureMechanismContribution) + { + return input.OvertoppingRateCalculationType == OvertoppingRateCalculationType.CalculateByAssessmentSectionNorm + ? assessmentSection.FailureMechanismContribution.Norm + : RingtoetsCommonDataCalculationService.ProfileSpecificRequiredProbability( + assessmentSection.FailureMechanismContribution.Norm, + failureMechanismContribution, + generalInput.N); + } + private static GeneralResult ConvertIllustrationPointsResult(HydraRingGeneralResult result, string errorMessage) { if (result == null) Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/GrassCoverErosionInwardsCalculationServiceTest.cs =================================================================== diff -u -r9726c1ed2a69caa0792394721d1bcf6dc587f421 -rf1dba8f366d531b102d705ff31afb7b061c7d43e --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/GrassCoverErosionInwardsCalculationServiceTest.cs (.../GrassCoverErosionInwardsCalculationServiceTest.cs) (revision 9726c1ed2a69caa0792394721d1bcf6dc587f421) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/GrassCoverErosionInwardsCalculationServiceTest.cs (.../GrassCoverErosionInwardsCalculationServiceTest.cs) (revision f1dba8f366d531b102d705ff31afb7b061c7d43e) @@ -72,7 +72,9 @@ // Call var isValid = false; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -113,7 +115,9 @@ // Call var isValid = true; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -157,7 +161,9 @@ // Call var isValid = true; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -198,7 +204,9 @@ // Call var isValid = false; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -237,7 +245,9 @@ // Call var isValid = false; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -273,7 +283,9 @@ // Call var isValid = false; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -317,7 +329,9 @@ // Call var isValid = false; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -364,7 +378,9 @@ // Call var isValid = false; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -381,6 +397,92 @@ } [Test] + public void Validate_InvalidNormForDikeHeightCalculation_LogsMessageAndReturnTrue() + { + // Setup + var grassCoverErosionInwardsFailureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + + var mockRepository = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(grassCoverErosionInwardsFailureMechanism, + mockRepository, + validFilePath); + mockRepository.ReplayAll(); + + var calculation = new GrassCoverErosionInwardsCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "name", 2, 2), + DikeProfile = DikeProfileTestFactory.CreateDikeProfile(), + DikeHeightCalculationType = DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability + } + }; + + // Call + var isValid = false; + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string[] msgs = messages.ToArray(); + Assert.AreEqual(3, msgs.Length); + CalculationServiceTestHelper.AssertValidationStartMessage(msgs[0]); + StringAssert.StartsWith("HBN berekening kan niet worden uitgevoerd. " + + "Doelkans is te klein om een berekening uit te kunnen voeren.", msgs[1]); + CalculationServiceTestHelper.AssertValidationEndMessage(msgs[2]); + }); + Assert.IsTrue(isValid); + + mockRepository.VerifyAll(); + } + + [Test] + public void Validate_InvalidNormForOvertoppingRateCalculation_LogsMessageAndReturnTrue() + { + // Setup + var grassCoverErosionInwardsFailureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + + var mockRepository = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(grassCoverErosionInwardsFailureMechanism, + mockRepository, + validFilePath); + mockRepository.ReplayAll(); + + var calculation = new GrassCoverErosionInwardsCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "name", 2, 2), + DikeProfile = DikeProfileTestFactory.CreateDikeProfile(), + OvertoppingRateCalculationType = OvertoppingRateCalculationType.CalculateByProfileSpecificRequiredProbability + } + }; + + // Call + var isValid = false; + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string[] msgs = messages.ToArray(); + Assert.AreEqual(3, msgs.Length); + CalculationServiceTestHelper.AssertValidationStartMessage(msgs[0]); + StringAssert.StartsWith("Overslagdebiet berekening kan niet worden uitgevoerd. " + + "Doelkans is te klein om een berekening uit te kunnen voeren.", msgs[1]); + CalculationServiceTestHelper.AssertValidationEndMessage(msgs[2]); + }); + Assert.IsTrue(isValid); + + mockRepository.VerifyAll(); + } + + [Test] [TestCase(true, 10.0)] [TestCase(false, 10.0)] [TestCase(false, double.NaN)] @@ -402,7 +504,9 @@ // Call var isValid = false; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -440,7 +544,9 @@ // Call var isValid = false; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -483,7 +589,9 @@ // Call var isValid = false; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -526,7 +634,9 @@ // Call var isValid = false; - Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, assessmentSection); + Action call = () => isValid = GrassCoverErosionInwardsCalculationService.Validate(calculation, + grassCoverErosionInwardsFailureMechanism, + assessmentSection); // Assert TestHelper.AssertLogMessages(call, messages => @@ -612,10 +722,12 @@ public void Calculate_CalculationValid_ReturnOutput([Values(true, false)] bool useForeland, [Values(DikeHeightCalculationType.CalculateByAssessmentSectionNorm, DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability, - DikeHeightCalculationType.NoCalculation)] DikeHeightCalculationType dikeHeightCalculationType, + DikeHeightCalculationType.NoCalculation)] + DikeHeightCalculationType dikeHeightCalculationType, [Values(OvertoppingRateCalculationType.CalculateByAssessmentSectionNorm, OvertoppingRateCalculationType.CalculateByProfileSpecificRequiredProbability, - OvertoppingRateCalculationType.NoCalculation)] OvertoppingRateCalculationType overtoppingRateCalculationType, + OvertoppingRateCalculationType.NoCalculation)] + OvertoppingRateCalculationType overtoppingRateCalculationType, [Values(true, false)] bool calculateIllustrationPoints) { // Setup @@ -911,7 +1023,8 @@ public void Calculate_CancelDikeHeightCalculation_CancelsCalculatorAndHasNullOutput( [Values(true, false)] bool cancelBeforeDikeHeightCalculationStarts, [Values(DikeHeightCalculationType.CalculateByAssessmentSectionNorm, - DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability)] DikeHeightCalculationType dikeHeightCalculationType) + DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability)] + DikeHeightCalculationType dikeHeightCalculationType) { // Setup GrassCoverErosionInwardsFailureMechanism failureMechanism = CreateGrassCoverErosionInwardsFailureMechanism(); @@ -970,7 +1083,8 @@ public void Calculate_CancelOvertoppingRateCalculation_CancelsCalculatorAndHasNullOutput( [Values(true, false)] bool cancelBeforeOvertoppingRateCalculationStarts, [Values(OvertoppingRateCalculationType.CalculateByAssessmentSectionNorm, - OvertoppingRateCalculationType.CalculateByProfileSpecificRequiredProbability)] OvertoppingRateCalculationType overtoppingRateCalculationType) + OvertoppingRateCalculationType.CalculateByProfileSpecificRequiredProbability)] + OvertoppingRateCalculationType overtoppingRateCalculationType) { // Setup GrassCoverErosionInwardsFailureMechanism failureMechanism = CreateGrassCoverErosionInwardsFailureMechanism(); @@ -2820,6 +2934,92 @@ mockRepository.VerifyAll(); } + [Test] + public void Calculate_CalculateDikeHeightWithInvalidNorm_DikeHeightOutputNull() + { + // Setup + var grassCoverErosionInwardsFailureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + + var mockRepository = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(grassCoverErosionInwardsFailureMechanism, + mockRepository, + validFilePath); + var overtoppingCalculator = new TestOvertoppingCalculator(); + var dikeHeightCalculator = new TestHydraulicLoadsCalculator(); + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateOvertoppingCalculator(testDataPath, string.Empty)).Return(overtoppingCalculator); + calculatorFactory.Expect(cf => cf.CreateDikeHeightCalculator(testDataPath, string.Empty)).Return(dikeHeightCalculator); + mockRepository.ReplayAll(); + + var calculation = new GrassCoverErosionInwardsCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "name", 2, 2), + DikeProfile = DikeProfileTestFactory.CreateDikeProfile(), + DikeHeightCalculationType = DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability + } + }; + + var service = new GrassCoverErosionInwardsCalculationService(); + + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + service.Calculate(calculation, + assessmentSection, + grassCoverErosionInwardsFailureMechanism.GeneralInput, + grassCoverErosionInwardsFailureMechanism.Contribution, + validFilePath); + + // Assert + Assert.IsNull(calculation.Output.DikeHeightOutput); + } + } + + [Test] + public void Calculate_CalculateOvertoppingRateWithInvalidNorm_OvertoppingRateOutputNull() + { + // Setup + var grassCoverErosionInwardsFailureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + + var mockRepository = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(grassCoverErosionInwardsFailureMechanism, + mockRepository, + validFilePath); + var overtoppingCalculator = new TestOvertoppingCalculator(); + var overtoppingRateCalculator = new TestHydraulicLoadsCalculator(); + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateOvertoppingCalculator(testDataPath, string.Empty)).Return(overtoppingCalculator); + calculatorFactory.Expect(cf => cf.CreateOvertoppingRateCalculator(testDataPath, string.Empty)).Return(overtoppingRateCalculator); + mockRepository.ReplayAll(); + + var calculation = new GrassCoverErosionInwardsCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "name", 2, 2), + DikeProfile = DikeProfileTestFactory.CreateDikeProfile(), + OvertoppingRateCalculationType = OvertoppingRateCalculationType.CalculateByProfileSpecificRequiredProbability + } + }; + + var service = new GrassCoverErosionInwardsCalculationService(); + + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + service.Calculate(calculation, + assessmentSection, + grassCoverErosionInwardsFailureMechanism.GeneralInput, + grassCoverErosionInwardsFailureMechanism.Contribution, + validFilePath); + + // Assert + Assert.IsNull(calculation.Output.OvertoppingRateOutput); + } + } + private static GrassCoverErosionInwardsFailureMechanism CreateGrassCoverErosionInwardsFailureMechanism() { return new GrassCoverErosionInwardsFailureMechanism