Index: Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs =================================================================== diff -u -r2ebb464e7e1e88253d336c8e78a39afb9161639b -r378ab0afb1cc9b9dd0497b4ef72dc28976602c15 --- Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision 2ebb464e7e1e88253d336c8e78a39afb9161639b) +++ Riskeer/Piping/src/Riskeer.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision 378ab0afb1cc9b9dd0497b4ef72dc28976602c15) @@ -928,10 +928,13 @@ (sender, args) => AddCalculation(() => new ProbabilisticPipingCalculationScenario(), context.WrappedData)); } - private static void AddCalculation(Func> createCalculationFunc, CalculationGroup parentGroup) + private static void AddCalculation(Func createCalculationScenarioFunc, CalculationGroup parentGroup) + where TCalculationScenario : IPipingCalculationScenario { - IPipingCalculation calculation = createCalculationFunc(); - calculation.Name = NamingHelper.GetUniqueName(parentGroup.Children, RiskeerCommonDataResources.Calculation_DefaultName, c => c.Name); + TCalculationScenario calculation = createCalculationScenarioFunc(); + calculation.Name = NamingHelper.GetUniqueName(parentGroup.Children.OfType(), + RiskeerCommonDataResources.Calculation_DefaultName, + c => c.Name); parentGroup.Children.Add(calculation); parentGroup.NotifyObservers(); Index: Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs =================================================================== diff -u -rcaf4f0f0d8b0a7272a1577db7c341546a83e6d40 -r378ab0afb1cc9b9dd0497b4ef72dc28976602c15 --- Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs (.../PipingCalculationGroupContextTreeNodeInfoTest.cs) (revision caf4f0f0d8b0a7272a1577db7c341546a83e6d40) +++ Riskeer/Piping/test/Riskeer.Piping.Plugin.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs (.../PipingCalculationGroupContextTreeNodeInfoTest.cs) (revision 378ab0afb1cc9b9dd0497b4ef72dc28976602c15) @@ -916,11 +916,11 @@ plugin.Gui = gui; - var calculationItem = new SemiProbabilisticPipingCalculationScenario + var semiProbabilisticCalculationScenario = new SemiProbabilisticPipingCalculationScenario { Name = "Nieuwe berekening" }; - group.Children.Add(calculationItem); + group.Children.Add(semiProbabilisticCalculationScenario); nodeData.Attach(observer); @@ -936,12 +936,65 @@ Assert.AreEqual(2, group.Children.Count); ICalculationBase newlyAddedItem = group.Children.Last(); Assert.IsInstanceOf(newlyAddedItem); - Assert.AreEqual("Nieuwe berekening (1)", newlyAddedItem.Name, - "An item with the same name default name already exists, therefore '(1)' needs to be appended."); + Assert.AreEqual("Nieuwe berekening (1)", newlyAddedItem.Name); } } } + + [Test] + public void GivenCalculationGroupWithProbabilisticCalculation_WhenClickOnAddSemiProbabilisticCalculationItem_ThenCalculationAddedWithSameName() + { + // Setup + using (var treeViewControl = new TreeViewControl()) + { + var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); + var pipingFailureMechanism = new PipingFailureMechanism(); + var assessmentSection = mocks.Stub(); + var nodeData = new PipingCalculationGroupContext(group, + parentGroup, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanism, + assessmentSection); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + null, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanism, + assessmentSection); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + var gui = mocks.Stub(); + gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); + mocks.ReplayAll(); + + plugin.Gui = gui; + + var probabilisticCalculationScenario = new ProbabilisticPipingCalculationScenario + { + Name = "Nieuwe berekening" + }; + group.Children.Add(probabilisticCalculationScenario); + + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl)) + { + // Precondition + Assert.AreEqual(1, group.Children.Count); + + // Call + contextMenu.Items[contextMenuAddSemiProbabilisticCalculationIndexNestedGroup].PerformClick(); + + // Assert + Assert.AreEqual(2, group.Children.Count); + ICalculationBase newlyAddedItem = group.Children.Last(); + Assert.IsInstanceOf(newlyAddedItem); + Assert.AreEqual("Nieuwe berekening", newlyAddedItem.Name); + } + } + } + [Test] public void ContextMenuStrip_ClickOnAddProbabilisticCalculationItem_AddProbabilisticCalculationToCalculationGroupAndNotifyObservers() { @@ -976,11 +1029,11 @@ plugin.Gui = gui; - var calculationItem = new SemiProbabilisticPipingCalculationScenario + var probabilisticCalculationScenario = new ProbabilisticPipingCalculationScenario { Name = "Nieuwe berekening" }; - group.Children.Add(calculationItem); + group.Children.Add(probabilisticCalculationScenario); nodeData.Attach(observer); @@ -996,12 +1049,70 @@ Assert.AreEqual(2, group.Children.Count); ICalculationBase newlyAddedItem = group.Children.Last(); Assert.IsInstanceOf(newlyAddedItem); - Assert.AreEqual("Nieuwe berekening (1)", newlyAddedItem.Name, - "An item with the same name default name already exists, therefore '(1)' needs to be appended."); + Assert.AreEqual("Nieuwe berekening (1)", newlyAddedItem.Name); } } } + + [Test] + public void GivenCalculationGroupWithSemiProbabilisticCalculation_WhenClickOnAddProbabilisticCalculationItem_ThenCalculationAddedWithSameName() + { + // Setup + using (var treeViewControl = new TreeViewControl()) + { + var group = new CalculationGroup(); + var parentGroup = new CalculationGroup(); + var pipingFailureMechanism = new PipingFailureMechanism(); + var assessmentSection = mocks.Stub(); + var nodeData = new PipingCalculationGroupContext(group, + parentGroup, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanism, + assessmentSection); + var parentNodeData = new PipingCalculationGroupContext(parentGroup, + null, + Enumerable.Empty(), + Enumerable.Empty(), + pipingFailureMechanism, + assessmentSection); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + var gui = mocks.Stub(); + gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); + + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + plugin.Gui = gui; + + var semiProbabilisticCalculationScenario = new SemiProbabilisticPipingCalculationScenario + { + Name = "Nieuwe berekening" + }; + group.Children.Add(semiProbabilisticCalculationScenario); + + nodeData.Attach(observer); + + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, parentNodeData, treeViewControl)) + { + // Precondition + Assert.AreEqual(1, group.Children.Count); + + // Call + contextMenu.Items[contextMenuAddProbabilisticCalculationIndexNestedGroup].PerformClick(); + + // Assert + Assert.AreEqual(2, group.Children.Count); + ICalculationBase newlyAddedItem = group.Children.Last(); + Assert.IsInstanceOf(newlyAddedItem); + Assert.AreEqual("Nieuwe berekening", newlyAddedItem.Name); + } + } + } + [Test] public void ContextMenuStrip_ClickOnValidateAllItem_ValidateAllChildCalculations() {