Index: Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs =================================================================== diff -u -r036199c1cde97f98829dc4405169ec327d2a1b95 -rb1537a16c5961d9f66d5564c215f4bee59294f82 --- Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs (.../PipingDataSynchronizationServiceTest.cs) (revision 036199c1cde97f98829dc4405169ec327d2a1b95) +++ Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs (.../PipingDataSynchronizationServiceTest.cs) (revision b1537a16c5961d9f66d5564c215f4bee59294f82) @@ -68,9 +68,9 @@ Assert.IsNull(calculation.SemiProbabilisticOutput); CollectionAssert.AreEqual(new[] - { - calculation - }, changedObjects); + { + calculation + }, changedObjects); } [Test] @@ -413,5 +413,62 @@ CollectionAssert.Contains(array, calculation); } } + + [Test] + public void RemoveAllStochasticSoilModel_FailureMechanismNull_ThrowsArgumentNullException() + { + // Setup + PipingFailureMechanism failureMechanism = null; + + // Call + TestDelegate call = () => PipingDataSynchronizationService.RemoveAllStochasticSoilModels(failureMechanism); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("failureMechanism", paramName); + } + + [Test] + public void RemoveAllStochastiSoilModel_FullyConfiguredPipingFailureMechanism_RemovesAllSoilModelAndClearDependendentData() + { + // Setup + PipingFailureMechanism failureMechanism = PipingTestDataGenerator.GetPipingFailureMechanismWithAllCalculationConfigurations(); + PipingCalculation[] calculationsWithStochasticSoilModel = failureMechanism.Calculations + .Cast() + .Where(calc => calc.InputParameters.StochasticSoilModel != null) + .ToArray(); + PipingCalculation[] calculationsWithOutput = calculationsWithStochasticSoilModel.Where(c => c.HasOutput) + .ToArray(); + + // Precondition + CollectionAssert.IsNotEmpty(calculationsWithStochasticSoilModel); + + // Call + IEnumerable observables = PipingDataSynchronizationService.RemoveAllStochasticSoilModels(failureMechanism); + + // Assert + // Note: To make sure the clear is performed regardless of what is done with + // the return result, no ToArray() should be called before these assertions: + CollectionAssert.IsEmpty(failureMechanism.StochasticSoilModels); + foreach (PipingCalculation calculation in calculationsWithStochasticSoilModel) + { + Assert.IsNull(calculation.InputParameters.StochasticSoilModel); + } + + IObservable[] array = observables.ToArray(); + var expectedAffectedObjectCount = 1 + calculationsWithOutput.Length + calculationsWithStochasticSoilModel.Length; + Assert.AreEqual(expectedAffectedObjectCount, array.Length); + + CollectionAssert.Contains(array, failureMechanism.StochasticSoilModels); + foreach (PipingCalculation calculation in calculationsWithStochasticSoilModel) + { + CollectionAssert.Contains(array, calculation.InputParameters); + } + foreach (PipingCalculation calculation in calculationsWithOutput) + { + Assert.IsFalse(calculation.HasOutput); + CollectionAssert.Contains(array, calculation); + } + } } } \ No newline at end of file