Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/GrassCoverErosionInwardsInputContextProperties.cs =================================================================== diff -u -r75c87ba087fcb4bf89090d844455b215b25b4a75 -r68f69d1b55ec8a2b5804548507740706b5d824cc --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/GrassCoverErosionInwardsInputContextProperties.cs (.../GrassCoverErosionInwardsInputContextProperties.cs) (revision 75c87ba087fcb4bf89090d844455b215b25b4a75) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/GrassCoverErosionInwardsInputContextProperties.cs (.../GrassCoverErosionInwardsInputContextProperties.cs) (revision 68f69d1b55ec8a2b5804548507740706b5d824cc) @@ -267,8 +267,7 @@ } set { - data.WrappedData.ShouldDikeHeightIllustrationPointsBeCalculated = value; - data.WrappedData.NotifyObservers(); + PropertyChangeHelper.ChangePropertyAndNotify(() => data.WrappedData.ShouldDikeHeightIllustrationPointsBeCalculated = value, propertyChangeHandler); } } @@ -283,8 +282,7 @@ } set { - data.WrappedData.ShouldOvertoppingRateIllustrationPointsBeCalculated = value; - data.WrappedData.NotifyObservers(); + PropertyChangeHelper.ChangePropertyAndNotify(() => data.WrappedData.ShouldOvertoppingRateIllustrationPointsBeCalculated = value, propertyChangeHandler); } } @@ -299,8 +297,7 @@ } set { - data.WrappedData.ShouldOvertoppingOutputIllustrationPointsBeCalculated = value; - data.WrappedData.NotifyObservers(); + PropertyChangeHelper.ChangePropertyAndNotify(() => data.WrappedData.ShouldOvertoppingOutputIllustrationPointsBeCalculated = value, propertyChangeHandler); } } Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationService.cs =================================================================== diff -u -rc77ccbb8b26516270f36ef53110be573839f3470 -r68f69d1b55ec8a2b5804548507740706b5d824cc --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationService.cs (.../GrassCoverErosionInwardsCalculationService.cs) (revision c77ccbb8b26516270f36ef53110be573839f3470) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Service/GrassCoverErosionInwardsCalculationService.cs (.../GrassCoverErosionInwardsCalculationService.cs) (revision 68f69d1b55ec8a2b5804548507740706b5d824cc) @@ -728,7 +728,7 @@ /// The to base the /// to create on. /// - private GeneralResult ConvertIllustrationPointsResult(GeneralResult result, string errorMessage) + public GeneralResult ConvertIllustrationPointsResult(GeneralResult result, string errorMessage) { if (result == null) { Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PropertyClasses/GrassCoverErosionInwardsInputContextPropertiesTest.cs =================================================================== diff -u -r75c87ba087fcb4bf89090d844455b215b25b4a75 -r68f69d1b55ec8a2b5804548507740706b5d824cc --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PropertyClasses/GrassCoverErosionInwardsInputContextPropertiesTest.cs (.../GrassCoverErosionInwardsInputContextPropertiesTest.cs) (revision 75c87ba087fcb4bf89090d844455b215b25b4a75) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PropertyClasses/GrassCoverErosionInwardsInputContextPropertiesTest.cs (.../GrassCoverErosionInwardsInputContextPropertiesTest.cs) (revision 68f69d1b55ec8a2b5804548507740706b5d824cc) @@ -258,6 +258,24 @@ } [Test] + public void ShouldOvertoppingOutputIllustrationPointsBeCalculated_Always_InputChangedAndObservablesNotified() + { + SetPropertyAndVerifyNotifcationsAndOutput(properties => properties.ShouldOvertoppingOutputIllustrationPointsBeCalculated = true); + } + + [Test] + public void ShouldDikeHeightIllustrationPointsBeCalculated_Always_InputChangedAndObservablesNotified() + { + SetPropertyAndVerifyNotifcationsAndOutput(properties => properties.ShouldDikeHeightIllustrationPointsBeCalculated = true); + } + + [Test] + public void ShouldOvertoppingRateIllustrationPointsBeCalculated_Always_InputChangedAndObservablesNotified() + { + SetPropertyAndVerifyNotifcationsAndOutput(properties => properties.ShouldOvertoppingRateIllustrationPointsBeCalculated = true); + } + + [Test] public void SelectedHydraulicBoundaryLocation_Always_InputChangedAndObservablesNotified() { var selectableLocation = new SelectableHydraulicBoundaryLocation(new TestHydraulicBoundaryLocation(), new Point2D(0, 0)); Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/GrassCoverErosionInwardsCalculationServiceTest.cs =================================================================== diff -u -r75c87ba087fcb4bf89090d844455b215b25b4a75 -r68f69d1b55ec8a2b5804548507740706b5d824cc --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/GrassCoverErosionInwardsCalculationServiceTest.cs (.../GrassCoverErosionInwardsCalculationServiceTest.cs) (revision 75c87ba087fcb4bf89090d844455b215b25b4a75) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Service.Test/GrassCoverErosionInwardsCalculationServiceTest.cs (.../GrassCoverErosionInwardsCalculationServiceTest.cs) (revision 68f69d1b55ec8a2b5804548507740706b5d824cc) @@ -29,13 +29,16 @@ using Rhino.Mocks; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.DikeProfiles; +using Ringtoets.Common.Data.Exceptions; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.Probability; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Service.TestUtil; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionInwards.Service.TestUtil; using Ringtoets.HydraRing.Calculation.Calculator.Factory; +using Ringtoets.HydraRing.Calculation.Data.Input.Overtopping; +using Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints; using Ringtoets.HydraRing.Calculation.Exceptions; using Ringtoets.HydraRing.Calculation.TestUtil.Calculator; using Ringtoets.HydraRing.Calculation.TestUtil.IllustrationPoints; @@ -1684,6 +1687,108 @@ } } + + [Test] + public void ConvertIllustrationPointsResult_ResultNull_WarnErrorMessage() + { + // Setup + GeneralResult generalResult = null; + + var errorMessage = "Error Message, input null"; + var service = new GrassCoverErosionInwardsCalculationService(); + + // Call + var exceptionThrown = false; + + // Call + Action call = () => + { + try + { + service.ConvertIllustrationPointsResult(generalResult, errorMessage); + } + catch (IllustrationPointConversionException) + { + exceptionThrown = true; + } + }; + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string[] msgs = messages.ToArray(); + Assert.AreEqual(errorMessage, msgs[0]); + Assert.IsFalse(exceptionThrown); + }); + } + + [Test] + public void Calculate_ValidInputButIllustrationPointResultsInvalid_IllustrationPointsNotSetAndLogsWarning() + { + // Setup + GrassCoverErosionInwardsFailureMechanism failureMechanism = CreateGrassCoverErosionInwardsFailureMechanism(); + + var mockRepository = new MockRepository(); + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateOvertoppingCalculator(testDataPath)).Return(new TestOvertoppingCalculator + { + IllustrationPointsResult = TestGeneralResult.CreateGeneralResultWithSubMechanismIllustrationPoints() + }); + calculatorFactory.Stub(cf => cf.CreateDikeHeightCalculator(testDataPath)).Return(new TestHydraulicLoadsCalculator + { + IllustrationPointsResult = TestGeneralResult.CreateGeneralResultWithSubMechanismIllustrationPoints() + }); + calculatorFactory.Stub(cf => cf.CreateOvertoppingRateCalculator(testDataPath)).Return(new TestHydraulicLoadsCalculator + { + IllustrationPointsResult = TestGeneralResult.CreateGeneralResultWithSubMechanismIllustrationPoints() + }); + IAssessmentSection assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, + mockRepository, + validFile); + mockRepository.ReplayAll(); + + DikeProfile dikeProfile = GetDikeProfile(); + + var hydraulicBoundary = new TestHydraulicBoundaryLocation(); + var calculation = new GrassCoverErosionInwardsCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = hydraulicBoundary, + DikeProfile = dikeProfile, + DikeHeightCalculationType = DikeHeightCalculationType.CalculateByAssessmentSectionNorm, + OvertoppingRateCalculationType = OvertoppingRateCalculationType.CalculateByAssessmentSectionNorm, + UseForeshore = true, + ShouldDikeHeightIllustrationPointsBeCalculated = true, + ShouldOvertoppingOutputIllustrationPointsBeCalculated = false, + ShouldOvertoppingRateIllustrationPointsBeCalculated = false + } + }; + + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + Action call = () => new GrassCoverErosionInwardsCalculationService().Calculate(calculation, + assessmentSectionStub, + failureMechanism.GeneralInput, + failureMechanism.Contribution, + validFile); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string[] msgs = messages.ToArray(); + + Assert.AreEqual(8, msgs.Length); + + CalculationServiceTestHelper.AssertCalculationStartMessage(msgs[0]); + Assert.AreEqual("Het uitlezen van illustratiepunten is mislukt.", msgs[4]); + }); + Assert.IsNotNull(calculation.Output); + Assert.IsNull(calculation.Output.DikeHeightOutput.GeneralFaultTreeIllustrationPoint); + } + + } private static GrassCoverErosionInwardsFailureMechanism CreateGrassCoverErosionInwardsFailureMechanism() { return new GrassCoverErosionInwardsFailureMechanism