Index: Riskeer/Integration/src/Riskeer.Integration.Service/RiskeerDataSynchronizationService.cs
===================================================================
diff -u -r9a931d552787ccfbee3455713a17d46e616ebdb2 -r2c97f863718888be8f3b35f4934c0119869b9187
--- Riskeer/Integration/src/Riskeer.Integration.Service/RiskeerDataSynchronizationService.cs (.../RiskeerDataSynchronizationService.cs) (revision 9a931d552787ccfbee3455713a17d46e616ebdb2)
+++ Riskeer/Integration/src/Riskeer.Integration.Service/RiskeerDataSynchronizationService.cs (.../RiskeerDataSynchronizationService.cs) (revision 2c97f863718888be8f3b35f4934c0119869b9187)
@@ -230,6 +230,31 @@
}
///
+ /// Clears the output of all semi probabilistic calculations in the .
+ ///
+ /// The which contains the calculations.
+ /// An of calculations which are affected by clearing the output.
+ /// Thrown when is null.
+ public static IEnumerable ClearAllSemiProbabilisticCalculationOutput(IAssessmentSection assessmentSection)
+ {
+ if (assessmentSection == null)
+ {
+ throw new ArgumentNullException(nameof(assessmentSection));
+ }
+
+ IEnumerable failureMechanisms = assessmentSection.GetFailureMechanisms();
+
+ var changedObservables = new List();
+ changedObservables.AddRange(PipingDataSynchronizationService.ClearAllSemiProbabilisticCalculationOutputWithoutManualAssessmentLevel(
+ failureMechanisms.OfType()
+ .Single()));
+ changedObservables.AddRange(MacroStabilityInwardsDataSynchronizationService.ClearAllCalculationOutputWithoutManualAssessmentLevel(
+ failureMechanisms.OfType()
+ .Single()));
+ return changedObservables;
+ }
+
+ ///
/// Clears the hydraulic boundary location calculation output belonging to the
/// .
///
Index: Riskeer/Integration/test/Riskeer.Integration.Service.Test/RiskeerDataSynchronizationServiceTest.cs
===================================================================
diff -u -r9a931d552787ccfbee3455713a17d46e616ebdb2 -r2c97f863718888be8f3b35f4934c0119869b9187
--- Riskeer/Integration/test/Riskeer.Integration.Service.Test/RiskeerDataSynchronizationServiceTest.cs (.../RiskeerDataSynchronizationServiceTest.cs) (revision 9a931d552787ccfbee3455713a17d46e616ebdb2)
+++ Riskeer/Integration/test/Riskeer.Integration.Service.Test/RiskeerDataSynchronizationServiceTest.cs (.../RiskeerDataSynchronizationServiceTest.cs) (revision 2c97f863718888be8f3b35f4934c0119869b9187)
@@ -46,9 +46,13 @@
using Riskeer.Integration.TestUtil;
using Riskeer.MacroStabilityInwards.Data;
using Riskeer.MacroStabilityInwards.Data.SoilProfile;
+using Riskeer.MacroStabilityInwards.Data.TestUtil;
using Riskeer.MacroStabilityInwards.Primitives;
using Riskeer.Piping.Data;
+using Riskeer.Piping.Data.Probabilistic;
+using Riskeer.Piping.Data.SemiProbabilistic;
using Riskeer.Piping.Data.SoilProfile;
+using Riskeer.Piping.Data.TestUtil;
using Riskeer.Piping.Primitives;
using Riskeer.StabilityPointStructures.Data;
using Riskeer.StabilityStoneCover.Data;
@@ -130,6 +134,104 @@
}
[Test]
+ public void ClearAllSemiProbabilisticCalculationOutput_AssessmentSectionNull_ThrowsArgumentNullException()
+ {
+ // Call
+ void Call() => RiskeerDataSynchronizationService.ClearAllSemiProbabilisticCalculationOutput(null);
+
+ // Assert
+ var exception = Assert.Throws(Call);
+ Assert.AreEqual("assessmentSection", exception.ParamName);
+ }
+
+ [Test]
+ public void ClearAllSemiProbabilisticCalculationOutput_VariousCalculations_ClearsCalculationsOutputAndReturnsAffectedObjects()
+ {
+ // Setup
+ var pipingFailureMechanism = new PipingFailureMechanism();
+ pipingFailureMechanism.CalculationsGroup.Children.AddRange(new IPipingCalculationScenario[]
+ {
+ new SemiProbabilisticPipingCalculationScenario
+ {
+ Output = PipingTestDataGenerator.GetRandomSemiProbabilisticPipingOutput()
+ },
+ new SemiProbabilisticPipingCalculationScenario
+ {
+ InputParameters =
+ {
+ UseAssessmentLevelManualInput = true
+ },
+ Output = PipingTestDataGenerator.GetRandomSemiProbabilisticPipingOutput()
+ },
+ new SemiProbabilisticPipingCalculationScenario(),
+ new ProbabilisticPipingCalculationScenario(),
+ new ProbabilisticPipingCalculationScenario
+ {
+ Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithIllustrationPoints()
+ },
+ new ProbabilisticPipingCalculationScenario
+ {
+ Output = PipingTestDataGenerator.GetRandomProbabilisticPipingOutputWithoutIllustrationPoints()
+ }
+ });
+
+ var macroStabilityInwardsFailureMechanism = new MacroStabilityInwardsFailureMechanism();
+ macroStabilityInwardsFailureMechanism.CalculationsGroup.Children.AddRange(new[]
+ {
+ new MacroStabilityInwardsCalculationScenario(),
+ new MacroStabilityInwardsCalculationScenario
+ {
+ InputParameters =
+ {
+ UseAssessmentLevelManualInput = true
+ },
+ Output = MacroStabilityInwardsOutputTestFactory.CreateOutput()
+ },
+ new MacroStabilityInwardsCalculationScenario
+ {
+ Output = MacroStabilityInwardsOutputTestFactory.CreateOutput()
+ }
+ });
+
+ var mocks = new MockRepository();
+ var assessmentSection = mocks.Stub();
+ assessmentSection.Stub(section => section.GetFailureMechanisms()).Return(new IFailureMechanism[]
+ {
+ pipingFailureMechanism,
+ macroStabilityInwardsFailureMechanism
+ });
+ mocks.ReplayAll();
+
+ MacroStabilityInwardsCalculationScenario[] expectedAffectedMacroStabilityInwardsCalculations = macroStabilityInwardsFailureMechanism.Calculations
+ .OfType()
+ .Where(c => !c.InputParameters.UseAssessmentLevelManualInput && c.HasOutput)
+ .ToArray();
+ SemiProbabilisticPipingCalculationScenario[] expectedAffectedPipingCalculations = pipingFailureMechanism.Calculations
+ .OfType()
+ .Where(c => !c.InputParameters.UseAssessmentLevelManualInput && c.HasOutput)
+ .ToArray();
+
+ // Call
+ IEnumerable affectedItems = RiskeerDataSynchronizationService.ClearAllSemiProbabilisticCalculationOutput(assessmentSection);
+
+ // 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(macroStabilityInwardsFailureMechanism.Calculations
+ .OfType()
+ .Where(c => !c.InputParameters.UseAssessmentLevelManualInput)
+ .All(c => !c.HasOutput));
+ Assert.IsTrue(pipingFailureMechanism.Calculations
+ .OfType()
+ .Where(c => !c.InputParameters.UseAssessmentLevelManualInput)
+ .All(c => !c.HasOutput));
+
+ CollectionAssert.AreEquivalent(expectedAffectedPipingCalculations.Concat(expectedAffectedMacroStabilityInwardsCalculations),
+ affectedItems);
+ mocks.VerifyAll();
+ }
+
+ [Test]
public void ClearAllCalculationOutputAndHydraulicBoundaryLocations_AssessmentSectionNull_ThrowsArgumentNullException()
{
// Call
Index: Riskeer/Piping/test/Riskeer.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs
===================================================================
diff -u -rde851b1488ab6396c74afda4993973752252f0cc -r2c97f863718888be8f3b35f4934c0119869b9187
--- Riskeer/Piping/test/Riskeer.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs (.../PipingDataSynchronizationServiceTest.cs) (revision de851b1488ab6396c74afda4993973752252f0cc)
+++ Riskeer/Piping/test/Riskeer.Piping.Service.Test/PipingDataSynchronizationServiceTest.cs (.../PipingDataSynchronizationServiceTest.cs) (revision 2c97f863718888be8f3b35f4934c0119869b9187)
@@ -168,7 +168,6 @@
// 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(failureMechanism.Calculations
- .OfType>()
.OfType()
.Where(c => !c.InputParameters.UseAssessmentLevelManualInput)
.All(c => !c.HasOutput));