Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsFailureMechanismAssemblyFactory.cs
===================================================================
diff -u -r06800c4b5c53dd8a385a9f15ce44e9c4038a3726 -r72384c81007af620f5ffe1ff845fde748917253c
--- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsFailureMechanismAssemblyFactory.cs (.../GrassCoverErosionInwardsFailureMechanismAssemblyFactory.cs) (revision 06800c4b5c53dd8a385a9f15ce44e9c4038a3726)
+++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Data/GrassCoverErosionInwardsFailureMechanismAssemblyFactory.cs (.../GrassCoverErosionInwardsFailureMechanismAssemblyFactory.cs) (revision 72384c81007af620f5ffe1ff845fde748917253c)
@@ -216,6 +216,51 @@
}
///
+ /// Gets the assembly category group of the given .
+ ///
+ /// The failure mechanism section result to get the assembly category group for.
+ /// The failure mechanism this section belongs to.
+ /// The this section belongs to.
+ /// A .
+ /// Thrown when any parameter is null.
+ /// Thrown when the
+ /// could not be created.
+ public static FailureMechanismSectionAssemblyCategoryGroup GetSectionAssemblyCategoryGroup(GrassCoverErosionInwardsFailureMechanismSectionResult failureMechanismSectionResult,
+ GrassCoverErosionInwardsFailureMechanism failureMechanism,
+ IAssessmentSection assessmentSection)
+ {
+ if (failureMechanismSectionResult == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanismSectionResult));
+ }
+
+ if (failureMechanism == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanism));
+ }
+
+ if (assessmentSection == null)
+ {
+ throw new ArgumentNullException(nameof(assessmentSection));
+ }
+
+ FailureMechanismSectionAssembly sectionAssembly;
+ if (failureMechanismSectionResult.UseManualAssemblyProbability)
+ {
+ sectionAssembly = AssembleManualAssessment(failureMechanismSectionResult,
+ CreateAssemblyCategoriesInput(failureMechanism, assessmentSection));
+ }
+ else
+ {
+ sectionAssembly = AssembleCombinedAssessment(failureMechanismSectionResult,
+ failureMechanism,
+ assessmentSection);
+ }
+
+ return sectionAssembly.Group;
+ }
+
+ ///
/// Assembles the failure mechanism assembly.
///
/// The failure mechanism to assemble for.
Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsFailureMechanismAssemblyFactoryTest.cs
===================================================================
diff -u -r06800c4b5c53dd8a385a9f15ce44e9c4038a3726 -r72384c81007af620f5ffe1ff845fde748917253c
--- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsFailureMechanismAssemblyFactoryTest.cs (.../GrassCoverErosionInwardsFailureMechanismAssemblyFactoryTest.cs) (revision 06800c4b5c53dd8a385a9f15ce44e9c4038a3726)
+++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Data.Test/GrassCoverErosionInwardsFailureMechanismAssemblyFactoryTest.cs (.../GrassCoverErosionInwardsFailureMechanismAssemblyFactoryTest.cs) (revision 72384c81007af620f5ffe1ff845fde748917253c)
@@ -611,6 +611,239 @@
#endregion
+ #region GetSectionAssemblyCategoryGroup
+
+ [Test]
+ public void GetSectionAssemblyCategoryGroup_FailureMechanismSectionResultNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var assessmentSection = mocks.Stub();
+ mocks.ReplayAll();
+
+ // Call
+ TestDelegate call = () => GrassCoverErosionInwardsFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup(
+ null,
+ new GrassCoverErosionInwardsFailureMechanism(),
+ assessmentSection);
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("failureMechanismSectionResult", exception.ParamName);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void GetSectionAssemblyCategoryGroup_FailureMechanismNull_ThrowsArgumentNullException()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var assessmentSection = mocks.Stub();
+ mocks.ReplayAll();
+
+ // Call
+ TestDelegate call = () => GrassCoverErosionInwardsFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup(
+ new GrassCoverErosionInwardsFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection()),
+ null,
+ assessmentSection);
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("failureMechanism", exception.ParamName);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ public void GetSectionAssemblyCategoryGroup_AssessmentSectionNull_ThrowsArgumentNullException()
+ {
+ // Call
+ TestDelegate call = () => GrassCoverErosionInwardsFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup(
+ new GrassCoverErosionInwardsFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection()),
+ new GrassCoverErosionInwardsFailureMechanism(),
+ null);
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("assessmentSection", exception.ParamName);
+ }
+
+ [Test]
+ public void GetSectionAssemblyCategoryGroup_WithoutManualInput_SetsInputOnCalculator()
+ {
+ // Setup
+ var sectionResult = new GrassCoverErosionInwardsFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection());
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism();
+
+ var mocks = new MockRepository();
+ IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks);
+ mocks.ReplayAll();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator;
+
+ // Call
+ GrassCoverErosionInwardsFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup(
+ sectionResult,
+ failureMechanism,
+ assessmentSection);
+
+ // Assert
+ FailureMechanismSectionAssembly expectedSimpleAssembly = GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleSimpleAssessment(
+ sectionResult);
+ FailureMechanismSectionAssembly expectedDetailedAssembly = GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleDetailedAssessment(
+ sectionResult,
+ failureMechanism,
+ assessmentSection);
+ FailureMechanismSectionAssembly expectedTailorMadeAssembly = GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleTailorMadeAssessment(
+ sectionResult,
+ failureMechanism,
+ assessmentSection);
+
+ AssemblyToolTestHelper.AssertAreEqual(expectedSimpleAssembly, calculator.CombinedSimpleAssemblyInput);
+ AssemblyToolTestHelper.AssertAreEqual(expectedDetailedAssembly, calculator.CombinedDetailedAssemblyInput);
+ AssemblyToolTestHelper.AssertAreEqual(expectedTailorMadeAssembly, calculator.CombinedTailorMadeAssemblyInput);
+ mocks.VerifyAll();
+ }
+ }
+
+ [Test]
+ public void GetSectionAssemblyCategoryGroup_WithManualInput_SetsInputOnCalculator()
+ {
+ // Setup
+ var sectionResult = new GrassCoverErosionInwardsFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection());
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism();
+ sectionResult.UseManualAssemblyProbability = true;
+ sectionResult.ManualAssemblyProbability = new Random(39).NextDouble();
+
+ var mocks = new MockRepository();
+ IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks);
+ mocks.ReplayAll();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator;
+
+ // Call
+ GrassCoverErosionInwardsFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup(
+ sectionResult,
+ failureMechanism,
+ assessmentSection);
+
+ // Assert
+ Assert.AreEqual(sectionResult.ManualAssemblyProbability, calculator.ManualAssemblyProbabilityInput);
+ mocks.VerifyAll();
+ }
+ }
+
+ [Test]
+ public void GetSectionAssemblyCategoryGroup_WithoutManualInput_ReturnsOutput()
+ {
+ // Setup
+ var sectionResult = new GrassCoverErosionInwardsFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection());
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism();
+
+ var mocks = new MockRepository();
+ IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks);
+ mocks.ReplayAll();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ // Call
+ FailureMechanismSectionAssemblyCategoryGroup categoryGroup = GrassCoverErosionInwardsFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup(
+ sectionResult,
+ failureMechanism,
+ assessmentSection);
+
+ // Assert
+ FailureMechanismSectionAssembly expectedAssembly = GrassCoverErosionInwardsFailureMechanismAssemblyFactory.AssembleCombinedAssessment(
+ sectionResult,
+ failureMechanism,
+ assessmentSection);
+ Assert.AreEqual(categoryGroup, expectedAssembly.Group);
+ mocks.VerifyAll();
+ }
+ }
+
+ [Test]
+ public void GetSectionAssemblyCategoryGroup_WithManualInput_ReturnsOutput()
+ {
+ // Setup
+ var sectionResult = new GrassCoverErosionInwardsFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection());
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism();
+ sectionResult.UseManualAssemblyProbability = true;
+ sectionResult.ManualAssemblyProbability = new Random(39).NextDouble();
+
+ var mocks = new MockRepository();
+ IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks);
+ mocks.ReplayAll();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator;
+
+ // Call
+ FailureMechanismSectionAssemblyCategoryGroup categoryGroup = GrassCoverErosionInwardsFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup(
+ sectionResult,
+ failureMechanism,
+ assessmentSection);
+
+ // Assert
+ FailureMechanismSectionAssembly expectedAssembly = calculator.AssembleManual(
+ sectionResult.ManualAssemblyProbability,
+ AssemblyCategoriesInputFactory.CreateAssemblyCategoriesInput(0.0, failureMechanism, assessmentSection));
+ Assert.AreEqual(categoryGroup, expectedAssembly.Group);
+ mocks.VerifyAll();
+ }
+ }
+
+ [Test]
+ [TestCase(true)]
+ [TestCase(false)]
+ public void GetSectionAssemblyCategoryGroup_CalculatorThrowsException_ThrowsAssemblyException(bool useManualAssembly)
+ {
+ // Setup
+ var sectionResult = new GrassCoverErosionInwardsFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection());
+ sectionResult.UseManualAssemblyProbability = useManualAssembly;
+ var failureMechanism = new GrassCoverErosionInwardsFailureMechanism();
+
+ var mocks = new MockRepository();
+ IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mocks);
+ mocks.ReplayAll();
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorfactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedFailureMechanismSectionAssemblyCalculator;
+ if (useManualAssembly)
+ {
+ calculator.ThrowExceptionOnCalculate = true;
+ }
+ else
+ {
+ calculator.ThrowExceptionOnCalculateCombinedAssembly = true;
+ }
+
+ // Call
+ TestDelegate call = () => GrassCoverErosionInwardsFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup(
+ sectionResult,
+ failureMechanism,
+ assessmentSection);
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Exception innerException = exception.InnerException;
+ Assert.IsInstanceOf(innerException);
+ Assert.AreEqual(innerException.Message, exception.Message);
+ mocks.VerifyAll();
+ }
+ }
+
+ #endregion
+
#region Failure Mechanism Assembly
[Test]