Index: Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Integration.Test/StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs =================================================================== diff -u -r7371a70ed0751d341d41a7b951b780d286f83791 -rf8c28b3b04cdabb62ea37772efcb1f4ebbbf2b9e --- Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Integration.Test/StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs (.../StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs) (revision 7371a70ed0751d341d41a7b951b780d286f83791) +++ Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Integration.Test/StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.cs (.../StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest.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.Service.TestUtil; using Ringtoets.HydraRing.Calculation.Calculator.Factory; @@ -45,17 +46,12 @@ [TestFixture] public class StabilityStoneCoverWaveConditionsCalculationActivityIntegrationTest { - 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 validPreprocessorDirectory = TestHelper.GetScratchPadPath(); + private static readonly string validFilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite"); - [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 mockRepository = new MockRepository(); @@ -79,8 +75,7 @@ var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, testFilePath, stabilityStoneCoverFailureMechanism, - AssessmentSectionHelper.CreateAssessmentSectionStubWithoutBoundaryDatabase( - stabilityStoneCoverFailureMechanism, mockRepository)); + AssessmentSectionHelper.CreateAssessmentSectionStub(stabilityStoneCoverFailureMechanism, mockRepository)); var calculatorFactory = mockRepository.StrictMock(); mockRepository.ReplayAll(); @@ -105,6 +100,58 @@ } [Test] + public void Run_CalculationWithInvalidPreprocessorDirectory_DoesNotPerformCalculationAndLogsError() + { + // Setup + var mockRepository = new MockRepository(); + var calculation = new StabilityStoneCoverWaveConditionsCalculation + { + 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 stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); + + IAssessmentSection assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStubWithoutBoundaryDatabase(stabilityStoneCoverFailureMechanism, mockRepository); + assessmentSectionStub.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(true, "InvalidPreprocessorDirectory"); + + var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, + validFilePath, + stabilityStoneCoverFailureMechanism, + assessmentSectionStub); + var calculatorFactory = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + 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 voor blokken en zuilen 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_Always_SetProgressTexts() { // Setup @@ -115,12 +162,13 @@ var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, validFilePath, stabilityStoneCoverFailureMechanism, - AssessmentSectionHelper.CreateAssessmentSectionStubWithoutBoundaryDatabase( - stabilityStoneCoverFailureMechanism, mockRepository)); + AssessmentSectionHelper.CreateAssessmentSectionStub( + stabilityStoneCoverFailureMechanism, + mockRepository)); int nrOfCalculators = calculation.InputParameters.WaterLevels.Count() * 2; var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(new TestWaveConditionsCosineCalculator()) .Repeat .Times(nrOfCalculators); @@ -155,15 +203,15 @@ StabilityStoneCoverWaveConditionsCalculation calculation = GetValidCalculation(); var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); - IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStubWithoutBoundaryDatabase(stabilityStoneCoverFailureMechanism, - mockRepository); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(stabilityStoneCoverFailureMechanism, + mockRepository); var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, validFilePath, stabilityStoneCoverFailureMechanism, assessmentSection); var calculatorFactory = mockRepository.StrictMock(); var calculator = new TestWaveConditionsCosineCalculator(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(calculator) .Repeat .Times(nrOfCalculators); @@ -229,11 +277,12 @@ var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, validFilePath, stabilityStoneCoverFailureMechanism, - AssessmentSectionHelper.CreateAssessmentSectionStubWithoutBoundaryDatabase( - stabilityStoneCoverFailureMechanism, mockRepository)); + AssessmentSectionHelper.CreateAssessmentSectionStub( + stabilityStoneCoverFailureMechanism, + mockRepository)); var calculatorFactory = mockRepository.StrictMock(); var calculator = new TestWaveConditionsCosineCalculator(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)).Return(calculator); + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)).Return(calculator); mockRepository.ReplayAll(); using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) @@ -283,11 +332,12 @@ var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, validFilePath, stabilityStoneCoverFailureMechanism, - AssessmentSectionHelper.CreateAssessmentSectionStubWithoutBoundaryDatabase( - stabilityStoneCoverFailureMechanism, mockRepository)); + AssessmentSectionHelper.CreateAssessmentSectionStub( + stabilityStoneCoverFailureMechanism, + mockRepository)); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(new TestWaveConditionsCosineCalculator()) .Repeat .Times(4); @@ -350,10 +400,11 @@ var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, validFilePath, stabilityStoneCoverFailureMechanism, - AssessmentSectionHelper.CreateAssessmentSectionStubWithoutBoundaryDatabase( - stabilityStoneCoverFailureMechanism, mockRepository)); + AssessmentSectionHelper.CreateAssessmentSectionStub( + stabilityStoneCoverFailureMechanism, + 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)) @@ -389,12 +440,13 @@ var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, validFilePath, stabilityStoneCoverFailureMechanism, - AssessmentSectionHelper.CreateAssessmentSectionStubWithoutBoundaryDatabase( - stabilityStoneCoverFailureMechanism, mockRepository)); + AssessmentSectionHelper.CreateAssessmentSectionStub( + stabilityStoneCoverFailureMechanism, + mockRepository)); int nrOfCalculators = calculation.InputParameters.WaterLevels.Count() * 2; var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)) .Return(new TestWaveConditionsCosineCalculator()) .Repeat .Times(nrOfCalculators); @@ -426,7 +478,7 @@ StabilityStoneCoverWaveConditionsCalculation calculation = GetValidCalculation(); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath)).Return(new TestWaveConditionsCosineCalculator + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(testDataPath, string.Empty)).Return(new TestWaveConditionsCosineCalculator { EndInFailure = endInFailure, LastErrorFileContent = lastErrorFileContent @@ -464,10 +516,11 @@ var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, validFilePath, stabilityStoneCoverFailureMechanism, - AssessmentSectionHelper.CreateAssessmentSectionStubWithoutBoundaryDatabase( - stabilityStoneCoverFailureMechanism, mockRepository)); + AssessmentSectionHelper.CreateAssessmentSectionStub( + stabilityStoneCoverFailureMechanism, + 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 { EndInFailure = endInFailure, LastErrorFileContent = lastErrorFileContent @@ -485,6 +538,147 @@ mockRepository.VerifyAll(); } + [Test] + public void Run_HydraulicBoundaryDatabaseWithCanUsePreprocessorFalse_CreateWaveConditionsCosineCalculatorAsExpected() + { + // Setup + var mockRepository = new MockRepository(); + StabilityStoneCoverWaveConditionsCalculation calculation = GetValidCalculation(); + + var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); + + IAssessmentSection assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub( + stabilityStoneCoverFailureMechanism, + mockRepository); + + var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase + { + FilePath = validFilePath, + Locations = + { + new HydraulicBoundaryLocation(1300001, string.Empty, 0, 0) + } + }; + + assessmentSectionStub.HydraulicBoundaryDatabase = hydraulicBoundaryDatabase; + + var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, + validFilePath, + stabilityStoneCoverFailureMechanism, + assessmentSectionStub); + int nrOfCalculators = calculation.InputParameters.WaterLevels.Count() * 2; + + 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(); + StabilityStoneCoverWaveConditionsCalculation calculation = GetValidCalculation(); + + var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); + + IAssessmentSection assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub( + stabilityStoneCoverFailureMechanism, + mockRepository); + + var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(true, validPreprocessorDirectory) + { + FilePath = validFilePath, + Locations = + { + new HydraulicBoundaryLocation(1300001, string.Empty, 0, 0) + } + }; + + assessmentSectionStub.HydraulicBoundaryDatabase = hydraulicBoundaryDatabase; + + var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, + validFilePath, + stabilityStoneCoverFailureMechanism, + assessmentSectionStub); + int nrOfCalculators = calculation.InputParameters.WaterLevels.Count() * 2; + + 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(); + StabilityStoneCoverWaveConditionsCalculation calculation = GetValidCalculation(); + + var stabilityStoneCoverFailureMechanism = new StabilityStoneCoverFailureMechanism(); + + IAssessmentSection assessmentSectionStub = AssessmentSectionHelper.CreateAssessmentSectionStub( + stabilityStoneCoverFailureMechanism, + mockRepository); + + var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(false, "InvalidPreprocessorDirectory") + { + FilePath = validFilePath, + Locations = + { + new HydraulicBoundaryLocation(1300001, string.Empty, 0, 0) + } + }; + + assessmentSectionStub.HydraulicBoundaryDatabase = hydraulicBoundaryDatabase; + + var activity = new StabilityStoneCoverWaveConditionsCalculationActivity(calculation, + validFilePath, + stabilityStoneCoverFailureMechanism, + assessmentSectionStub); + int nrOfCalculators = calculation.InputParameters.WaterLevels.Count() * 2; + + 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 StabilityStoneCoverWaveConditionsCalculation GetValidCalculation() { return new StabilityStoneCoverWaveConditionsCalculation