Index: Riskeer/Storage/src/Riskeer.Storage.Core/Create/DuneErosion/DuneLocationCreateExtensions.cs =================================================================== diff -u -r9e9976818f1b446948c3bf815cafe2e023f98ac1 -rc5ae588a1075602ac918cb8f38e017abb3bbc91e --- Riskeer/Storage/src/Riskeer.Storage.Core/Create/DuneErosion/DuneLocationCreateExtensions.cs (.../DuneLocationCreateExtensions.cs) (revision 9e9976818f1b446948c3bf815cafe2e023f98ac1) +++ Riskeer/Storage/src/Riskeer.Storage.Core/Create/DuneErosion/DuneLocationCreateExtensions.cs (.../DuneLocationCreateExtensions.cs) (revision c5ae588a1075602ac918cb8f38e017abb3bbc91e) @@ -58,10 +58,8 @@ var entity = new DuneLocationEntity { - LocationId = location.Id, + HydraulicLocationEntity = registry.Get(location.HydraulicBoundaryLocation), Name = location.Name.DeepClone(), - LocationX = location.Location.X.ToNaNAsNull(), - LocationY = location.Location.Y.ToNaNAsNull(), CoastalAreaId = location.CoastalAreaId, Offset = location.Offset.ToNaNAsNull(), Orientation = location.Orientation.ToNaNAsNull(), Index: Riskeer/Storage/src/Riskeer.Storage.Core/Read/DuneErosion/DuneLocationEntityReadExtensions.cs =================================================================== diff -u -r1afcd071cc3a6090f0b0a24790e58b3a631d28d2 -rc5ae588a1075602ac918cb8f38e017abb3bbc91e --- Riskeer/Storage/src/Riskeer.Storage.Core/Read/DuneErosion/DuneLocationEntityReadExtensions.cs (.../DuneLocationEntityReadExtensions.cs) (revision 1afcd071cc3a6090f0b0a24790e58b3a631d28d2) +++ Riskeer/Storage/src/Riskeer.Storage.Core/Read/DuneErosion/DuneLocationEntityReadExtensions.cs (.../DuneLocationEntityReadExtensions.cs) (revision c5ae588a1075602ac918cb8f38e017abb3bbc91e) @@ -57,8 +57,7 @@ return collector.Get(entity); } - var duneLocation = new DuneLocation(entity.Name, - new HydraulicBoundaryLocation(entity.LocationId, string.Empty, entity.LocationX.ToNullAsNaN(), entity.LocationY.ToNullAsNaN()), + var duneLocation = new DuneLocation(entity.Name, entity.HydraulicLocationEntity.Read(collector), new DuneLocation.ConstructionProperties { CoastalAreaId = entity.CoastalAreaId, Index: Riskeer/Storage/test/Riskeer.Storage.Core.Test/Create/DuneErosion/DuneLocationCreateExtensionsTest.cs =================================================================== diff -u -r1afcd071cc3a6090f0b0a24790e58b3a631d28d2 -rc5ae588a1075602ac918cb8f38e017abb3bbc91e --- Riskeer/Storage/test/Riskeer.Storage.Core.Test/Create/DuneErosion/DuneLocationCreateExtensionsTest.cs (.../DuneLocationCreateExtensionsTest.cs) (revision 1afcd071cc3a6090f0b0a24790e58b3a631d28d2) +++ Riskeer/Storage/test/Riskeer.Storage.Core.Test/Create/DuneErosion/DuneLocationCreateExtensionsTest.cs (.../DuneLocationCreateExtensionsTest.cs) (revision c5ae588a1075602ac918cb8f38e017abb3bbc91e) @@ -65,13 +65,14 @@ // Setup const string testName = "testName"; var random = new Random(21); + int id = random.Next(0, 150); double coordinateX = random.NextDouble(); double coordinateY = random.NextDouble(); - int id = random.Next(0, 150); + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(id, string.Empty, coordinateX, coordinateY); + int order = random.Next(); - var registry = new PersistenceRegistry(); - var location = new DuneLocation(testName, new HydraulicBoundaryLocation(id, string.Empty, coordinateX, coordinateY), + var location = new DuneLocation(testName, hydraulicBoundaryLocation, new DuneLocation.ConstructionProperties { CoastalAreaId = random.Next(), @@ -80,15 +81,16 @@ D50 = random.NextDouble() }); + var registry = new PersistenceRegistry(); + var hydraulicLocationEntity = new HydraulicLocationEntity(); + registry.Register(hydraulicLocationEntity, hydraulicBoundaryLocation); + // Call DuneLocationEntity entity = location.Create(registry, order); // Assert Assert.IsNotNull(entity); - Assert.AreEqual(id, entity.LocationId); Assert.AreEqual(testName, entity.Name); - Assert.AreEqual(coordinateX, entity.LocationX); - Assert.AreEqual(coordinateY, entity.LocationY); Assert.AreEqual(location.CoastalAreaId, entity.CoastalAreaId); Assert.AreEqual(location.Offset, entity.Offset, location.Offset.GetAccuracy()); Assert.AreEqual(location.Orientation, entity.Orientation, location.Orientation.GetAccuracy()); @@ -102,40 +104,65 @@ // Setup var random = new Random(28); int id = random.Next(0, 150); + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(id, string.Empty, double.NaN, double.NaN); + int order = random.Next(); - var registry = new PersistenceRegistry(); - var location = new DuneLocation(string.Empty, new HydraulicBoundaryLocation(id, string.Empty, double.NaN, double.NaN), + var location = new DuneLocation(string.Empty, hydraulicBoundaryLocation, new DuneLocation.ConstructionProperties { Offset = double.NaN, Orientation = double.NaN, D50 = double.NaN }); + var registry = new PersistenceRegistry(); + var hydraulicLocationEntity = new HydraulicLocationEntity(); + registry.Register(hydraulicLocationEntity, hydraulicBoundaryLocation); + // Call DuneLocationEntity entity = location.Create(registry, order); // Assert Assert.IsNotNull(entity); - Assert.AreEqual(id, entity.LocationId); Assert.IsEmpty(entity.Name); - Assert.IsNull(entity.LocationX); - Assert.IsNull(entity.LocationY); Assert.IsNull(entity.Offset); Assert.IsNull(entity.Orientation); Assert.IsNull(entity.D50); Assert.AreEqual(order, entity.Order); } [Test] + public void Create_DuneLocationWithAlreadyRegisteredHydraulicLocation_ReturnsEntityWithHydraulicLocationEntity() + { + // Setup + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + var duneLocation = new DuneLocation(string.Empty, hydraulicBoundaryLocation, new DuneLocation.ConstructionProperties()); + + var registry = new PersistenceRegistry(); + var hydraulicLocationEntity = new HydraulicLocationEntity(); + registry.Register(hydraulicLocationEntity, hydraulicBoundaryLocation); + + // Call + DuneLocationEntity entity = duneLocation.Create(registry, 0); + + // Assert + Assert.IsNotNull(entity); + Assert.AreSame(hydraulicLocationEntity, entity.HydraulicLocationEntity); + } + + [Test] public void Create_StringPropertiesDoNotShareReferences() { // Setup const string testName = "original name"; - var location = new DuneLocation(testName, new HydraulicBoundaryLocation(1, string.Empty, 0, 0), - new DuneLocation.ConstructionProperties()); + + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, string.Empty, 0, 0); + var location = new DuneLocation(testName, hydraulicBoundaryLocation, new DuneLocation.ConstructionProperties()); + var registry = new PersistenceRegistry(); + var hydraulicLocationEntity = new HydraulicLocationEntity(); + registry.Register(hydraulicLocationEntity, hydraulicBoundaryLocation); // Call DuneLocationEntity entity = location.Create(registry, 0); @@ -151,9 +178,12 @@ public void Create_DuneLocationSavedMultipleTimes_ReturnSameEntity() { // Setup - var location = new TestDuneLocation(); + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + var location = new DuneLocation(string.Empty, hydraulicBoundaryLocation, new DuneLocation.ConstructionProperties()); var registry = new PersistenceRegistry(); + var hydraulicLocationEntity = new HydraulicLocationEntity(); + registry.Register(hydraulicLocationEntity, hydraulicBoundaryLocation); // Call DuneLocationEntity entity1 = location.Create(registry, 0); Index: Riskeer/Storage/test/Riskeer.Storage.Core.Test/Read/DuneErosion/DuneLocationEntityReadExtensionsTest.cs =================================================================== diff -u -r9e9976818f1b446948c3bf815cafe2e023f98ac1 -rc5ae588a1075602ac918cb8f38e017abb3bbc91e --- Riskeer/Storage/test/Riskeer.Storage.Core.Test/Read/DuneErosion/DuneLocationEntityReadExtensionsTest.cs (.../DuneLocationEntityReadExtensionsTest.cs) (revision 9e9976818f1b446948c3bf815cafe2e023f98ac1) +++ Riskeer/Storage/test/Riskeer.Storage.Core.Test/Read/DuneErosion/DuneLocationEntityReadExtensionsTest.cs (.../DuneLocationEntityReadExtensionsTest.cs) (revision c5ae588a1075602ac918cb8f38e017abb3bbc91e) @@ -26,6 +26,7 @@ using Riskeer.Storage.Core.DbContext; using Riskeer.Storage.Core.Read; using Riskeer.Storage.Core.Read.DuneErosion; +using Riskeer.Storage.Core.TestUtil.Hydraulics; namespace Riskeer.Storage.Core.Test.Read.DuneErosion { @@ -36,10 +37,10 @@ public void Read_EntityIsNull_ThrowArgumentNullException() { // Call - TestDelegate call = () => ((DuneLocationEntity) null).Read(new ReadConversionCollector()); + void Call() => ((DuneLocationEntity) null).Read(new ReadConversionCollector()); // Assert - string paramName = Assert.Throws(call).ParamName; + string paramName = Assert.Throws(Call).ParamName; Assert.AreEqual("entity", paramName); } @@ -50,10 +51,10 @@ var entity = new DuneLocationEntity(); // Call - TestDelegate call = () => entity.Read(null); + void Call() => entity.Read(null); // Assert - string paramName = Assert.Throws(call).ParamName; + string paramName = Assert.Throws(Call).ParamName; Assert.AreEqual("collector", paramName); } @@ -62,37 +63,34 @@ { // Setup const string testName = "testName"; + + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + var hydraulicLocationEntity = new HydraulicLocationEntity(); + var random = new Random(21); - long locationId = random.Next(0, 400); - double x = random.NextDouble(); - double y = random.NextDouble(); int coastalAreaId = random.Next(); double offset = random.NextDouble(); double orientation = random.NextDouble(); double d50 = random.NextDouble(); var entity = new DuneLocationEntity { - LocationId = locationId, + HydraulicLocationEntity = hydraulicLocationEntity, Name = testName, - LocationX = x, - LocationY = y, CoastalAreaId = coastalAreaId, Offset = offset, Orientation = orientation, D50 = d50 }; var collector = new ReadConversionCollector(); + collector.Read(hydraulicLocationEntity, hydraulicBoundaryLocation); // Call DuneLocation location = entity.Read(collector); // Assert Assert.IsNotNull(location); - Assert.AreEqual(locationId, location.Id); Assert.AreEqual(testName, location.Name); - Assert.AreEqual(x, location.Location.X, 1e-6); - Assert.AreEqual(y, location.Location.Y, 1e-6); Assert.AreEqual(coastalAreaId, location.CoastalAreaId); Assert.AreEqual(offset, location.Offset, location.Offset.GetAccuracy()); Assert.AreEqual(orientation, location.Orientation, location.Orientation.GetAccuracy()); @@ -106,32 +104,31 @@ { // Setup const string testName = "testName"; + + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + var hydraulicLocationEntity = new HydraulicLocationEntity(); + var random = new Random(22); - long locationId = random.Next(0, 400); int coastalAreaId = random.Next(); var entity = new DuneLocationEntity { - LocationId = locationId, + HydraulicLocationEntity = hydraulicLocationEntity, Name = testName, - LocationX = null, - LocationY = null, CoastalAreaId = coastalAreaId, Offset = null, Orientation = null, D50 = null }; var collector = new ReadConversionCollector(); + collector.Read(hydraulicLocationEntity, hydraulicBoundaryLocation); // Call DuneLocation location = entity.Read(collector); // Assert Assert.IsNotNull(location); - Assert.AreEqual(locationId, location.Id); Assert.AreEqual(testName, location.Name); - Assert.IsNaN(location.Location.X); - Assert.IsNaN(location.Location.Y); Assert.AreEqual(coastalAreaId, location.CoastalAreaId); Assert.IsNaN(location.Offset); Assert.IsNaN(location.Orientation); @@ -144,12 +141,17 @@ public void Read_SameDuneLocationEntityTwice_ReturnSameDuneLocation() { // Setup + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + var hydraulicLocationEntity = new HydraulicLocationEntity(); + var entity = new DuneLocationEntity { + HydraulicLocationEntity = hydraulicLocationEntity, Name = "A" }; var collector = new ReadConversionCollector(); + collector.Read(hydraulicLocationEntity, hydraulicBoundaryLocation); // Call DuneLocation location1 = entity.Read(collector); @@ -158,5 +160,48 @@ // Assert Assert.AreSame(location1, location2); } + + [Test] + public void Read_EntityWithHydraulicBoundaryLocationInCollector_DuneLocationHasAlreadyReadHydraulicBoundaryLocation() + { + // Setup + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + var hydraulicLocationEntity = new HydraulicLocationEntity(); + + var entity = new DuneLocationEntity + { + HydraulicLocationEntity = hydraulicLocationEntity, + Name = string.Empty + }; + + var collector = new ReadConversionCollector(); + collector.Read(hydraulicLocationEntity, hydraulicBoundaryLocation); + + // Call + DuneLocation duneLocation = entity.Read(collector); + + // Assert + Assert.AreSame(hydraulicBoundaryLocation, duneLocation.HydraulicBoundaryLocation); + } + + [Test] + public void Read_EntityWithHydraulicBoundaryLocationNotYetInCollector_DuneLocationWithCreatedHydraulicBoundaryLocationAndRegisteredNewEntities() + { + // Setup + HydraulicLocationEntity hydraulicLocationEntity = HydraulicLocationEntityTestFactory.CreateHydraulicLocationEntity(); + var entity = new DuneLocationEntity + { + HydraulicLocationEntity = hydraulicLocationEntity, + Name = string.Empty + }; + + var collector = new ReadConversionCollector(); + + // Call + entity.Read(collector); + + // Assert + Assert.IsTrue(collector.Contains(hydraulicLocationEntity)); + } } } \ No newline at end of file Index: Riskeer/Storage/test/Riskeer.Storage.Core.Test/Read/FailureMechanismEntityReadExtensionsTest.cs =================================================================== diff -u -r9e9976818f1b446948c3bf815cafe2e023f98ac1 -rc5ae588a1075602ac918cb8f38e017abb3bbc91e --- Riskeer/Storage/test/Riskeer.Storage.Core.Test/Read/FailureMechanismEntityReadExtensionsTest.cs (.../FailureMechanismEntityReadExtensionsTest.cs) (revision 9e9976818f1b446948c3bf815cafe2e023f98ac1) +++ Riskeer/Storage/test/Riskeer.Storage.Core.Test/Read/FailureMechanismEntityReadExtensionsTest.cs (.../FailureMechanismEntityReadExtensionsTest.cs) (revision c5ae588a1075602ac918cb8f38e017abb3bbc91e) @@ -843,6 +843,12 @@ public void ReadAsDuneErosionFailureMechanism_WitDuneLocations_ReturnsNewDuneErosionFailureMechanismWithLocationsSet() { // Setup + var hydraulicLocationEntity1 = new HydraulicLocationEntity(); + var hydraulicLocationEntity2 = new HydraulicLocationEntity(); + + var hydraulicBoundaryLocation1 = new TestHydraulicBoundaryLocation(); + var hydraulicBoundaryLocation2 = new TestHydraulicBoundaryLocation(); + const string locationAName = "DuneLocation A"; const string locationBName = "DuneLocation B"; var entity = new FailureMechanismEntity @@ -860,16 +866,21 @@ new DuneLocationEntity { Order = 1, - Name = locationBName + Name = locationBName, + HydraulicLocationEntity = hydraulicLocationEntity1 }, new DuneLocationEntity { Order = 0, - Name = locationAName + Name = locationAName, + HydraulicLocationEntity = hydraulicLocationEntity2 } } }; var collector = new ReadConversionCollector(); + collector.Read(hydraulicLocationEntity1, hydraulicBoundaryLocation1); + collector.Read(hydraulicLocationEntity2, hydraulicBoundaryLocation2); + var failureMechanism = new DuneErosionFailureMechanism(); // Call @@ -880,7 +891,10 @@ Assert.AreEqual(2, duneLocations.Count()); Assert.AreEqual(locationAName, duneLocations.ElementAt(0).Name); + Assert.AreSame(hydraulicBoundaryLocation2, duneLocations.ElementAt(0).HydraulicBoundaryLocation); + Assert.AreEqual(locationBName, duneLocations.ElementAt(1).Name); + Assert.AreSame(hydraulicBoundaryLocation1, duneLocations.ElementAt(1).HydraulicBoundaryLocation); } [Test] Index: Riskeer/Storage/test/Riskeer.Storage.Core.TestUtil/RiskeerProjectTestHelper.cs =================================================================== diff -u -r923481bf087b7d79772949b7305abb4de38f92ac -rc5ae588a1075602ac918cb8f38e017abb3bbc91e --- Riskeer/Storage/test/Riskeer.Storage.Core.TestUtil/RiskeerProjectTestHelper.cs (.../RiskeerProjectTestHelper.cs) (revision 923481bf087b7d79772949b7305abb4de38f92ac) +++ Riskeer/Storage/test/Riskeer.Storage.Core.TestUtil/RiskeerProjectTestHelper.cs (.../RiskeerProjectTestHelper.cs) (revision c5ae588a1075602ac918cb8f38e017abb3bbc91e) @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; +using Core.Common.Base; using Core.Common.Base.Data; using Core.Common.Base.Geometry; using Core.Common.TestUtil; @@ -173,7 +174,8 @@ SetSectionResults(closingStructuresFailureMechanism.SectionResults); DuneErosionFailureMechanism duneErosionFailureMechanism = assessmentSection.DuneErosion; - ConfigureDuneErosionFailureMechanism(duneErosionFailureMechanism); + ConfigureDuneErosionFailureMechanism(duneErosionFailureMechanism, assessmentSection.HydraulicBoundaryData.HydraulicBoundaryDatabases + .Single().Locations); SetSections(duneErosionFailureMechanism); SetSectionResults(duneErosionFailureMechanism.SectionResults); @@ -1342,7 +1344,8 @@ #region DuneErosion FailureMechanism - private static void ConfigureDuneErosionFailureMechanism(DuneErosionFailureMechanism failureMechanism) + private static void ConfigureDuneErosionFailureMechanism(DuneErosionFailureMechanism failureMechanism, + ObservableList hydraulicBoundaryLocations) { failureMechanism.CalculationsInputComments.Body = $"Calculations input comment: {failureMechanism.Name}"; @@ -1356,14 +1359,15 @@ new DuneLocationCalculationsForTargetProbability(random.NextDouble(0, 0.1)) }); - SetDuneLocations(failureMechanism); + SetDuneLocations(failureMechanism, hydraulicBoundaryLocations); } - private static void SetDuneLocations(DuneErosionFailureMechanism failureMechanism) + private static void SetDuneLocations(DuneErosionFailureMechanism failureMechanism, + ObservableList hydraulicBoundaryLocations) { - var locationOne = new DuneLocation("DuneLocation", new HydraulicBoundaryLocation(12, string.Empty, 790, 456), + var locationOne = new DuneLocation("DuneLocation", hydraulicBoundaryLocations.ElementAt(0), new DuneLocation.ConstructionProperties()); - var locationTwo = new DuneLocation("DuneLocation", new HydraulicBoundaryLocation(13, string.Empty, 791, 457), + var locationTwo = new DuneLocation("DuneLocation", hydraulicBoundaryLocations.ElementAt(1), new DuneLocation.ConstructionProperties()); failureMechanism.SetDuneLocations(new[] {