Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/StochasticSoilModelUpdateExtensionsTest.cs =================================================================== diff -u -rae6f0c6b534ca650e160ae6d9c0bc90369d25c68 -r4478bdf539df278f9e2aac0f9fe683c34ac55335 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/StochasticSoilModelUpdateExtensionsTest.cs (.../StochasticSoilModelUpdateExtensionsTest.cs) (revision ae6f0c6b534ca650e160ae6d9c0bc90369d25c68) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/StochasticSoilModelUpdateExtensionsTest.cs (.../StochasticSoilModelUpdateExtensionsTest.cs) (revision 4478bdf539df278f9e2aac0f9fe683c34ac55335) @@ -20,12 +20,16 @@ // All rights reserved. using System; +using System.Linq; using Application.Ringtoets.Storage.Create; using Application.Ringtoets.Storage.DbContext; using Application.Ringtoets.Storage.Exceptions; using Application.Ringtoets.Storage.TestUtil; using Application.Ringtoets.Storage.Update; + +using Core.Common.Base.Geometry; + using NUnit.Framework; using Rhino.Mocks; using Ringtoets.Piping.Data; @@ -243,6 +247,193 @@ CollectionAssert.AreEqual(new [] {soilProfileEntity}, soilModelEntity.StochasticSoilProfileEntities); mocks.VerifyAll(); - } + } + + [Test] + public void Update_WithDifferentGeometry_StochasticSoilModelSegmentPointEntitiesReplacesWithNewEntities() + { + // Setup + var mocks = new MockRepository(); + IRingtoetsEntities context = RingtoetsEntitiesHelper.CreateStub(mocks); + mocks.ReplayAll(); + + const long soilModelId = 1; + var soilModel = new StochasticSoilModel(soilModelId, "A", "B") + { + StorageId = soilModelId + }; + soilModel.Geometry.AddRange(new[] + { + new Point2D(1.1, 2.2), + new Point2D(3.3, 4.4) + }); + + var originalPointEntity = new StochasticSoilModelSegmentPointEntity + { + StochasticSoilModelSegmentPointEntityId = 1, + Order = 0, + X = 5.5m, + Y = 6.6m + }; + var soilModelEntity = new StochasticSoilModelEntity + { + StochasticSoilModelEntityId = soilModelId, + StochasticSoilModelSegmentPointEntities = + { + originalPointEntity + } + }; + context.StochasticSoilModelEntities.Add(soilModelEntity); + context.StochasticSoilModelSegmentPointEntities.Add(originalPointEntity); + + var registry = new PersistenceRegistry(); + + // Call + soilModel.Update(registry, context); + + // Assert + Assert.AreEqual(2, soilModelEntity.StochasticSoilModelSegmentPointEntities.Count); + + StochasticSoilModelSegmentPointEntity[] pointEntities = soilModelEntity.StochasticSoilModelSegmentPointEntities.ToArray(); + StochasticSoilModelSegmentPointEntity point1Entity = pointEntities[0]; + Assert.AreEqual(soilModel.Geometry[0].X, point1Entity.X); + Assert.AreEqual(soilModel.Geometry[0].Y, point1Entity.Y); + Assert.AreEqual(0, point1Entity.Order); + + StochasticSoilModelSegmentPointEntity point2Entity = pointEntities[1]; + Assert.AreEqual(soilModel.Geometry[1].X, point2Entity.X); + Assert.AreEqual(soilModel.Geometry[1].Y, point2Entity.Y); + Assert.AreEqual(1, point2Entity.Order); + + mocks.VerifyAll(); + } + + [Test] + public void Update_WithDifferentGeometry2_StochasticSoilModelSegmentPointEntitiesReplacesWithNewEntities() + { + // Setup + var mocks = new MockRepository(); + IRingtoetsEntities context = RingtoetsEntitiesHelper.CreateStub(mocks); + mocks.ReplayAll(); + + const long soilModelId = 1; + var soilModel = new StochasticSoilModel(soilModelId, "A", "B") + { + StorageId = soilModelId + }; + soilModel.Geometry.AddRange(new[] + { + new Point2D(1.1, 2.2), + new Point2D(3.3, 4.4) + }); + + var originalPointEntity1 = new StochasticSoilModelSegmentPointEntity + { + StochasticSoilModelSegmentPointEntityId = 1, + Order = 0, + X = 5.5m, + Y = 6.6m + }; + var originalPointEntity2 = new StochasticSoilModelSegmentPointEntity + { + StochasticSoilModelSegmentPointEntityId = 2, + Order = 1, + X = 7.7m, + Y = 8.8m + }; + var soilModelEntity = new StochasticSoilModelEntity + { + StochasticSoilModelEntityId = soilModelId, + StochasticSoilModelSegmentPointEntities = + { + originalPointEntity1, + originalPointEntity2 + } + }; + context.StochasticSoilModelEntities.Add(soilModelEntity); + context.StochasticSoilModelSegmentPointEntities.Add(originalPointEntity1); + context.StochasticSoilModelSegmentPointEntities.Add(originalPointEntity2); + + var registry = new PersistenceRegistry(); + + // Call + soilModel.Update(registry, context); + + // Assert + Assert.AreEqual(2, soilModelEntity.StochasticSoilModelSegmentPointEntities.Count); + + StochasticSoilModelSegmentPointEntity[] pointEntities = soilModelEntity.StochasticSoilModelSegmentPointEntities.ToArray(); + StochasticSoilModelSegmentPointEntity point1Entity = pointEntities[0]; + Assert.AreEqual(soilModel.Geometry[0].X, point1Entity.X); + Assert.AreEqual(soilModel.Geometry[0].Y, point1Entity.Y); + Assert.AreEqual(0, point1Entity.Order); + + StochasticSoilModelSegmentPointEntity point2Entity = pointEntities[1]; + Assert.AreEqual(soilModel.Geometry[1].X, point2Entity.X); + Assert.AreEqual(soilModel.Geometry[1].Y, point2Entity.Y); + Assert.AreEqual(1, point2Entity.Order); + + mocks.VerifyAll(); + } + + [Test] + public void Update_WithSameGeometry_NoStochasticSoilModelSegmentPointEntitiesAreReplaced() + { + // Setup + var mocks = new MockRepository(); + IRingtoetsEntities context = RingtoetsEntitiesHelper.CreateStub(mocks); + mocks.ReplayAll(); + + const long soilModelId = 1; + var soilModel = new StochasticSoilModel(soilModelId, "A", "B") + { + StorageId = soilModelId + }; + soilModel.Geometry.AddRange(new[] + { + new Point2D(1.1, 2.2), + new Point2D(3.3, 4.4) + }); + + var originalPointEntity1 = new StochasticSoilModelSegmentPointEntity + { + StochasticSoilModelSegmentPointEntityId = 1, + Order = 0, + X = Convert.ToDecimal(soilModel.Geometry[0].X), + Y = Convert.ToDecimal(soilModel.Geometry[0].Y) + }; + var originalPointEntity2 = new StochasticSoilModelSegmentPointEntity + { + StochasticSoilModelSegmentPointEntityId = 2, + Order = 1, + X = Convert.ToDecimal(soilModel.Geometry[1].X), + Y = Convert.ToDecimal(soilModel.Geometry[1].Y) + }; + var soilModelEntity = new StochasticSoilModelEntity + { + StochasticSoilModelEntityId = soilModelId, + StochasticSoilModelSegmentPointEntities = + { + originalPointEntity1, + originalPointEntity2 + } + }; + context.StochasticSoilModelEntities.Add(soilModelEntity); + context.StochasticSoilModelSegmentPointEntities.Add(originalPointEntity1); + context.StochasticSoilModelSegmentPointEntities.Add(originalPointEntity2); + + var registry = new PersistenceRegistry(); + + // Call + soilModel.Update(registry, context); + + // Assert + StochasticSoilModelSegmentPointEntity[] segmentPointEntites = context.StochasticSoilModelSegmentPointEntities.ToArray(); + CollectionAssert.Contains(segmentPointEntites, originalPointEntity1); + CollectionAssert.Contains(segmentPointEntites, originalPointEntity2); + Assert.AreEqual(2, segmentPointEntites.Length); + + mocks.VerifyAll(); + } } } \ No newline at end of file