Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Service.Test/GrassCoverErosionOutwardsWaveConditionsCalculationServiceTest.cs =================================================================== diff -u -r1d64c85fa6d013812d3f38fa09ae4e7ec82480fe -re07044ef611f4a005447703ffba9f24b7c5acb90 --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Service.Test/GrassCoverErosionOutwardsWaveConditionsCalculationServiceTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationServiceTest.cs) (revision 1d64c85fa6d013812d3f38fa09ae4e7ec82480fe) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Service.Test/GrassCoverErosionOutwardsWaveConditionsCalculationServiceTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationServiceTest.cs) (revision e07044ef611f4a005447703ffba9f24b7c5acb90) @@ -502,6 +502,104 @@ } [Test] + public void Calculate_CalculationFailedWithExceptionAndLastErrorPresent_ExceptionThrown() + { + // Setup + var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism + { + Contribution = 20 + }; + + var mockRepository = new MockRepository(); + var assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStubWithoutBoundaryDatabase(failureMechanism, mockRepository); + mockRepository.ReplayAll(); + + GrassCoverErosionOutwardsWaveConditionsCalculation calculation = GetValidCalculation(); + + using (new HydraRingCalculatorFactoryConfig()) + { + var calculator = ((TestHydraRingCalculatorFactory)HydraRingCalculatorFactory.Instance).WaveConditionsCosineCalculator; + calculator.LastErrorContent = "An error occured"; + calculator.EndInFailure = true; + + // Call + TestDelegate call = () => new GrassCoverErosionOutwardsWaveConditionsCalculationService().Calculate(calculation, + failureMechanism, + assessmentSectionStub, + testDataPath); + + // Assert + Assert.Throws(call); + } + } + + [Test] + public void Calculate_CalculationFailedWithExceptionAndNoLastErrorPresent_ExceptionThrown() + { + // Setup + var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism + { + Contribution = 20 + }; + + var mockRepository = new MockRepository(); + IAssessmentSection assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, + mockRepository); + mockRepository.ReplayAll(); + + GrassCoverErosionOutwardsWaveConditionsCalculation calculation = GetValidCalculation(); + + using (new HydraRingCalculatorFactoryConfig()) + { + var calculator = ((TestHydraRingCalculatorFactory)HydraRingCalculatorFactory.Instance).WaveConditionsCosineCalculator; + calculator.EndInFailure = true; + + // Call + TestDelegate call = () => new GrassCoverErosionOutwardsWaveConditionsCalculationService().Calculate(calculation, + failureMechanism, + assessmentSectionStub, + testDataPath); + + // Assert + Assert.Throws(call); + } + } + + [Test] + public void Calculate_CalculationFailedWithoutExceptionAndWithLastErrorPresent_LogErrorAndThrowException() + { + // Setup + var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism + { + Contribution = 20 + }; + + var mockRepository = new MockRepository(); + IAssessmentSection assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, + mockRepository); + mockRepository.ReplayAll(); + + GrassCoverErosionOutwardsWaveConditionsCalculation calculation = GetValidCalculation(); + + using (new HydraRingCalculatorFactoryConfig()) + { + var calculator = ((TestHydraRingCalculatorFactory)HydraRingCalculatorFactory.Instance).WaveConditionsCosineCalculator; + calculator.EndInFailure = false; + calculator.LastErrorContent = "An error occured"; + + // Call + TestDelegate call = () => new GrassCoverErosionOutwardsWaveConditionsCalculationService().Calculate(calculation, + failureMechanism, + assessmentSectionStub, + testDataPath); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual(calculator.LastErrorContent, exception.Message); + } + } + + [Test] public void Calculate_InnerCalculationFails_ThrowsException() { // Setup