Index: Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Integration.Test/StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs =================================================================== diff -u -r73114a1d1b9584c215af6cf47aa309d80cda16a4 -r26bd14a3e6900dd265bdea580e9c6f342593d9ef --- Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Integration.Test/StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs (.../StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs) (revision 73114a1d1b9584c215af6cf47aa309d80cda16a4) +++ Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Integration.Test/StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs (.../StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs) (revision 26bd14a3e6900dd265bdea580e9c6f342593d9ef) @@ -714,15 +714,16 @@ mockRepository.ReplayAll(); IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); - var failureMechanism = new StabilityStoneCoverFailureMechanism(); StabilityStoneCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); calculation.Attach(observer); - CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, - failureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new StabilityStoneCoverFailureMechanism(), + assessmentSection); + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) { activity.Run(); @@ -753,15 +754,16 @@ mockRepository.ReplayAll(); IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); - var failureMechanism = new StabilityStoneCoverFailureMechanism(); StabilityStoneCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); calculation.Attach(observer); - CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, - failureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new StabilityStoneCoverFailureMechanism(), + assessmentSection); + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) { activity.Run(); Index: Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Plugin/WaveImpactAsphaltCoverPlugin.cs =================================================================== diff -u -r5ef2f44bca31b92735dff724f97b717c7c55f912 -r26bd14a3e6900dd265bdea580e9c6f342593d9ef --- Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Plugin/WaveImpactAsphaltCoverPlugin.cs (.../WaveImpactAsphaltCoverPlugin.cs) (revision 5ef2f44bca31b92735dff724f97b717c7c55f912) +++ Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Plugin/WaveImpactAsphaltCoverPlugin.cs (.../WaveImpactAsphaltCoverPlugin.cs) (revision 26bd14a3e6900dd265bdea580e9c6f342593d9ef) @@ -566,11 +566,6 @@ failureMechanism, assessmentSection)) .ToList()); - - foreach (WaveImpactAsphaltCoverWaveConditionsCalculation calculation in calculations) - { - calculation.NotifyObservers(); - } } private static void WaveConditionsCalculationGroupContextOnNodeRemoved(WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext nodeData, object parentNodeData) @@ -664,7 +659,6 @@ context.AssessmentSection.HydraulicBoundaryDatabase.FilePath, context.FailureMechanism, context.AssessmentSection)); - calculation.NotifyObservers(); } private static void WaveConditionsCalculationContextOnNodeRemoved(WaveImpactAsphaltCoverWaveConditionsCalculationContext nodeData, object parentNodeData) Index: Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Service/WaveImpactAsphaltCoverWaveConditionsCalculationActivity.cs =================================================================== diff -u -ra494bde768f1b989d31bff6a801a1816d6f9692e -r26bd14a3e6900dd265bdea580e9c6f342593d9ef --- Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Service/WaveImpactAsphaltCoverWaveConditionsCalculationActivity.cs (.../WaveImpactAsphaltCoverWaveConditionsCalculationActivity.cs) (revision a494bde768f1b989d31bff6a801a1816d6f9692e) +++ Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Service/WaveImpactAsphaltCoverWaveConditionsCalculationActivity.cs (.../WaveImpactAsphaltCoverWaveConditionsCalculationActivity.cs) (revision 26bd14a3e6900dd265bdea580e9c6f342593d9ef) @@ -104,7 +104,7 @@ protected override void OnFinish() { - // something.Notify(); + calculation.NotifyObservers(); } } } \ No newline at end of file Index: Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Integration.Test/WaveImpactAsphaltCoverWaveConditionsCalculationActivityIntegrationTest.cs =================================================================== diff -u -r3370d752e150391d16ebfb96533921d777f4580c -r26bd14a3e6900dd265bdea580e9c6f342593d9ef --- Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Integration.Test/WaveImpactAsphaltCoverWaveConditionsCalculationActivityIntegrationTest.cs (.../WaveImpactAsphaltCoverWaveConditionsCalculationActivityIntegrationTest.cs) (revision 3370d752e150391d16ebfb96533921d777f4580c) +++ Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Integration.Test/WaveImpactAsphaltCoverWaveConditionsCalculationActivityIntegrationTest.cs (.../WaveImpactAsphaltCoverWaveConditionsCalculationActivityIntegrationTest.cs) (revision 26bd14a3e6900dd265bdea580e9c6f342593d9ef) @@ -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; @@ -32,6 +33,7 @@ using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; +using Ringtoets.Common.Service; using Ringtoets.Common.Service.TestUtil; using Ringtoets.HydraRing.Calculation.Calculator.Factory; using Ringtoets.HydraRing.Calculation.Data; @@ -532,6 +534,98 @@ 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(); + + IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); + + WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); + + calculation.Attach(observer); + + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + 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(); + + IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); + + WaveImpactAsphaltCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); + + calculation.Attach(observer); + + CalculatableActivity activity = WaveImpactAsphaltCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity( + calculation, + new WaveImpactAsphaltCoverFailureMechanism(), + 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 WaveImpactAsphaltCoverWaveConditionsCalculation CreateValidCalculation(HydraulicBoundaryLocation hydraulicBoundaryLocation) { return new WaveImpactAsphaltCoverWaveConditionsCalculation