Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelImporterTest.cs =================================================================== diff -u -rd06750a4979861471df64a5f49dca99c33d34ce6 -r9d729be011cf5358690359a801bc08a948324341 --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelImporterTest.cs (.../StochasticSoilModelImporterTest.cs) (revision d06750a4979861471df64a5f49dca99c33d34ce6) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/SoilProfile/StochasticSoilModelImporterTest.cs (.../StochasticSoilModelImporterTest.cs) (revision 9d729be011cf5358690359a801bc08a948324341) @@ -302,7 +302,6 @@ mocks.ReplayAll(); - var progressChangeNotifications = new List(); var importer = new StochasticSoilModelImporter( new TestStochasticSoilModelCollection(), validFilePath, @@ -312,6 +311,7 @@ filter, updateStrategy)); + var progressChangeNotifications = new List(); importer.SetProgressChanged((description, step, steps) => progressChangeNotifications.Add(new ProgressNotification(description, step, steps))); @@ -351,6 +351,143 @@ } } + [Test] + public void Import_ImportingToValidTargetWithValidFileTwice_ReadAnotherTime() + { + // Setup + string validFilePath = Path.Combine(testDataPath, "complete.soil"); + const int totalNrOfStochasticSoilModelInDatabase = 6; + + var messageProvider = mocks.Stub(); + var filter = mocks.StrictMock(); + filter.Expect(f => f.IsValidForFailureMechanism(null)) + .IgnoreArguments() + .Return(true) + .Repeat + .Times(totalNrOfStochasticSoilModelInDatabase * 2); + var updateStrategy = mocks.StrictMock>(); + updateStrategy.Expect(u => u.UpdateModelWithImportedData(null, null)) + .IgnoreArguments() + .WhenCalled(invocation => + { + var soilModels = (IEnumerable) invocation.Arguments[0]; + var filePath = (string) invocation.Arguments[1]; + + Assert.AreEqual(totalNrOfStochasticSoilModelInDatabase, soilModels.Count()); + Assert.AreEqual(validFilePath, filePath); + }).Repeat.Twice(); + mocks.ReplayAll(); + + var importer = new StochasticSoilModelImporter( + new TestStochasticSoilModelCollection(), + validFilePath, + messageProvider, + new StochasticSoilModelImporterConfiguration( + transformer, + filter, + updateStrategy)); + + var progressChangeNotifications = new List(); + importer.SetProgressChanged((description, step, steps) => + progressChangeNotifications.Add(new ProgressNotification(description, step, steps))); + + var importResult = false; + importer.Import(); + + // Call + Action call = () => importResult = importer.Import(); + + // Assert + TestHelper.AssertLogMessagesCount(call, 0); + Assert.AreEqual(totalNrOfStochasticSoilModelInDatabase * 2 * 2 + 4, progressChangeNotifications.Count); + + Assert.IsTrue(importResult); + } + + [Test] + public void Import_CancelOfImportBeforeReadingSoilModels_CancelsImportAndLogs() + { + // Setup + const string cancelledLogMessage = "Operation Cancelled"; + var messageProvider = mocks.StrictMock(); + messageProvider.Expect(mp => mp.GetCancelledLogMessageText("Stochastische ondergrondmodellen")) + .Return(cancelledLogMessage); + var updateStrategy = mocks.StrictMock>(); + var filter = mocks.StrictMock(); + mocks.ReplayAll(); + + string validFilePath = Path.Combine(testDataPath, "complete.soil"); + + var importer = new StochasticSoilModelImporter( + new TestStochasticSoilModelCollection(), + validFilePath, + messageProvider, + new StochasticSoilModelImporterConfiguration( + transformer, + filter, + updateStrategy)); + + importer.SetProgressChanged((description, step, steps) => + { + if (description.Contains("Inlezen van de D-Soil Model database.")) + { + importer.Cancel(); + } + }); + + var importResult = true; + + // Call + Action call = () => importResult = importer.Import(); + + // Assert + Tuple expectedLogMessage = Tuple.Create(cancelledLogMessage, LogLevelConstant.Info); + TestHelper.AssertLogMessageWithLevelIsGenerated(call, expectedLogMessage, 1); + Assert.IsFalse(importResult); + } + + [Test] + public void Import_CancelOfImportWhenReadingSoilModels_CancelsImportAndLogs() + { + // Setup + const string cancelledLogMessage = "Operation Cancelled"; + var messageProvider = mocks.StrictMock(); + messageProvider.Expect(mp => mp.GetCancelledLogMessageText("Stochastische ondergrondmodellen")) + .Return(cancelledLogMessage); + var updateStrategy = mocks.StrictMock>(); + var filter = mocks.StrictMock(); + mocks.ReplayAll(); + + string validFilePath = Path.Combine(testDataPath, "complete.soil"); + + var importer = new StochasticSoilModelImporter( + new TestStochasticSoilModelCollection(), + validFilePath, + messageProvider, + new StochasticSoilModelImporterConfiguration( + transformer, + filter, + updateStrategy)); + + importer.SetProgressChanged((description, step, steps) => + { + if (description.Contains("Inlezen van de stochastische ondergrondmodellen.")) + { + importer.Cancel(); + } + }); + + var importResult = true; + + // Call + Action call = () => importResult = importer.Import(); + + // Assert + Tuple expectedLogMessage = Tuple.Create(cancelledLogMessage, LogLevelConstant.Info); + TestHelper.AssertLogMessageWithLevelIsGenerated(call, expectedLogMessage, 1); + Assert.IsFalse(importResult); + } + private static void FilterFailureMechanismSpecificModel(MethodInvocation invocation, FailureMechanismType failureMechanismType) { invocation.ReturnValue = failureMechanismType == ((StochasticSoilModel) invocation.Arguments[0]).FailureMechanismType;