Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationGroupContextTreeNodeInfoTest.cs =================================================================== diff -u -r6f422978e2cb7ff8bda6dc665723fb6454a7caf7 -raba812c4ed9d10a1a4b14b46526adcd295655c43 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationGroupContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsCalculationGroupContextTreeNodeInfoTest.cs) (revision 6f422978e2cb7ff8bda6dc665723fb6454a7caf7) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationGroupContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsCalculationGroupContextTreeNodeInfoTest.cs) (revision aba812c4ed9d10a1a4b14b46526adcd295655c43) @@ -543,44 +543,6 @@ } [Test] - public void ContextMenuStrip_NoCalculationsInCalculationGroup_ContextMenuItemDisabled() - { - // Setup - var group = new CalculationGroup(); - - var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); - var assessmentSectionMock = mocks.StrictMock(); - - var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, - failureMechanism, - assessmentSectionMock); - - var applicationFeatureCommandHandler = mocks.Stub(); - var exportImportHandler = mocks.Stub(); - var viewCommandsHandler = mocks.StrictMock(); - var treeViewControl = mocks.StrictMock(); - - var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, nodeData, treeViewControl); - gui.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - - treeViewControl.Expect(tvc => tvc.CanExpandOrCollapseForData(nodeData)).Repeat.Twice().Return(false); - viewCommandsHandler.Expect(vc => vc.CanOpenViewFor(nodeData)).Return(false); - - mocks.ReplayAll(); - - // Call - ContextMenuStrip menu = info.ContextMenuStrip(nodeData, null, treeViewControl); - - // Assert - TestHelper.AssertContextMenuStripContainsItem(menu, 5, - RingtoetsFormsResources.Calculate_all, - RingtoetsFormsResources.CalculationGroup_CalculateAll_No_calculations_to_run, - RingtoetsFormsResources.CalculateIcon, - false); - mocks.VerifyAll(); - } - - [Test] public void ContextMenuStrip_ClickOnAddGroupItem_AddGroupToCalculationGroupAndNotifyObservers() { // Setup @@ -595,23 +557,19 @@ var parentNodeData = new GrassCoverErosionInwardsCalculationGroupContext(parentGroup, failureMechanism, assessmentSectionMock); - - var calculationItem = new CalculationGroup + var calculationGroup = new CalculationGroup { Name = "Nieuwe map" }; - var observer = mocks.StrictMock(); - observer.Expect(o => o.UpdateObserver()); - var treeViewControl = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); gui.Expect(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); mocks.ReplayAll(); - group.Children.Add(calculationItem); - + group.Children.Add(calculationGroup); nodeData.Attach(observer); ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl); @@ -685,25 +643,26 @@ } [Test] - public void OnNodeRemoved_ParentIsGrassCoverErosionInwardsCalculationGroupContainingGroup_RemoveGroupAndNotifyObservers() + public void OnNodeRemoved_NestedCalculationGroup_RemoveGroupAndNotifyObservers() { // Setup var observer = mocks.StrictMock(); - observer.Expect(o => o.UpdateObserver()); - var group = new CalculationGroup(); var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); var assessmentSectionMock = mocks.StrictMock(); - mocks.ReplayAll(); - - var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, - failureMechanism, - assessmentSectionMock); - + var group = new CalculationGroup(); var parentGroup = new CalculationGroup(); - parentGroup.Children.Add(group); + var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, + failureMechanism, + assessmentSectionMock); var parentNodeData = new GrassCoverErosionInwardsCalculationGroupContext(parentGroup, failureMechanism, assessmentSectionMock); + + observer.Expect(o => o.UpdateObserver()); + + mocks.ReplayAll(); + + parentGroup.Children.Add(group); parentNodeData.Attach(observer); // Precondition @@ -718,30 +677,30 @@ } [Test] - public void OnNodeRemoved_ParentIsGrassCoverErosionInwardsCalculationGroupContainingGroupContainingCalculations_RemoveGroupAndCalculationsAndNotifyObservers() + public void OnNodeRemoved_NestedCalculationGroupContainingCalculations_RemoveGroupAndCalculationsAndNotifyObservers() { // Setup var observer = mocks.StrictMock(); - observer.Expect(o => o.UpdateObserver()); - var group = new CalculationGroup(); - var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); - - var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput(), new GeneralNormProbabilityInput()); - - group.Children.Add(calculation); - var assessmentSectionMock = mocks.StrictMock(); - mocks.ReplayAll(); - + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, failureMechanism, assessmentSectionMock); - - var parentGroup = new CalculationGroup(); - parentGroup.Children.Add(group); var parentNodeData = new GrassCoverErosionInwardsCalculationGroupContext(parentGroup, failureMechanism, assessmentSectionMock); + var calculation = new GrassCoverErosionInwardsCalculation( + new GeneralGrassCoverErosionInwardsInput(), + new GeneralNormProbabilityInput()); + + observer.Expect(o => o.UpdateObserver()); + + mocks.ReplayAll(); + + group.Children.Add(calculation); + parentGroup.Children.Add(group); parentNodeData.Attach(observer); // Precondition Index: Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Forms.Test/TreeNodeInfos/HeightStructuresCalculationGroupContextTreeNodeInfoTest.cs =================================================================== diff -u -r6f422978e2cb7ff8bda6dc665723fb6454a7caf7 -raba812c4ed9d10a1a4b14b46526adcd295655c43 --- Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Forms.Test/TreeNodeInfos/HeightStructuresCalculationGroupContextTreeNodeInfoTest.cs (.../HeightStructuresCalculationGroupContextTreeNodeInfoTest.cs) (revision 6f422978e2cb7ff8bda6dc665723fb6454a7caf7) +++ Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Forms.Test/TreeNodeInfos/HeightStructuresCalculationGroupContextTreeNodeInfoTest.cs (.../HeightStructuresCalculationGroupContextTreeNodeInfoTest.cs) (revision aba812c4ed9d10a1a4b14b46526adcd295655c43) @@ -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; @@ -321,5 +322,126 @@ mocks.VerifyAll(); } + + [Test] + public void ContextMenuStrip_ClickOnAddGroupItem_AddGroupToCalculationGroupAndNotifyObservers() + { + // Setup + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); + var failureMechanism = new HeightStructuresFailureMechanism(); + var assessmentSectionMock = mocks.StrictMock(); + var nodeData = new HeightStructuresCalculationGroupContext(group, + failureMechanism, + assessmentSectionMock); + var parentNodeData = new HeightStructuresCalculationGroupContext(parentGroup, + failureMechanism, + assessmentSectionMock); + var calculationGroup = new CalculationGroup + { + Name = "Nieuwe map" + }; + + var observer = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + + observer.Expect(o => o.UpdateObserver()); + gui.Expect(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); + + mocks.ReplayAll(); + + group.Children.Add(calculationGroup); + nodeData.Attach(observer); + + ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl); + + // Precondition + Assert.AreEqual(1, group.Children.Count); + + // Call + contextMenu.Items[contextMenuAddCalculationGroupIndex].PerformClick(); + + // Assert + Assert.AreEqual(2, group.Children.Count); + var newlyAddedItem = group.Children.Last(); + Assert.IsInstanceOf(newlyAddedItem); + Assert.AreEqual("Nieuwe map (1)", newlyAddedItem.Name, + "An item with the same name default name already exists, therefore '(1)' needs to be appended."); + + mocks.VerifyAll(); + } + + [Test] + public void OnNodeRemoved_NestedCalculationGroup_RemoveGroupAndNotifyObservers() + { + // Setup + var observer = mocks.StrictMock(); + var failureMechanism = new HeightStructuresFailureMechanism(); + var assessmentSectionMock = mocks.StrictMock(); + var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); + var nodeData = new HeightStructuresCalculationGroupContext(group, + failureMechanism, + assessmentSectionMock); + var parentNodeData = new HeightStructuresCalculationGroupContext(parentGroup, + failureMechanism, + assessmentSectionMock); + + observer.Expect(o => o.UpdateObserver()); + + mocks.ReplayAll(); + + parentGroup.Children.Add(group); + parentNodeData.Attach(observer); + + // Precondition + Assert.IsTrue(info.CanRemove(nodeData, parentNodeData)); + + // Call + info.OnNodeRemoved(nodeData, parentNodeData); + + // Assert + CollectionAssert.DoesNotContain(parentGroup.Children, group); + mocks.VerifyAll(); + } + + [Test] + public void OnNodeRemoved_NestedCalculationGroupContainingCalculations_RemoveGroupAndCalculationsAndNotifyObservers() + { + // Setup + var observer = mocks.StrictMock(); + var assessmentSectionMock = mocks.StrictMock(); + var failureMechanism = new HeightStructuresFailureMechanism(); + var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); + var nodeData = new HeightStructuresCalculationGroupContext(group, + failureMechanism, + assessmentSectionMock); + var parentNodeData = new HeightStructuresCalculationGroupContext(parentGroup, + failureMechanism, + assessmentSectionMock); + var calculation = new HeightStructuresCalculation(); + + observer.Expect(o => o.UpdateObserver()); + + mocks.ReplayAll(); + + group.Children.Add(calculation); + parentGroup.Children.Add(group); + parentNodeData.Attach(observer); + + // Precondition + Assert.IsTrue(info.CanRemove(nodeData, parentNodeData)); + + // Call + info.OnNodeRemoved(nodeData, parentNodeData); + + // Assert + CollectionAssert.DoesNotContain(parentGroup.Children, group); + mocks.VerifyAll(); + } + + private const int contextMenuAddCalculationGroupIndex = 0; } }