Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.Designer.cs =================================================================== diff -u -rc85651351f64578aefc6913576430aed66325500 -rf01130d610fadc513e82f78093100fdd55c4b173 --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision c85651351f64578aefc6913576430aed66325500) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision f01130d610fadc513e82f78093100fdd55c4b173) @@ -233,6 +233,15 @@ } /// + /// Looks up a localized string similar to Het XML-document dat de configuratie voor de berekeningen beschrijft bevat geen berekeningselementen. + /// + public static string PipingConfigurationReader_No_calculation_items_found { + get { + return ResourceManager.GetString("PipingConfigurationReader_No_calculation_items_found", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Kritieke fout opgetreden bij het uitlezen van waardes uit kolommen in de database.. /// public static string PipingSoilProfileReader_Critical_Unexpected_value_on_column { Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.resx =================================================================== diff -u -rc85651351f64578aefc6913576430aed66325500 -rf01130d610fadc513e82f78093100fdd55c4b173 --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.resx (.../Resources.resx) (revision c85651351f64578aefc6913576430aed66325500) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Properties/Resources.resx (.../Resources.resx) (revision f01130d610fadc513e82f78093100fdd55c4b173) @@ -294,4 +294,7 @@ {0} Er is geen berekening configuratie geïmporteerd. + + Het XML-document dat de configuratie voor de berekeningen beschrijft bevat geen berekeningselementen. + \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs =================================================================== diff -u -r8d296ef98159086423790c4817260e9266436886 -rf01130d610fadc513e82f78093100fdd55c4b173 --- Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs (.../PipingConfigurationReader.cs) (revision 8d296ef98159086423790c4817260e9266436886) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/Readers/PipingConfigurationReader.cs (.../PipingConfigurationReader.cs) (revision f01130d610fadc513e82f78093100fdd55c4b173) @@ -65,6 +65,8 @@ xmlDocument = LoadDocument(xmlFilePath); ValidateToSchema(xmlDocument, xmlFilePath); + + ValidateNotEmpty(xmlDocument, xmlFilePath); } /// @@ -152,6 +154,25 @@ return xmlSchema; } + /// + /// Validates whether or not the provided XML document is empty. + /// + /// The XML document to validate. + /// The file path the XML document is loaded from. + /// Thrown when the provided XML document does not contain calculation items. + private static void ValidateNotEmpty(XDocument document, string xmlFilePath) + { + if (!document.Descendants() + .Any(d => d.Name == PipingConfigurationSchemaIdentifiers.CalculationElement + || d.Name == PipingConfigurationSchemaIdentifiers.FolderElement)) + { + string message = new FileReaderErrorMessageBuilder(xmlFilePath) + .Build(Resources.PipingConfigurationReader_No_calculation_items_found); + + throw new CriticalFileReadException(message); + } + } + private static IEnumerable ParseReadPipingCalculationItems(IEnumerable elements) { foreach (XElement element in elements) Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Importers/PipingConfigurationImporterTest.cs =================================================================== diff -u -r38d1c1735331bcf92ae5cd994d65751e678c5551 -rf01130d610fadc513e82f78093100fdd55c4b173 --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Importers/PipingConfigurationImporterTest.cs (.../PipingConfigurationImporterTest.cs) (revision 38d1c1735331bcf92ae5cd994d65751e678c5551) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Importers/PipingConfigurationImporterTest.cs (.../PipingConfigurationImporterTest.cs) (revision f01130d610fadc513e82f78093100fdd55c4b173) @@ -85,7 +85,7 @@ // Setup var calculationGroup = new CalculationGroup(); - string path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Piping.IO, Path.Combine("PipingConfigurationReader", "validEmptyRoot.xml")); + string path = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Piping.IO, Path.Combine("PipingConfigurationReader", "validConfigurationNesting.xml")); var importer = new PipingConfigurationImporter(path, calculationGroup); importer.SetProgressChanged((description, step, steps) => { Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Readers/PipingConfigurationReaderTest.cs =================================================================== diff -u -r87f2a9ca76ec0a77b2dcc6bf69c6d9d8a3b29168 -rf01130d610fadc513e82f78093100fdd55c4b173 --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Readers/PipingConfigurationReaderTest.cs (.../PipingConfigurationReaderTest.cs) (revision 87f2a9ca76ec0a77b2dcc6bf69c6d9d8a3b29168) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/Readers/PipingConfigurationReaderTest.cs (.../PipingConfigurationReaderTest.cs) (revision f01130d610fadc513e82f78093100fdd55c4b173) @@ -228,7 +228,7 @@ public void Constructor_FileInUse_ThrowCriticalFileReadException() { // Setup - string filePath = Path.Combine(testDirectoryPath, "validEmptyRoot.xml"); + string filePath = Path.Combine(testDirectoryPath, "validConfigurationNesting.xml"); using (new FileStream(filePath, FileMode.Open)) { @@ -277,17 +277,19 @@ } [Test] - public void Read_ValidConfigurationWithEmptyRoot_ReturnEmptyReadPipingCalculationItemsCollection() + public void Constructor_FileInvalidBasedOnEmptyRoot_ThrowCriticalFileReadException() { // Setup - string filePath = Path.Combine(testDirectoryPath, "validEmptyRoot.xml"); - var pipingConfigurationReader = new PipingConfigurationReader(filePath); + string filePath = Path.Combine(testDirectoryPath, "invalidEmptyRoot.xml"); // Call - IEnumerable readPipingCalculationItems = pipingConfigurationReader.Read(); + TestDelegate call = () => new PipingConfigurationReader(filePath); // Assert - CollectionAssert.IsEmpty(readPipingCalculationItems); + string expectedMessage = $"Fout bij het lezen van bestand '{filePath}': het XML-document dat de configuratie" + + " voor de berekeningen beschrijft bevat geen berekeningselementen."; + var exception = Assert.Throws(call); + Assert.AreEqual(expectedMessage, exception.Message); } [Test] Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/invalidEmptyRoot.xml =================================================================== diff -u --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/invalidEmptyRoot.xml (revision 0) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/invalidEmptyRoot.xml (revision f01130d610fadc513e82f78093100fdd55c4b173) @@ -0,0 +1,3 @@ + + + \ No newline at end of file Fisheye: Tag f01130d610fadc513e82f78093100fdd55c4b173 refers to a dead (removed) revision in file `Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/test-data/PipingConfigurationReader/validEmptyRoot.xml'. Fisheye: No comparison available. Pass `N' to diff?