Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs =================================================================== diff -u -r4791bede4dd0cef468ade017c236dc1efc64b163 -r151cae0869d7173dd61dfb4d85f6f2b545222e1f --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs (.../ClosingStructuresPlugin.cs) (revision 4791bede4dd0cef468ade017c236dc1efc64b163) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs (.../ClosingStructuresPlugin.cs) (revision 151cae0869d7173dd61dfb4d85f6f2b545222e1f) @@ -398,8 +398,14 @@ return ValidateAllDataAvailableAndGetErrorMessage(context.AssessmentSection, context.FailureMechanism); } - private static void CalculationContextOnNodeRemoved(ClosingStructuresCalculationContext arg1, object arg2) + private static void CalculationContextOnNodeRemoved(ClosingStructuresCalculationContext context, object parentData) { + var calculationGroupContext = parentData as ClosingStructuresCalculationGroupContext; + if (calculationGroupContext != null) + { + calculationGroupContext.WrappedData.Children.Remove(context.WrappedData); + calculationGroupContext.NotifyObservers(); + } } #endregion Index: Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructuresCalculationContextTreeNodeInfoTest.cs =================================================================== diff -u -r4791bede4dd0cef468ade017c236dc1efc64b163 -r151cae0869d7173dd61dfb4d85f6f2b545222e1f --- Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructuresCalculationContextTreeNodeInfoTest.cs (.../ClosingStructuresCalculationContextTreeNodeInfoTest.cs) (revision 4791bede4dd0cef468ade017c236dc1efc64b163) +++ Ringtoets/ClosingStructures/test/Ringtoets.ClosingStructures.Forms.Test/TreeNodeInfos/ClosingStructuresCalculationContextTreeNodeInfoTest.cs (.../ClosingStructuresCalculationContextTreeNodeInfoTest.cs) (revision 151cae0869d7173dd61dfb4d85f6f2b545222e1f) @@ -21,6 +21,7 @@ using System.Linq; using System.Windows.Forms; +using Core.Common.Base; using Core.Common.Controls.TreeView; using Core.Common.Gui; using Core.Common.Gui.ContextMenu; @@ -33,6 +34,7 @@ using Ringtoets.ClosingStructures.Plugin; using Ringtoets.Common.Data; using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.Probability; using Ringtoets.Common.Forms.PresentationObjects; using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; @@ -252,6 +254,42 @@ } } + [Test] + public void OnNodeRemoved_ParentIsCalculationGroupContext_RemoveCalculationFromGroup() + { + // Setup + var group = new CalculationGroup(); + var failureMechanism = new ClosingStructuresFailureMechanism(); + var elementToBeRemoved = new ClosingStructuresCalculation(); + var observerMock = mocks.StrictMock(); + var assessmentSectionMock = mocks.Stub(); + var calculationContext = new ClosingStructuresCalculationContext(elementToBeRemoved, + failureMechanism, + assessmentSectionMock); + var groupContext = new ClosingStructuresCalculationGroupContext(group, + failureMechanism, + assessmentSectionMock); + + observerMock.Expect(o => o.UpdateObserver()); + + mocks.ReplayAll(); + + group.Children.Add(elementToBeRemoved); + group.Children.Add(new ClosingStructuresCalculation()); + group.Attach(observerMock); + + // Precondition + Assert.IsTrue(info.CanRemove(calculationContext, groupContext)); + Assert.AreEqual(2, group.Children.Count); + + // Call + info.OnNodeRemoved(calculationContext, groupContext); + + // Assert + Assert.AreEqual(1, group.Children.Count); + CollectionAssert.DoesNotContain(group.Children, elementToBeRemoved); + } + private class TestClosingStructuresOutput : ProbabilityAssessmentOutput { public TestClosingStructuresOutput() : base(0, 0, 0, 0, 0) { }