Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelImporterTest.cs =================================================================== diff -u -r538ae03387505acc57bc78715c2b9e428f526281 -rd1b245c6bfa60fe7f0661c45818342178a59d185 --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelImporterTest.cs (.../StochasticSoilModelImporterTest.cs) (revision 538ae03387505acc57bc78715c2b9e428f526281) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelImporterTest.cs (.../StochasticSoilModelImporterTest.cs) (revision d1b245c6bfa60fe7f0661c45818342178a59d185) @@ -30,6 +30,8 @@ using NUnit.Framework; using Rhino.Mocks; using Ringtoets.Common.Data; +using Ringtoets.Common.Data.Exceptions; +using Ringtoets.Common.IO.Exceptions; using Ringtoets.Common.IO.FileImporters.MessageProviders; using Ringtoets.Common.IO.SoilProfile; using Ringtoets.Common.IO.SoilProfile.Schema; @@ -625,6 +627,103 @@ Assert.IsTrue(importResult); } + [Test] + public void Import_TransformationThrowsException_StopsImportAndLogs() + { + // Setup + const string exceptionMessage = "Some exception message."; + + var messageProvider = mocks.StrictMock(); + var updateStrategy = mocks.StrictMock>(); + var filter = mocks.StrictMock(); + filter.Expect(f => f.IsValidForFailureMechanism(null)) + .IgnoreArguments() + .Return(true) + .Repeat + .AtLeastOnce(); + transformer.Expect(t => t.Transform(null)) + .IgnoreArguments() + .Throw(new ImportedDataTransformException(exceptionMessage)); + mocks.ReplayAll(); + + string validFilePath = Path.Combine(testDataPath, "complete.soil"); + + var importer = new StochasticSoilModelImporter( + new TestStochasticSoilModelCollection(), + validFilePath, + messageProvider, + new StochasticSoilModelImporterConfiguration( + transformer, + filter, + updateStrategy)); + + var importResult = true; + + // Call + Action call = () => importResult = importer.Import(); + + // Assert + string expectedMessage = $"{exceptionMessage} {Environment.NewLine}Het bestand wordt overgeslagen."; + Tuple expectedLogMessageAndLevel = Tuple.Create(expectedMessage, LogLevelConstant.Error); + TestHelper.AssertLogMessageWithLevelIsGenerated(call, expectedLogMessageAndLevel, 1); + Assert.IsFalse(importResult); + } + + [Test] + public void Import_AddingDataUpdateDataException_StopsImportAndLogs() + { + // Setup + const string exceptionMessage = "Some exception message."; + const string expectedAddDataProgressText = "Adding data..."; + var updateDataException = new UpdateDataException(exceptionMessage); + + var messageProvider = mocks.StrictMock(); + messageProvider.Expect(mp => mp.GetAddDataToModelProgressText()) + .Return(expectedAddDataProgressText); + messageProvider.Expect(mp => mp.GetUpdateDataFailedLogMessageText("Stochastische ondergrondmodellen")) + .Return(exceptionMessage); + var updateStrategy = mocks.StrictMock>(); + updateStrategy.Expect(u => u.UpdateModelWithImportedData(null, null)) + .IgnoreArguments() + .Throw(updateDataException); + 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)); + + var importResult = true; + + // Call + Action call = () => importResult = importer.Import(); + + // Assert + TestHelper.AssertLogMessagesWithLevelAndLoggedExceptions(call, tuples => + { + Tuple[] tupleArray = tuples.ToArray(); + Tuple actualLog = tupleArray[0]; + + Assert.AreEqual(updateDataException.Message, actualLog.Item1); + Assert.AreEqual(Level.Error, actualLog.Item2); + Assert.AreSame(updateDataException, actualLog.Item3); + }); + + Assert.IsFalse(importResult); + } + private static void FilterFailureMechanismSpecificModel(MethodInvocation invocation, FailureMechanismType failureMechanismType) { invocation.ReturnValue = failureMechanismType == ((StochasticSoilModel) invocation.Arguments[0]).FailureMechanismType;