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;