Index: Application/Ringtoets/src/Application.Ringtoets.Migration.Core/EmbeddedResources/Migration_17.1_17.2.sql =================================================================== diff -u -r3aae00632d922ad6a995a79de25ff4da07e6b57a -rd75a6c0c39a582f42b7a05b705aaa1f703a47d89 --- Application/Ringtoets/src/Application.Ringtoets.Migration.Core/EmbeddedResources/Migration_17.1_17.2.sql (.../Migration_17.1_17.2.sql) (revision 3aae00632d922ad6a995a79de25ff4da07e6b57a) +++ Application/Ringtoets/src/Application.Ringtoets.Migration.Core/EmbeddedResources/Migration_17.1_17.2.sql (.../Migration_17.1_17.2.sql) (revision d75a6c0c39a582f42b7a05b705aaa1f703a47d89) @@ -1616,6 +1616,17 @@ 0.033 FROM FailureMechanismEntity WHERE FailureMechanismType = 2; +INSERT INTO CalculationGroupEntity ( + [NAME], + [ORDER]) +SELECT + "Berekeningen", + 0; + +UPDATE FailureMechanismEntity +SET CalculationGroupEntityId = last_insert_rowid() +WHERE FailureMechanismType = 2; + /* Write migration logging */ Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Create/MacroStabilityInwards/MacroStabilityInwardsFailureMechanismCreateExtensions.cs =================================================================== diff -u -r4fc9392d79e72f0ef668f63fd2a086e1feb18cdd -rd75a6c0c39a582f42b7a05b705aaa1f703a47d89 --- Application/Ringtoets/src/Application.Ringtoets.Storage/Create/MacroStabilityInwards/MacroStabilityInwardsFailureMechanismCreateExtensions.cs (.../MacroStabilityInwardsFailureMechanismCreateExtensions.cs) (revision 4fc9392d79e72f0ef668f63fd2a086e1feb18cdd) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Create/MacroStabilityInwards/MacroStabilityInwardsFailureMechanismCreateExtensions.cs (.../MacroStabilityInwardsFailureMechanismCreateExtensions.cs) (revision d75a6c0c39a582f42b7a05b705aaa1f703a47d89) @@ -51,6 +51,8 @@ AddEntitiesForSurfaceLines(mechanism, registry, entity); AddEntitiesForSectionResults(mechanism.SectionResults, registry); + entity.CalculationGroupEntity = mechanism.CalculationsGroup.Create(registry, 0); + return entity; } Index: Application/Ringtoets/src/Application.Ringtoets.Storage/DbContext/PartialRingtoetsEntities.cs =================================================================== diff -u -r4fc9392d79e72f0ef668f63fd2a086e1feb18cdd -rd75a6c0c39a582f42b7a05b705aaa1f703a47d89 --- Application/Ringtoets/src/Application.Ringtoets.Storage/DbContext/PartialRingtoetsEntities.cs (.../PartialRingtoetsEntities.cs) (revision 4fc9392d79e72f0ef668f63fd2a086e1feb18cdd) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/DbContext/PartialRingtoetsEntities.cs (.../PartialRingtoetsEntities.cs) (revision d75a6c0c39a582f42b7a05b705aaa1f703a47d89) @@ -92,6 +92,9 @@ MacroStabilityInwardsStochasticSoilProfileEntities.Load(); MacroStabilityInwardsPreconsolidationStressEntities.Load(); MacrostabilityOutwardsSectionResultEntities.Load(); + MacroStabilityInwardsCalculationEntities.Load(); + MacroStabilityInwardsCalculationOutputEntities.Load(); + MacroStabilityInwardsSemiProbabilisticOutputEntities.Load(); MicrostabilitySectionResultEntities.Load(); ProjectEntities.Load(); PipingCalculationEntities.Load(); Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Read/FailureMechanismEntityReadExtensions.cs =================================================================== diff -u -r4fc9392d79e72f0ef668f63fd2a086e1feb18cdd -rd75a6c0c39a582f42b7a05b705aaa1f703a47d89 --- Application/Ringtoets/src/Application.Ringtoets.Storage/Read/FailureMechanismEntityReadExtensions.cs (.../FailureMechanismEntityReadExtensions.cs) (revision 4fc9392d79e72f0ef668f63fd2a086e1feb18cdd) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Read/FailureMechanismEntityReadExtensions.cs (.../FailureMechanismEntityReadExtensions.cs) (revision d75a6c0c39a582f42b7a05b705aaa1f703a47d89) @@ -504,6 +504,7 @@ /// The target of the read operation. /// The object keeping track of read operations. /// Thrown when any input parameter is null. + /// Thrown when expected table entries could not be found. internal static void ReadAsMacroStabilityInwardsFailureMechanism(this FailureMechanismEntity entity, MacroStabilityInwardsFailureMechanism failureMechanism, ReadConversionCollector collector) @@ -547,6 +548,7 @@ } entity.ReadMacroStabilityInwardsMechanismSectionResults(failureMechanism, collector); + ReadMacroStabilityInwardsRootCalculationGroup(entity.CalculationGroupEntity, failureMechanism.CalculationsGroup, collector); } private static void ReadMacroStabilityInwardsMechanismSectionResults(this FailureMechanismEntity entity, @@ -562,6 +564,17 @@ } } + private static void ReadMacroStabilityInwardsRootCalculationGroup(CalculationGroupEntity rootCalculationGroupEntity, + CalculationGroup targetRootCalculationGroup, + ReadConversionCollector collector) + { + CalculationGroup rootCalculationGroup = rootCalculationGroupEntity.ReadAsMacroStabilityInwardsCalculationGroup(collector); + foreach (ICalculationBase calculationBase in rootCalculationGroup.Children) + { + targetRootCalculationGroup.Children.Add(calculationBase); + } + } + #endregion #region Macrostability Outwards Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/MacroStabilityInwards/MacroStabilityInwardsCalculationScenarioCreateExtensionsTest.cs =================================================================== diff -u -r4fc9392d79e72f0ef668f63fd2a086e1feb18cdd -rd75a6c0c39a582f42b7a05b705aaa1f703a47d89 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/MacroStabilityInwards/MacroStabilityInwardsCalculationScenarioCreateExtensionsTest.cs (.../MacroStabilityInwardsCalculationScenarioCreateExtensionsTest.cs) (revision 4fc9392d79e72f0ef668f63fd2a086e1feb18cdd) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/MacroStabilityInwards/MacroStabilityInwardsCalculationScenarioCreateExtensionsTest.cs (.../MacroStabilityInwardsCalculationScenarioCreateExtensionsTest.cs) (revision d75a6c0c39a582f42b7a05b705aaa1f703a47d89) @@ -74,6 +74,8 @@ MacroStabilityInwardsCalculationEntity entity = scenario.Create(registry, 0); // Assert + Assert.IsNotNull(entity); + Assert.IsNull(entity.AssessmentLevel); Assert.IsNull(entity.SlipPlaneMinimumDepth); Assert.IsNull(entity.SlipPlaneMinimumLength); @@ -199,6 +201,8 @@ MacroStabilityInwardsCalculationEntity entity = scenario.Create(registry, order); // Assert + Assert.IsNotNull(entity); + MacroStabilityInwardsCalculationEntityTestHelper.AssertCalculationScenarioPropertyValues(scenario, entity); Assert.IsNull(entity.SurfaceLineEntity); Assert.IsNull(entity.MacroStabilityInwardsStochasticSoilProfileEntity); @@ -226,6 +230,7 @@ MacroStabilityInwardsCalculationEntity entity = scenario.Create(registry, 0); // Then + Assert.IsNotNull(entity); Assert.IsNull(entity.AssessmentLevel); } @@ -250,6 +255,7 @@ MacroStabilityInwardsCalculationEntity entity = scenario.Create(registry, 0); // Assert + Assert.IsNotNull(entity); TestHelper.AssertAreEqualButNotSame(name, entity.Name); TestHelper.AssertAreEqualButNotSame(comment, entity.Comment); } @@ -275,6 +281,7 @@ MacroStabilityInwardsCalculationEntity entity = scenario.Create(registry, 0); // Assert + Assert.IsNotNull(entity); Assert.AreSame(hydraulicLocationEntity, entity.HydraulicLocationEntity); } @@ -299,6 +306,7 @@ MacroStabilityInwardsCalculationEntity entity = scenario.Create(registry, 0); // Assert + Assert.IsNotNull(entity); Assert.AreSame(surfaceLineEntity, entity.SurfaceLineEntity); } @@ -325,6 +333,7 @@ MacroStabilityInwardsCalculationEntity entity = scenario.Create(registry, 0); // Assert + Assert.IsNotNull(entity); MacroStabilityInwardsStochasticSoilProfileEntity expectedStochasticSoilProfileEntity = registry.Get(stochasticSoilProfile); Assert.AreSame(expectedStochasticSoilProfileEntity, entity.MacroStabilityInwardsStochasticSoilProfileEntity); } @@ -344,6 +353,7 @@ MacroStabilityInwardsCalculationEntity entity = scenario.Create(registry, 0); // Assert + Assert.IsNotNull(entity); MacroStabilityInwardsCalculationOutputEntity outputEntity = entity.MacroStabilityInwardsCalculationOutputEntities.FirstOrDefault(); Assert.IsNotNull(outputEntity); MacroStabilityInwardsCalculationOutputEntityTestHelper.AssertOutputPropertyValues(scenario.Output, outputEntity); @@ -364,6 +374,7 @@ MacroStabilityInwardsCalculationEntity entity = scenario.Create(registry, 0); // Assert + Assert.IsNotNull(entity); MacroStabilityInwardsSemiProbabilisticOutputEntity outputEntity = entity.MacroStabilityInwardsSemiProbabilisticOutputEntities.FirstOrDefault(); Assert.IsNotNull(outputEntity); Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/MacroStabilityInwards/MacroStabilityInwardsFailureMechanismCreateExtensionsTest.cs =================================================================== diff -u -r4fc9392d79e72f0ef668f63fd2a086e1feb18cdd -rd75a6c0c39a582f42b7a05b705aaa1f703a47d89 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/MacroStabilityInwards/MacroStabilityInwardsFailureMechanismCreateExtensionsTest.cs (.../MacroStabilityInwardsFailureMechanismCreateExtensionsTest.cs) (revision 4fc9392d79e72f0ef668f63fd2a086e1feb18cdd) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/MacroStabilityInwards/MacroStabilityInwardsFailureMechanismCreateExtensionsTest.cs (.../MacroStabilityInwardsFailureMechanismCreateExtensionsTest.cs) (revision d75a6c0c39a582f42b7a05b705aaa1f703a47d89) @@ -28,6 +28,7 @@ using Core.Common.Base.Geometry; using Core.Common.TestUtil; using NUnit.Framework; +using Ringtoets.Common.Data.Calculation; using Ringtoets.MacroStabilityInwards.Data; using Ringtoets.MacroStabilityInwards.Data.SoilProfile; using Ringtoets.MacroStabilityInwards.Data.TestUtil; @@ -149,6 +150,7 @@ FailureMechanismEntity entity = failureMechanism.Create(registry); // Assert + Assert.IsNotNull(entity); TestHelper.AssertAreEqualButNotSame(failureMechanism.InputComments.Body, entity.InputComments); TestHelper.AssertAreEqualButNotSame(failureMechanism.OutputComments.Body, entity.OutputComments); TestHelper.AssertAreEqualButNotSame(failureMechanism.NotRelevantComments.Body, entity.NotRelevantComments); @@ -228,6 +230,7 @@ FailureMechanismEntity entity = failureMechanism.Create(new PersistenceRegistry()); // Assert + Assert.IsNotNull(entity); CollectionAssert.IsEmpty(entity.FailureMechanismSectionEntities); } @@ -243,6 +246,7 @@ FailureMechanismEntity entity = failureMechanism.Create(new PersistenceRegistry()); // Assert + Assert.IsNotNull(entity); Assert.AreEqual(1, entity.FailureMechanismSectionEntities.Count); MacroStabilityInwardsFailureMechanismSectionResult sectionResult = failureMechanism.SectionResults.Single(); @@ -251,6 +255,42 @@ Assert.IsNull(resultEntity.LayerThree); } + [Test] + public void Create_WithCalculationGroup_ReturnFailureMechanismWithCalculationGroupEntities() + { + // Setup + var calculationGroup = new CalculationGroup("A", true); + var calculation = new MacroStabilityInwardsCalculationScenario(); + + var failureMechanism = new MacroStabilityInwardsFailureMechanism(); + failureMechanism.CalculationsGroup.Children.Add(calculationGroup); + failureMechanism.CalculationsGroup.Children.Add(calculation); + + // Call + FailureMechanismEntity entity = failureMechanism.Create(new PersistenceRegistry()); + + // Assert + Assert.IsNotNull(entity); + Assert.AreEqual(failureMechanism.CalculationsGroup.Name, entity.CalculationGroupEntity.Name); + Assert.AreEqual(0, entity.CalculationGroupEntity.Order); + + CalculationGroupEntity[] childGroupEntities = entity.CalculationGroupEntity.CalculationGroupEntity1 + .OrderBy(cge => cge.Order) + .ToArray(); + Assert.AreEqual(1, childGroupEntities.Length); + CalculationGroupEntity childGroupEntity = childGroupEntities[0]; + Assert.AreEqual(calculationGroup.Name, childGroupEntity.Name); + Assert.AreEqual(0, childGroupEntity.Order); + + MacroStabilityInwardsCalculationEntity[] calculationEntities = entity.CalculationGroupEntity.MacroStabilityInwardsCalculationEntities + .OrderBy(ce => ce.Order) + .ToArray(); + Assert.AreEqual(1, calculationEntities.Length); + MacroStabilityInwardsCalculationEntity calculationEntity = calculationEntities[0]; + Assert.AreEqual(calculation.Name, calculationEntity.Name); + Assert.AreEqual(1, calculationEntity.Order); + } + private static void AssertSurfaceLine(MacroStabilityInwardsSurfaceLine surfaceLine, SurfaceLineEntity entity) { Assert.AreEqual(surfaceLine.Name, entity.Name); Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/MacroStabilityInwards/MacroStabilityInwardsOutputCreateExtensionsTest.cs =================================================================== diff -u -r4fc9392d79e72f0ef668f63fd2a086e1feb18cdd -rd75a6c0c39a582f42b7a05b705aaa1f703a47d89 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/MacroStabilityInwards/MacroStabilityInwardsOutputCreateExtensionsTest.cs (.../MacroStabilityInwardsOutputCreateExtensionsTest.cs) (revision 4fc9392d79e72f0ef668f63fd2a086e1feb18cdd) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/MacroStabilityInwards/MacroStabilityInwardsOutputCreateExtensionsTest.cs (.../MacroStabilityInwardsOutputCreateExtensionsTest.cs) (revision d75a6c0c39a582f42b7a05b705aaa1f703a47d89) @@ -84,6 +84,7 @@ MacroStabilityInwardsCalculationOutputEntity entity = output.Create(); // Assert + Assert.IsNotNull(entity); MacroStabilityInwardsCalculationOutputEntityTestHelper.AssertOutputPropertyValues(output, entity); } @@ -109,6 +110,7 @@ MacroStabilityInwardsCalculationOutputEntity entity = output.Create(); // Assert + Assert.IsNotNull(entity); Assert.IsNull(entity.FactorOfStability); Assert.IsNull(entity.ForbiddenZonesXEntryMin); Assert.IsNull(entity.ForbiddenZonesXEntryMax); Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/Piping/PipingFailureMechanismCreateExtensionsTest.cs =================================================================== diff -u -r4fc9392d79e72f0ef668f63fd2a086e1feb18cdd -rd75a6c0c39a582f42b7a05b705aaa1f703a47d89 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/Piping/PipingFailureMechanismCreateExtensionsTest.cs (.../PipingFailureMechanismCreateExtensionsTest.cs) (revision 4fc9392d79e72f0ef668f63fd2a086e1feb18cdd) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Create/Piping/PipingFailureMechanismCreateExtensionsTest.cs (.../PipingFailureMechanismCreateExtensionsTest.cs) (revision d75a6c0c39a582f42b7a05b705aaa1f703a47d89) @@ -221,14 +221,15 @@ public void Create_WithCalculationGroup_ReturnFailureMechanismEntityWithCalculationGroupEntities() { // Setup + var calculationGroup = new CalculationGroup("A", true); + var calculation = new PipingCalculationScenario(new GeneralPipingInput()); + var failureMechanism = new PipingFailureMechanism(); - failureMechanism.CalculationsGroup.Children.Add(new CalculationGroup("A", true)); - failureMechanism.CalculationsGroup.Children.Add(new CalculationGroup("B", true)); + failureMechanism.CalculationsGroup.Children.Add(calculationGroup); + failureMechanism.CalculationsGroup.Children.Add(calculation); - var registry = new PersistenceRegistry(); - // Call - FailureMechanismEntity entity = failureMechanism.Create(registry); + FailureMechanismEntity entity = failureMechanism.Create(new PersistenceRegistry()); // Assert Assert.IsNotNull(entity); @@ -238,11 +239,18 @@ CalculationGroupEntity[] childGroupEntities = entity.CalculationGroupEntity.CalculationGroupEntity1 .OrderBy(cge => cge.Order) .ToArray(); - Assert.AreEqual(2, childGroupEntities.Length); - Assert.AreEqual("A", childGroupEntities[0].Name); - Assert.AreEqual(0, childGroupEntities[0].Order); - Assert.AreEqual("B", childGroupEntities[1].Name); - Assert.AreEqual(1, childGroupEntities[1].Order); + Assert.AreEqual(1, childGroupEntities.Length); + CalculationGroupEntity childGroupEntity = childGroupEntities[0]; + Assert.AreEqual(calculationGroup.Name, childGroupEntity.Name); + Assert.AreEqual(0, childGroupEntity.Order); + + PipingCalculationEntity[] calculationEntities = entity.CalculationGroupEntity.PipingCalculationEntities + .OrderBy(ce => ce.Order) + .ToArray(); + Assert.AreEqual(1, calculationEntities.Length); + PipingCalculationEntity calculationEntity = calculationEntities[0]; + Assert.AreEqual(calculation.Name, calculationEntity.Name); + Assert.AreEqual(1, calculationEntity.Order); } private static void AssertSurfaceLine(PipingSurfaceLine surfaceLine, SurfaceLineEntity entity) Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/MigrationTo172IntegrationTest.cs =================================================================== diff -u -r2d2bea96014455b3ba10a7ba20b8aa1a2d633fca -rd75a6c0c39a582f42b7a05b705aaa1f703a47d89 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/MigrationTo172IntegrationTest.cs (.../MigrationTo172IntegrationTest.cs) (revision 2d2bea96014455b3ba10a7ba20b8aa1a2d633fca) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/IntegrationTests/MigrationTo172IntegrationTest.cs (.../MigrationTo172IntegrationTest.cs) (revision d75a6c0c39a582f42b7a05b705aaa1f703a47d89) @@ -64,6 +64,7 @@ using (var reader = new MigratedDatabaseReader(targetFilePath)) { AssertTablesContentMigrated(reader, sourceFilePath); + AssertCalculationGroup(reader, sourceFilePath); AssertMacroStabilityInwardsFailureMechanism(reader); AssertGrassCoverErosionOutwardsFailureMechanism(reader); @@ -640,7 +641,6 @@ var tables = new[] { "AssessmentSectionEntity", - "CalculationGroupEntity", "ClosingStructureEntity", "ClosingStructuresCalculationEntity", "ClosingStructuresSectionResultEntity", @@ -698,6 +698,16 @@ } } + private static void AssertCalculationGroup(MigratedDatabaseReader reader, string sourceFilePath) + { + string validateMigratedTable = + $"ATTACH DATABASE \"{sourceFilePath}\" AS SOURCEPROJECT; " + + "SELECT COUNT() = (SELECT COUNT() + 1 FROM [SOURCEPROJECT].CalculationGroupEntity)" + + "FROM CalculationGroupEntity;" + + "DETACH SOURCEPROJECT;"; + reader.AssertReturnedDataIsValid(validateMigratedTable); + } + private static void AssertGrassCoverErosionOutwardsFailureMechanism(MigratedDatabaseReader reader) { const string validateForeshoreProfileCollectionSourcePath = Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/FailureMechanismEntityReadExtensionsTest.cs =================================================================== diff -u -r4fc9392d79e72f0ef668f63fd2a086e1feb18cdd -rd75a6c0c39a582f42b7a05b705aaa1f703a47d89 --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/FailureMechanismEntityReadExtensionsTest.cs (.../FailureMechanismEntityReadExtensionsTest.cs) (revision 4fc9392d79e72f0ef668f63fd2a086e1feb18cdd) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Read/FailureMechanismEntityReadExtensionsTest.cs (.../FailureMechanismEntityReadExtensionsTest.cs) (revision d75a6c0c39a582f42b7a05b705aaa1f703a47d89) @@ -883,6 +883,54 @@ failureMechanism.Sections.Count()); } + [Test] + public void ReadAsMacroStabilityInwardsFailureMechanism_WithCalculationsAndGroups_ReturnFailureMechanismWithCalculationAndGroups() + { + var entity = new FailureMechanismEntity + { + MacroStabilityInwardsFailureMechanismMetaEntities = + { + new MacroStabilityInwardsFailureMechanismMetaEntity() + }, + CalculationGroupEntity = new CalculationGroupEntity + { + CalculationGroupEntity1 = + { + new CalculationGroupEntity + { + Name = "A", + Order = 1 + } + }, + MacroStabilityInwardsCalculationEntities = + { + new MacroStabilityInwardsCalculationEntity + { + Name = "B", + TangentLineNumber = 1, + Order = 0 + } + } + } + }; + var collector = new ReadConversionCollector(); + var failureMechanism = new MacroStabilityInwardsFailureMechanism(); + + // Call + entity.ReadAsMacroStabilityInwardsFailureMechanism(failureMechanism, collector); + + // Assert + Assert.AreEqual(2, failureMechanism.CalculationsGroup.Children.Count); + + ICalculationBase expectedCalculation = failureMechanism.CalculationsGroup.Children[0]; + Assert.AreEqual("B", expectedCalculation.Name); + Assert.IsInstanceOf(expectedCalculation); + + ICalculationBase expectedCalculationGroup = failureMechanism.CalculationsGroup.Children[1]; + Assert.AreEqual("A", expectedCalculationGroup.Name); + Assert.IsInstanceOf(expectedCalculationGroup); + } + #endregion #region Grass Cover Erosion Inwards