Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingCalculationGroupReader.cs
===================================================================
diff -u -r9fd6d5a7d2289de6a5c6447fe8e0a9019cf75701 -ra6c81de65875f5d507f49d393f237181cfe9a4a2
--- Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingCalculationGroupReader.cs (.../PipingCalculationGroupReader.cs) (revision 9fd6d5a7d2289de6a5c6447fe8e0a9019cf75701)
+++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingCalculationGroupReader.cs (.../PipingCalculationGroupReader.cs) (revision a6c81de65875f5d507f49d393f237181cfe9a4a2)
@@ -19,12 +19,18 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Xml.Linq;
using System.Xml.Schema;
+using Core.Common.IO.Exceptions;
+using Core.Common.Utils;
+using Core.Common.Utils.Builders;
using Core.Common.Utils.Reflection;
using Ringtoets.Piping.IO.Properties;
+using CoreCommonUtilsResources = Core.Common.Utils.Properties.Resources;
namespace Ringtoets.Piping.IO.Readers
{
@@ -33,14 +39,21 @@
///
public class PipingCalculationGroupReader
{
- private readonly XmlSchemaSet schema;
-
///
/// Creates a new instance of .
///
- public PipingCalculationGroupReader()
+ /// The file path to the XML file.
+ /// Thrown when is invalid.
+ /// Thrown when points to a file that does not exist.
+ public PipingCalculationGroupReader(string filePath)
{
- schema = LoadXmlSchema();
+ IOUtils.ValidateFilePath(filePath);
+ if (!File.Exists(filePath))
+ {
+ string message = new FileReaderErrorMessageBuilder(filePath)
+ .Build(CoreCommonUtilsResources.Error_File_does_not_exist);
+ throw new CriticalFileReadException(message);
+ }
}
///
@@ -66,6 +79,8 @@
private void ValidateToSchema(XDocument document)
{
+ XmlSchemaSet schema = LoadXmlSchema();
+
try
{
document.Validate(schema, null);
Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Readers/PipingCalculationGroupReaderTest.cs
===================================================================
diff -u -r4ef4e426c0a77d547b58ec56581f292ddb3ed381 -ra6c81de65875f5d507f49d393f237181cfe9a4a2
--- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Readers/PipingCalculationGroupReaderTest.cs (.../PipingCalculationGroupReaderTest.cs) (revision 4ef4e426c0a77d547b58ec56581f292ddb3ed381)
+++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Readers/PipingCalculationGroupReaderTest.cs (.../PipingCalculationGroupReaderTest.cs) (revision a6c81de65875f5d507f49d393f237181cfe9a4a2)
@@ -19,7 +19,10 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
-using System.Collections.Generic;
+using System;
+using System.IO;
+using Core.Common.IO.Exceptions;
+using Core.Common.TestUtil;
using NUnit.Framework;
using Ringtoets.Piping.IO.Readers;
@@ -29,26 +32,66 @@
public class PipingCalculationGroupReaderTest
{
[Test]
- public void Constructor_Always_ReturnsNewInstance()
+ [TestCase("")]
+ [TestCase(" ")]
+ [TestCase(null)]
+ public void Constructor_NoFilePath_ThrowArgumentException(string invalidFilePath)
{
// Call
- var pipingCalculationGroupReader = new PipingCalculationGroupReader();
+ TestDelegate call = () => new PipingCalculationGroupReader(invalidFilePath);
// Assert
- Assert.NotNull(pipingCalculationGroupReader);
+ var expectedMessage = $"Fout bij het lezen van bestand '{invalidFilePath}': bestandspad mag niet leeg of ongedefinieerd zijn.";
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage);
}
[Test]
- public void Read_ReturnsExpectedCollectionOfReadPipingCalculationItems()
+ public void Constructor_FilePathHasInvalidPathCharacter_ThrowArgumentException()
{
// Setup
- var reader = new PipingCalculationGroupReader();
+ char[] invalidFileNameChars = Path.GetInvalidFileNameChars();
+ string validFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Piping.IO,
+ "Valid piping configuration.shp");
+ string invalidFilePath = validFilePath.Replace("piping", invalidFileNameChars[3].ToString());
+
// Call
- IEnumerable result = reader.Read();
+ TestDelegate call = () => new PipingCalculationGroupReader(invalidFilePath);
// Assert
- Assert.IsEmpty(result);
+ var expectedMessage = $"Fout bij het lezen van bestand '{invalidFilePath}': bestandspad mag niet de volgende tekens bevatten: {string.Join(", ", invalidFileNameChars)}";
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage);
}
+
+ [Test]
+ public void Constructor_FilePathIsActuallyDirectoryPath_ThrowArgumentException()
+ {
+ // Setup
+ string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Piping.IO,
+ Path.DirectorySeparatorChar.ToString());
+
+ // Call
+ TestDelegate call = () => new PipingCalculationGroupReader(invalidFilePath);
+
+ // Assert
+ var expectedMessage = $"Fout bij het lezen van bestand '{invalidFilePath}': bestandspad mag niet verwijzen naar een lege bestandsnaam.";
+ TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, expectedMessage);
+ }
+
+ [Test]
+ public void Constructor_FileDoesNotExist_ThrowCriticalFileReadException()
+ {
+ // Setup
+ string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Piping.IO,
+ "I_do_not_exist.shp");
+
+ // Call
+ TestDelegate call = () => new PipingCalculationGroupReader(invalidFilePath);
+
+ // Assert
+ var expectedMessage = $"Fout bij het lezen van bestand '{invalidFilePath}': het bestand bestaat niet.";
+ var message = Assert.Throws(call).Message;
+ Assert.AreEqual(expectedMessage, message);
+ }
}
-}
+}
\ No newline at end of file