Index: Ringtoets/Common/src/Ringtoets.Common.Service/IllustrationPoints/CombinationTypeConverter.cs =================================================================== diff -u -rfe0220615a6da7fcf3d1d1ad910c1c5ea95b42bf -rcf5fa63f05c1018cdb14d5c664fa21f26026150c --- Ringtoets/Common/src/Ringtoets.Common.Service/IllustrationPoints/CombinationTypeConverter.cs (.../CombinationTypeConverter.cs) (revision fe0220615a6da7fcf3d1d1ad910c1c5ea95b42bf) +++ Ringtoets/Common/src/Ringtoets.Common.Service/IllustrationPoints/CombinationTypeConverter.cs (.../CombinationTypeConverter.cs) (revision cf5fa63f05c1018cdb14d5c664fa21f26026150c) @@ -19,7 +19,8 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using Ringtoets.Common.Data.Exceptions; +using System; +using System.ComponentModel; using Ringtoets.Common.Data.IllustrationPoints; using HydraRingCombinationType = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.CombinationType; @@ -36,20 +37,27 @@ /// The /// to convert. /// The . - /// Thrown when + /// Thrown when /// has an invalid value. + /// Thrown when a valid value of + /// cannot be converted. public static CombinationType Convert(HydraRingCombinationType hydraRingCombinationType) { + if (!Enum.IsDefined(typeof(HydraRingCombinationType), hydraRingCombinationType)) + { + throw new InvalidEnumArgumentException(nameof(hydraRingCombinationType), + (int)hydraRingCombinationType, + typeof(HydraRingCombinationType)); + } + switch (hydraRingCombinationType) { case HydraRingCombinationType.Or: return CombinationType.Or; case HydraRingCombinationType.And: return CombinationType.And; default: - string errorMessage = $"The value of {(int) hydraRingCombinationType} for {nameof(hydraRingCombinationType)} " + - $"could not be converted into a {typeof(CombinationType)}."; - throw new IllustrationPointConversionException(errorMessage); + throw new NotSupportedException($"A value of {hydraRingCombinationType} is not supported."); } } } Index: Ringtoets/Common/src/Ringtoets.Common.Service/IllustrationPoints/FaultTreeIllustrationPointConverter.cs =================================================================== diff -u -rfe0220615a6da7fcf3d1d1ad910c1c5ea95b42bf -rcf5fa63f05c1018cdb14d5c664fa21f26026150c --- Ringtoets/Common/src/Ringtoets.Common.Service/IllustrationPoints/FaultTreeIllustrationPointConverter.cs (.../FaultTreeIllustrationPointConverter.cs) (revision fe0220615a6da7fcf3d1d1ad910c1c5ea95b42bf) +++ Ringtoets/Common/src/Ringtoets.Common.Service/IllustrationPoints/FaultTreeIllustrationPointConverter.cs (.../FaultTreeIllustrationPointConverter.cs) (revision cf5fa63f05c1018cdb14d5c664fa21f26026150c) @@ -21,10 +21,12 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using Ringtoets.Common.Data.Exceptions; using Ringtoets.Common.Data.IllustrationPoints; using HydraRingFaultTreeIllustrationPoint = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.FaultTreeIllustrationPoint; +using HydraRingCombinationType = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.CombinationType; namespace Ringtoets.Common.Service.IllustrationPoints { @@ -52,14 +54,25 @@ throw new ArgumentNullException(nameof(hydraRingFaultTreeIllustrationPoint)); } - CombinationType combinationType = CombinationTypeConverter.Convert(hydraRingFaultTreeIllustrationPoint.CombinationType); - IEnumerable stochasts = hydraRingFaultTreeIllustrationPoint - .Stochasts.Select(StochastConverter.Convert); + FaultTreeIllustrationPoint illustrationPoint; + try + { + CombinationType combinationType = CombinationTypeConverter.Convert(hydraRingFaultTreeIllustrationPoint.CombinationType); + IEnumerable stochasts = hydraRingFaultTreeIllustrationPoint + .Stochasts.Select(StochastConverter.Convert); - return new FaultTreeIllustrationPoint(hydraRingFaultTreeIllustrationPoint.Name, - hydraRingFaultTreeIllustrationPoint.Beta, - stochasts, - combinationType); + illustrationPoint = new FaultTreeIllustrationPoint(hydraRingFaultTreeIllustrationPoint.Name, + hydraRingFaultTreeIllustrationPoint.Beta, + stochasts, + combinationType); + } + catch (Exception e) when (e is NotSupportedException || e is InvalidEnumArgumentException) + { + string errorMessage = $"Could not convert the {typeof(HydraRingCombinationType)} into a {typeof(CombinationType)}."; + throw new IllustrationPointConversionException(errorMessage, e); + } + + return illustrationPoint; } } } \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Service/IllustrationPoints/IllustrationPointNodeConverter.cs =================================================================== diff -u -rc77ccbb8b26516270f36ef53110be573839f3470 -rcf5fa63f05c1018cdb14d5c664fa21f26026150c --- Ringtoets/Common/src/Ringtoets.Common.Service/IllustrationPoints/IllustrationPointNodeConverter.cs (.../IllustrationPointNodeConverter.cs) (revision c77ccbb8b26516270f36ef53110be573839f3470) +++ Ringtoets/Common/src/Ringtoets.Common.Service/IllustrationPoints/IllustrationPointNodeConverter.cs (.../IllustrationPointNodeConverter.cs) (revision cf5fa63f05c1018cdb14d5c664fa21f26026150c) @@ -23,7 +23,7 @@ using System.Linq; using Ringtoets.Common.Data.Exceptions; using Ringtoets.Common.Data.IllustrationPoints; -using Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints; +using HydraRingIIllustrationPoint = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.IIllustrationPoint; using HydraRingFaultTreeIllustrationPoint = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.FaultTreeIllustrationPoint; using HydraRingSubMechanismIllustrationPoint = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.SubMechanismIllustrationPoint; using HydraRingIllustrationPointTreeNode = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.IllustrationPointTreeNode; @@ -56,13 +56,17 @@ throw new ArgumentNullException(nameof(hydraRingIllustrationPointTreeNode)); } - IllustrationPointBase data = ConvertIllustrationPointTreeNodeData(hydraRingIllustrationPointTreeNode.Data); + IllustrationPointBase data; - if (data == null) + try { + data = ConvertIllustrationPointTreeNodeData(hydraRingIllustrationPointTreeNode.Data); + } + catch (NotSupportedException e) + { string errorMessage = "An illustration point containing a Hydra ring data type of " + $"{hydraRingIllustrationPointTreeNode.Data.GetType()} is not supported."; - throw new IllustrationPointConversionException(errorMessage); + throw new IllustrationPointConversionException(errorMessage, e); } var illustrationPointNode = new IllustrationPointNode(data); @@ -71,15 +75,33 @@ return illustrationPointNode; } - private static IllustrationPointBase ConvertIllustrationPointTreeNodeData(IIllustrationPoint data) + /// + /// Creates a new instance of a based on the + /// . + /// + /// The to base the + /// to create on. + /// A , null when no appropriate + /// conversion was found. + /// Thrown when + /// could not be converted. + /// Thrown when no suitable conversion for + /// was found. + private static IllustrationPointBase ConvertIllustrationPointTreeNodeData(HydraRingIIllustrationPoint data) { var faultTreeIllustrationPoint = data as HydraRingFaultTreeIllustrationPoint; + if (faultTreeIllustrationPoint != null) + { + return FaultTreeIllustrationPointConverter.Convert(faultTreeIllustrationPoint); + } + var subMechanismIllustrationPoint = data as HydraRingSubMechanismIllustrationPoint; - return faultTreeIllustrationPoint != null - ? (IllustrationPointBase) FaultTreeIllustrationPointConverter.Convert(faultTreeIllustrationPoint) - : (subMechanismIllustrationPoint != null - ? SubMechanismIllustrationPointConverter.Convert(subMechanismIllustrationPoint) - : null); + if (subMechanismIllustrationPoint != null) + { + return SubMechanismIllustrationPointConverter.Convert(subMechanismIllustrationPoint); + } + + throw new NotSupportedException($"Cannot convert {data.GetType()}."); } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Service.Test/IllustrationPoints/CombinationTypeConverterTest.cs =================================================================== diff -u -rfe0220615a6da7fcf3d1d1ad910c1c5ea95b42bf -rcf5fa63f05c1018cdb14d5c664fa21f26026150c --- Ringtoets/Common/test/Ringtoets.Common.Service.Test/IllustrationPoints/CombinationTypeConverterTest.cs (.../CombinationTypeConverterTest.cs) (revision fe0220615a6da7fcf3d1d1ad910c1c5ea95b42bf) +++ Ringtoets/Common/test/Ringtoets.Common.Service.Test/IllustrationPoints/CombinationTypeConverterTest.cs (.../CombinationTypeConverterTest.cs) (revision cf5fa63f05c1018cdb14d5c664fa21f26026150c) @@ -19,8 +19,9 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System.ComponentModel; +using Core.Common.TestUtil; using NUnit.Framework; -using Ringtoets.Common.Data.Exceptions; using Ringtoets.Common.Data.IllustrationPoints; using Ringtoets.Common.Service.IllustrationPoints; using HydraRingCombinationType = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.CombinationType; @@ -31,22 +32,21 @@ public class CombinationTypeConverterTest { [Test] - public void Convert_InvalidEnumValue_ThrowsIllustrationPointConversionException() + public void Convert_InvalidEnumValue_ThrowsInvalidEnumArgumentException() { // Call TestDelegate test = () => CombinationTypeConverter.Convert((HydraRingCombinationType) 99); // Assert - var exception = Assert.Throws(test); - string message = $"The value of 99 for hydraRingCombinationType could not be converted into a {typeof(CombinationType)}."; - Assert.AreEqual(message, exception.Message); + const string message = "The value of argument 'hydraRingCombinationType' (99) is invalid for Enum type 'CombinationType'."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, message); } [Test] [TestCase(HydraRingCombinationType.And, CombinationType.And)] [TestCase(HydraRingCombinationType.Or, CombinationType.Or)] public void Convert_HydraRingCombinationType_ReturnCombinationType(HydraRingCombinationType hydraRingCombinationType, - CombinationType expectedCombinationType) + CombinationType expectedCombinationType) { // Call CombinationType combinationType = CombinationTypeConverter.Convert(hydraRingCombinationType); Index: Ringtoets/Common/test/Ringtoets.Common.Service.Test/IllustrationPoints/FaultTreeIllustrationPointConverterTest.cs =================================================================== diff -u -rfe0220615a6da7fcf3d1d1ad910c1c5ea95b42bf -rcf5fa63f05c1018cdb14d5c664fa21f26026150c --- Ringtoets/Common/test/Ringtoets.Common.Service.Test/IllustrationPoints/FaultTreeIllustrationPointConverterTest.cs (.../FaultTreeIllustrationPointConverterTest.cs) (revision fe0220615a6da7fcf3d1d1ad910c1c5ea95b42bf) +++ Ringtoets/Common/test/Ringtoets.Common.Service.Test/IllustrationPoints/FaultTreeIllustrationPointConverterTest.cs (.../FaultTreeIllustrationPointConverterTest.cs) (revision cf5fa63f05c1018cdb14d5c664fa21f26026150c) @@ -93,8 +93,9 @@ // Assert var exception = Assert.Throws(call); - string expectedMessage = $"The value of 999999 for hydraRingCombinationType could not be converted into a {typeof(CombinationType)}."; + string expectedMessage = $"Could not convert the {typeof(HydraRingCombinationType)} into a {typeof(CombinationType)}."; Assert.AreEqual(expectedMessage, exception.Message); + Assert.IsInstanceOf(exception.InnerException); } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Service.Test/IllustrationPoints/IllustrationPointNodeConverterTest.cs =================================================================== diff -u -rc77ccbb8b26516270f36ef53110be573839f3470 -rcf5fa63f05c1018cdb14d5c664fa21f26026150c --- Ringtoets/Common/test/Ringtoets.Common.Service.Test/IllustrationPoints/IllustrationPointNodeConverterTest.cs (.../IllustrationPointNodeConverterTest.cs) (revision c77ccbb8b26516270f36ef53110be573839f3470) +++ Ringtoets/Common/test/Ringtoets.Common.Service.Test/IllustrationPoints/IllustrationPointNodeConverterTest.cs (.../IllustrationPointNodeConverterTest.cs) (revision cf5fa63f05c1018cdb14d5c664fa21f26026150c) @@ -26,8 +26,6 @@ using Ringtoets.Common.Data.IllustrationPoints; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Service.IllustrationPoints; -using CombinationType = Ringtoets.Common.Data.IllustrationPoints.CombinationType; -using FaultTreeIllustrationPoint = Ringtoets.Common.Data.IllustrationPoints.FaultTreeIllustrationPoint; using HydraRingIllustrationPointTreeNode = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.IllustrationPointTreeNode; using HydraRingStochast = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.Stochast; using HydraRingFaultTreeIllustrationPoint = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.FaultTreeIllustrationPoint; @@ -38,10 +36,6 @@ using TestHydraRingFaultTreeIllustrationPoint = Ringtoets.HydraRing.Calculation.TestUtil.IllustrationPoints.TestFaultTreeIllustrationPoint; using HydraRingCombinationType = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.CombinationType; using HydraRingIIllustrationPoint = Ringtoets.HydraRing.Calculation.Data.Output.IllustrationPoints.IIllustrationPoint; -using IllustrationPointResult = Ringtoets.Common.Data.IllustrationPoints.IllustrationPointResult; -using Stochast = Ringtoets.Common.Data.IllustrationPoints.Stochast; -using SubMechanismIllustrationPoint = Ringtoets.Common.Data.IllustrationPoints.SubMechanismIllustrationPoint; -using SubMechanismIllustrationPointStochast = Ringtoets.Common.Data.IllustrationPoints.SubMechanismIllustrationPointStochast; namespace Ringtoets.Common.Service.Test.IllustrationPoints { @@ -173,6 +167,12 @@ var exception = Assert.Throws(call); string expectedMessage = $"An illustration point containing a Hydra ring data type of {hydraRingIllustrationPointData.GetType()} is not supported."; Assert.AreEqual(expectedMessage, exception.Message); + + string expectedMessageInnerException = $"Cannot convert {hydraRingIllustrationPointData.GetType()}."; + Exception innerException = exception.InnerException; + Assert.IsNotNull(innerException); + Assert.IsInstanceOf(innerException); + Assert.AreEqual(expectedMessageInnerException, innerException.Message); } [Test] @@ -201,6 +201,12 @@ var exception = Assert.Throws(call); string expectedMessage = $"An illustration point containing a Hydra ring data type of {typeof(TestHydraRingIllustrationPointData)} is not supported."; Assert.AreEqual(expectedMessage, exception.Message); + + string expectedMessageInnerException = $"Cannot convert {typeof(TestHydraRingIllustrationPointData)}."; + Exception innerException = exception.InnerException; + Assert.IsNotNull(innerException); + Assert.IsInstanceOf(innerException); + Assert.AreEqual(expectedMessageInnerException, innerException.Message); } private class TestHydraRingIllustrationPointData : HydraRingIIllustrationPoint {}