Index: Ringtoets/Integration/src/Ringtoets.Integration.Data/AssessmentSectionAssemblyFactory.cs =================================================================== diff -u -r3d70779c4b1aff2482254bad30078cc94ff73de8 -rc44576ce3d864c23b2ded4438d760a1dbdf09404 --- Ringtoets/Integration/src/Ringtoets.Integration.Data/AssessmentSectionAssemblyFactory.cs (.../AssessmentSectionAssemblyFactory.cs) (revision 3d70779c4b1aff2482254bad30078cc94ff73de8) +++ Ringtoets/Integration/src/Ringtoets.Integration.Data/AssessmentSectionAssemblyFactory.cs (.../AssessmentSectionAssemblyFactory.cs) (revision c44576ce3d864c23b2ded4438d760a1dbdf09404) @@ -105,6 +105,35 @@ } } + /// + /// Assembles the assessment section. + /// + /// The assessment section which contains the failure mechanisms to assemble for. + /// A . + /// Thrown when is null. + /// Thrown when cannot be created. + public static AssessmentSectionAssemblyCategoryGroup AssembleAssessmentSection(AssessmentSection assessmentSection) + { + if (assessmentSection == null) + { + throw new ArgumentNullException(nameof(assessmentSection)); + } + + try + { + IAssemblyToolCalculatorFactory calculatorFactory = AssemblyToolCalculatorFactory.Instance; + IAssessmentSectionAssemblyCalculator calculator = + calculatorFactory.CreateAssessmentSectionAssemblyCalculator(AssemblyToolKernelFactory.Instance); + + return calculator.AssembleAssessmentSection(AssembleFailureMechanismsWithoutProbability(assessmentSection), + AssembleFailureMechanismsWithProbability(assessmentSection)); + } + catch (AssessmentSectionAssemblyCalculatorException e) + { + throw new AssemblyException(e.Message, e); + } + } + private static IEnumerable GetFailureMechanismWithProbabilityAssemblyResults(AssessmentSection assessmentSection) { return new[] Index: Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/AssessmentSectionAssemblyFactoryTest.cs =================================================================== diff -u -r3d70779c4b1aff2482254bad30078cc94ff73de8 -rc44576ce3d864c23b2ded4438d760a1dbdf09404 --- Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/AssessmentSectionAssemblyFactoryTest.cs (.../AssessmentSectionAssemblyFactoryTest.cs) (revision 3d70779c4b1aff2482254bad30078cc94ff73de8) +++ Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/AssessmentSectionAssemblyFactoryTest.cs (.../AssessmentSectionAssemblyFactoryTest.cs) (revision c44576ce3d864c23b2ded4438d760a1dbdf09404) @@ -40,7 +40,7 @@ public class AssessmentSectionAssemblyFactoryTest { [Test] - public void AssemblyFailureMechanismsWithProbability_AssessmentSectionNull_ThrowsArgumentNullException() + public void AssembleFailureMechanismsWithProbability_AssessmentSectionNull_ThrowsArgumentNullException() { // Call TestDelegate call = () => AssessmentSectionAssemblyFactory.AssembleFailureMechanismsWithProbability(null); @@ -74,16 +74,9 @@ Assert.AreEqual(failureMechanismContribution.LowerLimitNorm, assessmentSectionAssemblyCalculator.LowerLimitNormInput); Assert.AreEqual(failureMechanismContribution.SignalingNorm, assessmentSectionAssemblyCalculator.SignalingNormInput); - IEnumerable expectedFailureMechanisms = assessmentSection.GetFailureMechanisms().Where(fm => fm.Group == 1 || fm.Group == 2); - - IEnumerable failureMechanismAssemblyInput = assessmentSectionAssemblyCalculator.FailureMechanismAssemblyInput; - Assert.AreEqual(expectedFailureMechanisms.Count(), failureMechanismAssemblyInput.Count()); - foreach (FailureMechanismAssembly failureMechanismAssembly in failureMechanismAssemblyInput) - { - FailureMechanismAssembly expectedFailureMechanismAssembly = failureMechanismAssemblyCalculator.FailureMechanismAssemblyOutput; - Assert.AreEqual(expectedFailureMechanismAssembly.Group, failureMechanismAssembly.Group); - Assert.AreEqual(expectedFailureMechanismAssembly.Probability, failureMechanismAssembly.Probability); - } + AssertGroup1And2FailureMechanismInputs(assessmentSection.GetFailureMechanisms(), + failureMechanismAssemblyCalculator.FailureMechanismAssemblyOutput, + assessmentSectionAssemblyCalculator); } } @@ -160,12 +153,9 @@ AssessmentSectionAssemblyFactory.AssembleFailureMechanismsWithoutProbability(assessmentSection); // Assert - IEnumerable expectedFailureMechanisms = assessmentSection.GetFailureMechanisms().Where(fm => fm.Group == 3 || fm.Group == 4); - - IEnumerable failureMechanismAssemblyInput = - assessmentSectionAssemblyCalculator.FailureMechanismAssemblyCategoryGroupInput; - Assert.AreEqual(expectedFailureMechanisms.Count(), failureMechanismAssemblyInput.Count()); - Assert.IsTrue(failureMechanismAssemblyInput.All(i => i == failureMechanismAssemblyCalculator.FailureMechanismAssemblyCategoryGroupOutput)); + AssertGroup3And4FailureMechanismInputs(assessmentSection.GetFailureMechanisms(), + failureMechanismAssemblyCalculator.FailureMechanismAssemblyCategoryGroupOutput.Value, + assessmentSectionAssemblyCalculator); } } @@ -211,6 +201,122 @@ } } + [Test] + public void AssembleAssessmentSection_AssessmentSectionNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => AssessmentSectionAssemblyFactory.AssembleAssessmentSection(null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("assessmentSection", exception.ParamName); + } + + [Test] + public void AssembleAssessmentSection_WithAssessmentSection_SetsInputOnCalculator() + { + // Setup + var random = new Random(21); + AssessmentSection assessmentSection = CreateAssessmentSection(); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorfactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + FailureMechanismAssemblyCalculatorStub failureMechanismAssemblyCalculator = calculatorfactory.LastCreatedFailureMechanismAssemblyCalculator; + + AssessmentSectionAssemblyCalculatorStub assessmentSectionAssemblyCalculator = calculatorfactory.LastCreatedAssessmentSectionAssemblyCalculator; + assessmentSectionAssemblyCalculator.AssessmentSectionAssemblyOutput = new AssessmentSectionAssembly(random.NextDouble(), + random.NextEnumValue()); + assessmentSectionAssemblyCalculator.AssembleFailureMechanismsAssemblyOutput = random.NextEnumValue(); + + // Call + AssessmentSectionAssemblyFactory.AssembleAssessmentSection(assessmentSection); + + // Assert + AssertGroup1And2FailureMechanismInputs(assessmentSection.GetFailureMechanisms(), + failureMechanismAssemblyCalculator.FailureMechanismAssemblyOutput, + assessmentSectionAssemblyCalculator); + + AssertGroup3And4FailureMechanismInputs(assessmentSection.GetFailureMechanisms(), + failureMechanismAssemblyCalculator.FailureMechanismAssemblyCategoryGroupOutput.Value, + assessmentSectionAssemblyCalculator); + + Assert.AreSame(assessmentSectionAssemblyCalculator.AssessmentSectionAssemblyOutput, + assessmentSectionAssemblyCalculator.FailureMechanismsWithProbabilityInput); + Assert.AreEqual(assessmentSectionAssemblyCalculator.AssembleFailureMechanismsAssemblyOutput, + assessmentSectionAssemblyCalculator.FailureMechanismsWithoutProbabilityInput); + } + } + + [Test] + public void AssembleAssessmentSection_AssemblyRan_ReturnsOutput() + { + // Setup + var random = new Random(21); + AssessmentSection assessmentSection = CreateAssessmentSection(); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorfactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + AssessmentSectionAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedAssessmentSectionAssemblyCalculator; + calculator.AssessmentSectionAssemblyOutput = new AssessmentSectionAssembly(random.NextDouble(), + random.NextEnumValue()); + calculator.AssembleAssessmentSectionOutput = random.NextEnumValue(); + + // Call + AssessmentSectionAssemblyCategoryGroup output = AssessmentSectionAssemblyFactory.AssembleAssessmentSection(assessmentSection); + + // Assert + Assert.AreEqual(calculator.AssembleAssessmentSectionOutput, output); + } + } + + [Test] + public void AssembleAssessmentSection_CalculatorThrowsException_ThrowsAssemblyException() + { + // Setup + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorfactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + AssessmentSectionAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedAssessmentSectionAssemblyCalculator; + calculator.ThrowExceptionOnCalculate = true; + + // Call + TestDelegate call = () => AssessmentSectionAssemblyFactory.AssembleAssessmentSection(CreateAssessmentSection()); + + // Assert + var exception = Assert.Throws(call); + Exception innerException = exception.InnerException; + Assert.IsInstanceOf(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + private static void AssertGroup1And2FailureMechanismInputs(IEnumerable failureMechanisms, + FailureMechanismAssembly expectedFailureMechanismAssembly, + AssessmentSectionAssemblyCalculatorStub assessmentSectionAssemblyCalculator) + { + IEnumerable expectedFailureMechanisms = failureMechanisms.Where(fm => fm.Group == 1 || fm.Group == 2); + IEnumerable failureMechanismAssemblyInput = assessmentSectionAssemblyCalculator.FailureMechanismAssemblyInput; + Assert.AreEqual(expectedFailureMechanisms.Count(), failureMechanismAssemblyInput.Count()); + foreach (FailureMechanismAssembly failureMechanismAssembly in failureMechanismAssemblyInput) + { + Assert.AreEqual(expectedFailureMechanismAssembly.Group, failureMechanismAssembly.Group); + Assert.AreEqual(expectedFailureMechanismAssembly.Probability, failureMechanismAssembly.Probability); + } + } + + private static void AssertGroup3And4FailureMechanismInputs(IEnumerable failureMechanisms, + FailureMechanismAssemblyCategoryGroup expectedAssemblyCategoryGroup, + AssessmentSectionAssemblyCalculatorStub assessmentSectionAssemblyCalculator) + { + IEnumerable expectedFailureMechanisms = failureMechanisms.Where(fm => fm.Group == 3 || fm.Group == 4); + IEnumerable failureMechanismAssemblyInput = + assessmentSectionAssemblyCalculator.FailureMechanismAssemblyCategoryGroupInput; + Assert.AreEqual(expectedFailureMechanisms.Count(), failureMechanismAssemblyInput.Count()); + Assert.IsTrue(failureMechanismAssemblyInput.All(i => i == expectedAssemblyCategoryGroup)); + } + private static AssessmentSection CreateAssessmentSection() { var random = new Random(21);