Index: Ringtoets/Integration/src/Ringtoets.Integration.Data/StandAlone/AssemblyFactories/MicrostabilityFailureMechanismAssemblyFactory.cs =================================================================== diff -u -r06800c4b5c53dd8a385a9f15ce44e9c4038a3726 -rc43f7692bfadc0b065baf71ef3dd382c32da8566 --- Ringtoets/Integration/src/Ringtoets.Integration.Data/StandAlone/AssemblyFactories/MicrostabilityFailureMechanismAssemblyFactory.cs (.../MicrostabilityFailureMechanismAssemblyFactory.cs) (revision 06800c4b5c53dd8a385a9f15ce44e9c4038a3726) +++ Ringtoets/Integration/src/Ringtoets.Integration.Data/StandAlone/AssemblyFactories/MicrostabilityFailureMechanismAssemblyFactory.cs (.../MicrostabilityFailureMechanismAssemblyFactory.cs) (revision c43f7692bfadc0b065baf71ef3dd382c32da8566) @@ -172,6 +172,27 @@ } /// + /// Gets the assembly category group of the given . + /// + /// The failure mechanism section result to get the assembly category group for. + /// A . + /// Thrown when any parameter is null. + /// Thrown when the + /// could not be created. + public static FailureMechanismSectionAssemblyCategoryGroup GetSectionAssemblyCategoryGroup( + MicrostabilityFailureMechanismSectionResult failureMechanismSectionResult) + { + if (failureMechanismSectionResult == null) + { + throw new ArgumentNullException(nameof(failureMechanismSectionResult)); + } + + return failureMechanismSectionResult.UseManualAssemblyCategoryGroup + ? failureMechanismSectionResult.ManualAssemblyCategoryGroup + : AssembleCombinedAssessment(failureMechanismSectionResult); + } + + /// /// Assembles the failure mechanism assembly. /// /// The failure mechanism to assemble for. @@ -193,9 +214,7 @@ } IEnumerable sectionAssemblies = - failureMechanism.SectionResults.Select(sectionResult => sectionResult.UseManualAssemblyCategoryGroup - ? sectionResult.ManualAssemblyCategoryGroup - : AssembleCombinedAssessment(sectionResult)).ToArray(); + failureMechanism.SectionResults.Select(GetSectionAssemblyCategoryGroup).ToArray(); IAssemblyToolCalculatorFactory calculatorFactory = AssemblyToolCalculatorFactory.Instance; IFailureMechanismAssemblyCalculator calculator = Index: Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/StandAlone/AssemblyFactories/MicrostabilityFailureMechanismAssemblyFactoryTest.cs =================================================================== diff -u -r5e0a72833803f6a51d6e70a166bdd48d1d4418c7 -rc43f7692bfadc0b065baf71ef3dd382c32da8566 --- Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/StandAlone/AssemblyFactories/MicrostabilityFailureMechanismAssemblyFactoryTest.cs (.../MicrostabilityFailureMechanismAssemblyFactoryTest.cs) (revision 5e0a72833803f6a51d6e70a166bdd48d1d4418c7) +++ Ringtoets/Integration/test/Ringtoets.Integration.Data.Test/StandAlone/AssemblyFactories/MicrostabilityFailureMechanismAssemblyFactoryTest.cs (.../MicrostabilityFailureMechanismAssemblyFactoryTest.cs) (revision c43f7692bfadc0b065baf71ef3dd382c32da8566) @@ -370,6 +370,112 @@ #endregion + #region GetSectionAssemblyCategoryGroup + + [Test] + public void GetSectionAssemblyCategoryGroup_FailureMechanismSectionResultNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => MicrostabilityFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup( + null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("failureMechanismSectionResult", exception.ParamName); + } + + [Test] + public void GetSectionAssemblyCategoryGroup_WithoutManualInput_SetsInputOnCalculator() + { + // Setup + var sectionResult = new MicrostabilityFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection()); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorFactory = (TestAssemblyToolCalculatorFactory)AssemblyToolCalculatorFactory.Instance; + FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator; + + // Call + MicrostabilityFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup( + sectionResult); + + // Assert + FailureMechanismSectionAssemblyCategoryGroup expectedSimpleAssembly = MicrostabilityFailureMechanismAssemblyFactory.AssembleSimpleAssessment( + sectionResult); + FailureMechanismSectionAssemblyCategoryGroup expectedDetailedAssembly = MicrostabilityFailureMechanismAssemblyFactory.AssembleDetailedAssessment( + sectionResult); + FailureMechanismSectionAssemblyCategoryGroup expectedTailorMadeAssembly = MicrostabilityFailureMechanismAssemblyFactory.AssembleTailorMadeAssessment( + sectionResult); + + Assert.AreEqual(expectedSimpleAssembly, calculator.CombinedSimpleAssemblyGroupInput); + Assert.AreEqual(expectedDetailedAssembly, calculator.CombinedDetailedAssemblyGroupInput); + Assert.AreEqual(expectedTailorMadeAssembly, calculator.CombinedTailorMadeAssemblyGroupInput); + } + } + + [Test] + public void GetSectionAssemblyCategoryGroup_WithoutManualInput_ReturnsOutput() + { + // Setup + var sectionResult = new MicrostabilityFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection()); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + // Call + FailureMechanismSectionAssemblyCategoryGroup categoryGroup = MicrostabilityFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup( + sectionResult); + + // Assert + FailureMechanismSectionAssemblyCategoryGroup expectedAssembly = MicrostabilityFailureMechanismAssemblyFactory.AssembleCombinedAssessment( + sectionResult); + Assert.AreEqual(categoryGroup, expectedAssembly); + } + } + + [Test] + public void GetSectionAssemblyCategoryGroup_WithManualInput_ReturnsOutput() + { + // Setup + var sectionResult = new MicrostabilityFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection()) + { + UseManualAssemblyCategoryGroup = true, + ManualAssemblyCategoryGroup = new Random(39).NextEnumValue() + }; + + // Call + FailureMechanismSectionAssemblyCategoryGroup categoryGroup = MicrostabilityFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup( + sectionResult); + + // Assert + Assert.AreEqual(categoryGroup, sectionResult.ManualAssemblyCategoryGroup); + } + + [Test] + public void GetSectionAssemblyCategoryGroup_WithoutManualInputAndCalculatorThrowsException_ThrowsAssemblyException() + { + // Setup + var sectionResult = new MicrostabilityFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection()); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + var calculatorfactory = (TestAssemblyToolCalculatorFactory)AssemblyToolCalculatorFactory.Instance; + FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorfactory.LastCreatedFailureMechanismSectionAssemblyCalculator; + calculator.ThrowExceptionOnCalculateCombinedAssembly = true; + + // Call + TestDelegate call = () => MicrostabilityFailureMechanismAssemblyFactory.GetSectionAssemblyCategoryGroup( + sectionResult); + + // Assert + var exception = Assert.Throws(call); + Exception innerException = exception.InnerException; + Assert.IsInstanceOf(innerException); + Assert.AreEqual(innerException.Message, exception.Message); + } + } + + #endregion + #region Failure Mechanism Assembly [Test]