Index: Ringtoets/Common/src/Ringtoets.Common.IO/Configurations/Import/CalculationConfigurationImporter.cs =================================================================== diff -u -rd1bf253a0e3f11a168b4e185c4413c23995a1e8b -r214457ab765b5adc9c4b6df04e34f97ebe11fb8e --- Ringtoets/Common/src/Ringtoets.Common.IO/Configurations/Import/CalculationConfigurationImporter.cs (.../CalculationConfigurationImporter.cs) (revision d1bf253a0e3f11a168b4e185c4413c23995a1e8b) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Configurations/Import/CalculationConfigurationImporter.cs (.../CalculationConfigurationImporter.cs) (revision 214457ab765b5adc9c4b6df04e34f97ebe11fb8e) @@ -299,6 +299,43 @@ } } + /// + /// Assigns the parameters to the . + /// + /// The scenario configuration containing values for the parameters. + /// The input to assign the values to. + /// true if no was giver, or when + /// the is not empty. false otherwise. + protected bool TrySetScenarioParameters(ScenarioConfiguration scenarioConfiguration, ICalculationScenario scenario) + { + if (scenarioConfiguration == null) + { + return true; + } + + bool hasContribution = scenarioConfiguration.Contribution.HasValue; + bool hasRelevance = scenarioConfiguration.IsRelevant.HasValue; + + if (!hasContribution && !hasRelevance) + { + Log.LogCalculationConversionError(Resources.CalculationConfigurationImporter_TrySetScenarioParameters_Scenario_empty, + scenario.Name); + return false; + } + + if (hasContribution) + { + scenario.Contribution = (RoundedDouble)scenarioConfiguration.Contribution.Value; + } + + if (hasRelevance) + { + scenario.IsRelevant = scenarioConfiguration.IsRelevant.Value; + } + + return true; + } + private ReadResult ReadConfiguration() { try Index: Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs =================================================================== diff -u -r803d02ac855a1ac3ef4881e4557ae14209882411 -r214457ab765b5adc9c4b6df04e34f97ebe11fb8e --- Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 803d02ac855a1ac3ef4881e4557ae14209882411) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 214457ab765b5adc9c4b6df04e34f97ebe11fb8e) @@ -235,6 +235,15 @@ } /// + /// Looks up a localized string similar to Er is voor scenario geen contributie of relevantie opgegeven.. + /// + public static string CalculationConfigurationImporter_TrySetScenarioParameters_Scenario_empty { + get { + return ResourceManager.GetString("CalculationConfigurationImporter_TrySetScenarioParameters_Scenario_empty", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Er kan geen spreiding voor stochast 'modelfactoroverloopdebiet' opgegeven worden.. /// public static string CalculationConfigurationImporter_ValidateStochasts_Cannot_define_spread_for_ModelFactorSuperCriticalFlow { Index: Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx =================================================================== diff -u -r803d02ac855a1ac3ef4881e4557ae14209882411 -r214457ab765b5adc9c4b6df04e34f97ebe11fb8e --- Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx (.../Resources.resx) (revision 803d02ac855a1ac3ef4881e4557ae14209882411) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx (.../Resources.resx) (revision 214457ab765b5adc9c4b6df04e34f97ebe11fb8e) @@ -662,4 +662,7 @@ ..\Resources\ScenarioSchema.xsd;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + Er is voor scenario geen contributie of relevantie opgegeven. + \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/Configurations/Import/CalculationConfigurationImporterTest.cs =================================================================== diff -u -rd1bf253a0e3f11a168b4e185c4413c23995a1e8b -r214457ab765b5adc9c4b6df04e34f97ebe11fb8e --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/Configurations/Import/CalculationConfigurationImporterTest.cs (.../CalculationConfigurationImporterTest.cs) (revision d1bf253a0e3f11a168b4e185c4413c23995a1e8b) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/Configurations/Import/CalculationConfigurationImporterTest.cs (.../CalculationConfigurationImporterTest.cs) (revision 214457ab765b5adc9c4b6df04e34f97ebe11fb8e) @@ -29,6 +29,7 @@ using Core.Common.Base.IO; using Core.Common.TestUtil; using NUnit.Framework; +using Rhino.Mocks; using Ringtoets.Common.Data; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.DikeProfiles; @@ -706,6 +707,109 @@ Assert.AreSame(expectedProfile, structure); } + [Test] + public void PublicTrySetScenarioParameters_NoScenario_NoDataAddedToModelReturnsTrue() + { + // Setup + var mockRepository = new MockRepository(); + var calculationScenario = mockRepository.StrictMock(); + mockRepository.ReplayAll(); + + var importer = new CalculationConfigurationImporter(Path.Combine(readerPath, "validConfiguration.xml"), + new CalculationGroup()); + + // Call + bool successful = importer.PublicTrySetScenarioParameters(null, calculationScenario); + + // Assert + Assert.IsTrue(successful); + + mockRepository.VerifyAll(); + } + + [Test] + public void PublicTrySetScenarioParameters_ScenarioEmpty_LogMessageReturnsFalse() + { + // Setup + const string calculationScenarioName = "calculationScenario"; + + var mockRepository = new MockRepository(); + var calculationScenario = mockRepository.StrictMock(); + calculationScenario.Expect(cs => cs.Name).Return(calculationScenarioName); + mockRepository.ReplayAll(); + + var importer = new CalculationConfigurationImporter(Path.Combine(readerPath, "validConfiguration.xml"), + new CalculationGroup()); + + // Call + var successful = true; + Action call = () => successful = importer.PublicTrySetScenarioParameters(new ScenarioConfiguration(), + calculationScenario); + + // Assert + string expectedMessage = "Er is voor scenario geen contributie of relevantie opgegeven. " + + $"Berekening '{calculationScenarioName}' is overgeslagen."; + TestHelper.AssertLogMessageWithLevelIsGenerated(call, Tuple.Create(expectedMessage, LogLevelConstant.Error), 1); + Assert.IsFalse(successful); + + mockRepository.VerifyAll(); + } + + [Test] + public void Import_ScenarioWithContributionSet_DataAddedToModelReturnsTrue() + { + // Setup + var random = new Random(45); + double contribution = random.NextDouble(); + + var mockRepository = new MockRepository(); + var calculationScenario = mockRepository.StrictMock(); + calculationScenario.Expect(cs => cs.Contribution) + .SetPropertyWithArgument((RoundedDouble) contribution); + mockRepository.ReplayAll(); + + var importer = new CalculationConfigurationImporter(Path.Combine(readerPath, "validConfiguration.xml"), + new CalculationGroup()); + + // Call + bool successful = importer.PublicTrySetScenarioParameters(new ScenarioConfiguration + { + Contribution = contribution + }, calculationScenario); + + // Assert + Assert.IsTrue(successful); + + mockRepository.VerifyAll(); + } + + [Test] + public void Import_ScenarioWithRevelantSet_DataAddedToModelReturnsTrue() + { + // Setup + var random = new Random(45); + bool isRelevant = random.NextBoolean(); + + var mockRepository = new MockRepository(); + var calculationScenario = mockRepository.StrictMock(); + calculationScenario.Expect(cs => cs.IsRelevant).SetPropertyWithArgument(isRelevant); + mockRepository.ReplayAll(); + + var importer = new CalculationConfigurationImporter(Path.Combine(readerPath, "validConfiguration.xml"), + new CalculationGroup()); + + // Call + bool successful = importer.PublicTrySetScenarioParameters(new ScenarioConfiguration + { + IsRelevant = isRelevant + }, calculationScenario); + + // Assert + Assert.IsTrue(successful); + + mockRepository.VerifyAll(); + } + private class CalculationConfigurationImporter : CalculationConfigurationImporter { public CalculationConfigurationImporter(string filePath, CalculationGroup importTarget) @@ -732,6 +836,11 @@ return TryReadStructure(locationName, calculationName, structures, out location); } + public bool PublicTrySetScenarioParameters(ScenarioConfiguration scenarioConfiguration, ICalculationScenario scenario) + { + return TrySetScenarioParameters(scenarioConfiguration, scenario); + } + protected override CalculationConfigurationReader CreateCalculationConfigurationReader(string xmlFilePath) { return new CalculationConfigurationReader(xmlFilePath); Index: Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.IO/Configurations/MacroStabilityInwardsCalculationConfigurationImporter.cs =================================================================== diff -u -r681fe6f5c04ea2acdb99801dd749a11a174d5b42 -r214457ab765b5adc9c4b6df04e34f97ebe11fb8e --- Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.IO/Configurations/MacroStabilityInwardsCalculationConfigurationImporter.cs (.../MacroStabilityInwardsCalculationConfigurationImporter.cs) (revision 681fe6f5c04ea2acdb99801dd749a11a174d5b42) +++ Ringtoets/MacroStabilityInwards/src/Ringtoets.MacroStabilityInwards.IO/Configurations/MacroStabilityInwardsCalculationConfigurationImporter.cs (.../MacroStabilityInwardsCalculationConfigurationImporter.cs) (revision 214457ab765b5adc9c4b6df04e34f97ebe11fb8e) @@ -25,6 +25,7 @@ using Core.Common.Base.Data; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.Hydraulics; +using Ringtoets.Common.IO.Configurations; using Ringtoets.Common.IO.Configurations.Helpers; using Ringtoets.Common.IO.Configurations.Import; using Ringtoets.MacroStabilityInwards.Data; @@ -89,7 +90,8 @@ if (TryReadHydraulicBoundaryData(calculationConfiguration, calculation) && TryReadSurfaceLine(calculationConfiguration, calculation) && TryReadStochasticSoilModel(calculationConfiguration, calculation) - && TryReadStochasticSoilProfile(calculationConfiguration, calculation)) + && TryReadStochasticSoilProfile(calculationConfiguration, calculation) + && TrySetScenarioParameters(calculationConfiguration.Scenario, calculation)) { return calculation; } Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/Configurations/MacroStabilityInwardsCalculationConfigurationImporterTest.cs =================================================================== diff -u -r07783a47e1cfb0bd793eaba29c7567cb17e0b367 -r214457ab765b5adc9c4b6df04e34f97ebe11fb8e --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/Configurations/MacroStabilityInwardsCalculationConfigurationImporterTest.cs (.../MacroStabilityInwardsCalculationConfigurationImporterTest.cs) (revision 07783a47e1cfb0bd793eaba29c7567cb17e0b367) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/Configurations/MacroStabilityInwardsCalculationConfigurationImporterTest.cs (.../MacroStabilityInwardsCalculationConfigurationImporterTest.cs) (revision 214457ab765b5adc9c4b6df04e34f97ebe11fb8e) @@ -38,9 +38,12 @@ [TestFixture] public class MacroStabilityInwardsCalculationConfigurationImporterTest { - private readonly string readerPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.MacroStabilityInwards.IO, nameof(MacroStabilityInwardsCalculationConfigurationReader)); - private readonly string importerPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.MacroStabilityInwards.IO, nameof(MacroStabilityInwardsCalculationConfigurationImporter)); + private readonly string readerPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.MacroStabilityInwards.IO, + nameof(MacroStabilityInwardsCalculationConfigurationReader)); + private readonly string importerPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.MacroStabilityInwards.IO, + nameof(MacroStabilityInwardsCalculationConfigurationImporter)); + [Test] public void Constructor_ExpectedValues() { @@ -277,6 +280,94 @@ } [Test] + public void Import_ScenarioEmpty_LogMessageAndContinueImport() + { + // Setup + string filePath = Path.Combine(importerPath, "validConfigurationCalculationContainingEmptyScenario.xml"); + + var calculationGroup = new CalculationGroup(); + + var pipingFailureMechanism = new MacroStabilityInwardsFailureMechanism(); + + var importer = new MacroStabilityInwardsCalculationConfigurationImporter(filePath, + calculationGroup, + Enumerable.Empty(), + pipingFailureMechanism); + + // Call + var successful = false; + Action call = () => successful = importer.Import(); + + // Assert + const string expectedMessage = "Er is voor scenario geen contributie of relevantie opgegeven. Berekening 'Calculation' is overgeslagen."; + TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); + Assert.IsTrue(successful); + CollectionAssert.IsEmpty(calculationGroup.Children); + } + + [Test] + public void Import_ScenarioWithContributionSet_DataAddedToModel() + { + // Setup + string filePath = Path.Combine(importerPath, "validConfigurationScenarioContributionOnly.xml"); + + var calculationGroup = new CalculationGroup(); + + var pipingFailureMechanism = new MacroStabilityInwardsFailureMechanism(); + + var importer = new MacroStabilityInwardsCalculationConfigurationImporter(filePath, + calculationGroup, + Enumerable.Empty(), + pipingFailureMechanism); + + // Call + bool successful = importer.Import(); + + // Assert + Assert.IsTrue(successful); + + var expectedCalculation = new MacroStabilityInwardsCalculationScenario(new GeneralMacroStabilityInwardsInput()) + { + Name = "Calculation", + Contribution = (RoundedDouble) 8.8 + }; + + Assert.AreEqual(1, calculationGroup.Children.Count); + AssertMacroStabilityInwardsCalculationScenario(expectedCalculation, (MacroStabilityInwardsCalculationScenario) calculationGroup.Children[0]); + } + + [Test] + public void Import_ScenarioWithRevelantSet_DataAddedToModel() + { + // Setup + string filePath = Path.Combine(importerPath, "validConfigurationScenarioRevelantOnly.xml"); + + var calculationGroup = new CalculationGroup(); + + var pipingFailureMechanism = new MacroStabilityInwardsFailureMechanism(); + + var importer = new MacroStabilityInwardsCalculationConfigurationImporter(filePath, + calculationGroup, + Enumerable.Empty(), + pipingFailureMechanism); + + // Call + bool successful = importer.Import(); + + // Assert + Assert.IsTrue(successful); + + var expectedCalculation = new MacroStabilityInwardsCalculationScenario(new GeneralMacroStabilityInwardsInput()) + { + Name = "Calculation", + IsRelevant = false + }; + + Assert.AreEqual(1, calculationGroup.Children.Count); + AssertMacroStabilityInwardsCalculationScenario(expectedCalculation, (MacroStabilityInwardsCalculationScenario) calculationGroup.Children[0]); + } + + [Test] [TestCase(false, "validConfigurationFullCalculationContainingHydraulicBoundaryLocation.xml")] [TestCase(true, "validConfigurationFullCalculationContainingAssessmentLevel.xml")] public void Import_ValidConfigurationWithValidHydraulicBoundaryData_DataAddedToModel(bool manualAssessmentLevel, string file) @@ -346,7 +437,9 @@ SurfaceLine = surfaceLine, StochasticSoilModel = stochasticSoilModel, StochasticSoilProfile = stochasticSoilProfile - } + }, + IsRelevant = false, + Contribution = (RoundedDouble) 8.8 }; if (manualAssessmentLevel) { @@ -357,7 +450,8 @@ AssertMacroStabilityInwardsCalculationScenario(expectedCalculation, (MacroStabilityInwardsCalculationScenario) calculationGroup.Children[0]); } - private static void AssertMacroStabilityInwardsCalculationScenario(MacroStabilityInwardsCalculationScenario expectedCalculation, MacroStabilityInwardsCalculationScenario actualCalculation) + private static void AssertMacroStabilityInwardsCalculationScenario(MacroStabilityInwardsCalculationScenario expectedCalculation, + MacroStabilityInwardsCalculationScenario actualCalculation) { Assert.AreEqual(expectedCalculation.Name, actualCalculation.Name); Assert.AreEqual(expectedCalculation.InputParameters.UseAssessmentLevelManualInput, actualCalculation.InputParameters.UseAssessmentLevelManualInput); @@ -372,6 +466,9 @@ Assert.AreSame(expectedCalculation.InputParameters.SurfaceLine, actualCalculation.InputParameters.SurfaceLine); Assert.AreSame(expectedCalculation.InputParameters.StochasticSoilModel, actualCalculation.InputParameters.StochasticSoilModel); Assert.AreSame(expectedCalculation.InputParameters.StochasticSoilProfile, actualCalculation.InputParameters.StochasticSoilProfile); + + Assert.AreEqual(expectedCalculation.IsRelevant, actualCalculation.IsRelevant); + Assert.AreEqual(expectedCalculation.Contribution, actualCalculation.Contribution); } } } \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/test-data/MacroStabilityInwardsCalculationConfigurationImporter/validConfigurationCalculationContainingEmptyScenario.xml =================================================================== diff -u --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/test-data/MacroStabilityInwardsCalculationConfigurationImporter/validConfigurationCalculationContainingEmptyScenario.xml (revision 0) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/test-data/MacroStabilityInwardsCalculationConfigurationImporter/validConfigurationCalculationContainingEmptyScenario.xml (revision 214457ab765b5adc9c4b6df04e34f97ebe11fb8e) @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/test-data/MacroStabilityInwardsCalculationConfigurationImporter/validConfigurationScenarioContributionOnly.xml =================================================================== diff -u --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/test-data/MacroStabilityInwardsCalculationConfigurationImporter/validConfigurationScenarioContributionOnly.xml (revision 0) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/test-data/MacroStabilityInwardsCalculationConfigurationImporter/validConfigurationScenarioContributionOnly.xml (revision 214457ab765b5adc9c4b6df04e34f97ebe11fb8e) @@ -0,0 +1,8 @@ + + + + + 8.8 + + + \ No newline at end of file Index: Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/test-data/MacroStabilityInwardsCalculationConfigurationImporter/validConfigurationScenarioRevelantOnly.xml =================================================================== diff -u --- Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/test-data/MacroStabilityInwardsCalculationConfigurationImporter/validConfigurationScenarioRevelantOnly.xml (revision 0) +++ Ringtoets/MacroStabilityInwards/test/Ringtoets.MacroStabilityInwards.IO.Test/test-data/MacroStabilityInwardsCalculationConfigurationImporter/validConfigurationScenarioRevelantOnly.xml (revision 214457ab765b5adc9c4b6df04e34f97ebe11fb8e) @@ -0,0 +1,8 @@ + + + + + false + + + \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Configurations/PipingCalculationConfigurationImporter.cs =================================================================== diff -u -rc26decf7d5782696eb120ad34b1dccf675eec193 -r214457ab765b5adc9c4b6df04e34f97ebe11fb8e --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Configurations/PipingCalculationConfigurationImporter.cs (.../PipingCalculationConfigurationImporter.cs) (revision c26decf7d5782696eb120ad34b1dccf675eec193) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Configurations/PipingCalculationConfigurationImporter.cs (.../PipingCalculationConfigurationImporter.cs) (revision 214457ab765b5adc9c4b6df04e34f97ebe11fb8e) @@ -25,7 +25,6 @@ using Core.Common.Base.Data; using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.Hydraulics; -using Ringtoets.Common.IO.Configurations; using Ringtoets.Common.IO.Configurations.Helpers; using Ringtoets.Common.IO.Configurations.Import; using Ringtoets.Piping.Data; @@ -92,7 +91,7 @@ && TryReadStochasticSoilModel(calculationConfiguration, pipingCalculation) && TryReadStochasticSoilProfile(calculationConfiguration, pipingCalculation) && TryReadStochasts(calculationConfiguration, pipingCalculation) - && TryReadScenario(calculationConfiguration, pipingCalculation)) + && TrySetScenarioParameters(calculationConfiguration.Scenario, pipingCalculation)) { return pipingCalculation; } @@ -343,36 +342,5 @@ (i, s) => i.PhreaticLevelExit = s, Log); } - - private bool TryReadScenario(PipingCalculationConfiguration calculationConfiguration, ICalculationScenario scenario) - { - ScenarioConfiguration scenarioConfiguration = calculationConfiguration.Scenario; - if (scenarioConfiguration == null) - { - return true; - } - - bool hasContribution = scenarioConfiguration.Contribution.HasValue; - bool hasRelevance = scenarioConfiguration.IsRelevant.HasValue; - - if (!hasContribution && !hasRelevance) - { - Log.LogCalculationConversionError("Er is voor scenario geen contributie of relevantie opgegeven.", - scenario.Name); - return false; - } - - if (hasContribution) - { - scenario.Contribution = (RoundedDouble) scenarioConfiguration.Contribution.Value; - } - - if (hasRelevance) - { - scenario.IsRelevant = scenarioConfiguration.IsRelevant.Value; - } - - return true; - } } } \ No newline at end of file