Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs =================================================================== diff -u -rac96d7c315129af851634ed5a4a6800b59ede718 -rd5a5129cfad8fd5ef146976fc6601db731a43af3 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs (.../RingtoetsPlugin.cs) (revision ac96d7c315129af851634ed5a4a6800b59ede718) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsPlugin.cs (.../RingtoetsPlugin.cs) (revision d5a5129cfad8fd5ef146976fc6601db731a43af3) @@ -655,9 +655,9 @@ { Text = hydraulicBoundaryDatabase => RingtoetsFormsResources.HydraulicBoundaryDatabase_DisplayName, Image = hydraulicBoundaryDatabase => RingtoetsCommonFormsResources.GenericInputOutputIcon, - ForeColor = context => context.WrappedData.HydraulicBoundaryDatabase == null - ? Color.FromKnownColor(KnownColor.GrayText) - : Color.FromKnownColor(KnownColor.ControlText), + ForeColor = context => context.WrappedData.HydraulicBoundaryDatabase.IsCoupled() + ? Color.FromKnownColor(KnownColor.ControlText) + : Color.FromKnownColor(KnownColor.GrayText), ChildNodeObjects = HydraulicBoundaryDatabaseChildNodeObjects, ContextMenuStrip = HydraulicBoundaryDatabaseContextMenuStrip }; @@ -1363,15 +1363,16 @@ private static object[] HydraulicBoundaryDatabaseChildNodeObjects(HydraulicBoundaryDatabaseContext nodeData) { - if (nodeData.WrappedData.HydraulicBoundaryDatabase == null) + if (nodeData.WrappedData.HydraulicBoundaryDatabase.IsCoupled()) { - return new object[0]; + return new object[] + { + new DesignWaterLevelLocationsContext(nodeData.WrappedData), + new WaveHeightLocationsContext(nodeData.WrappedData) + }; } - return new object[] - { - new DesignWaterLevelLocationsContext(nodeData.WrappedData), - new WaveHeightLocationsContext(nodeData.WrappedData) - }; + + return new object[0]; } private ContextMenuStrip DesignWaterLevelLocationsContextMenuStrip(DesignWaterLevelLocationsContext nodeData, object parentData, TreeViewControl treeViewControl) @@ -1510,11 +1511,11 @@ { HydraulicBoundaryDatabase hydraulicBoundaryDatabase = assessmentSection.HydraulicBoundaryDatabase; - bool isHydraulicBoundaryDatabaseSet = hydraulicBoundaryDatabase != null; - bool isClearConfirmationRequired = isHydraulicBoundaryDatabaseSet && !HydraulicBoundaryDatabaseHelper.HaveEqualVersion(hydraulicBoundaryDatabase, databaseFile); + bool isHydraulicBoundaryDatabaseCoupled = hydraulicBoundaryDatabase.IsCoupled(); + bool isClearConfirmationRequired = isHydraulicBoundaryDatabaseCoupled && !HydraulicBoundaryDatabaseHelper.HaveEqualVersion(hydraulicBoundaryDatabase, databaseFile); bool isClearConfirmationGiven = isClearConfirmationRequired && IsClearCalculationConfirmationGiven(); - if (isHydraulicBoundaryDatabaseSet && isClearConfirmationRequired && !isClearConfirmationGiven) + if (isHydraulicBoundaryDatabaseCoupled && isClearConfirmationRequired && !isClearConfirmationGiven) { return; } Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/TreeNodeInfos/HydraulicBoundaryDatabaseContextTreeNodeInfoTest.cs =================================================================== diff -u -r9cf89e3f60d17b61c5ef1ba1c4c7e18ca0c9b2f4 -rd5a5129cfad8fd5ef146976fc6601db731a43af3 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/TreeNodeInfos/HydraulicBoundaryDatabaseContextTreeNodeInfoTest.cs (.../HydraulicBoundaryDatabaseContextTreeNodeInfoTest.cs) (revision 9cf89e3f60d17b61c5ef1ba1c4c7e18ca0c9b2f4) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/TreeNodeInfos/HydraulicBoundaryDatabaseContextTreeNodeInfoTest.cs (.../HydraulicBoundaryDatabaseContextTreeNodeInfoTest.cs) (revision d5a5129cfad8fd5ef146976fc6601db731a43af3) @@ -40,7 +40,6 @@ using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.IO.FileImporters; -using Ringtoets.Common.IO.HydraRing; using Ringtoets.GrassCoverErosionOutwards.Data; using Ringtoets.Integration.Data; using Ringtoets.Integration.Forms.PresentationObjects; @@ -53,13 +52,13 @@ [TestFixture] public class HydraulicBoundaryDatabaseContextTreeNodeInfoTest : NUnitFormTest { - private MockRepository mocks; + private const int contextMenuImportHydraulicBoundaryDatabaseIndex = 0; private readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Forms, "HydraulicBoundaryDatabase"); private readonly string testDataPathNoHlcd = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Forms, "HydraulicBoundaryDatabaseNoHLCD"); - private readonly string testDataPathNoSettings = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Forms, "HydraulicBoundaryDatabaseNoSettings"); - private readonly string testDataPathInvalidSettings = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Forms, "HydraulicBoundaryDatabaseSettingsInvalid"); + private MockRepository mocks; + [Test] public void Initialized_Always_ExpectedPropertiesSet() { @@ -170,7 +169,7 @@ } [Test] - public void ForeColor_ContextHasNoReferenceLine_ReturnDisabledColor() + public void ForeColor_HydraulicBoundaryDatabaseNotCoupled_ReturnDisabledColor() { // Setup var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); @@ -179,6 +178,7 @@ using (var plugin = new RingtoetsPlugin()) { TreeNodeInfo info = GetInfo(plugin); + // Call Color color = info.ForeColor(hydraulicBoundaryDatabaseContext); @@ -188,14 +188,16 @@ } [Test] - public void ForeColor_ContextHasReferenceLineData_ReturnControlText() + public void ForeColor_HydraulicBoundaryDatabaseCoupled_ReturnEnabledColor() { // Setup var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) { - HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase() + HydraulicBoundaryDatabase = + { + FilePath = "databaseFile" + } }; - var hydraulicBoundaryDatabaseContext = new HydraulicBoundaryDatabaseContext(assessmentSection); using (var plugin = new RingtoetsPlugin()) @@ -211,7 +213,7 @@ } [Test] - public void ChildNodeObjects_NoHydraulicBoundaryDatabaseSet_ReturnsEmpty() + public void ChildNodeObjects_HydraulicBoundaryDatabaseNotCoupled_ReturnsEmpty() { // Setup var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); @@ -230,14 +232,16 @@ } [Test] - public void ChildNodeObjects_HydraulicBoundaryDatabaseSet_ReturnsChildrenOfData() + public void ChildNodeObjects_HydraulicBoundaryDatabaseCoupled_ReturnsChildrenOfData() { // Setup var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) { - HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase() + HydraulicBoundaryDatabase = + { + FilePath = "databaseFile" + } }; - var hydraulicBoundaryDatabaseContext = new HydraulicBoundaryDatabaseContext(assessmentSection); using (var plugin = new RingtoetsPlugin()) @@ -259,7 +263,7 @@ [Test] [Apartment(ApartmentState.STA)] - public void GivenNoFilePathIsSet_WhenOpeningValidFileFromContextMenu_ThenPathWillBeSetAndNotifiesObserverAndLogMessageAdded() + public void GivenNoDatabaseCoupled_WhenOpeningValidFileFromContextMenu_ThenDatabaseCoupledObserversNotifiedAndLogMessagesAdded() { // Given var assessmentSectionObserver = mocks.StrictMock(); @@ -270,8 +274,6 @@ string testFile = Path.Combine(testDataPath, "HRD dutch coast south.sqlite"); - const int contextMenuImportHydraulicBoundaryDatabaseIndex = 0; - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); var hydraulicBoundaryDatabaseContext = new HydraulicBoundaryDatabaseContext(assessmentSection); @@ -315,7 +317,10 @@ Assert.AreEqual($"Database op pad '{testFile}' gekoppeld.", msgs[1]); }); - Assert.IsNotNull(assessmentSection.HydraulicBoundaryDatabase); + Assert.IsTrue(assessmentSection.HydraulicBoundaryDatabase.IsCoupled()); + Assert.AreEqual(testFile, assessmentSection.HydraulicBoundaryDatabase.FilePath); + Assert.AreEqual("Dutch coast South19-11-2015 12:0013", assessmentSection.HydraulicBoundaryDatabase.Version); + CollectionAssert.IsNotEmpty(assessmentSection.HydraulicBoundaryDatabase.Locations); CollectionAssert.IsNotEmpty(assessmentSection.GrassCoverErosionOutwards.HydraulicBoundaryLocations); } } @@ -324,13 +329,14 @@ [Test] [Apartment(ApartmentState.STA)] - public void GivenNoFilePathIsSet_WhenOpeneningInvalidFileFromContextMenu_ThenPathWillNotBeSetAndLogMessageAdded() + public void GivenNoDatabaseCoupled_WhenOpeningInvalidFileFromContextMenu_ThenNoDatabaseCoupledNoObserversNotifiedAndLogMessagesAdded() { // Given + var assessmentSectionObserver = mocks.StrictMock(); + var grassCoverErosionOutwardsLocationsObserver = mocks.StrictMock(); + string testFile = Path.Combine(testDataPath, "empty.sqlite"); - const int contextMenuImportHydraulicBoundaryDatabaseIndex = 0; - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); var hydraulicBoundaryDatabaseContext = new HydraulicBoundaryDatabaseContext(assessmentSection); @@ -346,6 +352,9 @@ gui.Stub(cmp => cmp.Get(hydraulicBoundaryDatabaseContext, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); mocks.ReplayAll(); + assessmentSection.Attach(assessmentSectionObserver); + assessmentSection.GrassCoverErosionOutwards.HydraulicBoundaryLocations.Attach(grassCoverErosionOutwardsLocationsObserver); + DialogBoxHandler = (name, wnd) => { var tester = new OpenFileDialogTester(wnd); @@ -364,21 +373,22 @@ string expectedMessage = $"Fout bij het lezen van bestand '{testFile}': kon geen locaties verkrijgen van de database."; TestHelper.AssertLogMessageIsGenerated(action, expectedMessage); - Assert.IsNull(assessmentSection.HydraulicBoundaryDatabase); + Assert.IsFalse(assessmentSection.HydraulicBoundaryDatabase.IsCoupled()); } } mocks.VerifyAll(); } [Test] [Apartment(ApartmentState.STA)] - public void GivenNoFilePathIsSet_WhenOpeneningValidFileWithoutHLCDFromContextMenu_ThenPathWillNotBeSetAndLogMessageAdded() + public void GivenNoDatabaseCoupled_WhenOpeningValidFileWithoutHLCDFromContextMenu_ThenNoDatabaseCoupledNoObserversNotifiedAndLogMessagesAdded() { // Given + var assessmentSectionObserver = mocks.StrictMock(); + var grassCoverErosionOutwardsLocationsObserver = mocks.StrictMock(); + string testFile = Path.Combine(testDataPathNoHlcd, "HRD dutch coast south.sqlite"); - const int contextMenuImportHydraulicBoundaryDatabaseIndex = 0; - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); var hydraulicBoundaryDatabaseContext = new HydraulicBoundaryDatabaseContext(assessmentSection); @@ -394,6 +404,9 @@ gui.Stub(cmp => cmp.Get(hydraulicBoundaryDatabaseContext, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); mocks.ReplayAll(); + assessmentSection.Attach(assessmentSectionObserver); + assessmentSection.GrassCoverErosionOutwards.HydraulicBoundaryLocations.Attach(grassCoverErosionOutwardsLocationsObserver); + DialogBoxHandler = (name, wnd) => { var tester = new OpenFileDialogTester(wnd); @@ -413,70 +426,20 @@ $"Fout bij het lezen van bestand '{testFile}': het bijbehorende HLCD bestand is niet gevonden in dezelfde map als het HRD bestand."; TestHelper.AssertLogMessageIsGenerated(action, expectedMessage); - Assert.IsNull(assessmentSection.HydraulicBoundaryDatabase); + Assert.IsFalse(assessmentSection.HydraulicBoundaryDatabase.IsCoupled()); } } mocks.VerifyAll(); } [Test] [Apartment(ApartmentState.STA)] - public void GivenNoFilePathIsSet_WhenOpeneningValidFileWithoutSettingsDatabaseFromContextMenu_ThenPathWillNotBeSetAndLogMessageAdded() + public void GivenDatabaseCoupled_WhenOpeningSameFileFromContextMenu_ThenCalculationsWillNotBeClearedAndNoObserversNotified() { // Given - string testFile = Path.Combine(testDataPathNoSettings, "HRD dutch coast south.sqlite"); - - const int contextMenuImportHydraulicBoundaryDatabaseIndex = 0; - - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); - var hydraulicBoundaryDatabaseContext = new HydraulicBoundaryDatabaseContext(assessmentSection); - - using (var treeViewControl = new TreeViewControl()) - using (var plugin = new RingtoetsPlugin()) - { - var mainWindow = mocks.Stub(); - - var gui = mocks.Stub(); - gui.Stub(g => g.MainWindow).Return(mainWindow); - gui.Stub(g => g.ProjectOpened += null).IgnoreArguments(); - gui.Stub(g => g.ProjectOpened -= null).IgnoreArguments(); - gui.Stub(cmp => cmp.Get(hydraulicBoundaryDatabaseContext, treeViewControl)).Return(new CustomItemsOnlyContextMenuBuilder()); - mocks.ReplayAll(); - - DialogBoxHandler = (name, wnd) => - { - var tester = new OpenFileDialogTester(wnd); - tester.OpenFile(testFile); - }; - - TreeNodeInfo info = GetInfo(plugin); - plugin.Gui = gui; - - using (ContextMenuStrip contextMenuStrip = info.ContextMenuStrip(hydraulicBoundaryDatabaseContext, null, treeViewControl)) - { - // When - Action action = () => contextMenuStrip.Items[contextMenuImportHydraulicBoundaryDatabaseIndex].PerformClick(); - - // Then - string expectedMessage = - $"Fout bij het lezen van bestand '{testFile}': kon het rekeninstellingen bestand niet openen. Fout bij het lezen van bestand '{HydraulicBoundaryDatabaseHelper.GetHydraulicBoundarySettingsDatabase(testFile)}': het bestand bestaat niet."; - TestHelper.AssertLogMessageIsGenerated(action, expectedMessage); - - Assert.IsNull(assessmentSection.HydraulicBoundaryDatabase); - } - } - mocks.VerifyAll(); - } - - [Test] - [Apartment(ApartmentState.STA)] - public void GivenFilePathIsSet_WhenOpeningSameFileFromContextMenu_ThenCalculationsWillNotBeClearedAndNoNotifyObservers() - { - // Given string validFilePath = Path.Combine(testDataPath, "HRD dutch coast south.sqlite"); var assessmentObserver = mocks.StrictMock(); var grassCoverErosionOutwardsLocationsObserver = mocks.StrictMock(); - const int contextMenuImportHydraulicBoundaryDatabaseIndex = 0; var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); using (var importer = new HydraulicBoundaryDatabaseImporter()) @@ -543,7 +506,7 @@ string expectedMessage = $"Database op pad '{validFilePath}' gekoppeld."; TestHelper.AssertLogMessageIsGenerated(action, expectedMessage); - Assert.IsNotNull(assessmentSection.HydraulicBoundaryDatabase); + Assert.IsTrue(assessmentSection.HydraulicBoundaryDatabase.IsCoupled()); Assert.AreEqual(currentFilePath, assessmentSection.HydraulicBoundaryDatabase.FilePath); Assert.AreEqual(currentVersion, assessmentSection.HydraulicBoundaryDatabase.Version); CollectionAssert.AreEqual(currentLocations, assessmentSection.HydraulicBoundaryDatabase.Locations);