Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Importers/PipingConfigurationImporter.cs =================================================================== diff -u -rb7f9c9f43aac18c45ea1932f4559a29eda7fbe34 -ref93d030dc8400084c8e53058f072d096ff6217a --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Importers/PipingConfigurationImporter.cs (.../PipingConfigurationImporter.cs) (revision b7f9c9f43aac18c45ea1932f4559a29eda7fbe34) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Importers/PipingConfigurationImporter.cs (.../PipingConfigurationImporter.cs) (revision ef93d030dc8400084c8e53058f072d096ff6217a) @@ -177,7 +177,7 @@ ReadStochasticSoilModel(readCalculation, pipingCalculation); ReadStochastics(readCalculation, pipingCalculation); } - catch (CriticalFileValidationException e) + catch (Exception e) when (e is CriticalFileValidationException || e is ArgumentOutOfRangeException) { log.ErrorFormat(Resources.PipingConfigurationImporter_ValidateCalculation_Error_message_0_calculation_1_skipped, e.Message, readCalculation.Name); return null; @@ -212,7 +212,7 @@ else if (readCalculation.AssessmentLevel.HasValue) { pipingCalculation.InputParameters.UseAssessmentLevelManualInput = true; - pipingCalculation.InputParameters.AssessmentLevel = (RoundedDouble)readCalculation.AssessmentLevel.Value; + pipingCalculation.InputParameters.AssessmentLevel = (RoundedDouble) readCalculation.AssessmentLevel.Value; } } @@ -241,16 +241,17 @@ } } } + private static void ReadEntryExitPoint(ReadPipingCalculation readCalculation, PipingCalculationScenario pipingCalculation) { if (readCalculation.EntryPointL.HasValue) { - pipingCalculation.InputParameters.EntryPointL = (RoundedDouble)readCalculation.EntryPointL.Value; + pipingCalculation.InputParameters.EntryPointL = (RoundedDouble) readCalculation.EntryPointL.Value; } if (readCalculation.ExitPointL.HasValue) { - pipingCalculation.InputParameters.ExitPointL = (RoundedDouble)readCalculation.ExitPointL.Value; + pipingCalculation.InputParameters.ExitPointL = (RoundedDouble) readCalculation.ExitPointL.Value; } } @@ -332,17 +333,17 @@ { pipingCalculation.InputParameters.DampingFactorExit = new LogNormalDistribution { - Mean = (RoundedDouble)readCalculation.DampingFactorExitMean.Value, - StandardDeviation = (RoundedDouble)readCalculation.DampingFactorExitStandardDeviation.Value + Mean = (RoundedDouble) readCalculation.DampingFactorExitMean.Value, + StandardDeviation = (RoundedDouble) readCalculation.DampingFactorExitStandardDeviation.Value }; } if (readCalculation.PhreaticLevelExitMean.HasValue && readCalculation.PhreaticLevelExitStandardDeviation.HasValue) { pipingCalculation.InputParameters.PhreaticLevelExit = new NormalDistribution { - Mean = (RoundedDouble)readCalculation.PhreaticLevelExitMean.Value, - StandardDeviation = (RoundedDouble)readCalculation.PhreaticLevelExitStandardDeviation.Value + Mean = (RoundedDouble) readCalculation.PhreaticLevelExitMean.Value, + StandardDeviation = (RoundedDouble) readCalculation.PhreaticLevelExitStandardDeviation.Value }; } } Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Importers/PipingConfigurationImporterTest.cs =================================================================== diff -u -ref8341b9d75b82a9c652f5c2ef0c4108252c5fb8 -ref93d030dc8400084c8e53058f072d096ff6217a --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Importers/PipingConfigurationImporterTest.cs (.../PipingConfigurationImporterTest.cs) (revision ef8341b9d75b82a9c652f5c2ef0c4108252c5fb8) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Importers/PipingConfigurationImporterTest.cs (.../PipingConfigurationImporterTest.cs) (revision ef93d030dc8400084c8e53058f072d096ff6217a) @@ -45,8 +45,13 @@ { get { - yield return new TestCaseData("validConfigurationNesting.xml", GetNestedData()); - yield return new TestCaseData("validConfigurationCalculationContainingNaNs.xml", GetNaNData()); + yield return new TestCaseData("validConfigurationNesting.xml", + GetNestedData()) + .SetName("validConfigurationNesting"); + + yield return new TestCaseData("validConfigurationCalculationContainingNaNs.xml", + GetNaNData()) + .SetName("validConfigurationCalculationContainingNaNs"); } } @@ -155,11 +160,76 @@ Assert.AreEqual(1, msgs.Length); StringAssert.StartsWith($"Fout bij het lezen van bestand '{filePath}': het XML-document dat de configuratie voor de berekeningen beschrijft is niet geldig.", msgs[0]); }); - + Assert.IsFalse(importSuccesful); } [Test] + [TestCase("validConfigurationInvalidEntryExitPoint.xml", "Het uittredepunt moet landwaarts van het intredepunt liggen.")] + [TestCase("validConfigurationExitPointNotOnSurfaceLine.xml", "Het gespecificeerde punt moet op het profiel liggen (bereik [0.0, 10.0]).")] + public void Import_EntryExitPointNotValid_LogMessageAndContinueImport(string file, string expectedErrorMessage) + { + // Setup + string filePath = Path.Combine(path, file); + + var calculationGroup = new CalculationGroup(); + var surfaceLine = new RingtoetsPipingSurfaceLine + { + Name = "Profielschematisatie" + }; + surfaceLine.SetGeometry(new[] + { + new Point3D(3.0, 5.0, 0.0), + new Point3D(3.0, 0.0, 1.0), + new Point3D(3.0, -5.0, 0.0) + }); + var stochasticSoilProfile = new StochasticSoilProfile(0, SoilProfileType.SoilProfile1D, 1) + { + SoilProfile = new PipingSoilProfile("Ondergrondschematisatie", 0, new[] + { + new PipingSoilLayer(0) + }, SoilProfileType.SoilProfile1D, 0) + }; + + var stochasticSoilModel = new StochasticSoilModel(1, "Ondergrondmodel", "Segment"); + stochasticSoilModel.StochasticSoilProfiles.Add(stochasticSoilProfile); + stochasticSoilModel.Geometry.AddRange(new[] + { + new Point2D(1.0, 0.0), + new Point2D(5.0, 0.0) + }); + + var pipingFailureMechanism = new PipingFailureMechanism(); + pipingFailureMechanism.SurfaceLines.AddRange(new[] + { + surfaceLine + }, "path"); + pipingFailureMechanism.StochasticSoilModels.AddRange(new[] + { + stochasticSoilModel + }, "path"); + + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "HRlocatie", 10, 20); + var importer = new PipingConfigurationImporter(filePath, + calculationGroup, + new[] + { + hydraulicBoundaryLocation + }, + pipingFailureMechanism); + + // Call + bool succesful = false; + Action call = () => succesful = importer.Import(); + + // Assert + string expectedMessage = $"{expectedErrorMessage} Berekening 'Calculation' is overgeslagen."; + TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); + Assert.IsTrue(succesful); + CollectionAssert.IsEmpty(calculationGroup.Children); + } + + [Test] [TestCase("Inlezen")] [TestCase("Valideren")] public void Import_CancelingImport_CancelImportAndLog(string expectedProgressMessage) Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfigurationExitPointNotOnSurfaceLine.xml =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfigurationExitPointNotOnSurfaceLine.xml (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfigurationExitPointNotOnSurfaceLine.xml (revision ef93d030dc8400084c8e53058f072d096ff6217a) @@ -0,0 +1,21 @@ + + + + 1.1 + Profielschematisatie + 2.2 + 200.2 + Ondergrondmodel + Ondergrondschematisatie + + + 4.4 + 5.5 + + + 6.6 + 7.7 + + + + \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfigurationInvalidEntryExitPoint.xml =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfigurationInvalidEntryExitPoint.xml (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validConfigurationInvalidEntryExitPoint.xml (revision ef93d030dc8400084c8e53058f072d096ff6217a) @@ -0,0 +1,21 @@ + + + + 1.1 + Profielschematisatie + 3.3 + 2.2 + Ondergrondmodel + Ondergrondschematisatie + + + 4.4 + 5.5 + + + 6.6 + 7.7 + + + + \ No newline at end of file