Index: Ringtoets/Revetment/src/Ringtoets.Revetment.IO/Configurations/Helpers/ConfigurationAssessmentSectionCategoryTypeConverter.cs =================================================================== diff -u -r475dac0f99aaea7f80dc71aa0a85e51c1032b766 -rb3ba37f5a8ccaefa24540a0937434aa8718ac0e0 --- Ringtoets/Revetment/src/Ringtoets.Revetment.IO/Configurations/Helpers/ConfigurationAssessmentSectionCategoryTypeConverter.cs (.../ConfigurationAssessmentSectionCategoryTypeConverter.cs) (revision 475dac0f99aaea7f80dc71aa0a85e51c1032b766) +++ Ringtoets/Revetment/src/Ringtoets.Revetment.IO/Configurations/Helpers/ConfigurationAssessmentSectionCategoryTypeConverter.cs (.../ConfigurationAssessmentSectionCategoryTypeConverter.cs) (revision b3ba37f5a8ccaefa24540a0937434aa8718ac0e0) @@ -32,6 +32,38 @@ /// public class ConfigurationAssessmentSectionCategoryTypeConverter : TypeConverter { + /// + /// Thrown when + /// contains an invalid value of . + public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) + { + var stepSize = (ConfigurationAssessmentSectionCategoryType)value; + if (!Enum.IsDefined(typeof(ConfigurationAssessmentSectionCategoryType), stepSize)) + { + throw new InvalidEnumArgumentException(nameof(value), + (int)stepSize, + typeof(ConfigurationAssessmentSectionCategoryType)); + } + + if (destinationType == typeof(string)) + { + switch (stepSize) + { + case ConfigurationAssessmentSectionCategoryType.FactorizedSignalingNorm: + return "A+->A"; + case ConfigurationAssessmentSectionCategoryType.SignalingNorm: + return "A->B"; + case ConfigurationAssessmentSectionCategoryType.LowerLimitNorm: + return "B->C"; + case ConfigurationAssessmentSectionCategoryType.FactorizedLowerLimitNorm: + return "C->D"; + default: + throw new NotSupportedException(); + } + } + return base.ConvertTo(context, culture, value, destinationType); + } + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { return sourceType == typeof(string) Index: Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/Configurations/Helpers/ConfigurationAssessmentSectionCategoryTypeConverterTest.cs =================================================================== diff -u -r475dac0f99aaea7f80dc71aa0a85e51c1032b766 -rb3ba37f5a8ccaefa24540a0937434aa8718ac0e0 --- Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/Configurations/Helpers/ConfigurationAssessmentSectionCategoryTypeConverterTest.cs (.../ConfigurationAssessmentSectionCategoryTypeConverterTest.cs) (revision 475dac0f99aaea7f80dc71aa0a85e51c1032b766) +++ Ringtoets/Revetment/test/Ringtoets.Revetment.IO.Test/Configurations/Helpers/ConfigurationAssessmentSectionCategoryTypeConverterTest.cs (.../ConfigurationAssessmentSectionCategoryTypeConverterTest.cs) (revision b3ba37f5a8ccaefa24540a0937434aa8718ac0e0) @@ -21,6 +21,7 @@ using System; using System.ComponentModel; +using System.Globalization; using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Common.Data.AssessmentSection; @@ -43,6 +44,65 @@ } [Test] + public void CanConvertTo_String_ReturnTrue() + { + // Setup + var converter = new ConfigurationAssessmentSectionCategoryTypeConverter(); + + // Call + bool canConvertTo = converter.CanConvertTo(typeof(string)); + + // Assert + Assert.IsTrue(canConvertTo); + } + + [Test] + public void CanConvertTo_OtherType_ReturnFalse() + { + // Setup + var converter = new ConfigurationAssessmentSectionCategoryTypeConverter(); + + // Call + bool canConvertTo = converter.CanConvertTo(typeof(object)); + + // Assert + Assert.IsFalse(canConvertTo); + } + + [Test] + [TestCase(ConfigurationAssessmentSectionCategoryType.FactorizedSignalingNorm, "A+->A")] + [TestCase(ConfigurationAssessmentSectionCategoryType.SignalingNorm, "A->B")] + [TestCase(ConfigurationAssessmentSectionCategoryType.LowerLimitNorm, "B->C")] + [TestCase(ConfigurationAssessmentSectionCategoryType.FactorizedLowerLimitNorm, "C->D")] + public void ConvertTo_ValidConfigurationAssessmentSectionCategoryType_ReturnExpectedText( + ConfigurationAssessmentSectionCategoryType value, string expectedText) + { + // Setup + var converter = new ConfigurationAssessmentSectionCategoryTypeConverter(); + + // Call + object convertTo = converter.ConvertTo(null, CultureInfo.CurrentCulture, value, typeof(string)); + + // Assert + Assert.AreEqual(expectedText, convertTo); + } + + [Test] + public void ConvertTo_StringInvalidConfigurationWaveConditionsInputStepSize_ThrowInvalidEnumArgumentException() + { + // Setup + const ConfigurationAssessmentSectionCategoryType invalidValue = (ConfigurationAssessmentSectionCategoryType) 99; + var converter = new ConfigurationAssessmentSectionCategoryTypeConverter(); + + // Call + TestDelegate call = () => converter.ConvertTo(invalidValue, typeof(string)); + + // Assert + string expectedMessage = $"The value of argument 'value' ({invalidValue}) is invalid for Enum type '{nameof(ConfigurationAssessmentSectionCategoryType)}'."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); + } + + [Test] public void CanConvertFrom_String_ReturnTrue() { // Setup