Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs =================================================================== diff -u -rd25ce0c7ce3093fe47efe020396f83d5abd69ec0 -rde341525d8b66d913e86cba881c39849e79fafc6 --- Riskeer/Integration/src/Riskeer.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs (.../AssessmentSectionMergeHandler.cs) (revision d25ce0c7ce3093fe47efe020396f83d5abd69ec0) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/Merge/AssessmentSectionMergeHandler.cs (.../AssessmentSectionMergeHandler.cs) (revision de341525d8b66d913e86cba881c39849e79fafc6) @@ -118,8 +118,14 @@ var changedObjects = new List(); changedObjects.AddRange(MergeProbabilities(targetProbabilities, probabilitiesToMerge)); - MergeUniqueProbabilities(targetProbabilities, () => sourceProbabilities.Except(probabilitiesToMerge), hydraulicBoundaryLocations); + IEnumerable uniqueProbabilities = sourceProbabilities.Except(probabilitiesToMerge); + if (uniqueProbabilities.Any()) + { + MergeUniqueProbabilities(targetProbabilities, uniqueProbabilities, hydraulicBoundaryLocations); + changedObjects.Add(targetProbabilities); + } + return changedObjects; } @@ -141,15 +147,18 @@ } private static void MergeUniqueProbabilities(ObservableList targetProbabilities, - Func> getTargetProbabilities, + IEnumerable uniqueSourceProbabilities, IEnumerable hydraulicBoundaryLocations) { - foreach (HydraulicBoundaryLocationCalculationsForTargetProbability targetProbability in getTargetProbabilities()) + foreach (HydraulicBoundaryLocationCalculationsForTargetProbability sourceProbability in uniqueSourceProbabilities) { - var newTargetProbability = new HydraulicBoundaryLocationCalculationsForTargetProbability(targetProbability.TargetProbability); + var newTargetProbability = new HydraulicBoundaryLocationCalculationsForTargetProbability + { + TargetProbability = sourceProbability.TargetProbability + }; newTargetProbability.HydraulicBoundaryLocationCalculations.AddRange( - targetProbability.HydraulicBoundaryLocationCalculations + sourceProbability.HydraulicBoundaryLocationCalculations .Select(calculation => new HydraulicBoundaryLocationCalculation(GetHydraulicBoundaryLocation( calculation.HydraulicBoundaryLocation, hydraulicBoundaryLocations))) .ToArray()); Index: Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Merge/AssessmentSectionMergeHandlerTest.cs =================================================================== diff -u -rfcafbe8aed9f7c67973ad1ae13bf6736dbf53ac5 -rde341525d8b66d913e86cba881c39849e79fafc6 --- Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Merge/AssessmentSectionMergeHandlerTest.cs (.../AssessmentSectionMergeHandlerTest.cs) (revision fcafbe8aed9f7c67973ad1ae13bf6736dbf53ac5) +++ Riskeer/Integration/test/Riskeer.Integration.Plugin.Test/Merge/AssessmentSectionMergeHandlerTest.cs (.../AssessmentSectionMergeHandlerTest.cs) (revision de341525d8b66d913e86cba881c39849e79fafc6) @@ -367,9 +367,12 @@ } [Test] - public void GivenEqualUserDefinedTargetProbabilities_WhenMerging_CalculationsNotMergedObserversNotNotified() + public void GivenEqualUserDefinedTargetProbabilities_WhenMerging_ThenCalculationsMergedObserversNotNotified() { // Given + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + mocks.ReplayAll(); var handler = new AssessmentSectionMergeHandler(); var targetLocations = new[] @@ -387,6 +390,9 @@ AssessmentSection targetAssessmentSection = CreateAssessmentSection(targetLocations); AssessmentSection sourceAssessmentSection = CreateAssessmentSection(sourceLocations); + targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities.Attach(observer); + targetAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities.Attach(observer); + // When handler.PerformMerge(targetAssessmentSection, new AssessmentSectionMergeData( sourceAssessmentSection, @@ -404,25 +410,24 @@ })); // Then - foreach (HydraulicBoundaryLocationCalculationsForTargetProbability tp in sourceAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities) - { - AssertHydraulicBoundaryCalculations(tp.HydraulicBoundaryLocationCalculations, targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities - .First(c => c.TargetProbability.Equals(tp.TargetProbability)) - .HydraulicBoundaryLocationCalculations, targetLocations); - } + ObservableList waterLevelTargetProbabilities = targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities; + ObservableList waveHeightTargetProbabilities = targetAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities; + Assert.AreEqual(1, waterLevelTargetProbabilities.Count); + Assert.AreEqual(1, waveHeightTargetProbabilities.Count); - foreach (HydraulicBoundaryLocationCalculationsForTargetProbability tp in sourceAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities) - { - AssertHydraulicBoundaryCalculations(tp.HydraulicBoundaryLocationCalculations, targetAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities - .First(c => c.TargetProbability.Equals(tp.TargetProbability)) - .HydraulicBoundaryLocationCalculations, targetLocations); - } + Assert.AreEqual(1, waterLevelTargetProbabilities.Count(c => c.TargetProbability.Equals(0.1))); + Assert.AreEqual(1, waveHeightTargetProbabilities.Count(c => c.TargetProbability.Equals(0.1))); + mocks.VerifyAll(); } [Test] - public void GivenDifferentUserDefinedTargetProbabilities_WhenMerging_ThenCalculationsMerged() + public void GivenDifferentUserDefinedTargetProbabilities_WhenMerging_ThenCalculationsMergedAndObserversNotified() { // Given + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()).Repeat.Twice(); + mocks.ReplayAll(); var handler = new AssessmentSectionMergeHandler(); var targetLocations = new[] @@ -440,15 +445,12 @@ AssessmentSection targetAssessmentSection = CreateAssessmentSection(targetLocations); AssessmentSection sourceAssessmentSection = CreateAssessmentSection(sourceLocations); + targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities.Attach(observer); + targetAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities.Attach(observer); + sourceAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities[0].TargetProbability = 0.01; sourceAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities[0].TargetProbability = 0.01; - // Precondition - ObservableList waterLevelTargetProbabilities = targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities; - ObservableList waveHeightTargetProbabilities = targetAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities; - Assert.AreEqual(0, waterLevelTargetProbabilities.Count(c => c.TargetProbability.Equals(0.01))); - Assert.AreEqual(0, waveHeightTargetProbabilities.Count(c => c.TargetProbability.Equals(0.01))); - // When handler.PerformMerge(targetAssessmentSection, new AssessmentSectionMergeData( sourceAssessmentSection, @@ -466,6 +468,8 @@ })); // Then + ObservableList waterLevelTargetProbabilities = targetAssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities; + ObservableList waveHeightTargetProbabilities = targetAssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities; Assert.AreEqual(2, waterLevelTargetProbabilities.Count); Assert.AreEqual(2, waveHeightTargetProbabilities.Count); @@ -474,38 +478,21 @@ Assert.AreEqual(1, waterLevelTargetProbabilities.Count(c => c.TargetProbability.Equals(0.1))); Assert.AreEqual(1, waveHeightTargetProbabilities.Count(c => c.TargetProbability.Equals(0.1))); + mocks.VerifyAll(); } - private static void AssertHydraulicBoundaryCalculations(IEnumerable sourceCalculations, - IEnumerable targetCalculations, - IEnumerable targetLocations) - { - Assert.AreEqual(sourceCalculations.Count(), targetLocations.Count()); - Assert.AreEqual(targetCalculations.Count(), sourceCalculations.Count()); - - for (var i = 0; i < sourceCalculations.Count(); i++) - { - HydraulicBoundaryLocationCalculation sourceCalculation = sourceCalculations.ElementAt(i); - HydraulicBoundaryLocationCalculation targetCalculation = targetCalculations.ElementAt(i); - Assert.AreEqual(sourceCalculation.InputParameters.ShouldIllustrationPointsBeCalculated, - targetCalculation.InputParameters.ShouldIllustrationPointsBeCalculated); - Assert.AreSame(sourceCalculation.Output, targetCalculation.Output); - Assert.AreSame(targetLocations.ElementAt(i), targetCalculation.HydraulicBoundaryLocation); - } - } - private static AssessmentSection CreateAssessmentSection(HydraulicBoundaryLocation[] locations) { var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); - assessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities.Add(new HydraulicBoundaryLocationCalculationsForTargetProbability(0.1) + assessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities.Add(new HydraulicBoundaryLocationCalculationsForTargetProbability { HydraulicBoundaryLocationCalculations = { new HydraulicBoundaryLocationCalculation(locations[0]) } }); - assessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities.Add(new HydraulicBoundaryLocationCalculationsForTargetProbability(0.1) + assessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities.Add(new HydraulicBoundaryLocationCalculationsForTargetProbability { HydraulicBoundaryLocationCalculations = {