Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/HydraRingCalculatorBase.cs =================================================================== diff -u -r1d3f4583c76e5886ef45b64734f8e408b8c9673f -r7be7725d522fa62ca6c7abadeb13da2b571ae9ab --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/HydraRingCalculatorBase.cs (.../HydraRingCalculatorBase.cs) (revision 1d3f4583c76e5886ef45b64734f8e408b8c9673f) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Calculator/HydraRingCalculatorBase.cs (.../HydraRingCalculatorBase.cs) (revision 7be7725d522fa62ca6c7abadeb13da2b571ae9ab) @@ -41,6 +41,7 @@ /// internal abstract class HydraRingCalculatorBase { + private readonly HydraRingCalculationSettings calculationSettings; private readonly LastErrorFileParser lastErrorFileParser; private readonly IllustrationPointsParser illustrationPointsParser; @@ -93,8 +94,7 @@ throw new ArgumentNullException(nameof(calculationSettings)); } - hlcdDirectory = calculationSettings.HlcdFilePath; - preprocessorDirectory = calculationSettings.PreprocessorDirectory; + this.calculationSettings = calculationSettings; lastErrorFileParser = new LastErrorFileParser(); illustrationPointsParser = new IllustrationPointsParser(); @@ -157,7 +157,7 @@ { try { - if (string.IsNullOrEmpty(preprocessorDirectory) && hydraRingCalculationInput.PreprocessorSetting.RunPreprocessor) + if (string.IsNullOrEmpty(calculationSettings.PreprocessorDirectory) && hydraRingCalculationInput.PreprocessorSetting.RunPreprocessor) { throw new InvalidOperationException("Preprocessor directory required but not specified."); } @@ -171,9 +171,8 @@ var hydraRingInitializationService = new HydraRingInitializationService( hydraRingCalculationInput.FailureMechanismType, sectionId, - hlcdDirectory, OutputDirectory, - preprocessorDirectory); + calculationSettings); hydraRingInitializationService.WriteInitializationScript(); hydraRingConfigurationService.WriteDatabaseCreationScript(hydraRingInitializationService.DatabaseCreationScriptFilePath); Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/HydraRingFileConstants.cs =================================================================== diff -u -r2a81f01756e227d5ce93717b21b87e8a5cd5fcbb -r7be7725d522fa62ca6c7abadeb13da2b571ae9ab --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/HydraRingFileConstants.cs (.../HydraRingFileConstants.cs) (revision 2a81f01756e227d5ce93717b21b87e8a5cd5fcbb) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/HydraRingFileConstants.cs (.../HydraRingFileConstants.cs) (revision 7be7725d522fa62ca6c7abadeb13da2b571ae9ab) @@ -32,21 +32,11 @@ internal const string DesignTablesFileName = "designTable.txt"; /// - /// The file name of the working database which contains input and output. - /// - internal const string WorkingDatabaseFileName = "temp.sqlite"; - - /// /// The tail and extension of the output database which contains output for a calculation. /// internal const string OutputDatabaseFileNameSuffix = "-output.sqlite"; /// - /// The file name of the HLCD database. - /// - internal const string HlcdDatabaseFileName = "HLCD.sqlite"; - - /// /// The file name of the executable of Hydra-Ring. /// internal const string HydraRingExecutableFileName = "MechanismComputation.exe"; Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Services/HydraRingInitializationService.cs =================================================================== diff -u -r2a81f01756e227d5ce93717b21b87e8a5cd5fcbb -r7be7725d522fa62ca6c7abadeb13da2b571ae9ab --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Services/HydraRingInitializationService.cs (.../HydraRingInitializationService.cs) (revision 2a81f01756e227d5ce93717b21b87e8a5cd5fcbb) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Services/HydraRingInitializationService.cs (.../HydraRingInitializationService.cs) (revision 7be7725d522fa62ca6c7abadeb13da2b571ae9ab) @@ -24,6 +24,7 @@ using System.Reflection; using System.Security; using Ringtoets.HydraRing.Calculation.Data; +using Ringtoets.HydraRing.Calculation.Data.Input; using Ringtoets.HydraRing.Calculation.Providers; namespace Ringtoets.HydraRing.Calculation.Services @@ -60,24 +61,29 @@ /// /// The failure mechanism type. /// The section id. - /// The HLCD directory. /// The working directory. - /// The preprocessor directory. - /// Preprocessing is disabled when + /// The + /// which holds all the general information to start a Hydra-Ring calculation. + /// Preprocessing is disabled when /// matches . + /// Thrown when is null. public HydraRingInitializationService(HydraRingFailureMechanismType failureMechanismType, int sectionId, - string hlcdDirectory, string temporaryWorkingDirectory, - string preprocessorDirectory) + HydraRingCalculationSettings settings) { + if (settings == null) + { + throw new ArgumentNullException(nameof(settings)); + } + mechanismId = new FailureMechanismDefaultsProvider().GetFailureMechanismDefaults(failureMechanismType).MechanismId; this.sectionId = sectionId; TemporaryWorkingDirectory = temporaryWorkingDirectory; - hlcdFilePath = Path.Combine(hlcdDirectory, HydraRingFileConstants.HlcdDatabaseFileName); + hlcdFilePath = settings.HlcdFilePath; hydraRingDirectory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), hydraRingBinariesSubDirectory); configurationDatabaseFilePath = Path.Combine(hydraRingDirectory, HydraRingFileConstants.ConfigurationDatabaseFileName); - this.preprocessorDirectory = preprocessorDirectory; + preprocessorDirectory = settings.PreprocessorDirectory; } /// Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Calculator/HydraRingCalculatorBaseTest.cs =================================================================== diff -u -r1d3f4583c76e5886ef45b64734f8e408b8c9673f -r7be7725d522fa62ca6c7abadeb13da2b571ae9ab --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Calculator/HydraRingCalculatorBaseTest.cs (.../HydraRingCalculatorBaseTest.cs) (revision 1d3f4583c76e5886ef45b64734f8e408b8c9673f) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Calculator/HydraRingCalculatorBaseTest.cs (.../HydraRingCalculatorBaseTest.cs) (revision 7be7725d522fa62ca6c7abadeb13da2b571ae9ab) @@ -38,28 +38,17 @@ public class HydraRingCalculatorBaseTest { [Test] - public void Constructor_HlcdDirectoryNull_ThrowsArgumentNullException() + public void Constructor_CalculationSettingsNull_ThrowsArgumentNullException() { // Call - TestDelegate test = () => new TestHydraRingCalculator(null, ""); + TestDelegate call = () => new TestHydraRingCalculator(null); // Assert - string paramName = Assert.Throws(test).ParamName; - Assert.AreEqual("hlcdDirectory", paramName); + var exception = Assert.Throws(call); + Assert.AreEqual("calculationSettings", exception.ParamName); } [Test] - public void Constructor_PreprocessorDirectoryNull_ThrowsArgumentNullException() - { - // Call - TestDelegate test = () => new TestHydraRingCalculator("", null); - - // Assert - string paramName = Assert.Throws(test).ParamName; - Assert.AreEqual("preprocessorDirectory", paramName); - } - - [Test] public void Calculate_NoPreprocessorDirectoryWhenRequired_ThrowsInvalidOperationException() { // Setup @@ -79,17 +68,6 @@ } [Test] - public void Constructor_CalculationSettingsNull_ThrowsArgumentNullException() - { - // Call - TestDelegate call = () => new TestHydraRingCalculator(null); - - // Assert - var exception = Assert.Throws(call); - Assert.AreEqual("calculationSettings", exception.ParamName); - } - - [Test] public void Calculate_WithCustomParser_ParsersExecutedAndOutputSet() { // Setup @@ -153,13 +131,15 @@ public void Calculate_LastErrorFilePresent_LastErrorFileContentSet() { // Setup - var calculator = new TestHydraRingCalculator(CreateHydraRingCalculationSettings(), new TestParser()); + var settings = new HydraRingCalculationSettings("D:\\HLCD.sqlite", string.Empty); + var calculator = new TestHydraRingCalculator(settings, new TestParser()); // Call calculator.PublicCalculate(new TestHydraRingCalculationInput()); // Assert - Assert.AreEqual("Hydraulic database HLCD.sqlite not found.\r\n", calculator.LastErrorFileContent); + string expectedContent = $"Hydraulic database {settings.HlcdFilePath} not found.\r\n"; + Assert.AreEqual(expectedContent, calculator.LastErrorFileContent); } [Test] @@ -189,8 +169,6 @@ { private readonly IHydraRingFileParser parser; - public TestHydraRingCalculator(string hlcdDirectory, string preprocessorDirectory) : base(hlcdDirectory, preprocessorDirectory) {} - public TestHydraRingCalculator(HydraRingCalculationSettings calculationSettings) : base(calculationSettings) {} public TestHydraRingCalculator(HydraRingCalculationSettings calculationSettings, IHydraRingFileParser parser) : base(calculationSettings) Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Services/HydraRingInitializationServiceTest.cs =================================================================== diff -u -r2a81f01756e227d5ce93717b21b87e8a5cd5fcbb -r7be7725d522fa62ca6c7abadeb13da2b571ae9ab --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Services/HydraRingInitializationServiceTest.cs (.../HydraRingInitializationServiceTest.cs) (revision 2a81f01756e227d5ce93717b21b87e8a5cd5fcbb) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Services/HydraRingInitializationServiceTest.cs (.../HydraRingInitializationServiceTest.cs) (revision 7be7725d522fa62ca6c7abadeb13da2b571ae9ab) @@ -25,6 +25,7 @@ using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.HydraRing.Calculation.Data; +using Ringtoets.HydraRing.Calculation.Data.Input; using Ringtoets.HydraRing.Calculation.Services; namespace Ringtoets.HydraRing.Calculation.Test.Services @@ -35,14 +36,33 @@ private readonly string hydraRingDirectory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"HydraRing"); [Test] + public void Constructor_SettingsNull_ThrowsArgumentNullException() + { + // Setup + var random = new Random(21); + + // Call + TestDelegate call = () => new HydraRingInitializationService(random.NextEnumValue(), + random.Next(), + "D:\\work", + null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("settings", exception.ParamName); + } + + [Test] public void ParameteredConstructor_ExpectedValues() { + // Setup + var settings = new HydraRingCalculationSettings("D:\\hlcd\\hlcdFilePath", "D:\\preprocessor"); + // Call var hydraRingInitializationService = new HydraRingInitializationService(HydraRingFailureMechanismType.AssessmentLevel, 700001, - "D:\\hlcd", "D:\\work", - "D:\\preprocessor"); + settings); // Assert Assert.AreEqual("D:\\work\\700001.ini", hydraRingInitializationService.IniFilePath); @@ -51,19 +71,19 @@ Assert.AreEqual("D:\\work", hydraRingInitializationService.TemporaryWorkingDirectory); } - [TestCase(null)] + [Test] [TestCase("")] [TestCase("D:\\preprocessor")] public void GenerateInitializationScript_ReturnsExpectedInitializationScript(string preprocessorDirectory) { // Setup - const string hlcdDirectory = "D:\\hlcd"; + const string hlcdFilePath = "D:\\hlcd\\HlcdFile.sqlite"; + var settings = new HydraRingCalculationSettings(hlcdFilePath, preprocessorDirectory); var hydraRingInitializationService = new HydraRingInitializationService(HydraRingFailureMechanismType.StructuresStructuralFailure, 700001, - hlcdDirectory, TestHelper.GetScratchPadPath(), - preprocessorDirectory); + settings); string expectedInitializationScript = "section = 700001" + Environment.NewLine + "mechanism = 112" + Environment.NewLine + @@ -75,7 +95,7 @@ "projectdbfilename = 700001.sql" + Environment.NewLine + "outputfilename = designTable.txt" + Environment.NewLine + "configdbfilename = " + Path.Combine(hydraRingDirectory, "config.sqlite") + Environment.NewLine + - "hydraulicdbfilename = " + Path.Combine(hlcdDirectory, "HLCD.sqlite") + Environment.NewLine + + "hydraulicdbfilename = " + hlcdFilePath + Environment.NewLine + "designpointOutput = sqlite"; if (!string.IsNullOrEmpty(preprocessorDirectory))