// Copyright (C) Stichting Deltares 2016. All rights reserved. // // This file is part of Ringtoets. // // Ringtoets is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System; 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.Piping; using Core.Common.Base.Data; using Core.Common.Base.Geometry; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.HydraRing.Data; using Ringtoets.Piping.Data; using Ringtoets.Piping.Primitives; namespace Application.Ringtoets.Storage.Test.Update.Piping { [TestFixture] public class PipingCalculationScenarioUpdateExtensionsTest { [Test] public void Update_PersistenceRegistryIsNull_ThrowArgumentNullException() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var calculation = new PipingCalculationScenario(new GeneralPipingInput()); // Call TestDelegate call = () => calculation.Update(null, context, 0); // Assert string paramName = Assert.Throws(call).ParamName; Assert.AreEqual("registry", paramName); mocks.VerifyAll(); } [Test] public void Update_RingtoetsEntitiesIsNull_ThrowArgumentNullException() { // Setup var calculation = new PipingCalculationScenario(new GeneralPipingInput()); var registry = new PersistenceRegistry(); // Call TestDelegate call = () => calculation.Update(registry, null, 0); // Assert string paramName = Assert.Throws(call).ParamName; Assert.AreEqual("context", paramName); } [Test] public void Update_PipingCalculationScenarioNotSavedYet_ThrowEntityNotFoundException() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var registry = new PersistenceRegistry(); var calculation = new PipingCalculationScenario(new GeneralPipingInput()); // Call TestDelegate call = () => calculation.Update(registry, context, 0); // Assert Assert.Throws(call); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationScenarioChanged_EntityUpdated() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var entity = new PipingCalculationEntity { PipingCalculationEntityId = 456 }; context.PipingCalculationEntities.Add(entity); var registry = new PersistenceRegistry(); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, IsRelevant = true, Contribution = (RoundedDouble)0.56, Name = "New name!", Comments = "Better comments!", InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, PhreaticLevelExit = { Mean = (RoundedDouble)3.3, StandardDeviation = (RoundedDouble) 4.4 }, DampingFactorExit = { Mean = (RoundedDouble)5.5, StandardDeviation = (RoundedDouble)6.6 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)7.7, StandardDeviation = (RoundedDouble)8.8, Shift = (RoundedDouble)9.9 }, Diameter70 = { Mean = (RoundedDouble)10.10, StandardDeviation = (RoundedDouble)11.11 }, DarcyPermeability = { Mean = (RoundedDouble)12.12, StandardDeviation = (RoundedDouble)13.13 } } }; const int newOrder = 5; // Call calculation.Update(registry, context, newOrder); // Assert Assert.AreEqual(Convert.ToByte(calculation.IsRelevant), entity.RelevantForScenario); Assert.AreEqual(Convert.ToDecimal(calculation.Contribution), entity.ScenarioContribution); Assert.AreEqual(calculation.Name, entity.Name); Assert.AreEqual(calculation.Comments, entity.Comments); Assert.AreEqual(newOrder, entity.Order); PipingInput inputParameters = calculation.InputParameters; Assert.AreEqual(inputParameters.EntryPointL.Value.ToNullableDecimal(), entity.EntryPointL); Assert.AreEqual(inputParameters.ExitPointL.Value.ToNullableDecimal(), entity.ExitPointL); Assert.AreEqual(inputParameters.PhreaticLevelExit.Mean.Value, entity.PhreaticLevelExitMean); Assert.AreEqual(inputParameters.PhreaticLevelExit.StandardDeviation.Value, entity.PhreaticLevelExitStandardDeviation); Assert.AreEqual(inputParameters.DampingFactorExit.Mean.Value, entity.DampingFactorExitMean); Assert.AreEqual(inputParameters.DampingFactorExit.StandardDeviation.Value, entity.DampingFactorExitStandardDeviation); Assert.AreEqual(inputParameters.SaturatedVolumicWeightOfCoverageLayer.Mean.Value, entity.SaturatedVolumicWeightOfCoverageLayerMean); Assert.AreEqual(inputParameters.SaturatedVolumicWeightOfCoverageLayer.StandardDeviation.Value, entity.SaturatedVolumicWeightOfCoverageLayerStandardDeviation); Assert.AreEqual(inputParameters.SaturatedVolumicWeightOfCoverageLayer.Shift.Value, entity.SaturatedVolumicWeightOfCoverageLayerShift); Assert.AreEqual(inputParameters.Diameter70.Mean.Value, entity.Diameter70Mean); Assert.AreEqual(inputParameters.Diameter70.StandardDeviation.Value, entity.Diameter70StandardDeviation); Assert.AreEqual(inputParameters.DarcyPermeability.Mean.Value, entity.DarcyPermeabilityMean); Assert.AreEqual(inputParameters.DarcyPermeability.StandardDeviation.Value, entity.DarcyPermeabilityStandardDeviation); registry.RemoveUntouched(context); CollectionAssert.Contains(context.PipingCalculationEntities, entity); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationScenarioWithReplacedSurfaceLine_PipingCalculationEntityUpdated() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var originalSurfaceLineEntity = new SurfaceLineEntity { SurfaceLineEntityId = 345, Name = "Original" }; var replacementSurfaceLineEntity = new SurfaceLineEntity { SurfaceLineEntityId = 897, Name = "Replacement" }; var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453, SurfaceLineEntity = originalSurfaceLineEntity }; context.PipingCalculationEntities.Add(entity); context.SurfaceLineEntities.Add(originalSurfaceLineEntity); context.SurfaceLineEntities.Add(replacementSurfaceLineEntity); var replacementSurfaceLine = new RingtoetsPipingSurfaceLine { Name = replacementSurfaceLineEntity.Name, StorageId = replacementSurfaceLineEntity.SurfaceLineEntityId, ReferenceLineIntersectionWorldPoint = new Point2D(1, 2) }; replacementSurfaceLine.SetGeometry(new[] { new Point3D(1, 2, 3), new Point3D(4, 5, 6) }); var registry = new PersistenceRegistry(); registry.Register(originalSurfaceLineEntity, new RingtoetsPipingSurfaceLine()); registry.Register(replacementSurfaceLineEntity, replacementSurfaceLine); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 }, SurfaceLine = replacementSurfaceLine } }; // Call calculation.Update(registry, context, 0); // Assert Assert.IsNotNull(entity.SurfaceLineEntity); Assert.AreSame(replacementSurfaceLineEntity, entity.SurfaceLineEntity); registry.RemoveUntouched(context); CollectionAssert.Contains(context.PipingCalculationEntities, entity); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationScenarioWithClearedSurfaceLine_PipingCalculationEntityUpdated() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var surfaceLineEntity = new SurfaceLineEntity { SurfaceLineEntityId = 345, Name = "Original" }; var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453, SurfaceLineEntity = surfaceLineEntity }; context.PipingCalculationEntities.Add(entity); var registry = new PersistenceRegistry(); registry.Register(surfaceLineEntity, new RingtoetsPipingSurfaceLine()); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 }, SurfaceLine = null } }; // Call calculation.Update(registry, context, 0); // Assert Assert.IsNull(entity.SurfaceLineEntity); registry.RemoveUntouched(context); CollectionAssert.Contains(context.PipingCalculationEntities, entity); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationScenarioWithReplacedHydraulicBoundarLocation_PipingCalculationEntityUpdated() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var originalHydraulicLocationEntity = new HydraulicLocationEntity { HydraulicLocationEntityId = 345, Name = "Original" }; var replacementHydraulicLocationEntity = new HydraulicLocationEntity { HydraulicLocationEntityId = 897, Name = "Replacement" }; var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453, HydraulicLocationEntity = originalHydraulicLocationEntity }; context.PipingCalculationEntities.Add(entity); context.HydraulicLocationEntities.Add(originalHydraulicLocationEntity); context.HydraulicLocationEntities.Add(replacementHydraulicLocationEntity); var replacementBoundaryLocation = new HydraulicBoundaryLocation(1, replacementHydraulicLocationEntity.Name, 1, 2) { StorageId = replacementHydraulicLocationEntity.HydraulicLocationEntityId, }; var registry = new PersistenceRegistry(); registry.Register(originalHydraulicLocationEntity, new HydraulicBoundaryLocation(2, originalHydraulicLocationEntity.Name, 3, 4)); registry.Register(replacementHydraulicLocationEntity, replacementBoundaryLocation); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 }, HydraulicBoundaryLocation = replacementBoundaryLocation } }; // Call calculation.Update(registry, context, 0); // Assert Assert.AreSame(replacementHydraulicLocationEntity, entity.HydraulicLocationEntity); registry.RemoveUntouched(context); CollectionAssert.Contains(context.PipingCalculationEntities, entity); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationScenarioWithClearedHydraulicBoundaryLocation_PipingCalculationEntityUpdated() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var hydraulicLocationEntity = new HydraulicLocationEntity { HydraulicLocationEntityId = 5675, Name = "Original" }; var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453, HydraulicLocationEntity = hydraulicLocationEntity }; context.PipingCalculationEntities.Add(entity); context.HydraulicLocationEntities.Add(hydraulicLocationEntity); var registry = new PersistenceRegistry(); registry.Register(hydraulicLocationEntity, new HydraulicBoundaryLocation(1, hydraulicLocationEntity.Name, 1, 3)); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 }, HydraulicBoundaryLocation = null } }; // Call calculation.Update(registry, context, 0); // Assert Assert.IsNull(entity.HydraulicLocationEntity); registry.RemoveUntouched(context); CollectionAssert.Contains(context.PipingCalculationEntities, entity); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationScenarioWithReplacedStochasticSoilProfile_PipingCalculationEntityUpdated() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var originalStochasticSoilProfileEntity = new StochasticSoilProfileEntity { StochasticSoilProfileEntityId = 490865 }; var replacementStochasticSoilProfileEntity = new StochasticSoilProfileEntity { StochasticSoilProfileEntityId = 57, }; var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453, StochasticSoilProfileEntity = originalStochasticSoilProfileEntity }; context.PipingCalculationEntities.Add(entity); context.StochasticSoilProfileEntities.Add(originalStochasticSoilProfileEntity); context.StochasticSoilProfileEntities.Add(replacementStochasticSoilProfileEntity); var replacementSurfaceLine = new StochasticSoilProfile(0.6, SoilProfileType.SoilProfile1D, 34) { StorageId = replacementStochasticSoilProfileEntity.StochasticSoilProfileEntityId, }; var registry = new PersistenceRegistry(); registry.Register(originalStochasticSoilProfileEntity, new StochasticSoilProfile(0.6, SoilProfileType.SoilProfile2D, 131)); registry.Register(replacementStochasticSoilProfileEntity, replacementSurfaceLine); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 }, StochasticSoilProfile = replacementSurfaceLine } }; // Call calculation.Update(registry, context, 0); // Assert Assert.AreSame(replacementStochasticSoilProfileEntity, entity.StochasticSoilProfileEntity); registry.RemoveUntouched(context); CollectionAssert.Contains(context.PipingCalculationEntities, entity); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationScenarioWithClearedStochasticSoilProfile_PipingCalculationEntityUpdated() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var stochasticSoilProfileEntity = new StochasticSoilProfileEntity { StochasticSoilProfileEntityId = 6, }; var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453, StochasticSoilProfileEntity = stochasticSoilProfileEntity }; context.PipingCalculationEntities.Add(entity); var registry = new PersistenceRegistry(); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 }, StochasticSoilProfile = null } }; // Call calculation.Update(registry, context, 0); // Assert Assert.IsNull(entity.StochasticSoilProfileEntity); registry.RemoveUntouched(context); CollectionAssert.Contains(context.PipingCalculationEntities, entity); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationWithNewPipingOutput_PipingCalculationEntityUpdated() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453 }; context.PipingCalculationEntities.Add(entity); var registry = new PersistenceRegistry(); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, Output = new PipingOutput(1,1,1,1,1,1), InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 } } }; // Call calculation.Update(registry, context, 0); // Assert PipingCalculationOutputEntity pipingCalculationOutputEntity = entity.PipingCalculationOutputEntity; pipingCalculationOutputEntity.PipingCalculationOutputEntityId = 495876; registry.TransferIds(); Assert.AreEqual(pipingCalculationOutputEntity.PipingCalculationOutputEntityId, calculation.Output.StorageId, "New PipingCalculationOutputEntity should be registered to PersistenceRegistry."); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationWithUnchangedPipingOutput_PipingCalculationOutputEntityIsRegistered() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var calculationOutputEntity = new PipingCalculationOutputEntity { PipingCalculationOutputEntityId = 45 }; var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453, PipingCalculationOutputEntity = calculationOutputEntity }; context.PipingCalculationEntities.Add(entity); context.PipingCalculationOutputEntities.Add(calculationOutputEntity); var registry = new PersistenceRegistry(); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, Output = new PipingOutput(1, 1, 1, 1, 1, 1) { StorageId = calculationOutputEntity.PipingCalculationOutputEntityId }, InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 } } }; // Call calculation.Update(registry, context, 0); // Assert CollectionAssert.Contains(context.PipingCalculationOutputEntities, calculationOutputEntity); registry.RemoveUntouched(context); CollectionAssert.Contains(context.PipingCalculationOutputEntities, calculationOutputEntity); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationWithRemovedPipingOutput_PipingCalculationEntityUpdated() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var calculationOutputEntity = new PipingCalculationOutputEntity { PipingCalculationOutputEntityId = 45 }; var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453, PipingCalculationOutputEntity = calculationOutputEntity }; context.PipingCalculationEntities.Add(entity); context.PipingCalculationOutputEntities.Add(calculationOutputEntity); var registry = new PersistenceRegistry(); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, Output = null, InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 } } }; // Call calculation.Update(registry, context, 0); // Assert Assert.IsNull(entity.PipingCalculationOutputEntity); registry.RemoveUntouched(context); CollectionAssert.DoesNotContain(context.PipingCalculationOutputEntities, calculationOutputEntity); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationWithNewSemiProbabilisticOutput_PipingCalculationEntityUpdated() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453 }; context.PipingCalculationEntities.Add(entity); var registry = new PersistenceRegistry(); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, SemiProbabilisticOutput = new PipingSemiProbabilisticOutput(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 } } }; // Call calculation.Update(registry, context, 0); // Assert PipingSemiProbabilisticOutputEntity semiProbabilisticOutputEntity = entity.PipingSemiProbabilisticOutputEntity; semiProbabilisticOutputEntity.PipingSemiProbabilisticOutputEntityId = 546; registry.TransferIds(); Assert.AreEqual(semiProbabilisticOutputEntity.PipingSemiProbabilisticOutputEntityId, calculation.SemiProbabilisticOutput.StorageId, "New PipingSemiProbabilisticOutputEntity should be registered to PersistenceRegistry."); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationWithUnchangedSemiProbabilisticOutput_PipingSemiProbabilisticOutputEntityIsRegistered() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var semiProbabilisticOutputEntity = new PipingSemiProbabilisticOutputEntity { PipingSemiProbabilisticOutputEntityId = 549876 }; var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453, PipingSemiProbabilisticOutputEntity = semiProbabilisticOutputEntity }; context.PipingCalculationEntities.Add(entity); context.PipingSemiProbabilisticOutputEntities.Add(semiProbabilisticOutputEntity); var registry = new PersistenceRegistry(); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, SemiProbabilisticOutput = new PipingSemiProbabilisticOutput(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) { StorageId = semiProbabilisticOutputEntity.PipingSemiProbabilisticOutputEntityId }, InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 } } }; // Call calculation.Update(registry, context, 0); // Assert CollectionAssert.Contains(context.PipingSemiProbabilisticOutputEntities, semiProbabilisticOutputEntity); registry.RemoveUntouched(context); CollectionAssert.Contains(context.PipingSemiProbabilisticOutputEntities, semiProbabilisticOutputEntity); mocks.VerifyAll(); } [Test] public void Update_PipingCalculationWithRemovedSemiProbabilisticOutput_PipingCalculationEntityUpdated() { // Setup var mocks = new MockRepository(); var context = RingtoetsEntitiesHelper.CreateStub(mocks); mocks.ReplayAll(); var semiProbabilisticOutputEntity = new PipingSemiProbabilisticOutputEntity { PipingSemiProbabilisticOutputEntityId = 54976 }; var entity = new PipingCalculationEntity { PipingCalculationEntityId = 453, PipingSemiProbabilisticOutputEntity = semiProbabilisticOutputEntity }; context.PipingCalculationEntities.Add(entity); context.PipingSemiProbabilisticOutputEntities.Add(semiProbabilisticOutputEntity); var registry = new PersistenceRegistry(); var calculation = new PipingCalculationScenario(new GeneralPipingInput()) { StorageId = entity.PipingCalculationEntityId, SemiProbabilisticOutput = null, InputParameters = { EntryPointL = (RoundedDouble)1.1, ExitPointL = (RoundedDouble)2.2, DampingFactorExit = { Mean = (RoundedDouble)1 }, SaturatedVolumicWeightOfCoverageLayer = { Mean = (RoundedDouble)1 }, Diameter70 = { Mean = (RoundedDouble)1 }, DarcyPermeability = { Mean = (RoundedDouble)1 } } }; // Call calculation.Update(registry, context, 0); // Assert Assert.IsNull(entity.PipingSemiProbabilisticOutputEntity); registry.RemoveUntouched(context); CollectionAssert.DoesNotContain(context.PipingSemiProbabilisticOutputEntities, semiProbabilisticOutputEntity); mocks.VerifyAll(); } } }