Index: Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Integration.Test/StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs =================================================================== diff -u -r3370d752e150391d16ebfb96533921d777f4580c -r73114a1d1b9584c215af6cf47aa309d80cda16a4 --- Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Integration.Test/StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs (.../StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs) (revision 3370d752e150391d16ebfb96533921d777f4580c) +++ Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Integration.Test/StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs (.../StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs) (revision 73114a1d1b9584c215af6cf47aa309d80cda16a4) @@ -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; @@ -55,17 +57,24 @@ public void Run_CalculationWithInvalidHydraulicBoundaryDatabaseFilePath_DoesNotPerformCalculationAndLogsError() { // Setup - IAssessmentSection assessmentSection = CreateAssessmentSectionWithHydraulicBoundaryOutput(); - StabilityStoneCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); - string invalidFilePath = Path.Combine(testDataPath, "NonExisting.sqlite"); + var assessmentSection = new AssessmentSectionStub(); + assessmentSection.HydraulicBoundaryDatabase.FilePath = invalidFilePath; + + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + assessmentSection.SetHydraulicBoundaryLocationCalculations(new[] + { + hydraulicBoundaryLocation + }); + + StabilityStoneCoverWaveConditionsCalculation calculation = CreateValidCalculation(hydraulicBoundaryLocation); + var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - invalidFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); @@ -105,10 +114,9 @@ var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); @@ -146,10 +154,9 @@ var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); @@ -176,7 +183,6 @@ mockRepository.VerifyAll(); } - [Test] public void Run_Always_SetProgressTexts() { @@ -186,10 +192,9 @@ var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); RoundedDouble[] waterLevels = GetWaterLevels(calculation, assessmentSection).ToArray(); int nrOfCalculators = waterLevels.Length * 2; @@ -238,10 +243,9 @@ var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); @@ -314,10 +318,9 @@ var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); @@ -370,10 +373,9 @@ var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); @@ -439,10 +441,9 @@ var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); @@ -481,10 +482,9 @@ var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); int nrOfCalculators = GetWaterLevels(calculation, assessmentSection).Count() * 2; @@ -523,10 +523,9 @@ var failureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - failureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + failureMechanism, + assessmentSection); var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); @@ -562,10 +561,9 @@ var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); @@ -597,10 +595,9 @@ var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); int nrOfCalculators = GetWaterLevels(calculation, assessmentSection).Count() * 2; @@ -635,10 +632,9 @@ assessmentSection.HydraulicBoundaryDatabase.UsePreprocessor = true; assessmentSection.HydraulicBoundaryDatabase.PreprocessorDirectory = validPreprocessorDirectory; - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); int nrOfCalculators = GetWaterLevels(calculation, assessmentSection).Count() * 2; var mockRepository = new MockRepository(); @@ -672,10 +668,9 @@ assessmentSection.HydraulicBoundaryDatabase.UsePreprocessor = false; assessmentSection.HydraulicBoundaryDatabase.PreprocessorDirectory = "InvalidPreprocessorDirectory"; - var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, - validFilePath, - stabilityStoneCoverFailureMechanism, - assessmentSection); + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.CreateCalculationActivity(calculation, + stabilityStoneCoverFailureMechanism, + assessmentSection); int nrOfCalculators = GetWaterLevels(calculation, assessmentSection).Count() * 2; var mockRepository = new MockRepository(); @@ -696,6 +691,102 @@ 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(); + var failureMechanism = new StabilityStoneCoverFailureMechanism(); + + StabilityStoneCoverWaveConditionsCalculation calculation = CreateValidCalculation(assessmentSection.HydraulicBoundaryDatabase.Locations.First()); + + calculation.Attach(observer); + + CalculatableActivity activity = StabilityStoneCoverWaveConditionsCalculationActivityFactory.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(6); + 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); + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + activity.Run(); + } + + // Call + activity.Finish(); + + // Assert + Assert.IsNotNull(calculation.Output); + Assert.AreEqual(3, calculation.Output.BlocksOutput.Count()); + foreach (WaveConditionsOutput waveConditionsOutput in calculation.Output.BlocksOutput) + { + Assert.AreEqual(waveConditionsCosineCalculator.WaveHeight, waveConditionsOutput.WaveHeight, waveConditionsOutput.WaveHeight.GetAccuracy()); + } + + Assert.AreEqual(3, calculation.Output.ColumnsOutput.Count()); + foreach (WaveConditionsOutput waveConditionsOutput in calculation.Output.ColumnsOutput) + { + Assert.AreEqual(waveConditionsCosineCalculator.WaveHeight, waveConditionsOutput.WaveHeight, waveConditionsOutput.WaveHeight.GetAccuracy()); + } + + mockRepository.VerifyAll(); + } + private static StabilityStoneCoverWaveConditionsCalculation CreateValidCalculation(HydraulicBoundaryLocation hydraulicBoundaryLocation) { return new StabilityStoneCoverWaveConditionsCalculation