Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/GrassCoverErosionInwardsPluginTest.cs =================================================================== diff -u -r6b9fda141298524c0910937dd090d82be420c52b -rc3a5f6f1b7c5a89cf8d81b52b48eea471b3a4ffe --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/GrassCoverErosionInwardsPluginTest.cs (.../GrassCoverErosionInwardsPluginTest.cs) (revision 6b9fda141298524c0910937dd090d82be420c52b) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/GrassCoverErosionInwardsPluginTest.cs (.../GrassCoverErosionInwardsPluginTest.cs) (revision c3a5f6f1b7c5a89cf8d81b52b48eea471b3a4ffe) @@ -25,7 +25,6 @@ using Core.Common.Gui.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.DikeProfiles; -using Ringtoets.Common.Data.Probability; using Ringtoets.Common.Forms.PresentationObjects; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionInwards.Forms.PresentationObjects; Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/Ringtoets.StabilityPointStructures.Plugin.csproj =================================================================== diff -u -r2a1fab6b1433b01ef0dbb2c79a35430dd7efe0bd -rc3a5f6f1b7c5a89cf8d81b52b48eea471b3a4ffe --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/Ringtoets.StabilityPointStructures.Plugin.csproj (.../Ringtoets.StabilityPointStructures.Plugin.csproj) (revision 2a1fab6b1433b01ef0dbb2c79a35430dd7efe0bd) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/Ringtoets.StabilityPointStructures.Plugin.csproj (.../Ringtoets.StabilityPointStructures.Plugin.csproj) (revision c3a5f6f1b7c5a89cf8d81b52b48eea471b3a4ffe) @@ -90,6 +90,16 @@ Ringtoets.Common.Service False + + {70f8cc9c-5bc8-4fb2-b201-eae7fa8088c2} + Ringtoets.HydraRing.Data + False + + + {B69D5B6C-6E14-4FA9-9EBC-8F97678CDB70} + Ringtoets.HydraRing.IO + False + {3D4B9740-8348-4434-8D77-B611FC6EE57F} Ringtoets.StabilityPointStructures.Data Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs =================================================================== diff -u -r2efa0fbe22fee2482e1583a7d6f5ccfdf168f660 -rc3a5f6f1b7c5a89cf8d81b52b48eea471b3a4ffe --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs (.../StabilityPointStructuresPlugin.cs) (revision 2efa0fbe22fee2482e1583a7d6f5ccfdf168f660) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs (.../StabilityPointStructuresPlugin.cs) (revision c3a5f6f1b7c5a89cf8d81b52b48eea471b3a4ffe) @@ -33,6 +33,7 @@ using Ringtoets.Common.Forms.Helpers; using Ringtoets.Common.Forms.PresentationObjects; using Ringtoets.Common.Forms.TreeNodeInfos; +using Ringtoets.HydraRing.IO; using Ringtoets.StabilityPointStructures.Data; using Ringtoets.StabilityPointStructures.Forms.PresentationObjects; using Ringtoets.StabilityPointStructures.Forms.Views; @@ -157,8 +158,26 @@ private static string ValidateAllDataAvailableAndGetErrorMessage(IAssessmentSection assessmentSection, StabilityPointStructuresFailureMechanism failureMechanism) { + if (!failureMechanism.Sections.Any()) + { + return RingtoetsCommonFormsResources.Plugin_AllDataAvailable_No_failure_mechanism_sections_imported; + } + + if (assessmentSection.HydraulicBoundaryDatabase == null) + { + return RingtoetsCommonFormsResources.Plugin_AllDataAvailable_No_hydraulic_boundary_database_imported; + } + + var validationProblem = HydraulicDatabaseHelper.ValidatePathForCalculation(assessmentSection.HydraulicBoundaryDatabase.FilePath); + if (!string.IsNullOrEmpty(validationProblem)) + { + return string.Format(RingtoetsCommonServiceResources.Hydraulic_boundary_database_connection_failed_0_, + validationProblem); + } + return null; } + private static void ValidateAll(IEnumerable calculations, IAssessmentSection assessmentSection) {} private static void CalculateAll(StabilityPointStructuresFailureMechanismContext context) {} private static void CalculateAll(CalculationGroup group, StabilityPointStructuresCalculationGroupContext context) {} @@ -220,10 +239,11 @@ return builder.AddToggleRelevancyOfFailureMechanismItem(failureMechanismContext, RemoveAllViewsForItem) .AddSeparator() - .AddValidateAllCalculationsInFailureMechanismItem(failureMechanismContext, - c => ValidateAll(c.WrappedData.Calculations.OfType(), c.Parent), - ValidateAllDataAvailableAndGetErrorMessageForCalculationsInFailureMechanism) - .AddPerformAllCalculationsInFailureMechanismItem(failureMechanismContext, CalculateAll) + .AddValidateAllCalculationsInFailureMechanismItem( + failureMechanismContext, + c => ValidateAll(c.WrappedData.Calculations.OfType(), c.Parent), + ValidateAllDataAvailableAndGetErrorMessageForCalculationsInFailureMechanism) + .AddPerformAllCalculationsInFailureMechanismItem(failureMechanismContext, CalculateAll, ValidateAllDataAvailableAndGetErrorMessageForCalculationsInFailureMechanism) .AddClearAllCalculationOutputInFailureMechanismItem(failureMechanismContext.WrappedData) .AddSeparator() .AddExpandAllItem() @@ -251,7 +271,7 @@ .Build(); } - private string ValidateAllDataAvailableAndGetErrorMessageForCalculationsInFailureMechanism(StabilityPointStructuresFailureMechanismContext context) + private static string ValidateAllDataAvailableAndGetErrorMessageForCalculationsInFailureMechanism(StabilityPointStructuresFailureMechanismContext context) { return ValidateAllDataAvailableAndGetErrorMessage(context.Parent, context.WrappedData); } @@ -317,8 +337,9 @@ builder.AddSeparator() .AddValidateAllCalculationsInGroupItem(context, - c => ValidateAll(c.WrappedData.GetCalculations().OfType(), c.AssessmentSection)) - .AddPerformAllCalculationsInGroupItem(group, context, CalculateAll) + c => ValidateAll(c.WrappedData.GetCalculations().OfType(), c.AssessmentSection), + ValidateAllDataAvailableAndGetErrorMessageForCalculationsInGroup) + .AddPerformAllCalculationsInGroupItem(group, context, CalculateAll, ValidateAllDataAvailableAndGetErrorMessageForCalculationsInGroup) .AddClearAllCalculationOutputInGroupItem(group) .AddSeparator(); @@ -366,6 +387,11 @@ context.WrappedData.NotifyObservers(); } + private static string ValidateAllDataAvailableAndGetErrorMessageForCalculationsInGroup(StabilityPointStructuresCalculationGroupContext context) + { + return ValidateAllDataAvailableAndGetErrorMessage(context.AssessmentSection, context.FailureMechanism); + } + #endregion #region StabilityPointStructuresCalculationContext TreeNodeInfo @@ -400,7 +426,7 @@ StabilityPointStructuresCalculation calculation = context.WrappedData; return builder.AddValidateCalculationItem(context, delegate { }, ValidateAllDataAvailableAndGetErrorMessageForCalculation) - .AddPerformCalculationItem(calculation, context, Calculate) + .AddPerformCalculationItem(calculation, context, Calculate, ValidateAllDataAvailableAndGetErrorMessageForCalculation) .AddClearCalculationOutputItem(calculation) .AddSeparator() .AddRenameItem() Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/TreeNodeInfos/StabilityPointStructuresFailureMechanismContextTreeNodeInfoTest.cs =================================================================== diff -u -rc7cb9812ba255ba88d28b65f1a146dcf7454f63d -rc3a5f6f1b7c5a89cf8d81b52b48eea471b3a4ffe --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/TreeNodeInfos/StabilityPointStructuresFailureMechanismContextTreeNodeInfoTest.cs (.../StabilityPointStructuresFailureMechanismContextTreeNodeInfoTest.cs) (revision c7cb9812ba255ba88d28b65f1a146dcf7454f63d) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/TreeNodeInfos/StabilityPointStructuresFailureMechanismContextTreeNodeInfoTest.cs (.../StabilityPointStructuresFailureMechanismContextTreeNodeInfoTest.cs) (revision c3a5f6f1b7c5a89cf8d81b52b48eea471b3a4ffe) @@ -19,8 +19,10 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.IO; using System.Linq; using System.Windows.Forms; +using Core.Common.Base.Geometry; using Core.Common.Controls.TreeView; using Core.Common.Gui; using Core.Common.Gui.Commands; @@ -31,12 +33,15 @@ using Rhino.Mocks; using Ringtoets.Common.Data; using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Forms.PresentationObjects; +using Ringtoets.HydraRing.Data; using Ringtoets.StabilityPointStructures.Data; using Ringtoets.StabilityPointStructures.Forms.PresentationObjects; using Ringtoets.StabilityPointStructures.Plugin; using CoreCommonGuiResources = Core.Common.Gui.Properties.Resources; using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; +using RingtoetsCommonServicesResources = Ringtoets.Common.Service.Properties.Resources; namespace Ringtoets.StabilityPointStructures.Forms.Test.TreeNodeInfos { @@ -48,6 +53,7 @@ private const int contextMenuValidateAllIndex = 2; private const int contextMenuCalculateAllIndex = 3; private const int contextMenuClearAllIndex = 4; + private readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.HydraRing.IO, "HydraulicBoundaryLocationReader"); private MockRepository mocksRepository; @@ -91,7 +97,7 @@ public void ChildNodeObjects_FailureMechanismIsRelevant_ReturnChildDataNodes() { // Setup - var assessmentSectionMock = mocksRepository.StrictMock(); + var assessmentSectionMock = mocksRepository.Stub(); mocksRepository.ReplayAll(); var failureMechanism = new StabilityPointStructuresFailureMechanism(); @@ -143,7 +149,7 @@ public void ChildNodeObjects_FailureMechanismIsNotRelevant_ReturnOnlyFailureMechanismComments() { // Setup - var assessmentSectionMock = mocksRepository.StrictMock(); + var assessmentSectionMock = mocksRepository.Stub(); mocksRepository.ReplayAll(); var failureMechanism = new StabilityPointStructuresFailureMechanism @@ -172,7 +178,7 @@ { // Setup var failureMechanism = new StabilityPointStructuresFailureMechanism(); - var assessmentSectionMock = mocksRepository.StrictMock(); + var assessmentSectionMock = mocksRepository.Stub(); var failureMechanismContext = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); var guiMock = mocksRepository.StrictMock(); var menuBuilderMock = mocksRepository.StrictMock(); @@ -214,7 +220,7 @@ { IsRelevant = false }; - var assessmentSectionMock = mocksRepository.StrictMock(); + var assessmentSectionMock = mocksRepository.Stub(); var failureMechanismContext = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); var guiMock = mocksRepository.StrictMock(); var menuBuilderMock = mocksRepository.StrictMock(); @@ -249,7 +255,7 @@ using (var plugin = new StabilityPointStructuresPlugin()) using (var treeView = new TreeViewControl()) { - var assessmentSectionMock = mocksRepository.StrictMock(); + var assessmentSectionMock = mocksRepository.Stub(); var failureMechanism = new StabilityPointStructuresFailureMechanism(); var failureMechanismContext = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); @@ -305,7 +311,7 @@ using (var plugin = new StabilityPointStructuresPlugin()) using (var treeView = new TreeViewControl()) { - var assessmentSectionMock = mocksRepository.StrictMock(); + var assessmentSectionMock = mocksRepository.Stub(); var failureMechanism = new StabilityPointStructuresFailureMechanism { IsRelevant = false @@ -343,7 +349,7 @@ { // Setup var failureMechanism = new StabilityPointStructuresFailureMechanism(); - var assessmentSectionMock = mocksRepository.StrictMock(); + var assessmentSectionMock = mocksRepository.Stub(); var failureMechanismContext = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); var viewCommandsMock = mocksRepository.StrictMock(); var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); @@ -381,7 +387,7 @@ { IsRelevant = false }; - var assessmentSectionMock = mocksRepository.StrictMock(); + var assessmentSectionMock = mocksRepository.Stub(); var failureMechanismContext = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); var guiMock = mocksRepository.StrictMock(); @@ -407,6 +413,281 @@ mocksRepository.VerifyAll(); } + [Test] + public void ContextMenuStrip_NoFailureMechanismSections_ContextMenuItemCalculateAllDisabledAndTooltipSet() + { + // Setup + var guiMock = mocksRepository.StrictMock(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + failureMechanism.CalculationsGroup.Children.Add(new StabilityPointStructuresCalculation()); + var assessmentSectionMock = mocksRepository.Stub(); + + var nodeData = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var plugin = new StabilityPointStructuresPlugin()) + using (var treeViewControl = new TreeViewControl()) + { + guiMock.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + mocksRepository.ReplayAll(); + + var info = GetInfo(plugin); + plugin.Gui = guiMock; + + // Call + using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Assert + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuCalculateAllIndex, + RingtoetsCommonFormsResources.Calculate_all, + RingtoetsCommonFormsResources.Plugin_AllDataAvailable_No_failure_mechanism_sections_imported, + RingtoetsCommonFormsResources.CalculateAllIcon, + false); + } + } + } + + [Test] + public void ContextMenuStrip_FailureMechanismSectionsSetNoHydraulicBoundaryDatabase_ContextMenuItemCalculateAllDisabledAndTooltipSet() + { + // Setup + var guiMock = mocksRepository.StrictMock(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + failureMechanism.CalculationsGroup.Children.Add(new StabilityPointStructuresCalculation()); + failureMechanism.AddSection(new FailureMechanismSection("test", new[] + { + new Point2D(0, 0) + })); + + var assessmentSectionMock = mocksRepository.Stub(); + + var nodeData = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var plugin = new StabilityPointStructuresPlugin()) + using (var treeViewControl = new TreeViewControl()) + { + guiMock.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + mocksRepository.ReplayAll(); + + var info = GetInfo(plugin); + plugin.Gui = guiMock; + + // Call + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Assert + TestHelper.AssertContextMenuStripContainsItem(contextMenu, contextMenuCalculateAllIndex, + RingtoetsCommonFormsResources.Calculate_all, + RingtoetsCommonFormsResources.Plugin_AllDataAvailable_No_hydraulic_boundary_database_imported, + RingtoetsCommonFormsResources.CalculateAllIcon, + false); + } + } + } + + [Test] + public void ContextMenuStrip_FailureMechanismSectionsSetHydraulicBoundaryDatabaseNotValid_ContextMenuItemCalculateAllDisabledAndTooltipSet() + { + // Setup + var guiMock = mocksRepository.StrictMock(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + failureMechanism.CalculationsGroup.Children.Add(new StabilityPointStructuresCalculation()); + failureMechanism.AddSection(new FailureMechanismSection("test", new[] + { + new Point2D(0, 0) + })); + + var assessmentSectionMock = mocksRepository.Stub(); + assessmentSectionMock.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); + + var nodeData = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var plugin = new StabilityPointStructuresPlugin()) + using (var treeViewControl = new TreeViewControl()) + { + guiMock.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + mocksRepository.ReplayAll(); + + var info = GetInfo(plugin); + plugin.Gui = guiMock; + + // Call + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Assert + ToolStripItem contextMenuItem = contextMenu.Items[contextMenuCalculateAllIndex]; + + Assert.AreEqual(RingtoetsCommonFormsResources.Calculate_all, contextMenuItem.Text); + StringAssert.Contains(string.Format(RingtoetsCommonServicesResources.Hydraulic_boundary_database_connection_failed_0_, ""), contextMenuItem.ToolTipText); + TestHelper.AssertImagesAreEqual(RingtoetsCommonFormsResources.CalculateAllIcon, contextMenuItem.Image); + Assert.IsFalse(contextMenuItem.Enabled); + } + } + } + + [Test] + public void ContextMenuStrip_FailureMechanismSectionsAndHydraulicDatabaseSet_ContextMenuItemCalculateAllEnabled() + { + // Setup + var guiMock = mocksRepository.StrictMock(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + failureMechanism.CalculationsGroup.Children.Add(new StabilityPointStructuresCalculation()); + failureMechanism.AddSection(new FailureMechanismSection("test", new[] + { + new Point2D(0, 0) + })); + + string validFilePath = Path.Combine(testDataPath, "complete.sqlite"); + + var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase + { + FilePath = validFilePath, + Version = "1.0" + }; + + var assessmentSectionMock = mocksRepository.Stub(); + assessmentSectionMock.HydraulicBoundaryDatabase = hydraulicBoundaryDatabase; + + var nodeData = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var plugin = new StabilityPointStructuresPlugin()) + using (var treeViewControl = new TreeViewControl()) + { + guiMock.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + mocksRepository.ReplayAll(); + + var info = GetInfo(plugin); + plugin.Gui = guiMock; + + // Call + using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Assert + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuCalculateAllIndex, + RingtoetsCommonFormsResources.Calculate_all, + RingtoetsCommonFormsResources.Calculate_all_ToolTip, + RingtoetsCommonFormsResources.CalculateAllIcon); + } + } + } + + [Test] + public void ContextMenuStrip_NoFailureMechanismSections_ContextMenuItemValidateAllDisabledAndTooltipSet() + { + // Setup + var guiMock = mocksRepository.StrictMock(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + failureMechanism.CalculationsGroup.Children.Add(new StabilityPointStructuresCalculation()); + var assessmentSectionMock = mocksRepository.Stub(); + + var nodeData = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var plugin = new StabilityPointStructuresPlugin()) + using (var treeViewControl = new TreeViewControl()) + { + guiMock.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + mocksRepository.ReplayAll(); + + var info = GetInfo(plugin); + plugin.Gui = guiMock; + + // Call + using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Assert + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuValidateAllIndex, + RingtoetsCommonFormsResources.Validate_all, + RingtoetsCommonFormsResources.Plugin_AllDataAvailable_No_failure_mechanism_sections_imported, + RingtoetsCommonFormsResources.ValidateAllIcon, + false); + } + } + } + + [Test] + public void ContextMenuStrip_FailureMechanismSectionsSetNoHydraulicBoundaryDatabase_ContextMenuItemValidateAllDisabledAndTooltipSet() + { + // Setup + var guiMock = mocksRepository.StrictMock(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + failureMechanism.CalculationsGroup.Children.Add(new StabilityPointStructuresCalculation()); + failureMechanism.AddSection(new FailureMechanismSection("test", new[] + { + new Point2D(0, 0) + })); + + var assessmentSectionMock = mocksRepository.Stub(); + + var nodeData = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var plugin = new StabilityPointStructuresPlugin()) + using (var treeViewControl = new TreeViewControl()) + { + guiMock.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + mocksRepository.ReplayAll(); + + var info = GetInfo(plugin); + plugin.Gui = guiMock; + + // Call + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Assert + TestHelper.AssertContextMenuStripContainsItem(contextMenu, contextMenuValidateAllIndex, + RingtoetsCommonFormsResources.Validate_all, + RingtoetsCommonFormsResources.Plugin_AllDataAvailable_No_hydraulic_boundary_database_imported, + RingtoetsCommonFormsResources.ValidateAllIcon, + false); + } + } + } + + [Test] + public void ContextMenuStrip_FailureMechanismSectionsSetHydraulicBoundaryDatabaseNotValid_ContextMenuItemValidateAllDisabledAndTooltipSet() + { + // Setup + var guiMock = mocksRepository.StrictMock(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + failureMechanism.CalculationsGroup.Children.Add(new StabilityPointStructuresCalculation()); + failureMechanism.AddSection(new FailureMechanismSection("test", new[] + { + new Point2D(0, 0) + })); + + var assessmentSectionMock = mocksRepository.Stub(); + assessmentSectionMock.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); + + var nodeData = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var plugin = new StabilityPointStructuresPlugin()) + using (var treeViewControl = new TreeViewControl()) + { + guiMock.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + mocksRepository.ReplayAll(); + + var info = GetInfo(plugin); + plugin.Gui = guiMock; + + // Call + using (ContextMenuStrip contextMenu = info.ContextMenuStrip(nodeData, null, treeViewControl)) + { + // Assert + ToolStripItem contextMenuItem = contextMenu.Items[contextMenuValidateAllIndex]; + + Assert.AreEqual(RingtoetsCommonFormsResources.Validate_all, contextMenuItem.Text); + StringAssert.Contains(string.Format(RingtoetsCommonServicesResources.Hydraulic_boundary_database_connection_failed_0_, ""), contextMenuItem.ToolTipText); + TestHelper.AssertImagesAreEqual(RingtoetsCommonFormsResources.ValidateAllIcon, contextMenuItem.Image); + Assert.IsFalse(contextMenuItem.Enabled); + } + } + } + private static TreeNodeInfo GetInfo(StabilityPointStructuresPlugin plugin) { return plugin.GetTreeNodeInfos().First(tni => tni.TagType == typeof(StabilityPointStructuresFailureMechanismContext));