Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Integration.Test/GrassCoverErosionOutwardsWaveConditionsCalculationActivityIntegrationTest.cs =================================================================== diff -u -r7371a70ed0751d341d41a7b951b780d286f83791 -rf8c28b3b04cdabb62ea37772efcb1f4ebbbf2b9e --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Integration.Test/GrassCoverErosionOutwardsWaveConditionsCalculationActivityIntegrationTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationActivityIntegrationTest.cs) (revision 7371a70ed0751d341d41a7b951b780d286f83791) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Integration.Test/GrassCoverErosionOutwardsWaveConditionsCalculationActivityIntegrationTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationActivityIntegrationTest.cs) (revision f8c28b3b04cdabb62ea37772efcb1f4ebbbf2b9e) @@ -29,6 +29,7 @@ using NUnit.Framework; using Rhino.Mocks; using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.IO.FileImporters; using Ringtoets.Common.Service; @@ -48,20 +49,19 @@ [TestFixture] public class GrassCoverErosionOutwardsWaveConditionsCalculationActivityIntegrationTest { - private readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Service, "HydraRingCalculation"); - private string validFilePath; + private static readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Service, "HydraRingCalculation"); + private static readonly string validFilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite"); + private static readonly string validPreprocessorDirectory = TestHelper.GetScratchPadPath(); - [SetUp] - public void SetUp() - { - validFilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite"); - } - [Test] - public void Run_CalculationWithInvalidInput_DoesNotPerformCalculationAndLogsError() + public void Run_CalculationWithInvalidHydraulicBoundaryDatabaseFilePath_DoesNotPerformCalculationAndLogsError() { // Setup - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) + { + HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase() + }; + var calculation = new GrassCoverErosionOutwardsWaveConditionsCalculation { InputParameters = @@ -109,6 +109,59 @@ } [Test] + public void Run_CalculationWithInvalidPreprocessorDirectory_DoesNotPerformCalculationAndLogsError() + { + // Setup + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) + { + HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(true, "InvalidPreprocessorDirectory") + }; + + var calculation = new GrassCoverErosionOutwardsWaveConditionsCalculation + { + InputParameters = + { + ForeshoreProfile = new TestForeshoreProfile(true), + UseForeshore = true, + UseBreakWater = true, + StepSize = WaveConditionsInputStepSize.Half, + LowerBoundaryRevetment = (RoundedDouble) 5.3, + UpperBoundaryRevetment = (RoundedDouble) 10, + UpperBoundaryWaterLevels = (RoundedDouble) 5.4, + LowerBoundaryWaterLevels = (RoundedDouble) 5 + } + }; + + var mockRepository = new MockRepository(); + var calculatorFactory = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var activity = new GrassCoverErosionOutwardsWaveConditionsCalculationActivity(calculation, + validFilePath, + assessmentSection.GrassCoverErosionOutwards, + assessmentSection); + + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + Action call = () => activity.Run(); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string[] msgs = messages.ToArray(); + Assert.AreEqual(4, msgs.Length); + Assert.AreEqual($"Golfcondities berekenen voor '{calculation.Name}' is gestart.", msgs[0]); + CalculationServiceTestHelper.AssertValidationStartMessage(msgs[1]); + Assert.AreEqual("De bestandsmap waar de preprocessor bestanden opslaat is ongeldig. De bestandsmap bestaat niet.", msgs[2]); + CalculationServiceTestHelper.AssertValidationEndMessage(msgs[3]); + }); + Assert.AreEqual(ActivityState.Failed, activity.State); + } + mockRepository.VerifyAll(); + } + + [Test] public void Run_CalculationWithValidCalculation_PerformCalculationAndLogStartAndEnd() { // Setup @@ -126,7 +179,7 @@ var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(new TestWaveConditionsCosineCalculator()) .Repeat .Times(nrOfCalculators); @@ -181,7 +234,7 @@ var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(new TestWaveConditionsCosineCalculator()) .Repeat .Times(nrOfCalculators); @@ -225,7 +278,7 @@ var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(waveConditionsCosineCalculator) .Repeat .Times(nrOfCalculators); @@ -285,7 +338,7 @@ var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)).Return(new TestWaveConditionsCosineCalculator()); + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)).Return(new TestWaveConditionsCosineCalculator()); mockRepository.ReplayAll(); using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) @@ -341,7 +394,7 @@ var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(new TestWaveConditionsCosineCalculator()) .Repeat .Times(nrOfCalculators); @@ -389,7 +442,7 @@ var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(calculator) .Repeat .Times(nrOfCalculators); @@ -435,7 +488,7 @@ var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(waveConditionsCosineCalculator) .Repeat .Times(nrOfCalculators); @@ -452,6 +505,135 @@ mockRepository.VerifyAll(); } + [Test] + public void Run_HydraulicBoundaryDatabaseWithCanUsePreprocessorFalse_CreateWaveConditionsCosineCalculatorAsExpected() + { + // Setup + var mockRepository = new MockRepository(); + var grassCoverErosionOutwardsFailureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) + { + HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase + { + FilePath = validFilePath, + Locations = + { + new HydraulicBoundaryLocation(1300001, string.Empty, 0, 0) + } + } + }; + + GrassCoverErosionOutwardsWaveConditionsCalculation calculation = GetValidCalculation(assessmentSection); + + var activity = new GrassCoverErosionOutwardsWaveConditionsCalculationActivity(calculation, + validFilePath, + grassCoverErosionOutwardsFailureMechanism, + assessmentSection); + int nrOfCalculators = calculation.InputParameters.WaterLevels.Count(); + + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) + .Return(new TestWaveConditionsCosineCalculator()) + .Repeat + .Times(nrOfCalculators); + mockRepository.ReplayAll(); + + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + activity.Run(); + } + + // Assert + mockRepository.VerifyAll(); + } + + [Test] + public void Run_HydraulicBoundaryDatabaseWithUsePreprocessorTrue_CreateWaveConditionsCosineCalculatorAsExpected() + { + // Setup + var mockRepository = new MockRepository(); + var grassCoverErosionOutwardsFailureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) + { + HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(true, validPreprocessorDirectory) + { + FilePath = validFilePath, + Locations = + { + new HydraulicBoundaryLocation(1300001, string.Empty, 0, 0) + } + } + }; + + GrassCoverErosionOutwardsWaveConditionsCalculation calculation = GetValidCalculation(assessmentSection); + + var activity = new GrassCoverErosionOutwardsWaveConditionsCalculationActivity(calculation, + validFilePath, + grassCoverErosionOutwardsFailureMechanism, + assessmentSection); + int nrOfCalculators = calculation.InputParameters.WaterLevels.Count(); + + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, validPreprocessorDirectory)) + .Return(new TestWaveConditionsCosineCalculator()) + .Repeat + .Times(nrOfCalculators); + mockRepository.ReplayAll(); + + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + activity.Run(); + } + + // Assert + mockRepository.VerifyAll(); + } + + [Test] + public void Run_HydraulicBoundaryDatabaseWithUsePreprocessorFalse_CreateWaveConditionsCosineCalculatorAsExpected() + { + // Setup + var mockRepository = new MockRepository(); + var grassCoverErosionOutwardsFailureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) + { + HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(false, "InvalidPreprocessorDirectory") + { + FilePath = validFilePath, + Locations = + { + new HydraulicBoundaryLocation(1300001, string.Empty, 0, 0) + } + } + }; + + GrassCoverErosionOutwardsWaveConditionsCalculation calculation = GetValidCalculation(assessmentSection); + + var activity = new GrassCoverErosionOutwardsWaveConditionsCalculationActivity(calculation, + validFilePath, + grassCoverErosionOutwardsFailureMechanism, + assessmentSection); + int nrOfCalculators = calculation.InputParameters.WaterLevels.Count(); + + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) + .Return(new TestWaveConditionsCosineCalculator()) + .Repeat + .Times(nrOfCalculators); + mockRepository.ReplayAll(); + + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + activity.Run(); + } + + // Assert + mockRepository.VerifyAll(); + } + private static GrassCoverErosionOutwardsWaveConditionsCalculation GetValidCalculation(AssessmentSection assessmentSection) { var calculation = new GrassCoverErosionOutwardsWaveConditionsCalculation @@ -473,7 +655,7 @@ return calculation; } - private void ImportHydraulicBoundaryDatabase(AssessmentSection assessmentSection) + private static void ImportHydraulicBoundaryDatabase(AssessmentSection assessmentSection) { using (var importer = new HydraulicBoundaryDatabaseImporter()) {