Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Handlers/HydraulicBoundaryDatabaseUpdateHandler.cs =================================================================== diff -u -r13ba68c314fd1024fb88ee0d6da7d4b37465aec9 -r5252ea2d8f1f5e1d5f305f0aadf1ddf1635b84ae --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Handlers/HydraulicBoundaryDatabaseUpdateHandler.cs (.../HydraulicBoundaryDatabaseUpdateHandler.cs) (revision 13ba68c314fd1024fb88ee0d6da7d4b37465aec9) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/Handlers/HydraulicBoundaryDatabaseUpdateHandler.cs (.../HydraulicBoundaryDatabaseUpdateHandler.cs) (revision 5252ea2d8f1f5e1d5f305f0aadf1ddf1635b84ae) @@ -104,22 +104,44 @@ if (hydraulicBoundaryDatabase.FilePath != filePath) { hydraulicBoundaryDatabase.FilePath = filePath; - changedObjects.Add(hydraulicBoundaryDatabase); } } else { hydraulicBoundaryDatabase.FilePath = filePath; hydraulicBoundaryDatabase.Version = readHydraulicBoundaryDatabase.Version; SetLocations(hydraulicBoundaryDatabase, readHydraulicBoundaryDatabase.Locations); - assessmentSection.SetHydraulicBoundaryLocationCalculations(hydraulicBoundaryDatabase.Locations); assessmentSection.GrassCoverErosionOutwards.SetHydraulicBoundaryLocationCalculations(hydraulicBoundaryDatabase.Locations); + + changedObjects.AddRange(GetLocationsAndCalculationsObservables(hydraulicBoundaryDatabase)); } - + return changedObjects; } + private IEnumerable GetLocationsAndCalculationsObservables(HydraulicBoundaryDatabase hydraulicBoundaryDatabase) + { + return new IObservable[] + { + hydraulicBoundaryDatabase.Locations, + assessmentSection.WaterLevelCalculationsForFactorizedSignalingNorm, + assessmentSection.WaterLevelCalculationsForSignalingNorm, + assessmentSection.WaterLevelCalculationsForLowerLimitNorm, + assessmentSection.WaterLevelCalculationsForFactorizedLowerLimitNorm, + assessmentSection.WaveHeightCalculationsForFactorizedSignalingNorm, + assessmentSection.WaveHeightCalculationsForSignalingNorm, + assessmentSection.WaveHeightCalculationsForLowerLimitNorm, + assessmentSection.WaveHeightCalculationsForFactorizedLowerLimitNorm, + assessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificFactorizedSignalingNorm, + assessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificSignalingNorm, + assessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificLowerLimitNorm, + assessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificFactorizedSignalingNorm, + assessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificSignalingNorm, + assessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificLowerLimitNorm + }; + } + private static void SetLocations(HydraulicBoundaryDatabase hydraulicBoundaryDatabase, IEnumerable readLocations) { hydraulicBoundaryDatabase.Locations.Clear(); Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Handlers/HydraulicBoundaryDatabaseUpdateHandlerTest.cs =================================================================== diff -u -r13ba68c314fd1024fb88ee0d6da7d4b37465aec9 -r5252ea2d8f1f5e1d5f305f0aadf1ddf1635b84ae --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Handlers/HydraulicBoundaryDatabaseUpdateHandlerTest.cs (.../HydraulicBoundaryDatabaseUpdateHandlerTest.cs) (revision 13ba68c314fd1024fb88ee0d6da7d4b37465aec9) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Handlers/HydraulicBoundaryDatabaseUpdateHandlerTest.cs (.../HydraulicBoundaryDatabaseUpdateHandlerTest.cs) (revision 5252ea2d8f1f5e1d5f305f0aadf1ddf1635b84ae) @@ -285,18 +285,16 @@ ReadHydraulicLocationConfigurationDatabaseTestFactory.Create(), filePath); // Assert - CollectionAssert.AreEqual(new[] - { - hydraulicBoundaryDatabase - }, changedObjects); + CollectionAssert.IsEmpty(changedObjects); Assert.AreEqual(filePath, hydraulicBoundaryDatabase.FilePath); Assert.AreEqual("version", hydraulicBoundaryDatabase.Version); AssertHydraulicBoundaryLocationsAndCalculations(locations, assessmentSection); } [Test] - public void Update_DatabaseAlreadyLinked_RemovesOldLocationsAndCalculations() + public void Update_DatabaseLinkedAndVersionNotSame_RemovesOldLocationsAndCalculations() { + // Setup const string filePath = "some/file/path"; var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase @@ -350,6 +348,7 @@ [Test] public void Update_DatabaseNotLinked_SetsAllData() { + // Setup const string filePath = "some/file/path"; var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); @@ -373,6 +372,47 @@ AssertHydraulicBoundaryLocationsAndCalculations(hydraulicBoundaryDatabase.Locations, assessmentSection); } + [Test] + [TestCase(true)] + [TestCase(false)] + public void GivenDatabase_WhenUpdatingDataWithNewLocations_ThenChangedObjectsReturned(bool isLinked) + { + // Given + const string filePath = "some/file/path"; + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); + var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); + var handler = new HydraulicBoundaryDatabaseUpdateHandler(assessmentSection); + + // Precondition + Assert.IsFalse(hydraulicBoundaryDatabase.IsLinked()); + + ReadHydraulicBoundaryDatabase readHydraulicBoundaryDatabase = ReadHydraulicBoundaryDatabaseTestFactory.Create(); + + // When + IEnumerable changedObjects = handler.Update(hydraulicBoundaryDatabase, readHydraulicBoundaryDatabase, + ReadHydraulicLocationConfigurationDatabaseTestFactory.Create(), filePath); + + // Then + CollectionAssert.AreEqual(new IObservable[] + { + hydraulicBoundaryDatabase.Locations, + assessmentSection.WaterLevelCalculationsForFactorizedSignalingNorm, + assessmentSection.WaterLevelCalculationsForSignalingNorm, + assessmentSection.WaterLevelCalculationsForLowerLimitNorm, + assessmentSection.WaterLevelCalculationsForFactorizedLowerLimitNorm, + assessmentSection.WaveHeightCalculationsForFactorizedSignalingNorm, + assessmentSection.WaveHeightCalculationsForSignalingNorm, + assessmentSection.WaveHeightCalculationsForLowerLimitNorm, + assessmentSection.WaveHeightCalculationsForFactorizedLowerLimitNorm, + assessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificFactorizedSignalingNorm, + assessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificSignalingNorm, + assessmentSection.GrassCoverErosionOutwards.WaterLevelCalculationsForMechanismSpecificLowerLimitNorm, + assessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificFactorizedSignalingNorm, + assessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificSignalingNorm, + assessmentSection.GrassCoverErosionOutwards.WaveHeightCalculationsForMechanismSpecificLowerLimitNorm + }, changedObjects); + } + private static void AssertHydraulicBoundaryLocationsAndCalculations(IEnumerable locations, AssessmentSection assessmentSection) { GrassCoverErosionOutwardsFailureMechanism grassCoverErosionOutwardsFailureMechanism = assessmentSection.GrassCoverErosionOutwards;