Index: Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.IO/Model/SerializableFailureMechanismSectionCollection.cs =================================================================== diff -u -ra30b67748bed77736f62b6b3c30c82649bb9cf4e -r5a7fbd8f43c609641b0a1398e2cab204a46542bf --- Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.IO/Model/SerializableFailureMechanismSectionCollection.cs (.../SerializableFailureMechanismSectionCollection.cs) (revision a30b67748bed77736f62b6b3c30c82649bb9cf4e) +++ Ringtoets/AssemblyTool/src/Ringtoets.AssemblyTool.IO/Model/SerializableFailureMechanismSectionCollection.cs (.../SerializableFailureMechanismSectionCollection.cs) (revision 5a7fbd8f43c609641b0a1398e2cab204a46542bf) @@ -21,6 +21,7 @@ using System; using System.Xml.Serialization; +using Ringtoets.AssemblyTool.IO.Model.Helpers; namespace Ringtoets.AssemblyTool.IO.Model { @@ -40,8 +41,8 @@ /// /// The unique ID of the sections. /// The failure mechanism the sections belong to. - /// Thrown when is null or empty. - /// Thrown when parameter is null. + /// Thrown when any parameter is null. + /// Thrown when is invalid. public SerializableFailureMechanismSectionCollection(string id, SerializableFailureMechanism failureMechanism) : this(id) @@ -59,8 +60,8 @@ /// /// The unique ID of the sections. /// The total assembly result the sections belong to. - /// Thrown when is null or empty. - /// Thrown when parameter is null. + /// Thrown when any parameter is null. + /// Thrown when is invalid. public SerializableFailureMechanismSectionCollection(string id, SerializableTotalAssemblyResult totalAssemblyResult) : this(id) @@ -77,12 +78,13 @@ /// Creates a new instance of . /// /// The unique ID of the sections. - /// Thrown when is null or empty. + /// Thrown when is null. + /// Thrown when is invalid. private SerializableFailureMechanismSectionCollection(string id) { - if (string.IsNullOrEmpty(id)) + if (!IdValidator.Validate(id)) { - throw new ArgumentException($@"'{nameof(id)}' must have a value."); + throw new ArgumentException($@"'{nameof(id)}' must have a value and consist only of alphanumerical characters, '-', '_' or '.'."); } Id = id; Index: Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.IO.Test/Model/SerializableFailureMechanismSectionCollectionTest.cs =================================================================== diff -u -ra30b67748bed77736f62b6b3c30c82649bb9cf4e -r5a7fbd8f43c609641b0a1398e2cab204a46542bf --- Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.IO.Test/Model/SerializableFailureMechanismSectionCollectionTest.cs (.../SerializableFailureMechanismSectionCollectionTest.cs) (revision a30b67748bed77736f62b6b3c30c82649bb9cf4e) +++ Ringtoets/AssemblyTool/test/Ringtoets.AssemblyTool.IO.Test/Model/SerializableFailureMechanismSectionCollectionTest.cs (.../SerializableFailureMechanismSectionCollectionTest.cs) (revision 5a7fbd8f43c609641b0a1398e2cab204a46542bf) @@ -55,16 +55,29 @@ } [Test] - [TestCase(null)] + public void ConstructorWithFailureMechanism_IdNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => new SerializableFailureMechanismSectionCollection(null, + new SerializableFailureMechanism()); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("id", exception.ParamName); + } + + [Test] + [TestCase(" ")] [TestCase("")] - public void ConstructorWithFailureMechanism_IdInvalid_ThrowsArgumentException(string id) + [TestCase(" InvalidId")] + public void ConstructorWithFailureMechanism_InvalidId_ThrowsArgumentNullException(string invalidId) { // Call - TestDelegate call = () => new SerializableFailureMechanismSectionCollection(id, + TestDelegate call = () => new SerializableFailureMechanismSectionCollection(invalidId, new SerializableFailureMechanism()); // Assert - const string expectedMessage = "'id' must have a value."; + const string expectedMessage = "'id' must have a value and consist only of alphanumerical characters, '-', '_' or '.'."; TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); } @@ -84,36 +97,49 @@ public void ConstructorWithFailureMechanism_WithValidData_ReturnsExpectedValues() { // Setup - const string id = "section id"; + const string id = "collectionId"; var random = new Random(39); - var failureMechanism = new SerializableFailureMechanism("fm id", + var failureMechanism = new SerializableFailureMechanism("failureMechanismId", new SerializableTotalAssemblyResult(), random.NextEnumValue(), random.NextEnumValue(), new SerializableFailureMechanismAssemblyResult()); // Call - var sections = new SerializableFailureMechanismSectionCollection(id, - failureMechanism); + var collection = new SerializableFailureMechanismSectionCollection(id, + failureMechanism); // Assert - Assert.AreEqual(id, sections.Id); - Assert.AreEqual(failureMechanism.Id, sections.FailureMechanismId); - Assert.IsNull(sections.TotalAssemblyResultId); + Assert.AreEqual(id, collection.Id); + Assert.AreEqual(failureMechanism.Id, collection.FailureMechanismId); + Assert.IsNull(collection.TotalAssemblyResultId); } [Test] - [TestCase(null)] + public void ConstructorWithTotalAssemblyResult_IdNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => new SerializableFailureMechanismSectionCollection(null, + new SerializableTotalAssemblyResult()); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("id", exception.ParamName); + } + + [Test] + [TestCase(" ")] [TestCase("")] - public void ConstructorWithTotalAssemblyResult_IdInvalid_ThrowsArgumentException(string id) + [TestCase(" InvalidId")] + public void ConstructorWithTotalAssemblyResult_InvalidId_ThrowsArgumentNullException(string invalidId) { // Call - TestDelegate call = () => new SerializableFailureMechanismSectionCollection(id, + TestDelegate call = () => new SerializableFailureMechanismSectionCollection(invalidId, new SerializableTotalAssemblyResult()); // Assert - const string expectedMessage = "'id' must have a value."; + const string expectedMessage = "'id' must have a value and consist only of alphanumerical characters, '-', '_' or '.'."; TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage); } @@ -133,22 +159,22 @@ public void ConstructorWithTotalAssemblyResult_WithValidData_ReturnsExpectedValues() { // Setup - const string id = "section id"; + const string id = "collectionId"; - var totalAssemblyResult = new SerializableTotalAssemblyResult("result id", + var totalAssemblyResult = new SerializableTotalAssemblyResult("resultId", new SerializableAssessmentProcess(), new SerializableFailureMechanismAssemblyResult(), new SerializableFailureMechanismAssemblyResult(), new SerializableAssessmentSectionAssemblyResult()); // Call - var sections = new SerializableFailureMechanismSectionCollection(id, - totalAssemblyResult); + var collection = new SerializableFailureMechanismSectionCollection(id, + totalAssemblyResult); // Assert - Assert.AreEqual(id, sections.Id); - Assert.AreEqual(totalAssemblyResult.Id, sections.TotalAssemblyResultId); - Assert.IsNull(sections.FailureMechanismId); + Assert.AreEqual(id, collection.Id); + Assert.AreEqual(totalAssemblyResult.Id, collection.TotalAssemblyResultId); + Assert.IsNull(collection.FailureMechanismId); } } } \ No newline at end of file