Index: Ringtoets/Revetment/test/Ringtoets.Revetment.Service.Test/WaveConditionsCalculationServiceBaseTest.cs =================================================================== diff -u -r631448b5dbf13f2c3c4e411729c9fba4e1e8cdcd -r5f79a720fc22eee311073ce2af9ab7613b2d357b --- Ringtoets/Revetment/test/Ringtoets.Revetment.Service.Test/WaveConditionsCalculationServiceBaseTest.cs (.../WaveConditionsCalculationServiceBaseTest.cs) (revision 631448b5dbf13f2c3c4e411729c9fba4e1e8cdcd) +++ Ringtoets/Revetment/test/Ringtoets.Revetment.Service.Test/WaveConditionsCalculationServiceBaseTest.cs (.../WaveConditionsCalculationServiceBaseTest.cs) (revision 5f79a720fc22eee311073ce2af9ab7613b2d357b) @@ -48,7 +48,7 @@ { private const double validNorm = 0.005; private static readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Service, "HydraRingCalculation"); - private static readonly string validFilePath = Path.Combine(testDataPath, "HRD ijsselmeer.sqlite"); + private static readonly string validHydraulicBoundaryDatabaseFilePath = Path.Combine(testDataPath, "HRD ijsselmeer.sqlite"); private static readonly string validPreprocessorDirectory = TestHelper.GetScratchPadPath(); [Test] @@ -126,7 +126,7 @@ GetValidAssessmentLevel(), new HydraulicBoundaryDatabase { - FilePath = validFilePath, + FilePath = validHydraulicBoundaryDatabaseFilePath, CanUsePreprocessor = true, UsePreprocessor = true, PreprocessorDirectory = invalidPreprocessorDirectory @@ -495,24 +495,44 @@ var c = (RoundedDouble) 0.4; const double norm = 0.2; - string hcldFilePath = Path.Combine(testDataPath, "HRD ijsselmeer.sqlite"); - // Call TestDelegate test = () => new TestWaveConditionsCalculationService().PublicCalculate(a, b, c, norm, null, GetValidAssessmentLevel(), - hcldFilePath, - string.Empty); + GetValidHydraulicBoundaryDatabase()); // Assert var exception = Assert.Throws(test); Assert.AreEqual("waveConditionsInput", exception.ParamName); } [Test] + public void Calculate_HydraulicBoundaryDatabaseNull_ThrowsArgumentNullException() + { + // Setup + var a = (RoundedDouble) 1.0; + var b = (RoundedDouble) 0.8; + var c = (RoundedDouble) 0.4; + const double norm = 0.2; + + // Call + TestDelegate call = () => new TestWaveConditionsCalculationService().PublicCalculate(a, + b, + c, + norm, + GetDefaultValidationInput(), + GetValidAssessmentLevel(), + null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("hydraulicBoundaryDatabase", exception.ParamName); + } + + [Test] [TestCase(true)] [TestCase(false)] public void Calculate_WithoutBreakWater_StartsCalculationWithRightParameters(bool useForeshore) @@ -535,21 +555,14 @@ Orientation = (RoundedDouble) 0 }; - string hcldFilePath = Path.Combine(testDataPath, "HRD ijsselmeer.sqlite"); - var calculator = new TestWaveConditionsCosineCalculator(); RoundedDouble[] waterLevels = input.GetWaterLevels(waterLevel).ToArray(); int nrOfCalculators = waterLevels.Length; var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(Arg.Is.NotNull)) - .WhenCalled(invocation => - { - var settings = (HydraRingCalculationSettings) invocation.Arguments[0]; - Assert.AreEqual(validFilePath, settings.HlcdFilePath); - Assert.IsEmpty(settings.PreprocessorDirectory); - }) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(null)) + .IgnoreArguments() .Return(calculator) .Repeat .Times(nrOfCalculators); @@ -564,8 +577,7 @@ norm, input, waterLevel, - hcldFilePath, - string.Empty); + GetValidHydraulicBoundaryDatabase()); // Assert for (var i = 0; i < nrOfCalculators; i++) @@ -606,22 +618,15 @@ } }; - string hcldFilePath = Path.Combine(testDataPath, "HRD ijsselmeer.sqlite"); - var calculator = new TestWaveConditionsCosineCalculator(); RoundedDouble[] waterLevels = input.GetWaterLevels(waterLevel).ToArray(); int nrOfCalculators = waterLevels.Length; var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(Arg.Is.NotNull)) - .WhenCalled(invocation => - { - var settings = (HydraRingCalculationSettings) invocation.Arguments[0]; - Assert.AreEqual(validFilePath, settings.HlcdFilePath); - Assert.AreEqual(validPreprocessorDirectory, settings.PreprocessorDirectory); - }) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(null)) + .IgnoreArguments() .Return(calculator) .Repeat .Times(nrOfCalculators); @@ -636,8 +641,7 @@ norm, input, waterLevel, - hcldFilePath, - validPreprocessorDirectory); + GetValidHydraulicBoundaryDatabase()); // Assert for (var i = 0; i < nrOfCalculators; i++) @@ -651,15 +655,11 @@ } [Test] - [TestCase(true)] - [TestCase(false)] - public void Calculate_PreprocessorDirectorySet_StartsCalculationWithRightParameters(bool usePreprocessor) + [TestCaseSource(nameof(GetHydraulicBoundaryDatabaseConfigurations))] + public void Calculate_VariousHydraulicBoundaryDatabaseConfigurations_StartsCalculationWithRightParameters( + HydraulicBoundaryDatabase hydraulicBoundaryDatabase) { // Setup - string preprocessorDirectory = usePreprocessor - ? validPreprocessorDirectory - : string.Empty; - var waterLevel = (RoundedDouble) 4.20; var a = (RoundedDouble) 1.0; var b = (RoundedDouble) 0.8; @@ -675,19 +675,24 @@ Orientation = (RoundedDouble) 0 }; - string hcldFilePath = Path.Combine(testDataPath, "HRD ijsselmeer.sqlite"); - var calculator = new TestWaveConditionsCosineCalculator(); int nrOfCalculators = input.GetWaterLevels(waterLevel).Count(); + string expectedHlcdFilePath = Path.Combine(testDataPath, "HLCD.sqlite"); + string expectedPreprocessorDirectory = hydraulicBoundaryDatabase.UsePreprocessor + ? validPreprocessorDirectory + : string.Empty; + var expectedCalculationSettings = new HydraulicBoundaryCalculationSettings(hydraulicBoundaryDatabase.FilePath, + expectedHlcdFilePath, + expectedPreprocessorDirectory); + var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(Arg.Is.NotNull)) .WhenCalled(invocation => { - var settings = (HydraRingCalculationSettings) invocation.Arguments[0]; - Assert.AreEqual(validFilePath, settings.HlcdFilePath); - Assert.AreEqual(preprocessorDirectory, settings.PreprocessorDirectory); + HydraRingCalculationSettingsTestHelper.AssertHydraRingCalculationSettings( + expectedCalculationSettings, (HydraRingCalculationSettings) invocation.Arguments[0]); }) .Return(calculator) .Repeat @@ -703,13 +708,13 @@ norm, input, waterLevel, - hcldFilePath, - preprocessorDirectory); + hydraulicBoundaryDatabase); // Assert for (var i = 0; i < nrOfCalculators; i++) { - Assert.AreEqual(usePreprocessor, calculator.ReceivedInputs.ElementAt(i).PreprocessorSetting.RunPreprocessor); + Assert.AreEqual(hydraulicBoundaryDatabase.UsePreprocessor, + calculator.ReceivedInputs.ElementAt(i).PreprocessorSetting.RunPreprocessor); } } @@ -748,13 +753,8 @@ var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.StrictMock(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(Arg.Is.NotNull)) - .WhenCalled(invocation => - { - var settings = (HydraRingCalculationSettings) invocation.Arguments[0]; - Assert.AreEqual(validFilePath, settings.HlcdFilePath); - Assert.IsEmpty(settings.PreprocessorDirectory); - }) + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(null)) + .IgnoreArguments() .Return(calculatorThatFails) .Repeat .Times(nrOfCalculators); @@ -765,7 +765,6 @@ var c = (RoundedDouble) 0.4; const double norm = 0.2; - string hcldFilePath = Path.Combine(testDataPath, "HRD ijsselmeer.sqlite"); HydraRingCalculationException exception = null; using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) @@ -781,8 +780,7 @@ norm, input, waterLevel, - hcldFilePath, - string.Empty); + GetValidHydraulicBoundaryDatabase()); } catch (HydraRingCalculationException e) { @@ -864,8 +862,6 @@ LowerBoundaryRevetment = waterLevelLowerBoundary }; - string hcldFilePath = Path.Combine(testDataPath, "HRD ijsselmeer.sqlite"); - using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) { var service = new TestWaveConditionsCalculationService(); @@ -877,8 +873,7 @@ norm, input, waterLevel, - hcldFilePath, - string.Empty); + GetValidHydraulicBoundaryDatabase()); // Assert TestHelper.AssertLogMessages(call, messages => @@ -932,13 +927,9 @@ var calculator = new TestWaveConditionsCosineCalculator(); var mockRepository = new MockRepository(); var calculatorFactory = mockRepository.Stub(); - calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(Arg.Is.NotNull)) - .WhenCalled(invocation => - { - var settings = (HydraRingCalculationSettings) invocation.Arguments[0]; - Assert.AreEqual(validFilePath, settings.HlcdFilePath); - Assert.AreEqual(validPreprocessorDirectory, settings.PreprocessorDirectory); - }).Return(calculator); + calculatorFactory.Expect(cf => cf.CreateWaveConditionsCosineCalculator(null)) + .IgnoreArguments() + .Return(calculator); mockRepository.ReplayAll(); using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) @@ -953,8 +944,7 @@ norm, input, waterLevel, - validFilePath, - validPreprocessorDirectory); + GetValidHydraulicBoundaryDatabase()); // Assert Assert.IsTrue(calculator.IsCanceled); @@ -985,13 +975,14 @@ { return new HydraulicBoundaryDatabase { - FilePath = validFilePath, + FilePath = validHydraulicBoundaryDatabaseFilePath, CanUsePreprocessor = true, PreprocessorDirectory = validPreprocessorDirectory }; } - private static WaveConditionsCosineCalculationInput CreateInput(double waterLevel, double a, double b, double c, double norm, WaveConditionsInput input, bool useForeshore, bool useBreakWater) + private static WaveConditionsCosineCalculationInput CreateInput(double waterLevel, double a, double b, double c, double norm, + WaveConditionsInput input, bool useForeshore, bool useBreakWater) { return new WaveConditionsCosineCalculationInput(1, input.Orientation, @@ -1014,6 +1005,27 @@ return (RoundedDouble) 12; } + private static IEnumerable GetHydraulicBoundaryDatabaseConfigurations() + { + yield return new TestCaseData(new HydraulicBoundaryDatabase + { + CanUsePreprocessor = true, + UsePreprocessor = true, + FilePath = validHydraulicBoundaryDatabaseFilePath, + PreprocessorDirectory = validPreprocessorDirectory + }).SetName("UsePreprocessorTrue"); + yield return new TestCaseData(new HydraulicBoundaryDatabase + { + CanUsePreprocessor = true, + FilePath = validHydraulicBoundaryDatabaseFilePath, + PreprocessorDirectory = validPreprocessorDirectory + }).SetName("UsePreprocessorFalse"); + yield return new TestCaseData(new HydraulicBoundaryDatabase + { + FilePath = validHydraulicBoundaryDatabaseFilePath + }).SetName("CanUsePreprocessorFalse"); + } + private class TestWaveConditionsCalculationService : WaveConditionsCalculationServiceBase { public IEnumerable Outputs; @@ -1024,17 +1036,15 @@ double norm, WaveConditionsInput input, RoundedDouble assessmentLevel, - string dbFilePath, - string preprocessorDirectory) + HydraulicBoundaryDatabase hydraulicBoundaryDatabase) { Outputs = CalculateWaveConditions(input, assessmentLevel, a, b, c, norm, - dbFilePath, - preprocessorDirectory); + hydraulicBoundaryDatabase); } } }