Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/StructuresImporterTest.cs =================================================================== diff -u -r207fcf758cac8237b31af99f7f54278b32eba658 -rf28e5c177128224ea84257a3f29677f38b51f33f --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/StructuresImporterTest.cs (.../StructuresImporterTest.cs) (revision 207fcf758cac8237b31af99f7f54278b32eba658) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/StructuresImporterTest.cs (.../StructuresImporterTest.cs) (revision f28e5c177128224ea84257a3f29677f38b51f33f) @@ -31,6 +31,7 @@ using Core.Common.Utils.Builders; using NUnit.Framework; using Rhino.Mocks; +using Ringtoets.Common.Data; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Exceptions; using Ringtoets.Common.Data.TestUtil; @@ -44,7 +45,7 @@ [TestFixture] public class StructuresImporterTest { - private readonly ObservableList testImportTarget = new ObservableList(); + private readonly StructureCollection testImportTarget = new StructureCollection(); private readonly ReferenceLine testReferenceLine = new ReferenceLine(); private readonly string testFilePath = string.Empty; @@ -67,10 +68,15 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); // Call - var importer = new TestStructuresImporter(testImportTarget, testReferenceLine, testFilePath, messageProvider); + var importer = new TestStructuresImporter(testImportTarget, + testReferenceLine, + testFilePath, + updateStrategy, + messageProvider); // Assert Assert.IsInstanceOf(importer); @@ -81,10 +87,15 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); // Call - TestDelegate call = () => new TestStructuresImporter(null, testReferenceLine, testFilePath, messageProvider); + TestDelegate call = () => new TestStructuresImporter(null, + testReferenceLine, + testFilePath, + updateStrategy, + messageProvider); // Assert var exception = Assert.Throws(call); @@ -96,10 +107,15 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); // Call - TestDelegate call = () => new TestStructuresImporter(testImportTarget, null, testFilePath, messageProvider); + TestDelegate call = () => new TestStructuresImporter(testImportTarget, + null, + testFilePath, + updateStrategy, + messageProvider); // Assert var exception = Assert.Throws(call); @@ -111,25 +127,53 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); // Call - TestDelegate call = () => new TestStructuresImporter(testImportTarget, testReferenceLine, null, messageProvider); + TestDelegate call = () => new TestStructuresImporter(testImportTarget, + testReferenceLine, + null, + updateStrategy, + messageProvider); // Assert var exception = Assert.Throws(call); Assert.AreEqual("filePath", exception.ParamName); } [Test] + public void Constructor_StructureUpdateStrategyNull_ThrowArgumentNullException() + { + // Setup + var messageProvider = mocks.Stub(); + mocks.ReplayAll(); + + // Call + TestDelegate call = () => new TestStructuresImporter(testImportTarget, + testReferenceLine, + testFilePath, + null, + messageProvider); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("structureUpdateStrategy", paramName); + } + + [Test] public void Constructor_ImporterMessageProviderNull_ThrowsArgumentNullException() { // Setup + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); // Call - TestDelegate call = () => new TestStructuresImporter(testImportTarget, testReferenceLine, - testFilePath, null); + TestDelegate call = () => new TestStructuresImporter(testImportTarget, + testReferenceLine, + testFilePath, + updateStrategy, + null); // Assert string paramName = Assert.Throws(call).ParamName; @@ -143,9 +187,14 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); - var testStructuresImporter = new TestStructuresImporter(testImportTarget, testReferenceLine, filePath, messageProvider); + var testStructuresImporter = new TestStructuresImporter(testImportTarget, + testReferenceLine, + filePath, + updateStrategy, + messageProvider); // Call var importResult = true; @@ -167,14 +216,19 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); const string filePath = "c:\\Invalid_Characters.shp"; char[] invalidPathChars = Path.GetInvalidPathChars(); string invalidPath = filePath.Replace('_', invalidPathChars[0]); - var testStructuresImporter = new TestStructuresImporter(testImportTarget, testReferenceLine, invalidPath, messageProvider); + var testStructuresImporter = new TestStructuresImporter(testImportTarget, + testReferenceLine, + invalidPath, + updateStrategy, + messageProvider); // Call var importResult = true; @@ -195,11 +249,16 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string folderPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO) + Path.DirectorySeparatorChar; - var testStructuresImporter = new TestStructuresImporter(testImportTarget, testReferenceLine, folderPath, messageProvider); + var testStructuresImporter = new TestStructuresImporter(testImportTarget, + testReferenceLine, + folderPath, + updateStrategy, + messageProvider); // Call var importResult = true; @@ -223,12 +282,17 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Core.Components.Gis.IO, shapeFileName); - var profilesImporter = new TestStructuresImporter(testImportTarget, testReferenceLine, filePath, messageProvider); + var profilesImporter = new TestStructuresImporter(testImportTarget, + testReferenceLine, + filePath, + updateStrategy, + messageProvider); // Call var importResult = true; @@ -245,12 +309,17 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "StructuresWithoutKWKIDENT", "Kunstwerken.shp")); - var profilesImporter = new TestStructuresImporter(testImportTarget, testReferenceLine, invalidFilePath, messageProvider); + var profilesImporter = new TestStructuresImporter(testImportTarget, + testReferenceLine, + invalidFilePath, + updateStrategy, + messageProvider); // Call bool importResult = profilesImporter.Import(); @@ -264,13 +333,18 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "CorrectShpIncorrectCsv", "CorrectKunstwerken_IncorrectCsv.shp")); ReferenceLine referenceLine = CreateReferenceLine(); - var profilesImporter = new TestStructuresImporter(testImportTarget, referenceLine, invalidFilePath, messageProvider); + var profilesImporter = new TestStructuresImporter(testImportTarget, + referenceLine, + invalidFilePath, + updateStrategy, + messageProvider); // Call bool importResult = profilesImporter.Import(); @@ -286,14 +360,19 @@ const string messageText = "importeren is afgebroken"; var messageProvider = mocks.StrictMock(); messageProvider.Expect(mp => mp.GetCancelledLogMessageText("Kunstwerken")).Return(messageText); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); ReferenceLine referenceLine = CreateReferenceLine(); - var importTarget = new ObservableList(); - var testStructuresImporter = new TestStructuresImporter(importTarget, referenceLine, filePath, messageProvider); + var importTarget = new StructureCollection(); + var testStructuresImporter = new TestStructuresImporter(importTarget, + referenceLine, + filePath, + updateStrategy, + messageProvider); testStructuresImporter.SetProgressChanged((description, step, steps) => { if (description.Contains("Inlezen van kunstwerklocaties uit een shapebestand.")) @@ -319,14 +398,19 @@ const string addDataToModelProgressText = "addDataToModelProgressText"; var messageProvider = mocks.StrictMock(); messageProvider.Expect(mp => mp.GetAddDataToModelProgressText()).Return(addDataToModelProgressText); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); ReferenceLine referenceLine = CreateReferenceLine(); - var importTarget = new ObservableList(); - var testStructuresImporter = new TestStructuresImporter(importTarget, referenceLine, filePath, messageProvider); + var importTarget = new StructureCollection(); + var testStructuresImporter = new TestStructuresImporter(importTarget, + referenceLine, + filePath, + updateStrategy, + messageProvider); testStructuresImporter.SetProgressChanged((description, step, steps) => { if (description.Contains(addDataToModelProgressText)) @@ -353,14 +437,19 @@ const string messageText = "importeren is afgebroken"; var messageProvider = mocks.StrictMock(); messageProvider.Expect(mp => mp.GetCancelledLogMessageText("Kunstwerken")).Return(messageText); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); ReferenceLine referenceLine = CreateReferenceLine(); - var importTarget = new ObservableList(); - var testStructuresImporter = new TestStructuresImporter(importTarget, referenceLine, filePath, messageProvider); + var importTarget = new StructureCollection(); + var testStructuresImporter = new TestStructuresImporter(importTarget, + referenceLine, + filePath, + updateStrategy, + messageProvider); testStructuresImporter.SetProgressChanged((description, step, steps) => { if (description.Contains("Inlezen van kunstwerkgegevens uit een kommagescheiden bestand.")) @@ -384,14 +473,19 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); ReferenceLine referenceLine = CreateReferenceLine(); - var importTarget = new ObservableList(); - var testStructuresImporter = new TestStructuresImporter(importTarget, referenceLine, filePath, messageProvider); + var importTarget = new StructureCollection(); + var testStructuresImporter = new TestStructuresImporter(importTarget, + referenceLine, + filePath, + updateStrategy, + messageProvider); testStructuresImporter.SetProgressChanged((description, step, steps) => testStructuresImporter.Cancel()); bool importResult = testStructuresImporter.Import(); @@ -412,6 +506,7 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, @@ -427,7 +522,11 @@ }; var referenceLine = new ReferenceLine(); referenceLine.SetGeometry(referencePoints); - var testStructuresImporter = new TestStructuresImporter(new ObservableList(), referenceLine, filePath, messageProvider); + var testStructuresImporter = new TestStructuresImporter(new StructureCollection(), + referenceLine, + filePath, + updateStrategy, + messageProvider); // Call var importResult = true; @@ -444,13 +543,18 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "DuplicateLocation", "Kunstwerken.shp")); ReferenceLine referenceLine = CreateReferenceLine(); - var testStructuresImporter = new TestStructuresImporter(new ObservableList(), referenceLine, filePath, messageProvider); + var testStructuresImporter = new TestStructuresImporter(new StructureCollection(), + referenceLine, + filePath, + updateStrategy, + messageProvider); // Call var importResult = true; @@ -467,13 +571,18 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "StructuresWithNullKWKident", "Kunstwerken.shp")); ReferenceLine referenceLine = CreateReferenceLine(); - var testStructuresImporter = new TestStructuresImporter(new ObservableList(), referenceLine, filePath, messageProvider); + var testStructuresImporter = new TestStructuresImporter(new StructureCollection(), + referenceLine, + filePath, + updateStrategy, + messageProvider); // Call var importResult = true; @@ -490,13 +599,18 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "IllegalCsv", "Kunstwerken.shp")); ReferenceLine referenceLine = CreateReferenceLine(); - var testStructuresImporter = new TestStructuresImporter(new ObservableList(), referenceLine, filePath, messageProvider); + var testStructuresImporter = new TestStructuresImporter(new StructureCollection(), + referenceLine, + filePath, + updateStrategy, + messageProvider); // Call bool importResult = testStructuresImporter.Import(); @@ -512,15 +626,19 @@ var messageProvider = mocks.StrictMock(); messageProvider.Expect(mp => mp.GetAddDataToModelProgressText()).Return(""); messageProvider.Expect(mp => mp.GetUpdateDataFailedLogMessageText("Kunstwerken")).Return("error {0}"); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); ReferenceLine referenceLine = CreateReferenceLine(); - var importer = new TestStructuresImporter(new ObservableList(), referenceLine, - filePath, messageProvider) + var importer = new TestStructuresImporter(new StructureCollection(), + referenceLine, + filePath, + updateStrategy, + messageProvider) { UpdateWithCreatedStructuresAction = () => { throw new UpdateDataException("Exception message"); } }; @@ -541,6 +659,7 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); var observableA = mocks.StrictMock(); observableA.Expect(o => o.NotifyObservers()); var observableB = mocks.StrictMock(); @@ -557,8 +676,11 @@ observableA, observableB }; - var importer = new TestStructuresImporter(new ObservableList(), referenceLine, - filePath, messageProvider) + var importer = new TestStructuresImporter(new StructureCollection(), + referenceLine, + filePath, + updateStrategy, + messageProvider) { UpdateWithCreatedStructuresAction = () => observables }; @@ -577,15 +699,20 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); var referenceLine = new ReferenceLine(); - var importTarget = new ObservableList(); + var importTarget = new StructureCollection(); - var importer = new TestStructuresImporter(importTarget, referenceLine, filePath, messageProvider); + var importer = new TestStructuresImporter(importTarget, + referenceLine, + filePath, + updateStrategy, + messageProvider); var parameter = new StructuresParameterRow { @@ -612,15 +739,20 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); var referenceLine = new ReferenceLine(); - var importTarget = new ObservableList(); + var importTarget = new StructureCollection(); - var importer = new TestStructuresImporter(importTarget, referenceLine, filePath, messageProvider); + var importer = new TestStructuresImporter(importTarget, + referenceLine, + filePath, + updateStrategy, + messageProvider); var parameter = new StructuresParameterRow { @@ -653,15 +785,20 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); var referenceLine = new ReferenceLine(); - var importTarget = new ObservableList(); + var importTarget = new StructureCollection(); - var importer = new TestStructuresImporter(importTarget, referenceLine, filePath, messageProvider); + var importer = new TestStructuresImporter(importTarget, + referenceLine, + filePath, + updateStrategy, + messageProvider); var parameter = new StructuresParameterRow { @@ -688,15 +825,20 @@ { // Setup var messageProvider = mocks.Stub(); + var updateStrategy = mocks.Stub>(); mocks.ReplayAll(); string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); var referenceLine = new ReferenceLine(); - var importTarget = new ObservableList(); + var importTarget = new StructureCollection(); - var importer = new TestStructuresImporter(importTarget, referenceLine, filePath, messageProvider); + var importer = new TestStructuresImporter(importTarget, + referenceLine, + filePath, + updateStrategy, + messageProvider); var parameter = new StructuresParameterRow { @@ -740,13 +882,16 @@ return referenceLine; } - private class TestStructuresImporter : StructuresImporter> + private class TestStructuresImporter : StructuresImporter { public Func> UpdateWithCreatedStructuresAction; - public TestStructuresImporter(ObservableList importTarget, ReferenceLine referenceLine, - string filePath, IImporterMessageProvider messageProvider) - : base(importTarget, referenceLine, filePath, messageProvider) {} + public TestStructuresImporter(StructureCollection importTarget, + ReferenceLine referenceLine, + string filePath, + IStructureUpdateStrategy structureUpdateStrategy, + IImporterMessageProvider messageProvider) + : base(importTarget, referenceLine, filePath, messageProvider, structureUpdateStrategy) {} public new RoundedDouble GetStandardDeviation(StructuresParameterRow parameter, string structureName) {