Index: Riskeer/GrassCoverErosionOutwards/src/Riskeer.GrassCoverErosionOutwards.Plugin/GrassCoverErosionOutwardsPlugin.cs =================================================================== diff -u -r6c40c68047f2b468abbbb8a3c93703344d4ce373 -r2af49f4dab3b4bef989bc7ebbed2099d0359f0f2 --- Riskeer/GrassCoverErosionOutwards/src/Riskeer.GrassCoverErosionOutwards.Plugin/GrassCoverErosionOutwardsPlugin.cs (.../GrassCoverErosionOutwardsPlugin.cs) (revision 6c40c68047f2b468abbbb8a3c93703344d4ce373) +++ Riskeer/GrassCoverErosionOutwards/src/Riskeer.GrassCoverErosionOutwards.Plugin/GrassCoverErosionOutwardsPlugin.cs (.../GrassCoverErosionOutwardsPlugin.cs) (revision 2af49f4dab3b4bef989bc7ebbed2099d0359f0f2) @@ -771,8 +771,7 @@ .AddSeparator() .AddClearAllCalculationOutputInGroupItem( () => calculations.Any(c => c.HasOutput), - new WaveConditionsCalculationOutputChangeHandler( - calculations.Where(c => c.HasOutput), inquiryHelper)); + CreateClearWaveConditionsCalculationOutputChangeHandler(calculations, inquiryHelper)); if (isNestedGroup) { @@ -933,8 +932,9 @@ .AddDuplicateCalculationItem(calculation, nodeData) .AddSeparator() .AddRenameItem() - .AddUpdateForeshoreProfileOfCalculationItem(calculation, inquiryHelper, - SynchronizeCalculationWithForeshoreProfileHelper.UpdateForeshoreProfileDerivedCalculationInput) + .AddUpdateForeshoreProfileOfCalculationItem( + calculation, inquiryHelper, + SynchronizeCalculationWithForeshoreProfileHelper.UpdateForeshoreProfileDerivedCalculationInput) .AddSeparator() .AddValidateCalculationItem( nodeData, @@ -945,7 +945,12 @@ Calculate, EnableValidateAndCalculateMenuItemForCalculation) .AddSeparator() - .AddClearCalculationOutputItem(calculation) + .AddClearCalculationOutputItem( + () => calculation.HasOutput, + CreateClearWaveConditionsCalculationOutputChangeHandler(new[] + { + calculation + }, inquiryHelper)) .AddDeleteItem() .AddSeparator() .AddCollapseAllItem() @@ -1261,6 +1266,13 @@ return HydraulicBoundaryDatabaseConnectionValidator.Validate(assessmentSection.HydraulicBoundaryDatabase); } + private static WaveConditionsCalculationOutputChangeHandler CreateClearWaveConditionsCalculationOutputChangeHandler( + IEnumerable calculations, IInquiryHelper inquiryHelper) + { + return new WaveConditionsCalculationOutputChangeHandler( + calculations.Where(c => c.HasOutput), inquiryHelper); + } + #endregion } } \ No newline at end of file Index: Riskeer/GrassCoverErosionOutwards/test/Riskeer.GrassCoverErosionOutwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionOutwardsWaveConditionsCalculationContextTreeNodeInfoTest.cs =================================================================== diff -u -r2e5b444e91e9bd39e83725489f1c01505df84f76 -r2af49f4dab3b4bef989bc7ebbed2099d0359f0f2 --- Riskeer/GrassCoverErosionOutwards/test/Riskeer.GrassCoverErosionOutwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionOutwardsWaveConditionsCalculationContextTreeNodeInfoTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationContextTreeNodeInfoTest.cs) (revision 2e5b444e91e9bd39e83725489f1c01505df84f76) +++ Riskeer/GrassCoverErosionOutwards/test/Riskeer.GrassCoverErosionOutwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionOutwardsWaveConditionsCalculationContextTreeNodeInfoTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationContextTreeNodeInfoTest.cs) (revision 2af49f4dab3b4bef989bc7ebbed2099d0359f0f2) @@ -1517,23 +1517,9 @@ using (var treeViewControl = new TreeViewControl()) { - var appFeatureCommandHandler = mocks.Stub(); - var importHandler = mocks.Stub(); - var exportHandler = mocks.Stub(); - var updateHandler = mocks.Stub(); - var viewCommands = mocks.Stub(); - var mainWindow = mocks.Stub(); - var menuBuilder = new ContextMenuBuilder(appFeatureCommandHandler, - importHandler, - exportHandler, - updateHandler, - viewCommands, - context, - treeViewControl); - var gui = mocks.Stub(); - gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilder); - gui.Stub(g => g.MainWindow).Return(mainWindow); + gui.Stub(g => g.Get(context, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); var calculatorFactory = mocks.Stub(); calculatorFactory.Stub(cf => cf.CreateWaveConditionsCosineCalculator(Arg.Is.NotNull)) @@ -1568,169 +1554,171 @@ } [Test] - public void GivenCalculationWithoutOutput_ThenClearOutputItemDisabled() + public void ContextMenuStrip_CalculationWithoutOutput_ContextMenuItemClearCalculationsOutputEnabled() { - // Given - AssessmentSectionStub assessmentSection = CreateAssessmentSection(); - var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); - - var parent = new CalculationGroup(); + // Setup var calculation = new GrassCoverErosionOutwardsWaveConditionsCalculation { - Name = "A", - Output = null + Output = GrassCoverErosionOutwardsWaveConditionsOutputTestFactory.Create() }; - var context = new GrassCoverErosionOutwardsWaveConditionsCalculationContext(calculation, - parent, - failureMechanism, - assessmentSection); + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocks, "invalidFilePath"); + + var nodeData = new GrassCoverErosionOutwardsWaveConditionsCalculationContext( + calculation, new CalculationGroup(), new GrassCoverErosionOutwardsFailureMechanism(), assessmentSection); + + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + using (var treeViewControl = new TreeViewControl()) { - var appFeatureCommandHandler = mocks.Stub(); - var importHandler = mocks.Stub(); - var exportHandler = mocks.Stub(); - var updateHandler = mocks.Stub(); - var viewCommands = mocks.Stub(); - var menuBuilder = new ContextMenuBuilder(appFeatureCommandHandler, - importHandler, - exportHandler, - updateHandler, - viewCommands, - context, - treeViewControl); + var gui = mocks.Stub(); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); + mocks.ReplayAll(); + plugin.Gui = gui; + + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Call + ToolStripItem toolStripItem = contextMenu.Items[clearOutputMenuItemIndex]; + + // Assert + Assert.IsTrue(toolStripItem.Enabled); + } + } + } + + [Test] + public void ContextMenuStrip_CalculationWithoutOutput_ContextMenuItemClearCalculationsOutputDisabled() + { + // Setup + var calculation = new GrassCoverErosionOutwardsWaveConditionsCalculation(); + + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocks, "invalidFilePath"); + + var nodeData = new GrassCoverErosionOutwardsWaveConditionsCalculationContext( + calculation, new CalculationGroup(), new GrassCoverErosionOutwardsFailureMechanism(), assessmentSection); + + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var treeViewControl = new TreeViewControl()) + { var gui = mocks.Stub(); - gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; - using (ContextMenuStrip contextMenu = info.ContextMenuStrip(context, null, treeViewControl)) + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) { - // Then - TestHelper.AssertContextMenuStripContainsItem(contextMenu, - clearOutputMenuItemIndex, - "&Wis uitvoer...", - "Deze berekening heeft geen uitvoer om te wissen.", - RiskeerCommonFormsResources.ClearIcon, - false); + // Call + ToolStripItem toolStripItem = contextMenu.Items[clearOutputMenuItemIndex]; + + // Assert + Assert.IsFalse(toolStripItem.Enabled); } } } [Test] - public void GivenCalculationWithOutput_ThenClearOutputItemEnabled() + public void GivenCalculationsWithOutput_WhenClearCalculationOutputClickedAndAborted_ThenInquiryAndCalculationOutputNotCleared() { // Given - var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); - IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(mocks); - - var parent = new CalculationGroup(); var calculation = new GrassCoverErosionOutwardsWaveConditionsCalculation { - Name = "A", Output = GrassCoverErosionOutwardsWaveConditionsOutputTestFactory.Create() }; - var context = new GrassCoverErosionOutwardsWaveConditionsCalculationContext(calculation, - parent, - failureMechanism, - assessmentSection); - using (var treeViewControl = new TreeViewControl()) + var calculationObserver = mocks.StrictMock(); + calculation.Attach(calculationObserver); + + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocks, "invalidFilePath"); + + var nodeData = new GrassCoverErosionOutwardsWaveConditionsCalculationContext( + calculation, new CalculationGroup(), new GrassCoverErosionOutwardsFailureMechanism(), assessmentSection); + + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + var messageBoxText = ""; + DialogBoxHandler = (name, wnd) => { - var appFeatureCommandHandler = mocks.Stub(); - var importHandler = mocks.Stub(); - var exportHandler = mocks.Stub(); - var updateHandler = mocks.Stub(); - var viewCommands = mocks.Stub(); - var menuBuilder = new ContextMenuBuilder(appFeatureCommandHandler, - importHandler, - exportHandler, - updateHandler, - viewCommands, - context, - treeViewControl); + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + helper.ClickCancel(); + }; + + using (var treeViewControl = new TreeViewControl()) + { var gui = mocks.Stub(); - gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; - using (ContextMenuStrip contextMenu = info.ContextMenuStrip(context, null, treeViewControl)) + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) { + // When + contextMenu.Items[clearOutputMenuItemIndex].PerformClick(); + // Then - TestHelper.AssertContextMenuStripContainsItem(contextMenu, - clearOutputMenuItemIndex, - "&Wis uitvoer...", - "Wis de uitvoer van deze berekening.", - RiskeerCommonFormsResources.ClearIcon); + Assert.AreEqual("Weet u zeker dat u de uitvoer van deze berekening wilt wissen?", messageBoxText); + + Assert.IsTrue(calculation.HasOutput); } } } [Test] - public void GivenCalculationWithOutput_WhenClearingOutput_ThenClearOutput() + public void GivenCalculationsWithOutput_WhenClearCalculationOutputClickedAndContinued_ThenInquiryAndCalculationOutputCleared() { // Given - var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism(); - IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(mocks); - - var observer = mocks.Stub(); - observer.Expect(o => o.UpdateObserver()); - - var parent = new CalculationGroup(); var calculation = new GrassCoverErosionOutwardsWaveConditionsCalculation { - Name = "A", Output = GrassCoverErosionOutwardsWaveConditionsOutputTestFactory.Create() }; - calculation.Attach(observer); - var context = new GrassCoverErosionOutwardsWaveConditionsCalculationContext(calculation, - parent, - failureMechanism, - assessmentSection); - using (var treeViewControl = new TreeViewControl()) + var calculationObserver = mocks.StrictMock(); + calculationObserver.Expect(o => o.UpdateObserver()); + calculation.Attach(calculationObserver); + + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocks, "invalidFilePath"); + + var nodeData = new GrassCoverErosionOutwardsWaveConditionsCalculationContext( + calculation, new CalculationGroup(), new GrassCoverErosionOutwardsFailureMechanism(), assessmentSection); + + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + var messageBoxText = ""; + DialogBoxHandler = (name, wnd) => { - var appFeatureCommandHandler = mocks.Stub(); - var importHandler = mocks.Stub(); - var exportHandler = mocks.Stub(); - var updateHandler = mocks.Stub(); - var viewCommands = mocks.Stub(); - var menuBuilder = new ContextMenuBuilder(appFeatureCommandHandler, - importHandler, - exportHandler, - updateHandler, - viewCommands, - context, - treeViewControl); + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + helper.ClickOk(); + }; + + using (var treeViewControl = new TreeViewControl()) + { var gui = mocks.Stub(); - gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilder); - gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; - DialogBoxHandler = (name, wnd) => + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) { - var messageBox = new MessageBoxTester(wnd); - messageBox.ClickOk(); - }; - - using (ContextMenuStrip contextMenu = info.ContextMenuStrip(context, null, treeViewControl)) - { // When - ToolStripItem validateMenuItem = contextMenu.Items[clearOutputMenuItemIndex]; - validateMenuItem.PerformClick(); + contextMenu.Items[clearOutputMenuItemIndex].PerformClick(); // Then - Assert.IsNull(calculation.Output); - // Check expectancies in TearDown() + Assert.AreEqual("Weet u zeker dat u de uitvoer van deze berekening wilt wissen?", messageBoxText); + + Assert.IsFalse(calculation.HasOutput); } } } @@ -1748,7 +1736,7 @@ mocks.VerifyAll(); } - private AssessmentSectionStub CreateAssessmentSection() + private static AssessmentSectionStub CreateAssessmentSection() { var assessmentSection = new AssessmentSectionStub {