Index: Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Data/WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.cs
===================================================================
diff -u -r85312e2d99d2624f57cbd1ce49c2a3122b00e5cf -ra0fa069ee0cffe79be5b43e56fc515472e2e8e24
--- Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Data/WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.cs (.../WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.cs) (revision 85312e2d99d2624f57cbd1ce49c2a3122b00e5cf)
+++ Ringtoets/WaveImpactAsphaltCover/src/Ringtoets.WaveImpactAsphaltCover.Data/WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.cs (.../WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.cs) (revision a0fa069ee0cffe79be5b43e56fc515472e2e8e24)
@@ -20,6 +20,7 @@
// All rights reserved.
using System;
+using System.Collections.Generic;
using Ringtoets.AssemblyTool.Data;
using Ringtoets.AssemblyTool.KernelWrapper.Calculators;
using Ringtoets.AssemblyTool.KernelWrapper.Calculators.Assembly;
@@ -168,5 +169,56 @@
throw new AssemblyException(e.Message, e);
}
}
+
+ ///
+ /// Assembles the failure mechanism assembly.
+ ///
+ /// The failure mechanism section results to
+ /// get the assembly for.
+ /// Indicator whether the manual assembly should be used in the assembly.
+ /// A .
+ /// Thrown when
+ /// is null.
+ /// Thrown when the
+ /// could not be created.
+ public static FailureMechanismAssemblyCategoryGroup AssembleFailureMechanism(
+ IEnumerable failureMechanismSectionResults,
+ bool considerManualAssembly = true)
+ {
+ if (failureMechanismSectionResults == null)
+ {
+ throw new ArgumentNullException(nameof(failureMechanismSectionResults));
+ }
+
+ IAssemblyToolCalculatorFactory calculatorFactory = AssemblyToolCalculatorFactory.Instance;
+ IFailureMechanismSectionAssemblyCalculator sectionCalculator =
+ calculatorFactory.CreateFailureMechanismSectionAssemblyCalculator(AssemblyToolKernelFactory.Instance);
+
+ var sectionAssemblies = new List();
+
+ try
+ {
+ foreach (WaveImpactAsphaltCoverFailureMechanismSectionResult sectionResult in failureMechanismSectionResults)
+ {
+ if (sectionResult.UseManualAssemblyCategoryGroup && considerManualAssembly)
+ {
+ sectionAssemblies.Add(sectionCalculator.AssembleTailorMadeAssessment(sectionResult.ManualAssemblyCategoryGroup));
+ }
+ else
+ {
+ sectionAssemblies.Add(AssembleCombinedAssessment(sectionResult));
+ }
+ }
+
+ IFailureMechanismAssemblyCalculator calculator =
+ calculatorFactory.CreateFailureMechanismAssemblyCalculator(AssemblyToolKernelFactory.Instance);
+
+ return calculator.AssembleFailureMechanism(sectionAssemblies);
+ }
+ catch (Exception e) when (e is FailureMechanismAssemblyCalculatorException || e is FailureMechanismSectionAssemblyCalculatorException)
+ {
+ throw new AssemblyException(e.Message, e);
+ }
+ }
}
}
\ No newline at end of file
Index: Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Data.Test/WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactoryTest.cs
===================================================================
diff -u -rdfe89063627bf9208166e87a3da54fbbaeb9bda0 -ra0fa069ee0cffe79be5b43e56fc515472e2e8e24
--- Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Data.Test/WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactoryTest.cs (.../WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactoryTest.cs) (revision dfe89063627bf9208166e87a3da54fbbaeb9bda0)
+++ Ringtoets/WaveImpactAsphaltCover/test/Ringtoets.WaveImpactAsphaltCover.Data.Test/WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactoryTest.cs (.../WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactoryTest.cs) (revision a0fa069ee0cffe79be5b43e56fc515472e2e8e24)
@@ -20,6 +20,7 @@
// All rights reserved.
using System;
+using System.Linq;
using Core.Common.TestUtil;
using NUnit.Framework;
using Ringtoets.AssemblyTool.Data;
@@ -387,5 +388,166 @@
}
#endregion
+
+ #region Failure Mechanism Assembly
+
+ [Test]
+ public void AssembleFailureMechanism_FailureMechanismSectionResultsNull_ThrowsArgumentNullException()
+ {
+ // Call
+ TestDelegate call = () => WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.AssembleFailureMechanism(null);
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Assert.AreEqual("failureMechanismSectionResults", exception.ParamName);
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_WithoutManualInput_SetsInputOnCalculator()
+ {
+ // Setup
+ var sectionResults = new[]
+ {
+ new WaveImpactAsphaltCoverFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection())
+ };
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismAssemblyCalculator;
+
+ // Call
+ WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.AssembleFailureMechanism(sectionResults);
+
+ // Assert
+ FailureMechanismSectionAssemblyCategoryGroup assemblyCategory =
+ WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.AssembleCombinedAssessment(sectionResults.Single());
+ Assert.AreEqual(assemblyCategory, calculator.FailureMechanismSectionCategories.Single());
+ }
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_WithManualInputConsiderManualAssemblyTrue_SetsInputOnCalculator()
+ {
+ // Setup
+ var sectionResults = new[]
+ {
+ new WaveImpactAsphaltCoverFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection())
+ {
+ UseManualAssemblyCategoryGroup = true,
+ ManualAssemblyCategoryGroup = new Random(39).NextEnumValue()
+ }
+ };
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismAssemblyCalculator;
+
+ // Call
+ WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.AssembleFailureMechanism(sectionResults);
+
+ // Assert
+ FailureMechanismSectionAssemblyCategoryGroup assemblyCategory =
+ WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.AssembleTailorMadeAssessment(sectionResults.Single());
+ Assert.AreEqual(assemblyCategory, calculator.FailureMechanismSectionCategories.Single());
+ }
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_WithManualInputConsiderManualAssemblyFalse_SetsInputOnCalculator()
+ {
+ // Setup
+ var sectionResults = new[]
+ {
+ new WaveImpactAsphaltCoverFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection())
+ {
+ UseManualAssemblyCategoryGroup = true,
+ ManualAssemblyCategoryGroup = new Random(39).NextEnumValue()
+ }
+ };
+
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismAssemblyCalculator;
+
+ // Call
+ WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.AssembleFailureMechanism(sectionResults, false);
+
+ // Assert
+ FailureMechanismSectionAssemblyCategoryGroup assemblyCategory =
+ WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.AssembleCombinedAssessment(sectionResults.Single());
+ Assert.AreEqual(assemblyCategory, calculator.FailureMechanismSectionCategories.Single());
+ }
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_AssemblyRan_ReturnsOutput()
+ {
+ // Setup
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismAssemblyCalculator;
+
+ // Call
+ FailureMechanismAssemblyCategoryGroup actualOutput =
+ WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.AssembleFailureMechanism(
+ Enumerable.Empty());
+
+ // Assert
+ Assert.AreEqual(calculator.FailureMechanismAssemblyCategoryGroupOutput, actualOutput);
+ }
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_FailureMechanismCalculatorThrowsException_ThrowsAssemblyException()
+ {
+ // Setup
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorfactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedFailureMechanismAssemblyCalculator;
+ calculator.ThrowExceptionOnCalculate = true;
+
+ // Call
+ TestDelegate call = () => WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.AssembleFailureMechanism(
+ Enumerable.Empty());
+
+ // Assert
+ var exception = Assert.Throws(call);
+ Exception innerException = exception.InnerException;
+ Assert.IsInstanceOf(innerException);
+ Assert.AreEqual(innerException.Message, exception.Message);
+ }
+ }
+
+ [Test]
+ public void AssembleFailureMechanism_FailureMechanismSectionCalculatorThrowsException_ThrowsAssemblyException()
+ {
+ // Setup
+ using (new AssemblyToolCalculatorFactoryConfig())
+ {
+ var calculatorfactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance;
+ FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedFailureMechanismSectionAssemblyCalculator;
+ calculator.ThrowExceptionOnCalculateCombinedAssembly = true;
+
+ // Call
+ TestDelegate call = () => WaveImpactAsphaltCoverFailureMechanismSectionResultAssemblyFactory.AssembleFailureMechanism(
+ new[]
+ {
+ new WaveImpactAsphaltCoverFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection())
+ });
+
+ // 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