Index: Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismAssemblyCalculator.cs =================================================================== diff -u -recd4e132deb2683aadc0f83f0853dc1b79602033 -rf2dfaa1f8a4e24ed8f7783084e2e7081f2a024ec --- Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismAssemblyCalculator.cs (.../FailureMechanismAssemblyCalculator.cs) (revision ecd4e132deb2683aadc0f83f0853dc1b79602033) +++ Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.KernelWrapper/Calculators/Assembly/FailureMechanismAssemblyCalculator.cs (.../FailureMechanismAssemblyCalculator.cs) (revision f2dfaa1f8a4e24ed8f7783084e2e7081f2a024ec) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Assembly.Kernel.Exceptions; using Assembly.Kernel.Interfaces; using Assembly.Kernel.Model; using Ringtoets.AssemblyTool.Data; @@ -63,6 +64,10 @@ return FailureMechanismAssemblyCreator.CreateFailureMechanismAssemblyCategoryGroup(output); } + catch (AssemblyException e) + { + throw new FailureMechanismAssemblyCalculatorException(AssemblyErrorMessageTranslator.CreateErrorMessage(e.Errors), e); + } catch (Exception e) { throw new FailureMechanismAssemblyCalculatorException(e.Message, e); @@ -83,6 +88,10 @@ return FailureMechanismAssemblyCreator.Create(output); } + catch (AssemblyException e) + { + throw new FailureMechanismAssemblyCalculatorException(AssemblyErrorMessageTranslator.CreateErrorMessage(e.Errors), e); + } catch (Exception e) { throw new FailureMechanismAssemblyCalculatorException(e.Message, e); Index: Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismAssemblyCalculatorTest.cs =================================================================== diff -u -r7c355e20c39e28c6837702bbbf7dcfea5cae6c7b -rf2dfaa1f8a4e24ed8f7783084e2e7081f2a024ec --- Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismAssemblyCalculatorTest.cs (.../FailureMechanismAssemblyCalculatorTest.cs) (revision 7c355e20c39e28c6837702bbbf7dcfea5cae6c7b) +++ Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.Test/Calculators/Assembly/FailureMechanismAssemblyCalculatorTest.cs (.../FailureMechanismAssemblyCalculatorTest.cs) (revision f2dfaa1f8a4e24ed8f7783084e2e7081f2a024ec) @@ -23,12 +23,14 @@ using System.Collections.Generic; using System.ComponentModel; using System.Linq; +using Assembly.Kernel.Exceptions; using Assembly.Kernel.Model; using Assembly.Kernel.Model.FmSectionTypes; using Core.Common.TestUtil; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.AssemblyTool.Data; +using Ringtoets.AssemblyTool.KernelWrapper.Calculators; using Ringtoets.AssemblyTool.KernelWrapper.Calculators.Assembly; using Ringtoets.AssemblyTool.KernelWrapper.Creators; using Ringtoets.AssemblyTool.KernelWrapper.Kernels; @@ -188,6 +190,31 @@ } [Test] + public void Assemble_KernelThrowsAssemblyException_ThrowFailureMechanismAssemblyCalculatorException() + { + // Setup + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismAssemblyKernel; + kernel.ThrowAssemblyExceptionOnCalculate = true; + + var calculator = new FailureMechanismAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.Assemble(new List()); + + // Assert + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] + { + new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) + })); + } + } + + [Test] public void AssembleWithProbabilities_WithInvalidEnumInput_ThrowFailureMechanismAssemblyCalculatorException() { // Setup @@ -315,6 +342,32 @@ } } + [Test] + public void AssembleWithProbabilities_KernelThrowsAssemblyException_ThrowFailureMechanismAssemblyCalculatorException() + { + // Setup + using (new AssemblyToolKernelFactoryConfig()) + { + var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; + FailureMechanismAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismAssemblyKernel; + kernel.ThrowAssemblyExceptionOnCalculate = true; + + var calculator = new FailureMechanismAssemblyCalculator(factory); + + // Call + TestDelegate test = () => calculator.Assemble(Enumerable.Empty(), + CreateAssemblyCategoriesInput()); + + // Assert + var exception = Assert.Throws(test); + Assert.IsInstanceOf(exception.InnerException); + Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] + { + new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) + })); + } + } + private static void AssertCalculatorOutput(FailureMechanismSectionAssembly expectedSectionAssembly, FmSectionAssemblyDirectResult actualResult) { Index: Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Test/Kernels/Assembly/FailureMechanismAssemblyKernelStubTest.cs =================================================================== diff -u -raba56da8ee04d8d526cb4f969b74962705e57445 -rf2dfaa1f8a4e24ed8f7783084e2e7081f2a024ec --- Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Test/Kernels/Assembly/FailureMechanismAssemblyKernelStubTest.cs (.../FailureMechanismAssemblyKernelStubTest.cs) (revision aba56da8ee04d8d526cb4f969b74962705e57445) +++ Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Test/Kernels/Assembly/FailureMechanismAssemblyKernelStubTest.cs (.../FailureMechanismAssemblyKernelStubTest.cs) (revision f2dfaa1f8a4e24ed8f7783084e2e7081f2a024ec) @@ -22,6 +22,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Assembly.Kernel.Exceptions; using Assembly.Kernel.Interfaces; using Assembly.Kernel.Model; using Assembly.Kernel.Model.FmSectionTypes; @@ -51,7 +52,7 @@ } [Test] - public void AssembleFailureMechanismWbi1A1_ThrowExceptionOnCalculateFalse_InputCorrectlySetToKernelAndCalculatedTrue() + public void AssembleFailureMechanismWbi1A1_ThrowExceptionsFalse_InputCorrectlySetToKernelAndCalculatedTrue() { // Setup var random = new Random(39); @@ -72,7 +73,7 @@ } [Test] - public void AssembleFailureMechanismWbi1A1_ThrowExceptionOnCalculateFalse_ReturnFailureMechanismSectionAssemblyResult() + public void AssembleFailureMechanismWbi1A1_ThrowExceptionsFalse_ReturnFailureMechanismSectionAssemblyResult() { // Setup var random = new Random(39); @@ -111,6 +112,29 @@ } [Test] + public void AssembleFailureMechanismWbi1A1_ThrowAssemblyExceptionOnCalculateTrue_ThrowsException() + { + // Setup + var kernel = new FailureMechanismAssemblyKernelStub + { + ThrowAssemblyExceptionOnCalculate = true + }; + + // Call + TestDelegate test = () => kernel.AssembleFailureMechanismWbi1A1(Enumerable.Empty(), true); + + // Assert + var exception = Assert.Throws(test); + AssemblyErrorMessage errorMessage = exception.Errors.Single(); + Assert.AreEqual("entity", errorMessage.EntityId); + Assert.AreEqual(EAssemblyErrors.CategoryLowerLimitOutOfRange, errorMessage.ErrorCode); + Assert.IsNull(kernel.FmSectionAssemblyResultsInput); + Assert.IsNull(kernel.PartialAssembly); + Assert.IsFalse(kernel.Calculated); + Assert.AreEqual(EFailureMechanismCategory.It, kernel.FailureMechanismCategoryResult); + } + + [Test] public void AssembleFailureMechanismWbi1A2_Always_ThrowNotImplementedException() { // Setup @@ -124,7 +148,7 @@ } [Test] - public void AssembleFailureMechanismWbi1B1_ThrowExceptionOnCalculateFalse_InputCorrectlySetToKernelAndCalculatedTrue() + public void AssembleFailureMechanismWbi1B1_ThrowExceptionsFalse_InputCorrectlySetToKernelAndCalculatedTrue() { // Setup var random = new Random(39); @@ -149,7 +173,7 @@ } [Test] - public void AssembleFailureMechanismWbi1B1_ThrowExceptionOnCalculateFalse_ReturnFailureMechanismSectionAssemblyResult() + public void AssembleFailureMechanismWbi1B1_ThrowExceptionsFalse_ReturnFailureMechanismSectionAssemblyResult() { // Setup var random = new Random(39); @@ -196,6 +220,35 @@ Assert.AreEqual(EFailureMechanismCategory.It, kernel.FailureMechanismCategoryResult); } + [Test] + public void AssembleFailureMechanismWbi1B1_ThrowAssemblyExceptionOnCalculateTrue_ThrowsException() + { + // Setup + var random = new Random(39); + var kernel = new FailureMechanismAssemblyKernelStub + { + ThrowAssemblyExceptionOnCalculate = true + }; + + // Call + TestDelegate test = () => kernel.AssembleFailureMechanismWbi1B1(CreateRandomAssessmentSection(random), + CreateRandomFailureMechanism(random), + Enumerable.Empty(), + true); + + // Assert + var exception = Assert.Throws(test); + AssemblyErrorMessage errorMessage = exception.Errors.Single(); + Assert.AreEqual("entity", errorMessage.EntityId); + Assert.AreEqual(EAssemblyErrors.CategoryLowerLimitOutOfRange, errorMessage.ErrorCode); + Assert.IsNull(kernel.AssessmentSectionInput); + Assert.IsNull(kernel.FailureMechanismInput); + Assert.IsNull(kernel.FmSectionAssemblyResultsInput); + Assert.IsNull(kernel.PartialAssembly); + Assert.IsFalse(kernel.Calculated); + Assert.AreEqual(EFailureMechanismCategory.It, kernel.FailureMechanismCategoryResult); + } + private static FailureMechanism CreateRandomFailureMechanism(Random random) { var failureMechanism = new FailureMechanism(random.NextDouble(1, 5), random.NextDouble()); Index: Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil/Kernels/Assembly/FailureMechanismAssemblyKernelStub.cs =================================================================== diff -u -r28bcc5f05ac19148d432c3051a88758c60c9dc0c -rf2dfaa1f8a4e24ed8f7783084e2e7081f2a024ec --- Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil/Kernels/Assembly/FailureMechanismAssemblyKernelStub.cs (.../FailureMechanismAssemblyKernelStub.cs) (revision 28bcc5f05ac19148d432c3051a88758c60c9dc0c) +++ Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.KernelWrapper.TestUtil/Kernels/Assembly/FailureMechanismAssemblyKernelStub.cs (.../FailureMechanismAssemblyKernelStub.cs) (revision f2dfaa1f8a4e24ed8f7783084e2e7081f2a024ec) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using Assembly.Kernel.Exceptions; using Assembly.Kernel.Interfaces; using Assembly.Kernel.Model; using Assembly.Kernel.Model.FmSectionTypes; @@ -68,17 +69,19 @@ public bool Calculated { get; private set; } /// - /// Sets an indicator whether an exception must be thrown while performing a calculation. + /// Sets an indicator whether an must be thrown while performing a calculation. /// public bool ThrowExceptionOnCalculate { private get; set; } + /// + /// Sets an indicator whether an must be thrown while performing a calculation. + /// + public bool ThrowAssemblyExceptionOnCalculate { private get; set; } + public EFailureMechanismCategory AssembleFailureMechanismWbi1A1(IEnumerable fmSectionAssemblyResults, bool partialAssembly) { - if (ThrowExceptionOnCalculate) - { - throw new Exception("Message", new Exception()); - } + ThrowExceptions(); FmSectionAssemblyResultsInput = fmSectionAssemblyResults; PartialAssembly = partialAssembly; @@ -98,10 +101,7 @@ IEnumerable fmSectionAssemblyResults, bool partialAssembly) { - if (ThrowExceptionOnCalculate) - { - throw new Exception("Message", new Exception()); - } + ThrowExceptions(); AssessmentSectionInput = section; FailureMechanismInput = failureMechanism; @@ -111,5 +111,18 @@ Calculated = true; return FailureMechanismAssemblyResult; } + + private void ThrowExceptions() + { + if (ThrowExceptionOnCalculate) + { + throw new Exception("Message", new Exception()); + } + + if (ThrowAssemblyExceptionOnCalculate) + { + throw new AssemblyException("entity", EAssemblyErrors.CategoryLowerLimitOutOfRange); + } + } } } \ No newline at end of file