Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Create/GrassCoverErosionInwardsFailureMechanismCreateExtensions.cs =================================================================== diff -u -r43041b7b9647e0b5e8b3758443206b53a3c16511 -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/src/Application.Ringtoets.Storage/Create/GrassCoverErosionInwardsFailureMechanismCreateExtensions.cs (.../GrassCoverErosionInwardsFailureMechanismCreateExtensions.cs) (revision 43041b7b9647e0b5e8b3758443206b53a3c16511) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Create/GrassCoverErosionInwardsFailureMechanismCreateExtensions.cs (.../GrassCoverErosionInwardsFailureMechanismCreateExtensions.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -47,6 +47,8 @@ AddEntitiesForDikeProfiles(mechanism, registry, entity); AddEntitiesForSectionResults(mechanism.SectionResults, registry); + entity.CalculationGroupEntity = mechanism.CalculationsGroup.Create(registry, 0); + registry.Register(entity, mechanism); return entity; } Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Read/CalculationGroupEntityReadExtentions.cs =================================================================== diff -u -rbba617101367a21a38bf41ad520662058b9012af -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/src/Application.Ringtoets.Storage/Read/CalculationGroupEntityReadExtentions.cs (.../CalculationGroupEntityReadExtentions.cs) (revision bba617101367a21a38bf41ad520662058b9012af) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Read/CalculationGroupEntityReadExtentions.cs (.../CalculationGroupEntityReadExtentions.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -44,7 +44,8 @@ /// The object keeping track of read operations. /// The calculation input parameters for piping. /// A new . - /// Thrown when is null. + /// Thrown when + /// or is null. internal static CalculationGroup ReadPipingCalculationGroup(this CalculationGroupEntity entity, ReadConversionCollector collector, GeneralPipingInput generalPipingInput) { @@ -56,10 +57,12 @@ { throw new ArgumentNullException("generalPipingInput"); } + var group = new CalculationGroup(entity.Name, Convert.ToBoolean(entity.IsEditable)) { StorageId = entity.CalculationGroupEntityId }; + foreach (object childEntity in GetChildEntitiesInOrder(entity)) { var childCalculationGroupEntity = childEntity as CalculationGroupEntity; @@ -77,6 +80,46 @@ return group; } + /// + /// Read the and use the information to construct + /// a . + /// + /// The to create + /// for. + /// The object keeping track of read operations. + /// A new . + /// Thrown when is null. + internal static CalculationGroup ReadAsGrassCoverErosionInwardsCalculationGroup(this CalculationGroupEntity entity, + ReadConversionCollector collector) + { + if (collector == null) + { + throw new ArgumentNullException("collector"); + } + + var group = new CalculationGroup(entity.Name, Convert.ToBoolean(entity.IsEditable)) + { + StorageId = entity.CalculationGroupEntityId + }; + + foreach (object childEntity in GetChildEntitiesInOrder(entity)) + { + var childCalculationGroupEntity = childEntity as CalculationGroupEntity; + if (childCalculationGroupEntity != null) + { + group.Children.Add(childCalculationGroupEntity.ReadAsGrassCoverErosionInwardsCalculationGroup(collector)); + } + var childPipingCalculationEntity = childEntity as GrassCoverErosionInwardsCalculationEntity; + if (childPipingCalculationEntity != null) + { + // TODO + //group.Children.Add(childPipingCalculationEntity.Read(collector, generalPipingInput)); + } + } + + return group; + } + private static IEnumerable GetChildEntitiesInOrder(CalculationGroupEntity entity) { var sortedList = new SortedList(); @@ -88,6 +131,7 @@ { sortedList.Add(pipingCalculationEntity.Order, pipingCalculationEntity); } + //TODO Grass Cover Erosion Inwards Calculations return sortedList.Values; } } Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Read/FailureMechanismEntityReadExtensions.cs =================================================================== diff -u -r43041b7b9647e0b5e8b3758443206b53a3c16511 -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/src/Application.Ringtoets.Storage/Read/FailureMechanismEntityReadExtensions.cs (.../FailureMechanismEntityReadExtensions.cs) (revision 43041b7b9647e0b5e8b3758443206b53a3c16511) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Read/FailureMechanismEntityReadExtensions.cs (.../FailureMechanismEntityReadExtensions.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -133,7 +133,7 @@ CalculationGroup targetRootCalculationGroup, GeneralPipingInput generalPipingInput, ReadConversionCollector collector) { - var rootCalculationGroup = rootCalculationGroupEntity.ReadPipingCalculationGroup(collector, generalPipingInput); + CalculationGroup rootCalculationGroup = rootCalculationGroupEntity.ReadPipingCalculationGroup(collector, generalPipingInput); targetRootCalculationGroup.StorageId = rootCalculationGroup.StorageId; foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) { @@ -156,6 +156,7 @@ entity.ReadCommonFailureMechanismProperties(failureMechanism, collector); entity.ReadGeneralCalculationInput(failureMechanism.GeneralInput); entity.ReadDikeProfiles(failureMechanism.DikeProfiles); + ReadRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.CalculationsGroup, collector); entity.ReadGrassCoverErosionInwardsMechanismSectionResults(failureMechanism, collector); } @@ -184,6 +185,18 @@ } } + private static void ReadRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, + CalculationGroup targetRootCalculationGroup, + ReadConversionCollector collector) + { + CalculationGroup rootCalculationGroup = rootCalculationGroupEntity.ReadAsGrassCoverErosionInwardsCalculationGroup(collector); + targetRootCalculationGroup.StorageId = rootCalculationGroup.StorageId; + foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) + { + targetRootCalculationGroup.Children.Add(calculationBase); + } + } + #endregion #region Height Structures Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Update/GrassCoverErosionInwardsFailureMechanismUpdateExtensions.cs =================================================================== diff -u -r43041b7b9647e0b5e8b3758443206b53a3c16511 -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/src/Application.Ringtoets.Storage/Update/GrassCoverErosionInwardsFailureMechanismUpdateExtensions.cs (.../GrassCoverErosionInwardsFailureMechanismUpdateExtensions.cs) (revision 43041b7b9647e0b5e8b3758443206b53a3c16511) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Update/GrassCoverErosionInwardsFailureMechanismUpdateExtensions.cs (.../GrassCoverErosionInwardsFailureMechanismUpdateExtensions.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -68,6 +68,7 @@ UpdateDikeProfiles(mechanism, registry, entity, context); mechanism.UpdateFailureMechanismSections(registry, entity, context); UpdateSectionResults(mechanism, registry, context); + mechanism.CalculationsGroup.Update(registry, context); registry.Register(entity, mechanism); } Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/GrassCoverErosionInwardsFailureMechanismCreateExtensionsTest.cs =================================================================== diff -u -r43041b7b9647e0b5e8b3758443206b53a3c16511 -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/GrassCoverErosionInwardsFailureMechanismCreateExtensionsTest.cs (.../GrassCoverErosionInwardsFailureMechanismCreateExtensionsTest.cs) (revision 43041b7b9647e0b5e8b3758443206b53a3c16511) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/GrassCoverErosionInwardsFailureMechanismCreateExtensionsTest.cs (.../GrassCoverErosionInwardsFailureMechanismCreateExtensionsTest.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -28,6 +28,8 @@ using Core.Common.Base.Geometry; using NUnit.Framework; + +using Ringtoets.Common.Data.Calculation; using Ringtoets.GrassCoverErosionInwards.Data; namespace Application.Ringtoets.Storage.Test.Create @@ -162,5 +164,40 @@ // Assert Assert.AreEqual(2, entity.DikeProfileEntities.Count); } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void Create_WithCalculationGroup_ReturnFailureMechanismEntityWithCalculationGroupEntities(bool isRelevant) + { + // Setup + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + failureMechanism.CalculationsGroup.Children.Add(new CalculationGroup("A", true)); + failureMechanism.CalculationsGroup.Children.Add(new CalculationGroup("B", true)); + + var registry = new PersistenceRegistry(); + + // Call + FailureMechanismEntity entity = failureMechanism.Create(registry); + + // Assert + Assert.IsNotNull(entity); + Assert.AreEqual(failureMechanism.CalculationsGroup.Name, entity.CalculationGroupEntity.Name); + Assert.AreEqual(Convert.ToByte(failureMechanism.CalculationsGroup.IsNameEditable), entity.CalculationGroupEntity.IsEditable); + Assert.AreEqual(0, entity.CalculationGroupEntity.Order); + + CalculationGroupEntity[] childGroupEntities = entity.CalculationGroupEntity.CalculationGroupEntity1 + .OrderBy(cge => cge.Order) + .ToArray(); + Assert.AreEqual(2, childGroupEntities.Length); + Assert.AreEqual("A", childGroupEntities[0].Name); + Assert.AreEqual(1, childGroupEntities[0].IsEditable); + Assert.AreEqual(0, childGroupEntities[0].Order); + Assert.AreEqual("B", childGroupEntities[1].Name); + Assert.AreEqual(1, childGroupEntities[1].IsEditable); + Assert.AreEqual(1, childGroupEntities[1].Order); + } + + // TODO: With calculations in root folder } } \ No newline at end of file Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs =================================================================== diff -u -r43041b7b9647e0b5e8b3758443206b53a3c16511 -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs (.../StorageSqLiteIntegrationTest.cs) (revision 43041b7b9647e0b5e8b3758443206b53a3c16511) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/StorageSqLiteIntegrationTest.cs (.../StorageSqLiteIntegrationTest.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -805,6 +805,7 @@ { AssertPipingCalculationScenario(expectedPipingCalculation, (PipingCalculationScenario) actualChild); } + // TODO GEBK Berekening } } @@ -883,11 +884,12 @@ } } - private static void AssertGrassCoverErosionInwardsFailureMechanism(GrassCoverErosionInwardsFailureMechanism expectedFailureMechanism, + private void AssertGrassCoverErosionInwardsFailureMechanism(GrassCoverErosionInwardsFailureMechanism expectedFailureMechanism, GrassCoverErosionInwardsFailureMechanism actualFailureMechanism) { Assert.AreEqual(expectedFailureMechanism.GeneralInput.N, actualFailureMechanism.GeneralInput.N); AssertDikeProfiles(expectedFailureMechanism.DikeProfiles, actualFailureMechanism.DikeProfiles); + AssertCalculationGroup(expectedFailureMechanism.CalculationsGroup, actualFailureMechanism.CalculationsGroup); } private static void AssertDikeProfiles(IList expectedDikeProfiles, IList actualDikeProfiles) Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/AssessmentSectionEntityReadExtensionsTest.cs =================================================================== diff -u -r15583423fc85999780f51034039e46af720211ab -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/AssessmentSectionEntityReadExtensionsTest.cs (.../AssessmentSectionEntityReadExtensionsTest.cs) (revision 15583423fc85999780f51034039e46af720211ab) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/AssessmentSectionEntityReadExtensionsTest.cs (.../AssessmentSectionEntityReadExtensionsTest.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -412,6 +412,7 @@ var entity = CreateAssessmentSectionEntity(); var entityId = new Random(21).Next(1, 502); + var rootGroupEntity = new CalculationGroupEntity(); var failureMechanismEntity = new FailureMechanismEntity { FailureMechanismEntityId = entityId, @@ -424,7 +425,8 @@ GrassCoverErosionInwardsFailureMechanismMetaEntityId = 2, N = 1 } - } + }, + CalculationGroupEntity = rootGroupEntity }; entity.FailureMechanismEntities.Add(failureMechanismEntity); Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/CalculationGroupEntityReadExtentionsTest.cs =================================================================== diff -u -rbba617101367a21a38bf41ad520662058b9012af -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/CalculationGroupEntityReadExtentionsTest.cs (.../CalculationGroupEntityReadExtentionsTest.cs) (revision bba617101367a21a38bf41ad520662058b9012af) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/CalculationGroupEntityReadExtentionsTest.cs (.../CalculationGroupEntityReadExtentionsTest.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -297,5 +297,126 @@ Assert.AreEqual("group2", rootChildGroup2.Name); Assert.AreEqual(4, rootChildGroup2.StorageId); } + + [Test] + public void ReadAsGrassCoverErosionInwardsCalculationGroup_CollectorIsNull_ThrowArgumentNullException() + { + // Setup + var entity = new CalculationGroupEntity(); + + // Call + TestDelegate call = () => entity.ReadAsGrassCoverErosionInwardsCalculationGroup(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("collector", paramName); + } + + [Test] + [TestCase(345, "HAbba", 1)] + [TestCase(45, "Dooeis", 0)] + public void ReadAsGrassCoverErosionInwardsCalculationGroup_EntityWithoutChildren_CreateCalculationGroupWithoutChildren( + long id, string name, byte isEditable) + { + // Setup + var entity = new CalculationGroupEntity + { + CalculationGroupEntityId = id, + Name = name, + IsEditable = isEditable + }; + + var collector = new ReadConversionCollector(); + + // Call + CalculationGroup group = entity.ReadAsGrassCoverErosionInwardsCalculationGroup(collector); + + // Assert + Assert.AreEqual(id, group.StorageId); + Assert.AreEqual(name, group.Name); + Assert.AreEqual(Convert.ToBoolean(isEditable), group.IsNameEditable); + CollectionAssert.IsEmpty(group.Children); + } + + [Test] + public void ReadAsGrassCoverErosionInwardsCalculationGroup_EntityWithChildGroups_CreateCalculationGroupWithChildGroups() + { + // Setup + var rootGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = 1, + Name = "A", + CalculationGroupEntity1 = + { + new CalculationGroupEntity + { + CalculationGroupEntityId = 2, + Name = "AA", + IsEditable = 1, + Order = 0 + }, + new CalculationGroupEntity + { + CalculationGroupEntityId = 3, + Name = "AB", + IsEditable = 0, + CalculationGroupEntity1 = + { + new CalculationGroupEntity + { + CalculationGroupEntityId = 4, + Name = "ABA", + IsEditable = 0, + Order = 0 + }, + new CalculationGroupEntity + { + CalculationGroupEntityId = 5, + Name = "ABB", + IsEditable = 1, + Order = 1 + } + }, + Order = 1 + } + } + }; + + var collector = new ReadConversionCollector(); + + // Call + var rootGroup = rootGroupEntity.ReadAsGrassCoverErosionInwardsCalculationGroup(collector); + + // Assert + Assert.AreEqual(1, rootGroup.StorageId); + Assert.AreEqual("A", rootGroup.Name); + Assert.IsFalse(rootGroup.IsNameEditable); + + ICalculationBase[] rootChildren = rootGroup.Children.ToArray(); + var rootChildGroup1 = (CalculationGroup)rootChildren[0]; + Assert.AreEqual("AA", rootChildGroup1.Name); + Assert.AreEqual(2, rootChildGroup1.StorageId); + Assert.IsTrue(rootChildGroup1.IsNameEditable); + CollectionAssert.IsEmpty(rootChildGroup1.Children); + var rootChildGroup2 = (CalculationGroup)rootChildren[1]; + Assert.AreEqual("AB", rootChildGroup2.Name); + Assert.AreEqual(3, rootChildGroup2.StorageId); + Assert.IsFalse(rootChildGroup2.IsNameEditable); + + ICalculationBase[] rootChildGroup2Children = rootChildGroup2.Children.ToArray(); + var rootChildGroup1Child1 = (CalculationGroup)rootChildGroup2Children[0]; + Assert.AreEqual("ABA", rootChildGroup1Child1.Name); + Assert.AreEqual(4, rootChildGroup1Child1.StorageId); + Assert.IsFalse(rootChildGroup1Child1.IsNameEditable); + CollectionAssert.IsEmpty(rootChildGroup1Child1.Children); + var rootChildGroup1Child2 = (CalculationGroup)rootChildGroup2Children[1]; + Assert.AreEqual("ABB", rootChildGroup1Child2.Name); + Assert.AreEqual(5, rootChildGroup1Child2.StorageId); + Assert.IsTrue(rootChildGroup1Child2.IsNameEditable); + CollectionAssert.IsEmpty(rootChildGroup1Child2.Children); + } + + // TODO Calculations + // TODO Groups and Calculations } } \ No newline at end of file Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/FailureMechanismEntityReadExtensionsTest.cs =================================================================== diff -u -r43041b7b9647e0b5e8b3758443206b53a3c16511 -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/FailureMechanismEntityReadExtensionsTest.cs (.../FailureMechanismEntityReadExtensionsTest.cs) (revision 43041b7b9647e0b5e8b3758443206b53a3c16511) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/FailureMechanismEntityReadExtensionsTest.cs (.../FailureMechanismEntityReadExtensionsTest.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -39,6 +39,8 @@ [TestFixture] public class FailureMechanismEntityReadExtensionsTest { + #region Piping + [Test] public void ReadAsPipingFailureMechanism_WithoutFailureMechanism_ThrowsArgumentNullException() { @@ -52,7 +54,7 @@ var parameter = Assert.Throws(test).ParamName; Assert.AreEqual("failureMechanism", parameter); } - + [Test] public void ReadAsPipingFailureMechanism_WithoutCollector_ThrowsArgumentNullException() { @@ -255,13 +257,17 @@ ICalculationBase child1 = failureMechanism.CalculationsGroup.Children[0]; Assert.AreEqual("Child1", child1.Name); - Assert.AreEqual(childGroup1Id, ((CalculationGroup) child1).StorageId); + Assert.AreEqual(childGroup1Id, ((CalculationGroup)child1).StorageId); ICalculationBase child2 = failureMechanism.CalculationsGroup.Children[1]; Assert.AreEqual("Child2", child2.Name); - Assert.AreEqual(childGroup2Id, ((CalculationGroup) child2).StorageId); + Assert.AreEqual(childGroup2Id, ((CalculationGroup)child2).StorageId); } + #endregion + + #region Grass Cover Erosion Inwards + [Test] [TestCase(true)] [TestCase(false)] @@ -283,6 +289,10 @@ GrassCoverErosionInwardsFailureMechanismMetaEntityId = inputId, N = 3 } + }, + CalculationGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = 456 } }; var collector = new ReadConversionCollector(); @@ -335,6 +345,10 @@ DikeGeometryData = emptyDikeGeometryBinaryData, ForeShoreData = emptyForeshoreBinaryData } + }, + CalculationGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = 567 } }; GrassCoverErosionInwardsFailureMechanism failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); @@ -382,6 +396,10 @@ GrassCoverErosionInwardsFailureMechanismMetaEntityId = 2, N = 1 } + }, + CalculationGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = 9867 } }; var collector = new ReadConversionCollector(); @@ -396,6 +414,74 @@ } [Test] + public void ReadAsGrassCoverErosionInwardsFailureMechanism_WithCalculationGroup_ReturnsNewGrassCoverErosionInwardsFailureMechanismWithCalculationGroupSet() + { + // Setup + var entityId = new Random(984356).Next(1, 502); + const int rootGroupId = 1; + const int childGroup1Id = 2; + const int childGroup2Id = 3; + + var entity = new FailureMechanismEntity + { + FailureMechanismEntityId = entityId, + CalculationGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = rootGroupId, + IsEditable = 0, + Name = "Berekeningen", + Order = 0, + CalculationGroupEntity1 = + { + new CalculationGroupEntity + { + CalculationGroupEntityId = childGroup1Id, + IsEditable = 1, + Name = "Child1", + Order = 0 + }, + new CalculationGroupEntity + { + CalculationGroupEntityId = childGroup2Id, + IsEditable = 1, + Name = "Child2", + Order = 1 + }, + } + }, + GrassCoverErosionInwardsFailureMechanismMetaEntities = + { + new GrassCoverErosionInwardsFailureMechanismMetaEntity + { + GrassCoverErosionInwardsFailureMechanismMetaEntityId = 3456, + N = 1 + } + } + }; + var collector = new ReadConversionCollector(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + + // Call + entity.ReadAsGrassCoverErosionInwardsFailureMechanism(failureMechanism, collector); + + // Assert + Assert.AreEqual(rootGroupId, failureMechanism.CalculationsGroup.StorageId); + Assert.AreEqual(2, failureMechanism.CalculationsGroup.Children.Count); + + ICalculationBase child1 = failureMechanism.CalculationsGroup.Children[0]; + Assert.AreEqual("Child1", child1.Name); + Assert.AreEqual(childGroup1Id, ((CalculationGroup)child1).StorageId); + + ICalculationBase child2 = failureMechanism.CalculationsGroup.Children[1]; + Assert.AreEqual("Child2", child2.Name); + Assert.AreEqual(childGroup2Id, ((CalculationGroup)child2).StorageId); + } + + // TODO Calculations + + #endregion + + [Test] [TestCase(true)] [TestCase(false)] public void ReadAsStandAloneFailureMechanism_WithoutSectionsSet_ReturnsNewStandAloneFailureMechanism(bool isRelevant) Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/AssessmentSectionUpdateExtensionsTest.cs =================================================================== diff -u -r15583423fc85999780f51034039e46af720211ab -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/AssessmentSectionUpdateExtensionsTest.cs (.../AssessmentSectionUpdateExtensionsTest.cs) (revision 15583423fc85999780f51034039e46af720211ab) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/AssessmentSectionUpdateExtensionsTest.cs (.../AssessmentSectionUpdateExtensionsTest.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -160,6 +160,10 @@ { CalculationGroupEntityId = section.PipingFailureMechanism.CalculationsGroup.StorageId }); + ringtoetsEntities.CalculationGroupEntities.Add(new CalculationGroupEntity + { + CalculationGroupEntityId = section.GrassCoverErosionInwards.CalculationsGroup.StorageId + }); ringtoetsEntities.PipingFailureMechanismMetaEntities.Add(new PipingFailureMechanismMetaEntity { PipingFailureMechanismMetaEntityId = section.PipingFailureMechanism.PipingProbabilityAssessmentInput.StorageId, @@ -215,6 +219,10 @@ { CalculationGroupEntityId = section.PipingFailureMechanism.CalculationsGroup.StorageId }); + ringtoetsEntities.CalculationGroupEntities.Add(new CalculationGroupEntity + { + CalculationGroupEntityId = section.GrassCoverErosionInwards.CalculationsGroup.StorageId + }); ringtoetsEntities.PipingFailureMechanismMetaEntities.Add(new PipingFailureMechanismMetaEntity { PipingFailureMechanismMetaEntityId = section.PipingFailureMechanism.PipingProbabilityAssessmentInput.StorageId, @@ -270,6 +278,10 @@ { CalculationGroupEntityId = section.PipingFailureMechanism.CalculationsGroup.StorageId }); + ringtoetsEntities.CalculationGroupEntities.Add(new CalculationGroupEntity + { + CalculationGroupEntityId = section.GrassCoverErosionInwards.CalculationsGroup.StorageId + }); ringtoetsEntities.PipingFailureMechanismMetaEntities.Add(new PipingFailureMechanismMetaEntity { PipingFailureMechanismMetaEntityId = section.PipingFailureMechanism.PipingProbabilityAssessmentInput.StorageId, @@ -324,6 +336,10 @@ { CalculationGroupEntityId = section.PipingFailureMechanism.CalculationsGroup.StorageId }); + ringtoetsEntities.CalculationGroupEntities.Add(new CalculationGroupEntity + { + CalculationGroupEntityId = section.GrassCoverErosionInwards.CalculationsGroup.StorageId + }); ringtoetsEntities.PipingFailureMechanismMetaEntities.Add(new PipingFailureMechanismMetaEntity { PipingFailureMechanismMetaEntityId = section.PipingFailureMechanism.PipingProbabilityAssessmentInput.StorageId, @@ -392,6 +408,10 @@ { CalculationGroupEntityId = section.PipingFailureMechanism.CalculationsGroup.StorageId }); + ringtoetsEntities.CalculationGroupEntities.Add(new CalculationGroupEntity + { + CalculationGroupEntityId = section.GrassCoverErosionInwards.CalculationsGroup.StorageId + }); ringtoetsEntities.PipingFailureMechanismMetaEntities.Add(new PipingFailureMechanismMetaEntity { PipingFailureMechanismMetaEntityId = section.PipingFailureMechanism.PipingProbabilityAssessmentInput.StorageId, @@ -451,6 +471,10 @@ { CalculationGroupEntityId = section.PipingFailureMechanism.CalculationsGroup.StorageId }); + ringtoetsEntities.CalculationGroupEntities.Add(new CalculationGroupEntity + { + CalculationGroupEntityId = section.GrassCoverErosionInwards.CalculationsGroup.StorageId + }); ringtoetsEntities.PipingFailureMechanismMetaEntities.Add(new PipingFailureMechanismMetaEntity { PipingFailureMechanismMetaEntityId = section.PipingFailureMechanism.PipingProbabilityAssessmentInput.StorageId, @@ -507,6 +531,10 @@ { CalculationGroupEntityId = section.PipingFailureMechanism.CalculationsGroup.StorageId }); + ringtoetsEntities.CalculationGroupEntities.Add(new CalculationGroupEntity + { + CalculationGroupEntityId = section.GrassCoverErosionInwards.CalculationsGroup.StorageId + }); ringtoetsEntities.PipingFailureMechanismMetaEntities.Add(new PipingFailureMechanismMetaEntity { PipingFailureMechanismMetaEntityId = section.PipingFailureMechanism.PipingProbabilityAssessmentInput.StorageId, @@ -593,6 +621,10 @@ { CalculationGroupEntityId = section.PipingFailureMechanism.CalculationsGroup.StorageId }); + ringtoetsEntities.CalculationGroupEntities.Add(new CalculationGroupEntity + { + CalculationGroupEntityId = section.GrassCoverErosionInwards.CalculationsGroup.StorageId + }); ringtoetsEntities.PipingFailureMechanismMetaEntities.Add(new PipingFailureMechanismMetaEntity { PipingFailureMechanismMetaEntityId = section.PipingFailureMechanism.PipingProbabilityAssessmentInput.StorageId, @@ -686,6 +718,10 @@ GrassCoverErosionInwards = { StorageId = failureMechanismId++, + CalculationsGroup = + { + StorageId = 5986 + }, GeneralInput = { StorageId = 12 Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/GrassCoverErosionInwardsFailureMechanismUpdateExtensionsTest.cs =================================================================== diff -u -r43041b7b9647e0b5e8b3758443206b53a3c16511 -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/GrassCoverErosionInwardsFailureMechanismUpdateExtensionsTest.cs (.../GrassCoverErosionInwardsFailureMechanismUpdateExtensionsTest.cs) (revision 43041b7b9647e0b5e8b3758443206b53a3c16511) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/GrassCoverErosionInwardsFailureMechanismUpdateExtensionsTest.cs (.../GrassCoverErosionInwardsFailureMechanismUpdateExtensionsTest.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -30,6 +30,8 @@ using Core.Common.Base.Geometry; using NUnit.Framework; using Rhino.Mocks; + +using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.GrassCoverErosionInwards.Data; @@ -141,6 +143,10 @@ { StorageId = 62981, N = 13 + }, + CalculationsGroup = + { + StorageId = 209 } }; @@ -149,17 +155,23 @@ GrassCoverErosionInwardsFailureMechanismMetaEntityId = failureMechanism.GeneralInput.StorageId, N = 2 }; + var rootCalculationGroup = new CalculationGroupEntity + { + CalculationGroupEntityId = failureMechanism.CalculationsGroup.StorageId + }; var failureMechanismEntity = new FailureMechanismEntity { FailureMechanismEntityId = failureMechanism.StorageId, IsRelevant = Convert.ToByte(false), GrassCoverErosionInwardsFailureMechanismMetaEntities = { generalInputEntity - } + }, + CalculationGroupEntity = rootCalculationGroup }; ringtoetsEntities.FailureMechanismEntities.Add(failureMechanismEntity); + ringtoetsEntities.CalculationGroupEntities.Add(rootCalculationGroup); ringtoetsEntities.GrassCoverErosionInwardsFailureMechanismMetaEntities.Add(generalInputEntity); // Call @@ -203,14 +215,24 @@ new RoughnessPoint(new Point2D(4, 4), 1) }, new Point2D[0], null, new DikeProfile.ConstructionProperties()) + }, + CalculationsGroup = + { + StorageId = 765 } }; + var rootGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = failureMechanism.CalculationsGroup.StorageId + }; var failureMechanismEntity = new FailureMechanismEntity { FailureMechanismEntityId = failureMechanism.StorageId, + CalculationGroupEntity = rootGroupEntity }; ringtoetsEntities.FailureMechanismEntities.Add(failureMechanismEntity); + ringtoetsEntities.CalculationGroupEntities.Add(rootGroupEntity); ringtoetsEntities.GrassCoverErosionInwardsFailureMechanismMetaEntities.Add(new GrassCoverErosionInwardsFailureMechanismMetaEntity { GrassCoverErosionInwardsFailureMechanismMetaEntityId = failureMechanism.GeneralInput.StorageId @@ -261,14 +283,24 @@ { StorageId = 4 } + }, + CalculationsGroup = + { + StorageId = 405986 } }; + var rootGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = failureMechanism.CalculationsGroup.StorageId + }; var failureMechanismEntity = new FailureMechanismEntity { FailureMechanismEntityId = failureMechanism.StorageId, + CalculationGroupEntity = rootGroupEntity }; ringtoetsEntities.FailureMechanismEntities.Add(failureMechanismEntity); + ringtoetsEntities.CalculationGroupEntities.Add(rootGroupEntity); ringtoetsEntities.GrassCoverErosionInwardsFailureMechanismMetaEntities.Add(new GrassCoverErosionInwardsFailureMechanismMetaEntity { GrassCoverErosionInwardsFailureMechanismMetaEntityId = failureMechanism.GeneralInput.StorageId @@ -309,19 +341,29 @@ GeneralInput = { StorageId = 2 + }, + CalculationsGroup = + { + StorageId = 30495 } }; failureMechanism.AddSection(new FailureMechanismSection("", new[] { new Point2D(0, 0) })); + var rootGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = failureMechanism.CalculationsGroup.StorageId + }; var failureMechanismEntity = new FailureMechanismEntity { FailureMechanismEntityId = failureMechanism.StorageId, + CalculationGroupEntity = rootGroupEntity }; ringtoetsEntities.FailureMechanismEntities.Add(failureMechanismEntity); + ringtoetsEntities.CalculationGroupEntities.Add(rootGroupEntity); ringtoetsEntities.GrassCoverErosionInwardsFailureMechanismMetaEntities.Add(new GrassCoverErosionInwardsFailureMechanismMetaEntity { GrassCoverErosionInwardsFailureMechanismMetaEntityId = failureMechanism.GeneralInput.StorageId @@ -352,6 +394,10 @@ GeneralInput = { StorageId = 2 + }, + CalculationsGroup = + { + StorageId = 4968 } }; var testName = "testName"; @@ -363,20 +409,26 @@ StorageId = 1 }); + var rootGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = failureMechanism.CalculationsGroup.StorageId + }; var failureMechanismSectionEntity = new FailureMechanismSectionEntity { - FailureMechanismSectionEntityId = 1, + FailureMechanismSectionEntityId = 1 }; var failureMechanismEntity = new FailureMechanismEntity { FailureMechanismEntityId = 1, FailureMechanismSectionEntities = { failureMechanismSectionEntity - } + }, + CalculationGroupEntity = rootGroupEntity }; ringtoetsEntities.FailureMechanismEntities.Add(failureMechanismEntity); + ringtoetsEntities.CalculationGroupEntities.Add(rootGroupEntity); ringtoetsEntities.GrassCoverErosionInwardsFailureMechanismMetaEntities.Add(new GrassCoverErosionInwardsFailureMechanismMetaEntity { GrassCoverErosionInwardsFailureMechanismMetaEntityId = failureMechanism.GeneralInput.StorageId @@ -393,5 +445,139 @@ mocks.VerifyAll(); } + + [Test] + public void Update_ContextWithNewCalculationGroup_CalculationGroupEntityAdded() + { + // Setup + MockRepository mocks = new MockRepository(); + var ringtoetsEntities = RingtoetsEntitiesHelper.CreateStub(mocks); + mocks.ReplayAll(); + + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism + { + StorageId = 1, + CalculationsGroup = + { + StorageId = 1 + }, + GeneralInput = + { + StorageId = 2 + } + }; + var newCalculationGroup = new CalculationGroup + { + Name = "new group" + }; + failureMechanism.CalculationsGroup.Children.Add(newCalculationGroup); + + var rootCalculationGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = failureMechanism.CalculationsGroup.StorageId, + Name = "Berekeningen", + IsEditable = 0, + Order = 0 + }; + var failureMechanismEntity = new FailureMechanismEntity + { + FailureMechanismEntityId = failureMechanism.StorageId, + CalculationGroupEntity = rootCalculationGroupEntity + }; + ringtoetsEntities.FailureMechanismEntities.Add(failureMechanismEntity); + ringtoetsEntities.CalculationGroupEntities.Add(rootCalculationGroupEntity); + ringtoetsEntities.GrassCoverErosionInwardsFailureMechanismMetaEntities.Add(new GrassCoverErosionInwardsFailureMechanismMetaEntity + { + GrassCoverErosionInwardsFailureMechanismMetaEntityId = failureMechanism.GeneralInput.StorageId, + FailureMechanismEntityId = failureMechanism.StorageId + }); + + var registry = new PersistenceRegistry(); + + // Call + failureMechanism.Update(registry, ringtoetsEntities); + + // Assert + Assert.AreEqual(1, rootCalculationGroupEntity.CalculationGroupEntity1.Count); + CalculationGroupEntity newlyAddedGroupEntity = rootCalculationGroupEntity.CalculationGroupEntity1.First(); + Assert.AreEqual(newCalculationGroup.Name, newlyAddedGroupEntity.Name); + Assert.AreEqual(1, newlyAddedGroupEntity.IsEditable); + Assert.AreEqual(0, newlyAddedGroupEntity.Order); + mocks.VerifyAll(); + } + + [Test] + public void Update_ContextWithUnchangedCalculationGroup_NoNewCalculationGroupEntityAdded() + { + // Setup + MockRepository mocks = new MockRepository(); + var ringtoetsEntities = RingtoetsEntitiesHelper.CreateStub(mocks); + mocks.ReplayAll(); + + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism + { + StorageId = 1, + CalculationsGroup = + { + StorageId = 1 + }, + GeneralInput = + { + StorageId = 1 + } + }; + var alreadySavedChildGroup = new CalculationGroup + { + Name = "saved child group", + StorageId = 2 + }; + failureMechanism.CalculationsGroup.Children.Add(alreadySavedChildGroup); + + var childGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = alreadySavedChildGroup.StorageId, + Name = alreadySavedChildGroup.Name, + IsEditable = 1, + Order = 0 + }; + var rootCalculationGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntityId = failureMechanism.CalculationsGroup.StorageId, + Name = "Berekeningen", + IsEditable = 0, + Order = 0, + CalculationGroupEntity1 = + { + childGroupEntity + } + }; + var failureMechanismEntity = new FailureMechanismEntity + { + FailureMechanismEntityId = failureMechanism.StorageId, + CalculationGroupEntity = rootCalculationGroupEntity + }; + ringtoetsEntities.FailureMechanismEntities.Add(failureMechanismEntity); + ringtoetsEntities.CalculationGroupEntities.Add(rootCalculationGroupEntity); + ringtoetsEntities.CalculationGroupEntities.Add(childGroupEntity); + ringtoetsEntities.GrassCoverErosionInwardsFailureMechanismMetaEntities.Add(new GrassCoverErosionInwardsFailureMechanismMetaEntity + { + GrassCoverErosionInwardsFailureMechanismMetaEntityId = failureMechanism.GeneralInput.StorageId, + FailureMechanismEntityId = failureMechanism.StorageId + }); + + var registry = new PersistenceRegistry(); + + // Call + failureMechanism.Update(registry, ringtoetsEntities); + + // Assert + Assert.AreEqual(1, rootCalculationGroupEntity.CalculationGroupEntity1.Count); + CalculationGroupEntity retainedCalculationGroupEntity = rootCalculationGroupEntity.CalculationGroupEntity1.First(); + Assert.AreEqual(alreadySavedChildGroup.Name, retainedCalculationGroupEntity.Name); + Assert.AreEqual(1, retainedCalculationGroupEntity.IsEditable); + Assert.AreEqual(0, retainedCalculationGroupEntity.Order); + Assert.AreEqual(alreadySavedChildGroup.StorageId, retainedCalculationGroupEntity.CalculationGroupEntityId); + mocks.VerifyAll(); + } } } \ No newline at end of file Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/ProjectUpdateExtensionsTest.cs =================================================================== diff -u -r15583423fc85999780f51034039e46af720211ab -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/ProjectUpdateExtensionsTest.cs (.../ProjectUpdateExtensionsTest.cs) (revision 15583423fc85999780f51034039e46af720211ab) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Update/ProjectUpdateExtensionsTest.cs (.../ProjectUpdateExtensionsTest.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -252,6 +252,10 @@ GrassCoverErosionInwards = { StorageId = 1, + CalculationsGroup = + { + StorageId = 854563 + }, GeneralInput = { StorageId = 3 @@ -350,6 +354,10 @@ { CalculationGroupEntityId = section.PipingFailureMechanism.CalculationsGroup.StorageId }); + ringtoetsEntities.CalculationGroupEntities.Add(new CalculationGroupEntity + { + CalculationGroupEntityId = section.GrassCoverErosionInwards.CalculationsGroup.StorageId + }); ringtoetsEntities.FailureMechanismEntities.Add(new FailureMechanismEntity { FailureMechanismEntityId = 1 Index: Application/Ringtoets/test/Application.Ringtoets.Storage.TestUtil/RingtoetsProjectHelper.cs =================================================================== diff -u -r43041b7b9647e0b5e8b3758443206b53a3c16511 -r93f4c75ba2309bb82de7e2362bafca5aa516d545 --- Application/Ringtoets/test/Application.Ringtoets.Storage.TestUtil/RingtoetsProjectHelper.cs (.../RingtoetsProjectHelper.cs) (revision 43041b7b9647e0b5e8b3758443206b53a3c16511) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.TestUtil/RingtoetsProjectHelper.cs (.../RingtoetsProjectHelper.cs) (revision 93f4c75ba2309bb82de7e2362bafca5aa516d545) @@ -294,6 +294,18 @@ Orientation = 7.7, X0 = 8.8 })); + failureMechanism.CalculationsGroup.Children.Add(new CalculationGroup + { + Name = "GEKB A" + }); + failureMechanism.CalculationsGroup.Children.Add(new CalculationGroup + { + Name = "GEKB B" + }); + failureMechanism.CalculationsGroup.Children.Add(new CalculationGroup + { + Name = "GEKB C" + }); } private static void SetSectionResults(IEnumerable sectionResults)