Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Data/GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactory.cs =================================================================== diff -u -r6a9db55abb11d74aa021ee32a46a55dc963a58fe -r7fb2c9216edfe52ad09142d2775bc35408f0c445 --- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Data/GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactory.cs (.../GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactory.cs) (revision 6a9db55abb11d74aa021ee32a46a55dc963a58fe) +++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Data/GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactory.cs (.../GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactory.cs) (revision 7fb2c9216edfe52ad09142d2775bc35408f0c445) @@ -64,5 +64,41 @@ throw new AssemblyException(e.Message, e); } } + + /// + /// Assembles the detailed assessment results. + /// + /// The failure mechanism section result to assemble the + /// detailed assembly results for. + /// A based on the . + /// Thrown when + /// is null. + /// Thrown when the + /// could not be created. + public static FailureMechanismSectionAssemblyCategoryGroup AssembleDetailedAssessment( + GrassCoverErosionOutwardsFailureMechanismSectionResult failureMechanismSectionResult) + { + if (failureMechanismSectionResult == null) + { + throw new ArgumentNullException(nameof(failureMechanismSectionResult)); + } + + IAssemblyToolCalculatorFactory calculatorFactory = AssemblyToolCalculatorFactory.Instance; + IFailureMechanismSectionAssemblyCalculator calculator = + calculatorFactory.CreateFailureMechanismSectionAssemblyCalculator(AssemblyToolKernelFactory.Instance); + + try + { + return calculator.AssembleDetailedAssessment(failureMechanismSectionResult.DetailedAssessmentResultForFactorizedSignalingNorm, + failureMechanismSectionResult.DetailedAssessmentResultForSignalingNorm, + failureMechanismSectionResult.DetailedAssessmentResultForMechanismSpecificLowerLimitNorm, + failureMechanismSectionResult.DetailedAssessmentResultForLowerLimitNorm, + failureMechanismSectionResult.DetailedAssessmentResultForFactorizedLowerLimitNorm); + } + catch (FailureMechanismSectionAssemblyCalculatorException e) + { + throw new AssemblyException(e.Message, e); + } + } } } \ No newline at end of file Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Data.Test/GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactoryTest.cs =================================================================== diff -u -r6a9db55abb11d74aa021ee32a46a55dc963a58fe -r7fb2c9216edfe52ad09142d2775bc35408f0c445 --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Data.Test/GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactoryTest.cs (.../GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactoryTest.cs) (revision 6a9db55abb11d74aa021ee32a46a55dc963a58fe) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Data.Test/GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactoryTest.cs (.../GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactoryTest.cs) (revision 7fb2c9216edfe52ad09142d2775bc35408f0c445) @@ -37,6 +37,8 @@ [TestFixture] public class GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactoryTest { + #region Simple Assembly + [Test] public void AssembleSimpleAssessment_FailureMechanismSectionResultNull_ThrowsArgumentNullException() { @@ -116,5 +118,99 @@ Assert.AreEqual(innerException.Message, exception.Message); } } + + #endregion + + #region Detailed Assembly + + [Test] + public void AssembleDetailedAssessment_FailureMechanismSectionResultNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactory.AssembleDetailedAssessment(null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("failureMechanismSectionResult", exception.ParamName); + } + + [Test] + public void AssembleDetailedAssessment_WithSectionResult_SetsInputOnCalculator() + { + // Setup + var random = new Random(21); + FailureMechanismSection failureMechanismSection = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var sectionResult = new GrassCoverErosionOutwardsFailureMechanismSectionResult(failureMechanismSection) + { + DetailedAssessmentResultForFactorizedSignalingNorm = random.NextEnumValue(), + DetailedAssessmentResultForSignalingNorm = random.NextEnumValue(), + DetailedAssessmentResultForMechanismSpecificLowerLimitNorm = random.NextEnumValue(), + DetailedAssessmentResultForLowerLimitNorm = random.NextEnumValue(), + DetailedAssessmentResultForFactorizedLowerLimitNorm = random.NextEnumValue() + }; + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorfactory = (TestAssemblyToolCalculatorFactory)AssemblyToolCalculatorFactory.Instance; + FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedFailureMechanismSectionAssemblyCalculator; + + // Call + GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactory.AssembleDetailedAssessment(sectionResult); + + // Assert + Assert.AreEqual(sectionResult.DetailedAssessmentResultForFactorizedSignalingNorm, calculator.DetailedAssesmentResultForFactorizedSignalingNormInput); + Assert.AreEqual(sectionResult.DetailedAssessmentResultForSignalingNorm, calculator.DetailedAssesmentResultForSignalingNormInput); + Assert.AreEqual(sectionResult.DetailedAssessmentResultForMechanismSpecificLowerLimitNorm, calculator.DetailedAssesmentResultForMechanismSpecificLowerLimitNormInput); + Assert.AreEqual(sectionResult.DetailedAssessmentResultForLowerLimitNorm, calculator.DetailedAssesmentResultForLowerLimitNormInput); + Assert.AreEqual(sectionResult.DetailedAssessmentResultForFactorizedLowerLimitNorm, calculator.DetailedAssesmentResultForFactorizedLowerLimitNormInput); + } + } + + [Test] + public void AssembleDetailedAssessment_AssemblyRan_ReturnsOutput() + { + // Setup + FailureMechanismSection failureMechanismSection = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var sectionResult = new GrassCoverErosionOutwardsFailureMechanismSectionResult(failureMechanismSection); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorfactory = (TestAssemblyToolCalculatorFactory)AssemblyToolCalculatorFactory.Instance; + FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedFailureMechanismSectionAssemblyCalculator; + + // Call + FailureMechanismSectionAssemblyCategoryGroup actualOutput = + GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactory.AssembleDetailedAssessment(sectionResult); + + // Assert + Assert.AreEqual(calculator.DetailedAssessmentAssemblyGroupOutput, actualOutput); + } + } + + [Test] + public void AssembleDetailedAssessment_CalculatorThrowsExceptions_ThrowsAssemblyException() + { + // Setup + FailureMechanismSection failureMechanismSection = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var sectionResult = new GrassCoverErosionOutwardsFailureMechanismSectionResult(failureMechanismSection); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorfactory = (TestAssemblyToolCalculatorFactory)AssemblyToolCalculatorFactory.Instance; + FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedFailureMechanismSectionAssemblyCalculator; + calculator.ThrowExceptionOnCalculate = true; + + // Call + TestDelegate call = () => GrassCoverErosionOutwardsFailureMechanismSectionResultAssemblyFactory.AssembleDetailedAssessment(sectionResult); + + // Assert + var exception = Assert.Throws(call); + Exception innerException = exception.InnerException; + Assert.IsInstanceOf(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + #endregion } } \ No newline at end of file