Index: Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs
===================================================================
diff -u -r538ae03387505acc57bc78715c2b9e428f526281 -r4fc96d31a69029557095247c8ff890d06239b65a
--- Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 538ae03387505acc57bc78715c2b9e428f526281)
+++ Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 4fc96d31a69029557095247c8ff890d06239b65a)
@@ -1768,16 +1768,6 @@
}
///
- /// Looks up a localized string similar to Er zijn geen ondergrondschematisaties gevonden in het stochastische ondergrondmodel '{0}'..
- ///
- public static string StochasticSoilModelImporter_ValidateStochasticSoilModel_No_profiles_found_in_stochastic_soil_model_0 {
- get {
- return ResourceManager.GetString("StochasticSoilModelImporter_ValidateStochasticSoilModel_No_profiles_found_in_stoc" +
- "hastic_soil_model_0", resourceCulture);
- }
- }
-
- ///
/// Looks up a localized string similar to De som van de kansen van voorkomen in het stochastich ondergrondmodel '{0}' is niet gelijk aan 100%..
///
public static string StochasticSoilModelImporter_ValidateStochasticSoilModel_Sum_of_probabilities_of_stochastic_soil_model_0_is_not_correct {
@@ -1809,7 +1799,7 @@
}
///
- /// Looks up a localized string similar to Er zijn geen ondergrondschematisaties gevonden in het stochastische ondergrondmodel '{0}'.
+ /// Looks up a localized string similar to Er zijn geen ondergrondschematisaties gevonden in het stochastische ondergrondmodel '{0}'..
///
public static string StochasticSoilModelReader_ReadStochasticSoilProfiles_No_profiles_found_in_stochastic_soil_model_Name_0_ {
get {
Index: Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx
===================================================================
diff -u -r538ae03387505acc57bc78715c2b9e428f526281 -r4fc96d31a69029557095247c8ff890d06239b65a
--- Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx (.../Resources.resx) (revision 538ae03387505acc57bc78715c2b9e428f526281)
+++ Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx (.../Resources.resx) (revision 4fc96d31a69029557095247c8ff890d06239b65a)
@@ -846,7 +846,7 @@
..\Resources\XmlGeometrySchema.xsd;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
- Er zijn geen ondergrondschematisaties gevonden in het stochastische ondergrondmodel '{0}'
+ Er zijn geen ondergrondschematisaties gevonden in het stochastische ondergrondmodel '{0}'.
Het stochastische ondergrondmodel '{0}' moet een geometrie bevatten.
@@ -868,9 +868,6 @@
Inlezen van de stochastische ondergrondmodellen.
-
- Er zijn geen ondergrondschematisaties gevonden in het stochastische ondergrondmodel '{0}'.
-
De som van de kansen van voorkomen in het stochastich ondergrondmodel '{0}' is niet gelijk aan 100%.
Index: Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/StochasticSoilModelImporter.cs
===================================================================
diff -u -r538ae03387505acc57bc78715c2b9e428f526281 -r4fc96d31a69029557095247c8ff890d06239b65a
--- Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/StochasticSoilModelImporter.cs (.../StochasticSoilModelImporter.cs) (revision 538ae03387505acc57bc78715c2b9e428f526281)
+++ Ringtoets/Common/src/Ringtoets.Common.IO/SoilProfile/StochasticSoilModelImporter.cs (.../StochasticSoilModelImporter.cs) (revision 4fc96d31a69029557095247c8ff890d06239b65a)
@@ -167,13 +167,27 @@
return GetStochasticSoilModelReadResult(stochasticSoilModelReader);
}
}
- catch (CriticalFileReadException e)
+ catch (Exception e) when (e is StochasticSoilModelException
+ || e is CriticalFileReadException)
{
HandleException(e);
}
return new ReadResult(true);
}
+ ///
+ /// Reads all stochastic soil models from the .
+ ///
+ /// The .
+ /// Returns a collection of read stochastic soil models.
+ /// Thrown when the database returned incorrect
+ /// values for required properties.
+ /// Thrown when:
+ ///
+ /// - no stochastic soil profiles could be read;
+ /// - the read failure mechanism type is not supported.
+ ///
+ ///
private ReadResult GetStochasticSoilModelReadResult(StochasticSoilModelReader stochasticSoilModelReader)
{
int totalNumberOfSteps = stochasticSoilModelReader.StochasticSoilModelCount;
@@ -186,18 +200,11 @@
{
return new ReadResult(false);
}
- try
- {
- NotifyProgress(Resources.StochasticSoilModelImporter_GetStochasticSoilModelReadResult_Reading_stochastic_soil_models_from_database,
- currentStep++,
- totalNumberOfSteps);
- soilModels.Add(stochasticSoilModelReader.ReadStochasticSoilModel());
- }
- catch (StochasticSoilModelException e)
- {
- HandleException(e);
- return new ReadResult(true);
- }
+
+ NotifyProgress(Resources.StochasticSoilModelImporter_GetStochasticSoilModelReadResult_Reading_stochastic_soil_models_from_database,
+ currentStep++,
+ totalNumberOfSteps);
+ soilModels.Add(stochasticSoilModelReader.ReadStochasticSoilModel());
}
return new ReadResult(false)
@@ -252,17 +259,10 @@
/// Validate the definition of a .
///
/// The to validate.
- /// false when the stochastic soil model does not contain any stochastic soil profiles
- /// or when a stochastic soil profile does not have a definition for a soil profile; true
- /// otherwise.
+ /// false when the sum of the stochastic soil profiles in the stochastic
+ /// soil model does add up to 100%, true otherwise.
private bool ValidateStochasticSoilModel(StochasticSoilModel stochasticSoilModel)
{
- if (!stochasticSoilModel.StochasticSoilProfiles.Any())
- {
- Log.ErrorFormat(Resources.StochasticSoilModelImporter_ValidateStochasticSoilModel_No_profiles_found_in_stochastic_soil_model_0,
- stochasticSoilModel.Name);
- return false;
- }
if (!IsSumOfAllProbabilitiesEqualToOne(stochasticSoilModel))
{
Log.ErrorFormat(Resources.StochasticSoilModelImporter_ValidateStochasticSoilModel_Sum_of_probabilities_of_stochastic_soil_model_0_is_not_correct,
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelImporterTest.cs
===================================================================
diff -u -rd1b245c6bfa60fe7f0661c45818342178a59d185 -r4fc96d31a69029557095247c8ff890d06239b65a
--- Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelImporterTest.cs (.../StochasticSoilModelImporterTest.cs) (revision d1b245c6bfa60fe7f0661c45818342178a59d185)
+++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelImporterTest.cs (.../StochasticSoilModelImporterTest.cs) (revision 4fc96d31a69029557095247c8ff890d06239b65a)
@@ -628,6 +628,131 @@
}
[Test]
+ public void Import_ReadingStochsaticSoilModelThrowsException_StopsImportAndLogs()
+ {
+ // Setup
+ var messageProvider = mocks.StrictMock();
+ var updateStrategy = mocks.StrictMock>();
+ var filter = mocks.StrictMock();
+ mocks.ReplayAll();
+
+ string validFilePath = Path.Combine(testDataPath, "invalidSegmentPoint.soil");
+
+ var importer = new StochasticSoilModelImporter(
+ new TestStochasticSoilModelCollection(),
+ validFilePath,
+ messageProvider,
+ new StochasticSoilModelImporterConfiguration(
+ transformer,
+ filter,
+ updateStrategy));
+
+ var importResult = true;
+
+ // Call
+ Action call = () => importResult = importer.Import();
+
+ // Assert
+ TestHelper.AssertLogMessagesWithLevelAndLoggedExceptions(call, tuples =>
+ {
+ Tuple[] tupleArray = tuples.ToArray();
+ Assert.AreEqual(1, tupleArray.Length);
+
+ Tuple actualLog = tupleArray[0];
+
+ string expectedMessage = "Het stochastische ondergrondmodel 'StochasticSoilModelName' moet een geometrie bevatten. " +
+ $"{Environment.NewLine}Het bestand wordt overgeslagen.";
+
+ Assert.AreEqual(expectedMessage, actualLog.Item1);
+ Assert.AreEqual(Level.Error, actualLog.Item2);
+ Assert.IsInstanceOf(actualLog.Item3);
+ });
+
+ Assert.IsFalse(importResult);
+ }
+
+ [Test]
+ public void Import_StochasticSoilModelWithoutStochasticSoilProfiles_StopsImportAndLogs()
+ {
+ // Setup
+ var messageProvider = mocks.StrictMock();
+ var updateStrategy = mocks.StrictMock>();
+ var filter = mocks.StrictMock();
+ mocks.ReplayAll();
+
+ string validFilePath = Path.Combine(testDataPath, "modelWithoutProfile.soil");
+
+ var importer = new StochasticSoilModelImporter(
+ new TestStochasticSoilModelCollection(),
+ validFilePath,
+ messageProvider,
+ new StochasticSoilModelImporterConfiguration(
+ transformer,
+ filter,
+ updateStrategy));
+
+ var importResult = true;
+
+ // Call
+ Action call = () => importResult = importer.Import();
+
+ // Assert
+ TestHelper.AssertLogMessagesWithLevelAndLoggedExceptions(call, tuples =>
+ {
+ Tuple[] tupleArray = tuples.ToArray();
+ Assert.AreEqual(1, tupleArray.Length);
+
+ Tuple actualLog = tupleArray[0];
+
+ string expectedMessage = "Er zijn geen ondergrondschematisaties gevonden in het stochastische ondergrondmodel '36006_Piping'. " +
+ $"{Environment.NewLine}Het bestand wordt overgeslagen.";
+
+ Assert.AreEqual(expectedMessage, actualLog.Item1);
+ Assert.AreEqual(Level.Error, actualLog.Item2);
+ Assert.IsInstanceOf(actualLog.Item3);
+ });
+
+ Assert.IsFalse(importResult);
+ }
+
+ [Test]
+ public void Import_IncorrectProbability_LogAndImportSoilModelToCollection()
+ {
+ // Setup
+ var messageProvider = mocks.StrictMock();
+ var updateStrategy = mocks.StrictMock>();
+ var filter = mocks.StrictMock();
+ filter.Expect(f => f.IsValidForFailureMechanism(null))
+ .IgnoreArguments()
+ .Return(true)
+ .Repeat
+ .AtLeastOnce();
+ mocks.ReplayAll();
+
+ string validFilePath = Path.Combine(testDataPath, "incorrectProbability.soil");
+
+ var importer = new StochasticSoilModelImporter(
+ new TestStochasticSoilModelCollection(),
+ validFilePath,
+ messageProvider,
+ new StochasticSoilModelImporterConfiguration(
+ transformer,
+ filter,
+ updateStrategy));
+
+ var importResult = false;
+
+ // Call
+ Action call = () => importResult = importer.Import();
+
+ // Assert
+ const string expectedLogMessage = "De som van de kansen van voorkomen in het stochastich ondergrondmodel 'Name' is niet gelijk aan 100%.";
+ Tuple expectedLogMessageAndLevel = Tuple.Create(expectedLogMessage, LogLevelConstant.Error);
+ TestHelper.AssertLogMessageWithLevelIsGenerated(call, expectedLogMessageAndLevel, 1);
+ Assert.IsFalse(importResult);
+ }
+
+ [Test]
public void Import_TransformationThrowsException_StopsImportAndLogs()
{
// Setup
@@ -714,6 +839,8 @@
TestHelper.AssertLogMessagesWithLevelAndLoggedExceptions(call, tuples =>
{
Tuple[] tupleArray = tuples.ToArray();
+ Assert.AreEqual(1, tupleArray.Length);
+
Tuple actualLog = tupleArray[0];
Assert.AreEqual(updateDataException.Message, actualLog.Item1);
@@ -724,6 +851,52 @@
Assert.IsFalse(importResult);
}
+ [Test]
+ public void DoPostImport_AfterImport_ObserversNotified()
+ {
+ // Setup
+ var observableA = mocks.StrictMock();
+ observableA.Expect(o => o.NotifyObservers());
+ var observableB = mocks.StrictMock();
+ observableB.Expect(o => o.NotifyObservers());
+
+ var messageProvider = mocks.StrictMock();
+ messageProvider.Expect(mp => mp.GetAddDataToModelProgressText()).Return("");
+ var updateStrategy = mocks.StrictMock>();
+ updateStrategy.Expect(u => u.UpdateModelWithImportedData(null, null))
+ .IgnoreArguments()
+ .Return(new[]
+ {
+ observableA,
+ observableB
+ });
+ var filter = mocks.StrictMock();
+ filter.Expect(f => f.IsValidForFailureMechanism(null))
+ .IgnoreArguments()
+ .Return(true)
+ .Repeat
+ .AtLeastOnce();
+ mocks.ReplayAll();
+
+ string validFilePath = Path.Combine(testDataPath, "complete.soil");
+
+ var importer = new StochasticSoilModelImporter(
+ new TestStochasticSoilModelCollection(),
+ validFilePath,
+ messageProvider,
+ new StochasticSoilModelImporterConfiguration(
+ transformer,
+ filter,
+ updateStrategy));
+
+ importer.Import();
+
+ // Call
+ importer.DoPostImport();
+
+ // Asserts done in the TearDown method
+ }
+
private static void FilterFailureMechanismSpecificModel(MethodInvocation invocation, FailureMechanismType failureMechanismType)
{
invocation.ReturnValue = failureMechanismType == ((StochasticSoilModel) invocation.Arguments[0]).FailureMechanismType;
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelReaderTest.cs
===================================================================
diff -u -rd06750a4979861471df64a5f49dca99c33d34ce6 -r4fc96d31a69029557095247c8ff890d06239b65a
--- Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelReaderTest.cs (.../StochasticSoilModelReaderTest.cs) (revision d06750a4979861471df64a5f49dca99c33d34ce6)
+++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelReaderTest.cs (.../StochasticSoilModelReaderTest.cs) (revision 4fc96d31a69029557095247c8ff890d06239b65a)
@@ -348,7 +348,7 @@
CollectionAssert.AreEqual(expectedProfileCount, readModels.Select(m => m.StochasticSoilProfiles.Count));
Assert.IsInstanceOf(expectedException);
- Assert.AreEqual("Er zijn geen ondergrondschematisaties gevonden in het stochastische ondergrondmodel '36006_Piping'",
+ Assert.AreEqual("Er zijn geen ondergrondschematisaties gevonden in het stochastische ondergrondmodel '36006_Piping'.",
expectedException.Message);
Assert.IsTrue(TestHelper.CanOpenFileForWrite(dbFile));
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/StochasticSoilModelReader/incorrectProbability.soil
===================================================================
diff -u
Binary files differ