Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Handlers/HydraulicBoundaryDatabaseUpdateHandler.cs =================================================================== diff -u -rf180e83b542720698d942e71b0919882df3ad82b -rc2c1b22434be9953101f26cc8da90d893c84ca28 --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Handlers/HydraulicBoundaryDatabaseUpdateHandler.cs (.../HydraulicBoundaryDatabaseUpdateHandler.cs) (revision f180e83b542720698d942e71b0919882df3ad82b) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Handlers/HydraulicBoundaryDatabaseUpdateHandler.cs (.../HydraulicBoundaryDatabaseUpdateHandler.cs) (revision c2c1b22434be9953101f26cc8da90d893c84ca28) @@ -23,7 +23,6 @@ using System.Collections.Generic; using System.Windows.Forms; using Core.Common.Base; -using Core.Common.Gui.Commands; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.DuneErosion.Plugin.Handlers; using Ringtoets.HydraRing.IO.HydraulicBoundaryDatabase; @@ -43,6 +42,7 @@ { private readonly AssessmentSection assessmentSection; private readonly IDuneLocationsReplacementHandler duneLocationsReplacementHandler; + private bool updateLocations; /// /// Creates a new instance of . @@ -110,33 +110,38 @@ var changedObjects = new List(); - if (hydraulicBoundaryDatabase.IsLinked() && hydraulicBoundaryDatabase.Version == readHydraulicBoundaryDatabase.Version) + updateLocations = !hydraulicBoundaryDatabase.IsLinked() || hydraulicBoundaryDatabase.Version != readHydraulicBoundaryDatabase.Version; + + if (updateLocations) { - if (hydraulicBoundaryDatabase.FilePath != filePath) - { - hydraulicBoundaryDatabase.FilePath = filePath; - } - } - else - { hydraulicBoundaryDatabase.FilePath = filePath; hydraulicBoundaryDatabase.Version = readHydraulicBoundaryDatabase.Version; SetLocations(hydraulicBoundaryDatabase, readHydraulicBoundaryDatabase.Locations); assessmentSection.SetHydraulicBoundaryLocationCalculations(hydraulicBoundaryDatabase.Locations); assessmentSection.GrassCoverErosionOutwards.SetHydraulicBoundaryLocationCalculations(hydraulicBoundaryDatabase.Locations); - + duneLocationsReplacementHandler.Replace(hydraulicBoundaryDatabase.Locations); changedObjects.AddRange(GetLocationsAndCalculationsObservables(hydraulicBoundaryDatabase)); changedObjects.AddRange(RingtoetsDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations(assessmentSection)); } + else + { + if (hydraulicBoundaryDatabase.FilePath != filePath) + { + hydraulicBoundaryDatabase.FilePath = filePath; + } + } return changedObjects; } public void DoPostUpdateActions() { - duneLocationsReplacementHandler.DoPostReplacementUpdates(); + if (updateLocations) + { + duneLocationsReplacementHandler.DoPostReplacementUpdates(); + } } private IEnumerable GetLocationsAndCalculationsObservables(HydraulicBoundaryDatabase hydraulicBoundaryDatabase) Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Handlers/HydraulicBoundaryDatabaseUpdateHandlerTest.cs =================================================================== diff -u -rf180e83b542720698d942e71b0919882df3ad82b -rc2c1b22434be9953101f26cc8da90d893c84ca28 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Handlers/HydraulicBoundaryDatabaseUpdateHandlerTest.cs (.../HydraulicBoundaryDatabaseUpdateHandlerTest.cs) (revision f180e83b542720698d942e71b0919882df3ad82b) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Handlers/HydraulicBoundaryDatabaseUpdateHandlerTest.cs (.../HydraulicBoundaryDatabaseUpdateHandlerTest.cs) (revision c2c1b22434be9953101f26cc8da90d893c84ca28) @@ -573,18 +573,93 @@ } [Test] - public void DoPostUpdateActions_Always_CallsDuneLocationsReplacementHandler() + public void DoPostUpdateActions_NoUpdateCalled_DoNothing() { // Setup var mocks = new MockRepository(); var duneLocationsReplacementHandler = mocks.StrictMock(); + mocks.ReplayAll(); + + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); + + var handler = new HydraulicBoundaryDatabaseUpdateHandler(assessmentSection, duneLocationsReplacementHandler); + + // Call + handler.DoPostUpdateActions(); + + // Assert + mocks.VerifyAll(); + } + + [Test] + public void DoPostUpdateActions_AfterUpdateCalledAndNoLocationsUpdated_DoNothing() + { + // Setup + var mocks = new MockRepository(); + var duneLocationsReplacementHandler = mocks.StrictMock(); + mocks.ReplayAll(); + + const string filePath = "some/file/path"; + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); + var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase + { + FilePath = filePath, + Version = "version", + Locations = + { + new TestHydraulicBoundaryLocation("old location 1"), + new TestHydraulicBoundaryLocation("old location 2"), + new TestHydraulicBoundaryLocation("old location 3") + } + }; + + var handler = new HydraulicBoundaryDatabaseUpdateHandler(assessmentSection, duneLocationsReplacementHandler); + + IEnumerable changedObjects = handler.Update(hydraulicBoundaryDatabase, ReadHydraulicBoundaryDatabaseTestFactory.Create(), + ReadHydraulicLocationConfigurationDatabaseTestFactory.Create(), filePath); + + // Precondition + CollectionAssert.IsEmpty(changedObjects); + + // Call + handler.DoPostUpdateActions(); + + // Assert + mocks.VerifyAll(); + } + + [Test] + public void DoPostUpdateActions_AfterUpdateCalledAndLocationsUpdated_Perform() + { + // Setup + var mocks = new MockRepository(); + var duneLocationsReplacementHandler = mocks.StrictMock(); + duneLocationsReplacementHandler.Expect(h => h.Replace(null)).IgnoreArguments(); duneLocationsReplacementHandler.Expect(h => h.DoPostReplacementUpdates()); mocks.ReplayAll(); - AssessmentSection assessmentSection = TestDataGenerator.GetAssessmentSectionWithAllCalculationConfigurations(); + const string filePath = "old/file/path"; + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); + var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase + { + FilePath = filePath, + Version = "1", + Locations = + { + new TestHydraulicBoundaryLocation("old location 1"), + new TestHydraulicBoundaryLocation("old location 2"), + new TestHydraulicBoundaryLocation("old location 3") + } + }; var handler = new HydraulicBoundaryDatabaseUpdateHandler(assessmentSection, duneLocationsReplacementHandler); + IEnumerable changedObjects = handler.Update(hydraulicBoundaryDatabase, ReadHydraulicBoundaryDatabaseTestFactory.Create(), + ReadHydraulicLocationConfigurationDatabaseTestFactory.Create(), filePath); + + // Precondition + CollectionAssert.IsNotEmpty(changedObjects); + // Call handler.DoPostUpdateActions();