Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Integration.Test/GrassCoverErosionOutwardsWaveConditionsCalculationActivityIntegrationTest.cs =================================================================== diff -u -r623d00969818278225ff9f2524a4b9e9d3b0b1d8 -r4111bcd2332c3de3de91bd524378ddca18e515d7 --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Integration.Test/GrassCoverErosionOutwardsWaveConditionsCalculationActivityIntegrationTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationActivityIntegrationTest.cs) (revision 623d00969818278225ff9f2524a4b9e9d3b0b1d8) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Integration.Test/GrassCoverErosionOutwardsWaveConditionsCalculationActivityIntegrationTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationActivityIntegrationTest.cs) (revision 4111bcd2332c3de3de91bd524378ddca18e515d7) @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using Core.Common.Base; using Core.Common.Base.Data; using Core.Common.Base.Service; using Core.Common.TestUtil; @@ -698,6 +699,110 @@ mockRepository.VerifyAll(); } + [Test] + [TestCaseSource(typeof(HydraRingCalculatorTestCaseProvider), nameof(HydraRingCalculatorTestCaseProvider.GetCalculatorFailingConditions), new object[] + { + nameof(Finish_InvalidCalculation_DoesNotSetOutputAndNotifyObservers) + })] + public void Finish_InvalidCalculation_DoesNotSetOutputAndNotifyObservers(bool endInFailure, + string lastErrorFileContent) + { + // Setup + var mockRepository = new MockRepository(); + var observer = mockRepository.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + + var calculator = new TestWaveConditionsCosineCalculator + { + EndInFailure = endInFailure, + LastErrorFileContent = lastErrorFileContent + }; + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)).Return(calculator).Repeat.Times(3); + mockRepository.ReplayAll(); + + AssessmentSectionStub assessmentSection = CreateAssessmentSection(); + var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); + GrassCoverErosionOutwardsHydraulicBoundaryLocationsTestHelper.SetHydraulicBoundaryLocations( + failureMechanism, + assessmentSection, new[] + { + new TestHydraulicBoundaryLocation() + }); + ConfigureAssessmentSectionWithHydraulicBoundaryOutput(assessmentSection); + + GrassCoverErosionOutwardsWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); + + calculation.Attach(observer); + + CalculatableActivity activity = GrassCoverErosionOutwardsCalculationActivityFactory.CreateCalculationActivity(calculation, + failureMechanism, + assessmentSection); + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + activity.Run(); + } + + // Call + activity.Finish(); + + // Assert + Assert.IsNull(calculation.Output); + mockRepository.VerifyAll(); + } + + [Test] + public void Finish_ValidCalculation_SetsOutputAndNotifyObserversOfCalculation() + { + // Setup + var mockRepository = new MockRepository(); + var observer = mockRepository.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + + var calculatorFactory = mockRepository.StrictMock(); + var waveConditionsCosineCalculator = new TestWaveConditionsCosineCalculator + { + WaveHeight = new Random(39).NextDouble() + }; + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)).Return(waveConditionsCosineCalculator).Repeat.Times(3); + mockRepository.ReplayAll(); + + AssessmentSectionStub assessmentSection = CreateAssessmentSection(); + var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); + GrassCoverErosionOutwardsHydraulicBoundaryLocationsTestHelper.SetHydraulicBoundaryLocations( + failureMechanism, + assessmentSection, new[] + { + new TestHydraulicBoundaryLocation() + }); + ConfigureAssessmentSectionWithHydraulicBoundaryOutput(assessmentSection); + + GrassCoverErosionOutwardsWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); + + calculation.Attach(observer); + + CalculatableActivity activity = GrassCoverErosionOutwardsCalculationActivityFactory.CreateCalculationActivity(calculation, + failureMechanism, + assessmentSection); + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + activity.Run(); + } + + // Call + activity.Finish(); + + // Assert + Assert.IsNotNull(calculation.Output); + Assert.AreEqual(3, calculation.Output.Items.Count()); + foreach (WaveConditionsOutput waveConditionsOutput in calculation.Output.Items) + { + Assert.AreEqual(waveConditionsCosineCalculator.WaveHeight, waveConditionsOutput.WaveHeight, waveConditionsOutput.WaveHeight.GetAccuracy()); + } + + mockRepository.VerifyAll(); + } + private static void ConfigureAssessmentSectionWithHydraulicBoundaryOutput(IAssessmentSection assessmentSection) { assessmentSection.WaterLevelCalculationsForFactorizedLowerLimitNorm.First().Output = new TestHydraulicBoundaryLocationCalculationOutput(9.3);