Index: Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs =================================================================== diff -u -r3d08e58c426a08b99d1dfd84af400aeb3b6b6b7b -r3f9e3cc944221ad3d31d77d151324d44bc7214cc --- Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs (.../GrassCoverErosionInwardsPlugin.cs) (revision 3d08e58c426a08b99d1dfd84af400aeb3b6b6b7b) +++ Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs (.../GrassCoverErosionInwardsPlugin.cs) (revision 3f9e3cc944221ad3d31d77d151324d44bc7214cc) @@ -26,6 +26,7 @@ using System.Windows.Forms; using Core.Common.Base; using Core.Common.Controls.TreeView; +using Core.Common.Gui.Commands; using Core.Common.Gui.ContextMenu; using Core.Common.Gui.Forms.ProgressDialog; using Core.Common.Gui.Helpers; @@ -403,10 +404,9 @@ private static bool CloseFailureMechanismViewForData(GrassCoverErosionInwardsFailureMechanismView view, object o) { - var assessmentSection = o as IAssessmentSection; var failureMechanism = o as GrassCoverErosionInwardsFailureMechanism; - return assessmentSection != null + return o is IAssessmentSection assessmentSection ? ReferenceEquals(view.AssessmentSection, assessmentSection) : ReferenceEquals(view.FailureMechanism, failureMechanism); } @@ -432,18 +432,16 @@ private static bool CloseFailureMechanismResultViewForData(GrassCoverErosionInwardsFailureMechanismResultView view, object o) { - var assessmentSection = o as IAssessmentSection; - var failureMechanism = o as GrassCoverErosionInwardsFailureMechanism; - var failureMechanismContext = o as IFailureMechanismContext; - if (assessmentSection != null) + if (o is IAssessmentSection assessmentSection) { return assessmentSection .GetFailureMechanisms() .OfType() .Any(fm => ReferenceEquals(view.FailureMechanism.SectionResults, fm.SectionResults)); } - if (failureMechanismContext != null) + var failureMechanism = o as GrassCoverErosionInwardsFailureMechanism; + if (o is IFailureMechanismContext failureMechanismContext) { failureMechanism = failureMechanismContext.WrappedData; } @@ -576,31 +574,36 @@ }; } - private ContextMenuStrip FailureMechanismEnabledContextMenuStrip(GrassCoverErosionInwardsFailureMechanismContext failureMechanismContext, + private ContextMenuStrip FailureMechanismEnabledContextMenuStrip(GrassCoverErosionInwardsFailureMechanismContext context, object parentData, TreeViewControl treeViewControl) { - IEnumerable calculations = failureMechanismContext.WrappedData - .Calculations - .Cast(); + GrassCoverErosionInwardsCalculationScenario[] calculations = context.WrappedData + .Calculations + .Cast() + .ToArray(); IInquiryHelper inquiryHelper = GetInquiryHelper(); + IViewCommands viewCommands = Gui.ViewCommands; - var builder = new RiskeerContextMenuBuilder(Gui.Get(failureMechanismContext, treeViewControl)); + var builder = new RiskeerContextMenuBuilder(Gui.Get(context, treeViewControl)); return builder .AddOpenItem() .AddSeparator() - .AddToggleRelevancyOfFailureMechanismItem(failureMechanismContext, RemoveAllViewsForItem) + .AddToggleRelevancyOfFailureMechanismItem(context, RemoveAllViewsForItem) .AddSeparator() .AddValidateAllCalculationsInFailureMechanismItem( - failureMechanismContext, + context, ValidateAllInFailureMechanism, EnableValidateAndCalculateMenuItemForFailureMechanism) .AddPerformAllCalculationsInFailureMechanismItem( - failureMechanismContext, + context, CalculateAllInFailureMechanism, EnableValidateAndCalculateMenuItemForFailureMechanism) .AddSeparator() - .AddClearAllCalculationOutputInFailureMechanismItem(failureMechanismContext.WrappedData) + .AddClearAllCalculationOutputInFailureMechanismItem( + () => calculations.Any(c => c.HasOutput), + new ClearGrassCoverErosionInwardsCalculationOutputChangeHandler( + calculations.Where(c => c.HasOutput), inquiryHelper, viewCommands)) .AddClearIllustrationPointsOfCalculationsInFailureMechanismItem( () => GrassCoverErosionInwardsIllustrationPointsHelper.HasIllustrationPoints(calculations), CreateChangeHandler(inquiryHelper, calculations)) @@ -660,17 +663,14 @@ foreach (ICalculationBase calculationItem in context.WrappedData.Children) { - var calculation = calculationItem as GrassCoverErosionInwardsCalculationScenario; - var group = calculationItem as CalculationGroup; - - if (calculation != null) + if (calculationItem is GrassCoverErosionInwardsCalculationScenario calculation) { childNodeObjects.Add(new GrassCoverErosionInwardsCalculationScenarioContext(calculation, context.WrappedData, context.FailureMechanism, context.AssessmentSection)); } - else if (group != null) + else if (calculationItem is CalculationGroup group) { childNodeObjects.Add(new GrassCoverErosionInwardsCalculationGroupContext(group, context.WrappedData, Index: Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionInwardsFailureMechanismContextTreeNodeInfoTest.cs =================================================================== diff -u -r56d072b8342f3e54ba89124ab918bd1529e257a3 -r3f9e3cc944221ad3d31d77d151324d44bc7214cc --- Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionInwardsFailureMechanismContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsFailureMechanismContextTreeNodeInfoTest.cs) (revision 56d072b8342f3e54ba89124ab918bd1529e257a3) +++ Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionInwardsFailureMechanismContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsFailureMechanismContextTreeNodeInfoTest.cs) (revision 3f9e3cc944221ad3d31d77d151324d44bc7214cc) @@ -221,6 +221,7 @@ var gui = mocksRepository.Stub(); gui.Stub(cmp => cmp.Get(failureMechanismContext, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); mocksRepository.ReplayAll(); plugin.Gui = gui; @@ -289,6 +290,7 @@ gui.Stub(g => g.ProjectOpened += null).IgnoreArguments(); gui.Stub(g => g.ProjectOpened -= null).IgnoreArguments(); gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); mocksRepository.ReplayAll(); plugin.Gui = gui; @@ -438,11 +440,11 @@ } [Test] - public void ContextMenuStrip_HydraulicBoundaryDatabaseNotLinked_ContextMenuItemCalculateAllDisabledAndTooltipSet() + public void ContextMenuStrip_HydraulicBoundaryDatabaseNotLinked_ContextMenuItemValidateAllAndCalculateAllDisabledAndTooltipSet() { // Setup var failureMechanism = new TestGrassCoverErosionInwardsFailureMechanism(); - failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculation()); + failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculationScenario()); IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(mocksRepository); var nodeData = new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSection); @@ -453,6 +455,7 @@ var gui = mocksRepository.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); mocksRepository.ReplayAll(); plugin.Gui = gui; @@ -461,6 +464,11 @@ using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) { // Assert + TestHelper.AssertContextMenuStripContainsItem(contextMenu, contextMenuValidateAllIndex, + "Alles &valideren", + "Er is geen hydraulische belastingendatabase geïmporteerd.", + RiskeerCommonFormsResources.ValidateAllIcon, + false); TestHelper.AssertContextMenuStripContainsItem(contextMenu, contextMenuCalculateAllIndex, "Alles be&rekenen", "Er is geen hydraulische belastingendatabase geïmporteerd.", @@ -471,11 +479,11 @@ } [Test] - public void ContextMenuStrip_HydraulicBoundaryDatabaseLinkedToInvalidFile_ContextMenuItemCalculateAllDisabledAndTooltipSet() + public void ContextMenuStrip_HydraulicBoundaryDatabaseLinkedToInvalidFile_ContextMenuItemValidateAlAndCalculateAllDisabledAndTooltipSet() { // Setup var failureMechanism = new TestGrassCoverErosionInwardsFailureMechanism(); - failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculation()); + failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculationScenario()); IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocksRepository, "invalidFilePath"); @@ -487,6 +495,7 @@ var gui = mocksRepository.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); mocksRepository.ReplayAll(); plugin.Gui = gui; @@ -495,135 +504,30 @@ using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) { // Assert - ToolStripItem contextMenuItem = contextMenu.Items[contextMenuCalculateAllIndex]; + ToolStripItem validateAllItem = contextMenu.Items[contextMenuValidateAllIndex]; - Assert.AreEqual("Alles be&rekenen", contextMenuItem.Text); - StringAssert.Contains("Herstellen van de verbinding met de hydraulische belastingendatabase is mislukt.", contextMenuItem.ToolTipText); - TestHelper.AssertImagesAreEqual(RiskeerCommonFormsResources.CalculateAllIcon, contextMenuItem.Image); - Assert.IsFalse(contextMenuItem.Enabled); - } - } - } + Assert.AreEqual("Alles &valideren", validateAllItem.Text); + StringAssert.Contains("Herstellen van de verbinding met de hydraulische belastingendatabase is mislukt.", validateAllItem.ToolTipText); + TestHelper.AssertImagesAreEqual(RiskeerCommonFormsResources.ValidateAllIcon, validateAllItem.Image); + Assert.IsFalse(validateAllItem.Enabled); - [Test] - public void ContextMenuStrip_AllRequiredInputSet_ContextMenuItemCalculateAllEnabled() - { - // Setup - var failureMechanism = new TestGrassCoverErosionInwardsFailureMechanism(); - failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculation()); + ToolStripItem calculateAllItem = contextMenu.Items[contextMenuCalculateAllIndex]; - string validFilePath = Path.Combine(testDataPath, "complete.sqlite"); - - var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase - { - FilePath = validFilePath, - Version = "1.0" - }; - HydraulicBoundaryDatabaseTestHelper.SetHydraulicBoundaryLocationConfigurationSettings(hydraulicBoundaryDatabase); - - var assessmentSection = mocksRepository.Stub(); - assessmentSection.Stub(a => a.HydraulicBoundaryDatabase).Return(hydraulicBoundaryDatabase); - - var nodeData = new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSection); - var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); - - using (var treeViewControl = new TreeViewControl()) - { - var gui = mocksRepository.Stub(); - gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); - mocksRepository.ReplayAll(); - - plugin.Gui = gui; - - // Call - using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, null, treeViewControl)) - { - // Assert - TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuCalculateAllIndex, - "Alles be&rekenen", - "Voer alle berekeningen binnen dit toetsspoor uit.", - RiskeerCommonFormsResources.CalculateAllIcon); + Assert.AreEqual("Alles be&rekenen", calculateAllItem.Text); + StringAssert.Contains("Herstellen van de verbinding met de hydraulische belastingendatabase is mislukt.", calculateAllItem.ToolTipText); + TestHelper.AssertImagesAreEqual(RiskeerCommonFormsResources.CalculateAllIcon, calculateAllItem.Image); + Assert.IsFalse(calculateAllItem.Enabled); } } } [Test] - public void ContextMenuStrip_HydraulicBoundaryDatabaseNotLinked_ContextMenuItemValidateAllDisabledAndTooltipSet() + public void ContextMenuStrip_AllRequiredInputSet_ContextMenuItemValidateAllAndCalculateAllEnabled() { // Setup var failureMechanism = new TestGrassCoverErosionInwardsFailureMechanism(); - failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculation()); + failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculationScenario()); - IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(mocksRepository); - - var nodeData = new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSection); - var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); - - using (var treeViewControl = new TreeViewControl()) - { - var gui = mocksRepository.Stub(); - gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); - mocksRepository.ReplayAll(); - - plugin.Gui = gui; - - // Call - using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) - { - // Assert - TestHelper.AssertContextMenuStripContainsItem(contextMenu, contextMenuValidateAllIndex, - "Alles &valideren", - "Er is geen hydraulische belastingendatabase geïmporteerd.", - RiskeerCommonFormsResources.ValidateAllIcon, - false); - } - } - } - - [Test] - public void ContextMenuStrip_HydraulicBoundaryDatabaseLinkedToInvalidFile_ContextMenuItemValidateAllDisabledAndTooltipSet() - { - // Setup - var failureMechanism = new TestGrassCoverErosionInwardsFailureMechanism(); - failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculation()); - - IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocksRepository, "invalidFilePath"); - - var nodeData = new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSection); - var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); - - using (var treeViewControl = new TreeViewControl()) - { - var gui = mocksRepository.Stub(); - gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); - gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); - mocksRepository.ReplayAll(); - - plugin.Gui = gui; - - // Call - using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) - { - // Assert - ToolStripItem contextMenuItem = contextMenu.Items[contextMenuValidateAllIndex]; - - Assert.AreEqual("Alles &valideren", contextMenuItem.Text); - StringAssert.Contains("Herstellen van de verbinding met de hydraulische belastingendatabase is mislukt.", contextMenuItem.ToolTipText); - TestHelper.AssertImagesAreEqual(RiskeerCommonFormsResources.ValidateAllIcon, contextMenuItem.Image); - Assert.IsFalse(contextMenuItem.Enabled); - } - } - } - - [Test] - public void ContextMenuStrip_AllRequiredInputSet_ContextMenuItemValidateAllEnabled() - { - // Setup - var failureMechanism = new TestGrassCoverErosionInwardsFailureMechanism(); - failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculation()); - string validFilePath = Path.Combine(testDataPath, "complete.sqlite"); var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase @@ -644,6 +548,7 @@ var gui = mocksRepository.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); mocksRepository.ReplayAll(); plugin.Gui = gui; @@ -656,6 +561,10 @@ "Alles &valideren", "Valideer alle berekeningen binnen dit toetsspoor.", RiskeerCommonFormsResources.ValidateAllIcon); + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuCalculateAllIndex, + "Alles be&rekenen", + "Voer alle berekeningen binnen dit toetsspoor uit.", + RiskeerCommonFormsResources.CalculateAllIcon); } } } @@ -668,7 +577,7 @@ var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); var failureMechanism = new TestGrassCoverErosionInwardsFailureMechanism(); - failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculation + failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculationScenario { Name = "A", InputParameters = @@ -677,7 +586,7 @@ DikeProfile = DikeProfileTestFactory.CreateDikeProfile() } }); - failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculation + failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculationScenario { Name = "B", InputParameters = @@ -707,6 +616,7 @@ gui.Stub(g => g.Get(failureMechanismContext, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mainWindow); gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); int nrOfCalculators = failureMechanism.Calculations.Count(); var calculatorFactory = mocksRepository.Stub(); @@ -766,7 +676,7 @@ var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); var failureMechanism = new TestGrassCoverErosionInwardsFailureMechanism(); - failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculation + failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculationScenario { Name = "A", InputParameters = @@ -775,7 +685,7 @@ DikeProfile = DikeProfileTestFactory.CreateDikeProfile() } }); - failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculation + failureMechanism.CalculationsGroup.Children.Add(new GrassCoverErosionInwardsCalculationScenario { Name = "B", InputParameters = @@ -803,6 +713,7 @@ var gui = mocksRepository.Stub(); gui.Stub(g => g.Get(failureMechanismContext, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); mocksRepository.ReplayAll(); plugin.Gui = gui; @@ -826,14 +737,232 @@ } [Test] + public void ContextMenuStrip_FailureMechanismWithCalculationsWithoutOutput_ContextMenuItemClearCalculationsOutputEnabled() + { + // Setup + var calculationWithOutput = new GrassCoverErosionInwardsCalculationScenario + { + Output = new TestGrassCoverErosionInwardsOutput() + }; + + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism + { + CalculationsGroup = + { + Children = + { + calculationWithOutput, + new GrassCoverErosionInwardsCalculationScenario() + } + } + }; + + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocksRepository, "invalidFilePath"); + + var nodeData = new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSection); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var treeViewControl = new TreeViewControl()) + { + var gui = mocksRepository.Stub(); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); + mocksRepository.ReplayAll(); + + plugin.Gui = gui; + + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Call + ToolStripItem toolStripItem = contextMenu.Items[contextMenuClearAllIndex]; + + // Assert + Assert.IsTrue(toolStripItem.Enabled); + } + } + } + + [Test] + public void ContextMenuStrip_FailureMechanismWithCalculationsWithoutOutput_ContextMenuItemClearCalculationsOutputDisabled() + { + // Setup + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism + { + CalculationsGroup = + { + Children = + { + new GrassCoverErosionInwardsCalculationScenario() + } + } + }; + + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocksRepository, "invalidFilePath"); + + var nodeData = new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSection); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var treeViewControl = new TreeViewControl()) + { + var gui = mocksRepository.Stub(); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); + mocksRepository.ReplayAll(); + + plugin.Gui = gui; + + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Call + ToolStripItem toolStripItem = contextMenu.Items[contextMenuClearAllIndex]; + + // Assert + Assert.IsFalse(toolStripItem.Enabled); + } + } + } + + [Test] + public void GivenCalculationsWithOutput_WhenClearAllCalculationsOutputClickedAndAborted_ThenInquiryAndCalculationsOutputNotCleared() + { + // Given + var calculationWithOutput = new GrassCoverErosionInwardsCalculationScenario + { + Output = new TestGrassCoverErosionInwardsOutput() + }; + + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism + { + CalculationsGroup = + { + Children = + { + calculationWithOutput, + new GrassCoverErosionInwardsCalculationScenario() + } + } + }; + + var calculationObserver = mocksRepository.StrictMock(); + calculationWithOutput.Attach(calculationObserver); + + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocksRepository, "invalidFilePath"); + + var nodeData = new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSection); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + var messageBoxText = ""; + DialogBoxHandler = (name, wnd) => + { + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + + helper.ClickCancel(); + }; + + using (var treeViewControl = new TreeViewControl()) + { + var gui = mocksRepository.Stub(); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.StrictMock()); + mocksRepository.ReplayAll(); + + plugin.Gui = gui; + + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // When + contextMenu.Items[contextMenuClearAllIndex].PerformClick(); + + // Then + Assert.AreEqual("Weet u zeker dat u alle uitvoer wilt wissen?", messageBoxText); + + Assert.IsTrue(calculationWithOutput.HasOutput); + } + } + } + + [Test] + public void GivenCalculationsWithOutput_WhenClearAllCalculationsOutputClickedAndContinued_ThenInquiryAndOutputViewsClosedAndCalculationsOutputCleared() + { + // Given + var calculationWithOutput = new GrassCoverErosionInwardsCalculationScenario + { + Output = new TestGrassCoverErosionInwardsOutput() + }; + + var calculationWithoutOutput = new GrassCoverErosionInwardsCalculationScenario(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism + { + CalculationsGroup = + { + Children = + { + calculationWithOutput, + calculationWithoutOutput + } + } + }; + + var affectedCalculationObserver = mocksRepository.StrictMock(); + affectedCalculationObserver.Expect(o => o.UpdateObserver()); + calculationWithOutput.Attach(affectedCalculationObserver); + + var unaffectedCalculationObserver = mocksRepository.StrictMock(); + calculationWithoutOutput.Attach(unaffectedCalculationObserver); + + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(null, mocksRepository, "invalidFilePath"); + + var nodeData = new GrassCoverErosionInwardsFailureMechanismContext(failureMechanism, assessmentSection); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + var messageBoxText = ""; + DialogBoxHandler = (name, wnd) => + { + var helper = new MessageBoxTester(wnd); + messageBoxText = helper.Text; + + helper.ClickOk(); + }; + + using (var treeViewControl = new TreeViewControl()) + { + var viewCommands = mocksRepository.StrictMock(); + viewCommands.Expect(vc => vc.RemoveAllViewsForItem(calculationWithOutput.Output)); + + var gui = mocksRepository.Stub(); + gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(viewCommands); + mocksRepository.ReplayAll(); + + plugin.Gui = gui; + + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // When + contextMenu.Items[contextMenuClearAllIndex].PerformClick(); + + // Then + Assert.AreEqual("Weet u zeker dat u alle uitvoer wilt wissen?", messageBoxText); + + Assert.IsFalse(calculationWithOutput.HasOutput); + } + } + } + + [Test] [TestCaseSource(nameof(GetCalculationConfigurationsWithIllustrationPoints))] public void ContextMenuStrip_FailureMechanismWithCalculationsContainingIllustrationPoints_ContextMenuItemClearIllustrationPointsEnabled( GrassCoverErosionInwardsCalculation calculation) { // Setup IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(mocksRepository); - var calculationWithOutput = new GrassCoverErosionInwardsCalculation + var calculationWithOutput = new GrassCoverErosionInwardsCalculationScenario { Output = new TestGrassCoverErosionInwardsOutput() }; @@ -846,7 +975,7 @@ { calculation, calculationWithOutput, - new GrassCoverErosionInwardsCalculation() + new GrassCoverErosionInwardsCalculationScenario() } } }; @@ -859,6 +988,7 @@ var gui = mocksRepository.Stub(); gui.Stub(g => g.Get(failureMechanismContext, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); mocksRepository.ReplayAll(); plugin.Gui = gui; @@ -880,7 +1010,7 @@ // Setup IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(mocksRepository); - var calculationWithOutput = new GrassCoverErosionInwardsCalculation + var calculationWithOutput = new GrassCoverErosionInwardsCalculationScenario { Output = new TestGrassCoverErosionInwardsOutput() }; @@ -892,7 +1022,7 @@ Children = { calculationWithOutput, - new GrassCoverErosionInwardsCalculation() + new GrassCoverErosionInwardsCalculationScenario() } } }; @@ -905,6 +1035,7 @@ var gui = mocksRepository.Stub(); gui.Stub(g => g.Get(failureMechanismContext, treeViewControl)).Return(menuBuilder); gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); mocksRepository.ReplayAll(); plugin.Gui = gui; @@ -924,12 +1055,12 @@ public void GivenCalculationsWithIllustrationPoints_WhenClearIllustrationPointsClickedAndAborted_ThenInquiryAndIllustrationPointsNotCleared() { // Given - var calculationWithIllustrationPoints = new GrassCoverErosionInwardsCalculation + var calculationWithIllustrationPoints = new GrassCoverErosionInwardsCalculationScenario { Output = new TestGrassCoverErosionInwardsOutput(new TestGeneralResultFaultTreeIllustrationPoint()) }; - var calculationWithOutput = new GrassCoverErosionInwardsCalculation + var calculationWithOutput = new GrassCoverErosionInwardsCalculationScenario { Output = new TestGrassCoverErosionInwardsOutput() }; @@ -945,7 +1076,7 @@ { calculationWithIllustrationPoints, calculationWithOutput, - new GrassCoverErosionInwardsCalculation() + new GrassCoverErosionInwardsCalculationScenario() } } }; @@ -968,6 +1099,7 @@ var gui = mocksRepository.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); mocksRepository.ReplayAll(); plugin.Gui = gui; @@ -994,12 +1126,12 @@ public void GivenCalculationsWithIllustrationPoints_WhenClearIllustrationPointsClickedAndContinued_ThenInquiryAndIllustrationPointsCleared() { // Given - var calculationWithIllustrationPoints = new GrassCoverErosionInwardsCalculation + var calculationWithIllustrationPoints = new GrassCoverErosionInwardsCalculationScenario { Output = new TestGrassCoverErosionInwardsOutput(new TestGeneralResultFaultTreeIllustrationPoint()) }; - var calculationWithOutput = new GrassCoverErosionInwardsCalculation + var calculationWithOutput = new GrassCoverErosionInwardsCalculationScenario { Output = new TestGrassCoverErosionInwardsOutput() }; @@ -1019,7 +1151,7 @@ { calculationWithIllustrationPoints, calculationWithOutput, - new GrassCoverErosionInwardsCalculation() + new GrassCoverErosionInwardsCalculationScenario() } } }; @@ -1041,6 +1173,7 @@ var gui = mocksRepository.Stub(); gui.Stub(g => g.Get(nodeData, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); gui.Stub(g => g.MainWindow).Return(mocksRepository.Stub()); + gui.Stub(g => g.ViewCommands).Return(mocksRepository.Stub()); mocksRepository.ReplayAll(); plugin.Gui = gui; @@ -1081,21 +1214,21 @@ private static IEnumerable GetCalculationConfigurationsWithIllustrationPoints() { var random = new Random(21); - var calculationWithOverToppingOutputWithIllustrationPoints = new GrassCoverErosionInwardsCalculation + var calculationWithOverToppingOutputWithIllustrationPoints = new GrassCoverErosionInwardsCalculationScenario { Output = new GrassCoverErosionInwardsOutput(new TestOvertoppingOutput(new TestGeneralResultFaultTreeIllustrationPoint()), null, null) }; - var calculationWithDikeHeightRateWithIllustrationPoints = new GrassCoverErosionInwardsCalculation + var calculationWithDikeHeightRateWithIllustrationPoints = new GrassCoverErosionInwardsCalculationScenario { Output = new GrassCoverErosionInwardsOutput(new TestOvertoppingOutput(random.NextDouble()), new TestDikeHeightOutput(new TestGeneralResultFaultTreeIllustrationPoint()), null) }; - var calculationWithOvertoppingRateWithIllustrationPoints = new GrassCoverErosionInwardsCalculation + var calculationWithOvertoppingRateWithIllustrationPoints = new GrassCoverErosionInwardsCalculationScenario { Output = new GrassCoverErosionInwardsOutput(new TestOvertoppingOutput(random.NextDouble()), null,