Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/RingtoetsPipingSurfaceLineUpdateExtensionsTest.cs =================================================================== diff -u -r71123d9c364c97a5ef2eec81acd1bf877a1297b0 -rb9859f12b82129952b46518de9d4377b26c58335 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/RingtoetsPipingSurfaceLineUpdateExtensionsTest.cs (.../RingtoetsPipingSurfaceLineUpdateExtensionsTest.cs) (revision 71123d9c364c97a5ef2eec81acd1bf877a1297b0) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/RingtoetsPipingSurfaceLineUpdateExtensionsTest.cs (.../RingtoetsPipingSurfaceLineUpdateExtensionsTest.cs) (revision b9859f12b82129952b46518de9d4377b26c58335) @@ -182,6 +182,72 @@ } [Test] + public void Update_SurfaceLineWithUpdatedGeometry_SurfaceLineEntityUpdatedAndGeometryChanged() + { + // Setup + var mocks = new MockRepository(); + var context = RingtoetsEntitiesHelper.Create(mocks); + mocks.ReplayAll(); + + RingtoetsPipingSurfaceLine surfaceLine = CreateSavedSurfaceLineWithGeometry(); + + var pointEntity1 = new SurfaceLinePointEntity + { + SurfaceLinePointEntityId = 1, + Order = 0, + X = 1.0m, + Y = 2.0m, + Z = 3.0m + }; + var pointEntity2 = new SurfaceLinePointEntity + { + SurfaceLinePointEntityId = 2, + Order = 1, + X = 5.0m, + Y = 2.0m, + Z = 4.0m + }; + + var entity = new SurfaceLineEntity + { + SurfaceLineEntityId = surfaceLine.StorageId, + Name = "", + ReferenceLineIntersectionX = 91.28m, + ReferenceLineIntersectionY = 37.46m, + SurfaceLinePointEntities = + { + pointEntity1, + pointEntity2 + } + }; + context.SurfaceLineEntities.Add(entity); + context.SurfaceLinePointEntities.Add(pointEntity1); + context.SurfaceLinePointEntities.Add(pointEntity2); + + var collector = new PersistenceRegistry(); + + // Call + surfaceLine.Update(collector, context); + + // Assert + Assert.AreEqual(surfaceLine.Name, entity.Name); + Assert.AreEqual(surfaceLine.ReferenceLineIntersectionWorldPoint.X, entity.ReferenceLineIntersectionX); + Assert.AreEqual(surfaceLine.ReferenceLineIntersectionWorldPoint.Y, entity.ReferenceLineIntersectionY); + + Assert.AreEqual(surfaceLine.Points.Length, entity.SurfaceLinePointEntities.Count); + for (int i = 0; i < surfaceLine.Points.Length; i++) + { + Point3D geometryPoint = surfaceLine.Points[i]; + SurfaceLinePointEntity pointEntity = entity.SurfaceLinePointEntities.ElementAt(i); + + Assert.AreEqual(geometryPoint.X, pointEntity.X); + Assert.AreEqual(geometryPoint.Y, pointEntity.Y); + Assert.AreEqual(geometryPoint.Z, pointEntity.Z); + } + mocks.VerifyAll(); + } + + [Test] public void Update_SurfaceLineIdenticalGeometry_SurfaceLineEntityUpdatedAndGeometrySaved() { // Setup @@ -322,6 +388,160 @@ mocks.VerifyAll(); } + [Test] + [TestCase(CharacteristicPointType.BottomDitchDikeSide)] + [TestCase(CharacteristicPointType.BottomDitchPolderSide)] + [TestCase(CharacteristicPointType.DikeToeAtPolder)] + [TestCase(CharacteristicPointType.DikeToeAtRiver)] + [TestCase(CharacteristicPointType.DitchDikeSide)] + [TestCase(CharacteristicPointType.DitchPolderSide)] + public void Update_SurfaceLineRemovedCharacteristicPoint_CharacteristicPointEntityRemoved(CharacteristicPointType type) + { + // Setup + var mocks = new MockRepository(); + var context = RingtoetsEntitiesHelper.Create(mocks); + mocks.ReplayAll(); + + RingtoetsPipingSurfaceLine surfaceLine = CreateSavedSurfaceLineWithGeometry(); + + int index = 0; + var surfaceLinePointEntities = surfaceLine.Points.Select(p => new SurfaceLinePointEntity + { + SurfaceLinePointEntityId = p.StorageId, + Order = index++, + X = Convert.ToDecimal(p.X), + Y = Convert.ToDecimal(p.Y), + Z = Convert.ToDecimal(p.Z), + }).ToArray(); + + var characteristicPointEntity = new CharacteristicPointEntity + { + CharacteristicPointEntityId = 1, + CharacteristicPointType = (short)type, + SurfaceLinePointEntity = surfaceLinePointEntities[0] + }; + surfaceLinePointEntities[0].CharacteristicPointEntities.Add(characteristicPointEntity); + + var entity = new SurfaceLineEntity + { + SurfaceLineEntityId = surfaceLine.StorageId, + }; + foreach (SurfaceLinePointEntity pointEntity in surfaceLinePointEntities) + { + entity.SurfaceLinePointEntities.Add(pointEntity); + context.SurfaceLinePointEntities.Add(pointEntity); + } + + context.SurfaceLineEntities.Add(entity); + context.CharacteristicPointEntities.Add(characteristicPointEntity); + + var collector = new PersistenceRegistry(); + + // Call + surfaceLine.Update(collector, context); + + // Assert + Assert.IsNull(characteristicPointEntity.SurfaceLinePointEntity); + + mocks.VerifyAll(); + } + + [Test] + public void Update_SurfaceLineWithChangedCharacteristicPoints_CharacteristicPointEntitiesUpdated() + { + // Setup + var mocks = new MockRepository(); + var context = RingtoetsEntitiesHelper.Create(mocks); + mocks.ReplayAll(); + + RingtoetsPipingSurfaceLine surfaceLine = CreateSavedSurfaceLineWithData(); + + int index = 0; + var surfaceLinePointEntities = surfaceLine.Points.Select(p => new SurfaceLinePointEntity + { + SurfaceLinePointEntityId = p.StorageId, + Order = index++, + X = Convert.ToDecimal(p.X), + Y = Convert.ToDecimal(p.Y), + Z = Convert.ToDecimal(p.Z), + }).ToArray(); + + SurfaceLinePointEntity originalGeometryPointMarkedCharacteristic = surfaceLinePointEntities[1]; + var characteristicPointEntities = CreateCharacteristicPointEntities(surfaceLine, originalGeometryPointMarkedCharacteristic); + + var entity = new SurfaceLineEntity + { + SurfaceLineEntityId = surfaceLine.StorageId + }; + foreach (SurfaceLinePointEntity pointEntity in surfaceLinePointEntities) + { + entity.SurfaceLinePointEntities.Add(pointEntity); + context.SurfaceLinePointEntities.Add(pointEntity); + } + foreach (CharacteristicPointEntity characteristicPointEntity in characteristicPointEntities) + { + characteristicPointEntity.SurfaceLinePointEntity.CharacteristicPointEntities.Add(characteristicPointEntity); + context.CharacteristicPointEntities.Add(characteristicPointEntity); + } + context.SurfaceLineEntities.Add(entity); + + var collector = new PersistenceRegistry(); + + // Call + surfaceLine.Update(collector, context); + + // Assert + foreach (CharacteristicPointEntity characteristicPointEntity in characteristicPointEntities) + { + Assert.AreNotEqual(originalGeometryPointMarkedCharacteristic, characteristicPointEntity.SurfaceLinePointEntity); + } + mocks.VerifyAll(); + } + + private CharacteristicPointEntity[] CreateCharacteristicPointEntities(RingtoetsPipingSurfaceLine surfaceLine, SurfaceLinePointEntity pointEntity) + { + var characteristicPointEntities = new CharacteristicPointEntity[6]; + + characteristicPointEntities[0] = new CharacteristicPointEntity + { + CharacteristicPointEntityId = 1, + CharacteristicPointType = (short)CharacteristicPointType.DikeToeAtRiver, + SurfaceLinePointEntity = pointEntity + }; + characteristicPointEntities[1] = new CharacteristicPointEntity + { + CharacteristicPointEntityId = 2, + CharacteristicPointType = (short)CharacteristicPointType.DikeToeAtPolder, + SurfaceLinePointEntity = pointEntity + }; + characteristicPointEntities[2] = new CharacteristicPointEntity + { + CharacteristicPointEntityId = 3, + CharacteristicPointType = (short)CharacteristicPointType.DitchDikeSide, + SurfaceLinePointEntity = pointEntity + }; + characteristicPointEntities[3] = new CharacteristicPointEntity + { + CharacteristicPointEntityId = 4, + CharacteristicPointType = (short)CharacteristicPointType.BottomDitchDikeSide, + SurfaceLinePointEntity = pointEntity + }; + characteristicPointEntities[4] = new CharacteristicPointEntity + { + CharacteristicPointEntityId = 5, + CharacteristicPointType = (short)CharacteristicPointType.BottomDitchPolderSide, + SurfaceLinePointEntity = pointEntity + }; + characteristicPointEntities[5] = new CharacteristicPointEntity + { + CharacteristicPointEntityId = 6, + CharacteristicPointType = (short)CharacteristicPointType.DitchPolderSide, + SurfaceLinePointEntity = pointEntity + }; + + return characteristicPointEntities; + } + private static int GetGeometryPointIndexForCharacteristicPoint(RingtoetsPipingSurfaceLine surfaceLine, Point3D characteristicPoint) { int index = -1; @@ -339,8 +559,14 @@ { var geometryPoints = new[] { - new Point3D(1.1, 2.2, 3.3), + new Point3D(1.1, 2.2, 3.3) + { + StorageId = 38472 + }, new Point3D(4.4, 5.5, 6.6) + { + StorageId = 4095 + } }; var surfaceLine = new RingtoetsPipingSurfaceLine { @@ -356,14 +582,38 @@ { var geometryPoints = new[] { - new Point3D(1.1, 2.2, 3.3), - new Point3D(4.4, 5.5, 6.6), - new Point3D(7.7, 8.8, 9.9), - new Point3D(10.10, 11.11, 12.12), - new Point3D(13.13, 14.14, 15.15), - new Point3D(16.16, 17.17, 18.18), - new Point3D(19.19, 20.20, 21.21), + new Point3D(1.1, 2.2, 3.3) + { + StorageId = 340985 + }, + new Point3D(4.4, 5.5, 6.6) + { + StorageId = 4058 + }, + new Point3D(7.7, 8.8, 9.9) + { + StorageId = 39485 + }, + new Point3D(10.10, 11.11, 12.12) + { + StorageId = 280347 + }, + new Point3D(13.13, 14.14, 15.15) + { + StorageId = 43059 + }, + new Point3D(16.16, 17.17, 18.18) + { + StorageId = 2390 + }, + new Point3D(19.19, 20.20, 21.21) + { + StorageId = 43 + }, new Point3D(22.22, 23.23, 24.24) + { + StorageId = 325 + } }; var surfaceLine = new RingtoetsPipingSurfaceLine {