Index: Core/Common/src/Core.Common.Base/ObservableUniqueItemCollectionWithSourcePath.cs
===================================================================
diff -u -r48e2db6c910f4ec279d2d63fbb1cc05a1196b7f1 -rb7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1
--- Core/Common/src/Core.Common.Base/ObservableUniqueItemCollectionWithSourcePath.cs (.../ObservableUniqueItemCollectionWithSourcePath.cs) (revision 48e2db6c910f4ec279d2d63fbb1cc05a1196b7f1)
+++ Core/Common/src/Core.Common.Base/ObservableUniqueItemCollectionWithSourcePath.cs (.../ObservableUniqueItemCollectionWithSourcePath.cs) (revision b7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1)
@@ -170,22 +170,23 @@
return GetEnumerator();
}
+ ///
+ /// Validates the items of an based on their feature.
+ ///
+ ///
+ /// Thrown when
+ ///
+ /// - one of the items is null
+ /// - when a duplicate item was found.
+ ///
+ ///
private void InternalValidateItems(IEnumerable items)
{
if (items.Contains(null))
{
- throw new ArgumentException("Collection cannot contain null.", nameof(items));
+ throw new ArgumentException(@"Collection cannot contain null.", nameof(items));
}
- ValidateItems(items);
- }
- ///
- /// Validates the items of an based on their feature.
- ///
- /// Thrown when any parameters are null.
- /// Thrown when a duplicate item was found.
- private void ValidateItems(IEnumerable items)
- {
IEnumerable> duplicateItems =
items.Concat(collection).GroupBy(getUniqueFeature)
.Where(group => group.Count() > 1);
Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Plugin.Test/FileImporters/ClosingStructureUpdateDataStrategyTest.cs
===================================================================
diff -u -r12cec002453a1828efc68633fbd25219632c6c47 -rb7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1
--- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Plugin.Test/FileImporters/ClosingStructureUpdateDataStrategyTest.cs (.../ClosingStructureUpdateDataStrategyTest.cs) (revision 12cec002453a1828efc68633fbd25219632c6c47)
+++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Plugin.Test/FileImporters/ClosingStructureUpdateDataStrategyTest.cs (.../ClosingStructureUpdateDataStrategyTest.cs) (revision b7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1)
@@ -27,17 +27,16 @@
using Core.Common.Base.Geometry;
using Core.Common.TestUtil;
using NUnit.Framework;
+using Ringtoets.ClosingStructures.Data;
+using Ringtoets.ClosingStructures.Data.TestUtil;
+using Ringtoets.ClosingStructures.Plugin.FileImporters;
using Ringtoets.Common.Data;
using Ringtoets.Common.Data.Exceptions;
using Ringtoets.Common.Data.FailureMechanism;
using Ringtoets.Common.Data.Structures;
using Ringtoets.Common.Data.TestUtil;
using Ringtoets.Common.Data.UpdateDataStrategies;
-using Ringtoets.Common.IO.Exceptions;
using Ringtoets.Common.IO.Structures;
-using Ringtoets.ClosingStructures.Data;
-using Ringtoets.ClosingStructures.Data.TestUtil;
-using Ringtoets.ClosingStructures.Plugin.FileImporters;
using Ringtoets.Common.Utils;
namespace Ringtoets.ClosingStructures.Plugin.Test.FileImporters
@@ -71,7 +70,7 @@
}).SetName("Different AllowedLevelIncreaseStorage");
yield return new TestCaseData(new TestClosingStructure
{
- AreaFlowApertures =
+ AreaFlowApertures =
{
Mean = (RoundedDouble) random.Next(),
Shift = random.NextRoundedDouble(),
@@ -97,15 +96,15 @@
}).SetName("Different FlowWidthAtBottomProtection");
yield return new TestCaseData(new TestClosingStructure
{
- InsideWaterLevel =
+ InsideWaterLevel =
{
Mean = (RoundedDouble) random.Next(),
StandardDeviation = random.NextRoundedDouble()
}
}).SetName("Different InsideWaterLevel");
yield return new TestCaseData(new TestClosingStructure
{
- LevelCrestStructureNotClosing =
+ LevelCrestStructureNotClosing =
{
Mean = (RoundedDouble) random.Next(),
StandardDeviation = random.NextRoundedDouble()
@@ -121,7 +120,7 @@
}).SetName("Different StorageStructureArea");
yield return new TestCaseData(new TestClosingStructure
{
- ThresholdHeightOpenWeir =
+ ThresholdHeightOpenWeir =
{
Mean = (RoundedDouble) random.Next(),
StandardDeviation = random.NextRoundedDouble()
@@ -291,7 +290,7 @@
// Assert
var exception = Assert.Throws(call);
- string expectedMessage = $"Kunstwerken moeten een unieke id hebben. Gevonden dubbele elementen: {duplicateId}.";
+ const string expectedMessage = "Geïmporteerde data moet unieke elementen bevatten.";
Assert.AreEqual(expectedMessage, exception.Message);
CollectionAssert.IsEmpty(targetCollection);
Index: Ringtoets/Common/src/Ringtoets.Common.Data/UpdateDataStrategies/UpdateDataStrategyBase.cs
===================================================================
diff -u -r48e2db6c910f4ec279d2d63fbb1cc05a1196b7f1 -rb7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1
--- Ringtoets/Common/src/Ringtoets.Common.Data/UpdateDataStrategies/UpdateDataStrategyBase.cs (.../UpdateDataStrategyBase.cs) (revision 48e2db6c910f4ec279d2d63fbb1cc05a1196b7f1)
+++ Ringtoets/Common/src/Ringtoets.Common.Data/UpdateDataStrategies/UpdateDataStrategyBase.cs (.../UpdateDataStrategyBase.cs) (revision b7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1)
@@ -120,10 +120,6 @@
{
throw new UpdateDataException(e.Message, e);
}
- catch (InvalidOperationException e)
- {
- throw new UpdateDataException(Resources.UpdateDataStrategyBase_UpdateTargetCollectionData_Imported_data_must_contain_unique_items, e);
- }
}
///
@@ -138,8 +134,8 @@
/// A with affected objects.
/// Thrown when duplicate items are being added to the
/// .
- /// Thrown when duplicate items are found during the
- /// update of the items to be updated in the .
+ /// Thrown when duplicate items are found in the
+ /// .
private IEnumerable ModifyDataCollection(ObservableUniqueItemCollectionWithSourcePath targetDataCollection,
IEnumerable importedDataCollection,
string sourceFilePath)
@@ -184,12 +180,16 @@
/// The objects that need to be updated.
/// The data to update from.
/// A of affected items.
- /// Thrown when the imported
+ /// Thrown when the imported
/// contains duplicate items.
private IEnumerable UpdateData(IEnumerable objectsToUpdate,
IEnumerable importedDataCollection)
{
var affectedObjects = new List();
+ if (importedDataCollection.Count() != importedDataCollection.Distinct(equalityComparer).Count())
+ {
+ throw new UpdateDataException(Resources.UpdateDataStrategyBase_UpdateTargetCollectionData_Imported_data_must_contain_unique_items);
+ }
foreach (TTargetData objectToUpdate in objectsToUpdate)
{
Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/UpdateDataStrategies/UpdateDataStrategyBaseTest.cs
===================================================================
diff -u -rb3b6c13cf736c134476b3db34281332d01ca86b1 -rb7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1
--- Ringtoets/Common/test/Ringtoets.Common.Data.Test/UpdateDataStrategies/UpdateDataStrategyBaseTest.cs (.../UpdateDataStrategyBaseTest.cs) (revision b3b6c13cf736c134476b3db34281332d01ca86b1)
+++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/UpdateDataStrategies/UpdateDataStrategyBaseTest.cs (.../UpdateDataStrategyBaseTest.cs) (revision b7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1)
@@ -208,9 +208,10 @@
{
// Setup
var collection = new TestUniqueItemCollection();
+ var testItem = new TestItem("I am an expected item");
collection.AddRange(new[]
{
- new TestItem("I am an expected item")
+ testItem
}, sourceFilePath);
const string duplicateName = "Duplicate Name";
@@ -227,11 +228,13 @@
// Assert
var exception = Assert.Throws(call);
- string message = $"TestItem moeten een unieke naam hebben. Gevonden dubbele elementen: {duplicateName}.";
+ const string message = "Geïmporteerde data moet unieke elementen bevatten.";
Assert.AreEqual(message, exception.Message);
- Assert.IsInstanceOf(exception.InnerException);
- CollectionAssert.IsEmpty(collection);
+ CollectionAssert.AreEqual(new[]
+ {
+ testItem
+ }, collection);
}
[Test]
@@ -469,7 +472,6 @@
// Assert
var exception = Assert.Throws(call);
Assert.AreEqual("Geïmporteerde data moet unieke elementen bevatten.", exception.Message);
- Assert.IsInstanceOf(exception.InnerException);
}
[Test]
Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/FileImporters/GrassCoverErosionInwardsDikeProfileUpdateDataStrategyTest.cs
===================================================================
diff -u -r064653222d1d4df89ac7c644f2227f2fe0aa2070 -rb7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1
--- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/FileImporters/GrassCoverErosionInwardsDikeProfileUpdateDataStrategyTest.cs (.../GrassCoverErosionInwardsDikeProfileUpdateDataStrategyTest.cs) (revision 064653222d1d4df89ac7c644f2227f2fe0aa2070)
+++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/FileImporters/GrassCoverErosionInwardsDikeProfileUpdateDataStrategyTest.cs (.../GrassCoverErosionInwardsDikeProfileUpdateDataStrategyTest.cs) (revision b7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1)
@@ -182,7 +182,7 @@
var exception = Assert.Throws(call);
string expectedMessage = "Het bijwerken van de dijkprofielen is mislukt: " +
- $"Dijkprofielen moeten een unieke id hebben. Gevonden dubbele elementen: {duplicateId}.";
+ "Geïmporteerde data moet unieke elementen bevatten.";
Assert.AreEqual(expectedMessage, exception.Message);
Assert.IsInstanceOf(exception.InnerException);
Index: Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Plugin.Test/FileImporters/HeightStructureUpdateDataStrategyTest.cs
===================================================================
diff -u -r8c97f59adda15f1eb2a4550a06d2f7fb8bee91bf -rb7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1
--- Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Plugin.Test/FileImporters/HeightStructureUpdateDataStrategyTest.cs (.../HeightStructureUpdateDataStrategyTest.cs) (revision 8c97f59adda15f1eb2a4550a06d2f7fb8bee91bf)
+++ Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Plugin.Test/FileImporters/HeightStructureUpdateDataStrategyTest.cs (.../HeightStructureUpdateDataStrategyTest.cs) (revision b7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1)
@@ -216,7 +216,7 @@
}
[Test]
- public void UpdateStructuresWithImportedData_WithoutCurrentStructuresAndReadStructuresHaveDuplicateNames_ThrowsUpdateDataException()
+ public void UpdateStructuresWithImportedData_WithoutCurrentStructuresAndReadStructuresHaveDuplicateIds_ThrowsUpdateDataException()
{
// Setup
const string duplicateId = "I am a duplicate id";
@@ -237,8 +237,7 @@
// Assert
var exception = Assert.Throws(call);
- string expectedMessage = "Kunstwerken moeten een unieke id hebben. " +
- $"Gevonden dubbele elementen: {duplicateId}.";
+ const string expectedMessage = "Geïmporteerde data moet unieke elementen bevatten.";
Assert.AreEqual(expectedMessage, exception.Message);
CollectionAssert.IsEmpty(targetCollection);
Index: Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/FileImporter/RingtoetsPipingSurfaceLineUpdateDataStrategyTest.cs
===================================================================
diff -u -ra8d5814e2cb003b85852c499cbc25ca0156887d4 -rb7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1
--- Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/FileImporter/RingtoetsPipingSurfaceLineUpdateDataStrategyTest.cs (.../RingtoetsPipingSurfaceLineUpdateDataStrategyTest.cs) (revision a8d5814e2cb003b85852c499cbc25ca0156887d4)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/FileImporter/RingtoetsPipingSurfaceLineUpdateDataStrategyTest.cs (.../RingtoetsPipingSurfaceLineUpdateDataStrategyTest.cs) (revision b7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1)
@@ -300,8 +300,7 @@
// Assert
var exception = Assert.Throws(call);
- string expectedMessage = "Profielschematisaties moeten een unieke naam hebben. " +
- $"Gevonden dubbele elementen: {duplicateName}.";
+ const string expectedMessage = "Geïmporteerde data moet unieke elementen bevatten.";
Assert.AreEqual(expectedMessage, exception.Message);
CollectionAssert.IsEmpty(targetCollection);
Index: Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/FileImporter/StochasticSoilModelUpdateDataStrategyTest.cs
===================================================================
diff -u -r50597fbeb76b752bc250107dfa91b696bb6c4995 -rb7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1
--- Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/FileImporter/StochasticSoilModelUpdateDataStrategyTest.cs (.../StochasticSoilModelUpdateDataStrategyTest.cs) (revision 50597fbeb76b752bc250107dfa91b696bb6c4995)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/FileImporter/StochasticSoilModelUpdateDataStrategyTest.cs (.../StochasticSoilModelUpdateDataStrategyTest.cs) (revision b7f91e5d6aaac3c9a52cfda9b1bdd3a74ee4f8b1)
@@ -152,8 +152,7 @@
// Assert
var exception = Assert.Throws(test);
- const string expectedMessage = "Stochastische ondergrondmodellen moeten een unieke naam hebben. " +
- "Gevonden dubbele elementen: non-unique name.";
+ const string expectedMessage = "Geïmporteerde data moet unieke elementen bevatten.";
Assert.AreEqual(expectedMessage, exception.Message);
CollectionAssert.IsEmpty(targetCollection);