Index: Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Service/MacroStabilityInwardsDataSynchronizationService.cs =================================================================== diff -u -r47fed94b289fbce64ac022db30d9a80273d496ff -reabeca6ae27b831af6a7969be3a966369699174b --- Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Service/MacroStabilityInwardsDataSynchronizationService.cs (.../MacroStabilityInwardsDataSynchronizationService.cs) (revision 47fed94b289fbce64ac022db30d9a80273d496ff) +++ Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Service/MacroStabilityInwardsDataSynchronizationService.cs (.../MacroStabilityInwardsDataSynchronizationService.cs) (revision eabeca6ae27b831af6a7969be3a966369699174b) @@ -86,10 +86,16 @@ throw new ArgumentNullException(nameof(hydraulicBoundaryLocations)); } - var affectedItems = new List(); - foreach (MacroStabilityInwardsCalculation calculation in failureMechanism.Calculations.Cast()) + List affectedItems = failureMechanism.Calculations.Cast() + .Where(c => !c.InputParameters.UseAssessmentLevelManualInput + && hydraulicBoundaryLocations.Contains(c.InputParameters.HydraulicBoundaryLocation)) + .SelectMany(RiskeerCommonDataSynchronizationService.ClearCalculationOutput) + .ToList(); + + foreach (MacroStabilityInwardsCalculation calculation in failureMechanism.Calculations.Cast() + .Where(c => hydraulicBoundaryLocations.Contains( + c.InputParameters.HydraulicBoundaryLocation))) { - affectedItems.AddRange(ClearAllCalculationOutputWithoutManualAssessmentLevel(failureMechanism)); affectedItems.AddRange(RiskeerCommonDataSynchronizationService.ClearHydraulicBoundaryLocation(calculation.InputParameters)); } Index: Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Service.Test/MacroStabilityInwardsDataSynchronizationServiceTest.cs =================================================================== diff -u -r47fed94b289fbce64ac022db30d9a80273d496ff -reabeca6ae27b831af6a7969be3a966369699174b --- Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Service.Test/MacroStabilityInwardsDataSynchronizationServiceTest.cs (.../MacroStabilityInwardsDataSynchronizationServiceTest.cs) (revision 47fed94b289fbce64ac022db30d9a80273d496ff) +++ Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Service.Test/MacroStabilityInwardsDataSynchronizationServiceTest.cs (.../MacroStabilityInwardsDataSynchronizationServiceTest.cs) (revision eabeca6ae27b831af6a7969be3a966369699174b) @@ -26,6 +26,7 @@ using NUnit.Framework; using Riskeer.Common.Data.Calculation; using Riskeer.Common.Data.Hydraulics; +using Riskeer.Common.Data.TestUtil; using Riskeer.Common.Service; using Riskeer.MacroStabilityInwards.Data; using Riskeer.MacroStabilityInwards.Data.SoilProfile; @@ -118,36 +119,55 @@ public void ClearAllCalculationOutputAndHydraulicBoundaryLocations_WithVariousCalculations_ClearsHydraulicBoundaryLocationAndCalculationsAndReturnsAffectedObjects() { // Setup - MacroStabilityInwardsFailureMechanism failureMechanism = MacroStabilityInwardsTestDataGenerator.GetMacroStabilityInwardsFailureMechanismWithAllCalculationConfigurations(); - failureMechanism.CalculationsGroup.Children.Add(new MacroStabilityInwardsCalculationScenario + var failureMechanism = new MacroStabilityInwardsFailureMechanism(); + var hydraulicBoundaryLocation = new TestHydraulicBoundaryLocation(); + MacroStabilityInwardsTestDataGenerator.ConfigureFailureMechanismWithAllCalculationConfigurations(failureMechanism, hydraulicBoundaryLocation); + + failureMechanism.CalculationsGroup.Children.AddRange(new[] { - InputParameters = + new MacroStabilityInwardsCalculationScenario { - UseAssessmentLevelManualInput = true + InputParameters = + { + UseAssessmentLevelManualInput = true + }, + Output = MacroStabilityInwardsOutputTestFactory.CreateOutput() }, - Output = MacroStabilityInwardsOutputTestFactory.CreateOutput() + new MacroStabilityInwardsCalculationScenario + { + InputParameters = + { + UseAssessmentLevelManualInput = false, + HydraulicBoundaryLocation = new TestHydraulicBoundaryLocation() + }, + Output = MacroStabilityInwardsOutputTestFactory.CreateRandomOutput() + } }); - MacroStabilityInwardsCalculation[] calculations = failureMechanism.Calculations - .Cast() + MacroStabilityInwardsCalculation[] calculations = failureMechanism.Calculations.Cast() .ToArray(); - var expectedAffectedItems = new List(); - expectedAffectedItems.AddRange(calculations.Where(c => !c.InputParameters.UseAssessmentLevelManualInput - && c.HasOutput)); + IEnumerable expectedAffectedCalculations = calculations.Where( + c => !c.InputParameters.UseAssessmentLevelManualInput + && c.InputParameters.HydraulicBoundaryLocation == hydraulicBoundaryLocation + && c.HasOutput).ToArray(); + + var expectedAffectedItems = new List(expectedAffectedCalculations); expectedAffectedItems.AddRange(calculations.Select(c => c.InputParameters) - .Where(i => i.HydraulicBoundaryLocation != null)); + .Where(i => i.HydraulicBoundaryLocation == hydraulicBoundaryLocation)); // Call IEnumerable affectedItems = MacroStabilityInwardsDataSynchronizationService.ClearAllCalculationOutputAndHydraulicBoundaryLocations( - failureMechanism, Enumerable.Empty()); + failureMechanism, new[] + { + hydraulicBoundaryLocation + }); // Assert // Note: To make sure the clear is performed regardless of what is done with // the return result, no ToArray() should be called before these assertions: - Assert.IsTrue(calculations.Where(c => !c.InputParameters.UseAssessmentLevelManualInput) - .All(c => c.InputParameters.HydraulicBoundaryLocation == null - && !c.HasOutput)); + Assert.IsTrue(expectedAffectedCalculations.All(c => !c.HasOutput)); + Assert.IsTrue(calculations.All(c => c.InputParameters.HydraulicBoundaryLocation != hydraulicBoundaryLocation)); CollectionAssert.AreEquivalent(expectedAffectedItems, affectedItems); }