Index: Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/StructuresImporter.cs =================================================================== diff -u -r423010168fe01b2373e9be55f047659911e670f5 -r1d6be87de63acfac543d4b90aaf0618d3203b0c3 --- Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/StructuresImporter.cs (.../StructuresImporter.cs) (revision 423010168fe01b2373e9be55f047659911e670f5) +++ Ringtoets/Common/src/Ringtoets.Common.IO/FileImporters/StructuresImporter.cs (.../StructuresImporter.cs) (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -47,12 +47,12 @@ /// /// Initializes a new instance of . /// + /// The import target. /// The reference line used to check if the imported structures are intersecting it. /// The path to the file to import from. - /// The import target. /// Thrown when , /// or is null. - protected StructuresImporter(ReferenceLine referenceLine, string filePath, T importTarget) + protected StructuresImporter(T importTarget, ReferenceLine referenceLine, string filePath) : base(filePath, importTarget) { if (referenceLine == null) @@ -127,16 +127,7 @@ string csvFilePath = Path.ChangeExtension(FilePath, ".csv"); - StructuresCharacteristicsCsvReader rowsReader; - try - { - rowsReader = new StructuresCharacteristicsCsvReader(csvFilePath); - } - catch (ArgumentException exception) - { - log.Error(exception.Message); - return new ReadResult(true); - } + var rowsReader = new StructuresCharacteristicsCsvReader(csvFilePath); int totalNumberOfRows; try @@ -227,11 +218,6 @@ exception.Message); log.Warn(message); } - catch (CriticalFileReadException exception) - { - log.Error(exception.Message); - return new ReadResult(true); - } } return new ReadResult(false) { Index: Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs =================================================================== diff -u -r423010168fe01b2373e9be55f047659911e670f5 -r1d6be87de63acfac543d4b90aaf0618d3203b0c3 --- Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 423010168fe01b2373e9be55f047659911e670f5) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -22,7 +22,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -822,9 +822,9 @@ /// /// Looks up a localized string similar to Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT '{0}'.. /// - public static string StructuresImporter_CreateSpecificStructures_no_structursdata_for_location_0_ { + public static string StructuresImporter_CreateSpecificStructures_no_structuresdata_for_location_0_ { get { - return ResourceManager.GetString("StructuresImporter_CreateSpecificStructures_no_structursdata_for_location_0_", resourceCulture); + return ResourceManager.GetString("StructuresImporter_CreateSpecificStructures_no_structuresdata_for_location_0_", resourceCulture); } } @@ -875,34 +875,6 @@ } /// - /// Looks up a localized string similar to Parameter '{0}' ontbreekt voor de kunstwerklocatie met KWKIDENT '{1}'.. - /// - public static string StructuresImporter_ValidateParameterNames_Parameter_0_missing_for_structure_1_ { - get { - return ResourceManager.GetString("StructuresImporter_ValidateParameterNames_Parameter_0_missing_for_structure_1_", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Parameter '{0}' wordt herhaald voor de kunstwerklocatie met KWKIDENT '{1}'.. - /// - public static string StructuresImporter_ValidateParameterNames_Parameter_0_repeated_for_structure_1_ { - get { - return ResourceManager.GetString("StructuresImporter_ValidateParameterNames_Parameter_0_repeated_for_structure_1_", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Kunstwerklocatie met KWKIDENT '{0}' bevat teveel parameters. De verwachte parameters zijn: '{1}'.. - /// - public static string StructuresImporter_ValidateParameterNames_Structure_0_has_too_many_parameters_expected_parameters_1_ { - get { - return ResourceManager.GetString("StructuresImporter_ValidateParameterNames_Structure_0_has_too_many_parameters_exp" + - "ected_parameters_1_", resourceCulture); - } - } - - /// /// Looks up a localized string similar to Het kunstwerk heeft geen geldige waarde voor attribuut '{0}'.. /// public static string StructuresReader_GetNextStructure_Invalid_KWKIDENT { Index: Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx =================================================================== diff -u -r423010168fe01b2373e9be55f047659911e670f5 -r1d6be87de63acfac543d4b90aaf0618d3203b0c3 --- Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx (.../Resources.resx) (revision 423010168fe01b2373e9be55f047659911e670f5) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Properties/Resources.resx (.../Resources.resx) (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -356,16 +356,7 @@ Inlezen van kunstwerkgegevens. - + Kan geen geldige gegevens vinden voor kunstwerklocatie met KWKIDENT '{0}'. - - Kunstwerklocatie met KWKIDENT '{0}' bevat teveel parameters. De verwachte parameters zijn: '{1}'. - - - Parameter '{0}' ontbreekt voor de kunstwerklocatie met KWKIDENT '{1}'. - - - Parameter '{0}' wordt herhaald voor de kunstwerklocatie met KWKIDENT '{1}'. - \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj =================================================================== diff -u -r423010168fe01b2373e9be55f047659911e670f5 -r1d6be87de63acfac543d4b90aaf0618d3203b0c3 --- Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj (.../Ringtoets.Common.IO.csproj) (revision 423010168fe01b2373e9be55f047659911e670f5) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Ringtoets.Common.IO.csproj (.../Ringtoets.Common.IO.csproj) (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -73,9 +73,11 @@ + + Index: Ringtoets/Common/src/Ringtoets.Common.IO/Structures/StructuresParameterRowsValidator.cs =================================================================== diff -u --- Ringtoets/Common/src/Ringtoets.Common.IO/Structures/StructuresParameterRowsValidator.cs (revision 0) +++ Ringtoets/Common/src/Ringtoets.Common.IO/Structures/StructuresParameterRowsValidator.cs (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -0,0 +1,221 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Ringtoets.Common.IO.Structures +{ + /// + /// This class contains validations methods for objects. + /// + public static class StructuresParameterRowsValidator + { + private static readonly Dictionary>> heightStructuresRules = + new Dictionary>> + { + { + "KW_HOOGTE1", OrientationOfTheNormalOfTheStructure + }, + { + "KW_HOOGTE2", LevelOfCrestOfStructure + }, + { + "KW_HOOGTE3", FlowWidthAtBottomProtection + }, + { + "KW_HOOGTE4", CriticalOvertoppingDischarge + }, + { + "KW_HOOGTE5", WidthOfFlowApertures + }, + { + "KW_HOOGTE6", FailureProbabilityOfStructureGivenErosion + }, + { + "KW_HOOGTE7", StorageStructureArea + }, + { + "KW_HOOGTE8", AllowableIncreaseOfLevelForStorage + } + }; + + /// + /// Validates a collection of . + /// + /// The objects to validate. + /// A object containing the validation result. + /// Thrown when is null. + public static ValidationResult ValidateHeightStructuresParameters(IList structureParameterRows) + { + if (structureParameterRows == null) + { + throw new ArgumentNullException("structureParameterRows"); + } + + List warningMessages = new List(); + List errorMessages = new List(); + + foreach (string name in heightStructuresRules.Keys) + { + int count = structureParameterRows.Count(row => row.ParameterId.Equals(name)); + + if (count < 1) + { + errorMessages.Add(string.Format("Parameter '{0}' ontbreekt.", name)); + continue; + } + + if (count > 1) + { + warningMessages.Add(string.Format("Parameter '{0}' komt meermaals voor. De eerste specificatie wordt gebruikt.", name)); + } + + errorMessages.AddRange(heightStructuresRules[name](structureParameterRows.First(row => row.ParameterId.Equals(name)))); + } + + return new ValidationResult(errorMessages, warningMessages); + } + + #region HeightStructuesRules + + private static List OrientationOfTheNormalOfTheStructure(StructuresParameterRow row) + { + List messages = new List(); + double orientation = row.NumericalValue; + if (!(orientation >= 0 && orientation <= 360)) + { + messages.Add("De oriëntatie van het kunstwerk valt buiten het bereik [0, 360]."); + } + return messages; + } + + private static List LevelOfCrestOfStructure(StructuresParameterRow row) + { + List messages = new List(); + double meanCrestLevel = row.NumericalValue; + if (double.IsNaN(meanCrestLevel) || double.IsInfinity(meanCrestLevel)) + { + messages.Add("De kerende hoogte van het kunstwerk heeft een ongeldige waarde."); + } + double variance = row.VarianceValue; + if (double.IsNaN(variance) || double.IsInfinity(variance) || variance < 0.0 || row.VarianceType != VarianceType.StandardDeviation) + { + messages.Add("De standaard afwijking van de kerende hoogte normaalverdeling heeft een ongeldige waarde."); + } + return messages; + } + + private static List FlowWidthAtBottomProtection(StructuresParameterRow row) + { + List messages = new List(); + double meanFlowWidth = row.NumericalValue; + if (double.IsNaN(meanFlowWidth) || double.IsInfinity(meanFlowWidth)) + { + messages.Add("De stroomvoerende breedte bij bodembescherming van het kunstwerk heeft een ongeldige waarde."); + } + double variance = row.VarianceValue; + if (double.IsNaN(variance) || double.IsInfinity(variance) || variance < 0.0 || row.VarianceType != VarianceType.CoefficientOfVariation) + { + messages.Add("De variantie van de stroomvoerende breedte bij bodembescherming lognormaalverdeling heeft een ongeldige waarde."); + } + return messages; + } + + private static List CriticalOvertoppingDischarge(StructuresParameterRow row) + { + List messages = new List(); + double meanDischange = row.NumericalValue; + if (double.IsNaN(meanDischange) || double.IsInfinity(meanDischange)) + { + messages.Add("Het kritieke overslagdebiet per strekkende meter van het kunstwerk heeft een ongeldige waarde."); + } + double variance = row.VarianceValue; + if (double.IsNaN(variance) || double.IsInfinity(variance) || variance < 0.0 || row.VarianceType != VarianceType.CoefficientOfVariation) + { + messages.Add("De variantie van de kritieke overslagdebiet per strekkende meter lognormaalverdeling heeft een ongeldige waarde."); + } + return messages; + } + + private static List WidthOfFlowApertures(StructuresParameterRow row) + { + List messages = new List(); + double meanWidth = row.NumericalValue; + if (double.IsNaN(meanWidth) || double.IsInfinity(meanWidth)) + { + messages.Add("De breedte van de kruin van het kunstwerk heeft een ongeldige waarde."); + } + double variance = row.VarianceValue; + if (double.IsNaN(variance) || double.IsInfinity(variance) || variance < 0.0 || row.VarianceType != VarianceType.StandardDeviation) + { + messages.Add("De standaard afwijking van de breedte van de kruin normaalverdeling heeft een ongeldige waarde."); + } + return messages; + } + + private static List FailureProbabilityOfStructureGivenErosion(StructuresParameterRow row) + { + List messages = new List(); + double failureProbability = row.NumericalValue; + if (failureProbability < 0.0 || failureProbability > 1.0) + { + messages.Add("De waarde voor de faalkans van het kunstwerk valt buiten het bereik [0, 1]."); + } + return messages; + } + + private static List StorageStructureArea(StructuresParameterRow row) + { + List messages = new List(); + double meanArea = row.NumericalValue; + if (double.IsNaN(meanArea) || double.IsInfinity(meanArea)) + { + messages.Add("Het kombergend oppervlak van het kunstwerk heeft een ongeldige waarde."); + } + double variance = row.VarianceValue; + if (double.IsNaN(variance) || double.IsInfinity(variance) || variance < 0.0 || row.VarianceType != VarianceType.CoefficientOfVariation) + { + messages.Add("De variantie van de kombergend oppervlak lognormaalverdeling heeft een ongeldige waarde."); + } + return messages; + } + + private static List AllowableIncreaseOfLevelForStorage(StructuresParameterRow row) + { + List messages = new List(); + double meanAllowableIncrease = row.NumericalValue; + if (double.IsNaN(meanAllowableIncrease) || double.IsInfinity(meanAllowableIncrease)) + { + messages.Add("De toegestane peilverhoging op het kombergend oppervlak van het kunstwerk heeft een ongeldige waarde."); + } + double variance = row.VarianceValue; + if (double.IsNaN(variance) || double.IsInfinity(variance) || variance < 0.0 || row.VarianceType != VarianceType.CoefficientOfVariation) + { + messages.Add("De variantie van de toegestane peilverhoging op het kombergend oppervlak lognormaalverdeling heeft een ongeldige waarde."); + } + return messages; + } + + #endregion + } +} \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.IO/ValidationResult.cs =================================================================== diff -u --- Ringtoets/Common/src/Ringtoets.Common.IO/ValidationResult.cs (revision 0) +++ Ringtoets/Common/src/Ringtoets.Common.IO/ValidationResult.cs (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -0,0 +1,103 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Ringtoets.Common.IO +{ + /// + /// This class represents the result of a validation. + /// + public class ValidationResult + { + private readonly List warningMessages = new List(); + private readonly List errorMessages = new List(); + + /// + /// Create a new instance of . + /// + /// The error messages for this . + /// Thrown when: + /// + /// is null + /// any message in is null, empty or consists of whitespace + /// + public ValidationResult(ICollection errorMessages) + { + if (errorMessages == null || errorMessages.Any(string.IsNullOrWhiteSpace)) + { + throw new ArgumentException("errorMessages"); + } + + IsValid = errorMessages.Count < 1; + this.errorMessages.AddRange(errorMessages); + } + + /// + /// Create a new instance of . + /// + /// The error messages for this . + /// The warning messages for this . + /// Thrown when: + /// + /// or is null + /// any message in or is null, empty or consists of whitespace + /// + public ValidationResult(ICollection errorMessages, List warningMessages) : this(errorMessages) + { + if (warningMessages == null || warningMessages.Any(string.IsNullOrWhiteSpace)) + { + throw new ArgumentException("warningMessages"); + } + + this.warningMessages.AddRange(warningMessages); + } + + /// + /// Gets a value which indicates whether the validation subject is valid. + /// + public bool IsValid { get; private set; } + + /// + /// Gets the error messages resulting from the validation. + /// + public IEnumerable ErrorMessages + { + get + { + return errorMessages; + } + } + + /// + /// Gets the warning messages resulting from the validation. + /// + public IEnumerable WarningMessages + { + get + { + return warningMessages; + } + } + } +} \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/StructuresImporterTest.cs =================================================================== diff -u -r423010168fe01b2373e9be55f047659911e670f5 -r1d6be87de63acfac543d4b90aaf0618d3203b0c3 --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/StructuresImporterTest.cs (.../StructuresImporterTest.cs) (revision 423010168fe01b2373e9be55f047659911e670f5) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/FileImporters/StructuresImporterTest.cs (.../StructuresImporterTest.cs) (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -19,13 +19,407 @@ // 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 Core.Common.Base; +using Core.Common.Base.Geometry; +using Core.Common.Base.IO; +using Core.Common.TestUtil; +using Core.Common.Utils.Builders; using NUnit.Framework; +using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.IO.FileImporters; +using Ringtoets.Common.IO.Structures; +using CoreCommonUtilsResources = Core.Common.Utils.Properties.Resources; namespace Ringtoets.Common.IO.Test.FileImporters { [TestFixture] public class StructuresImporterTest { - + private readonly ObservableList testImportTarget = new ObservableList(); + private readonly ReferenceLine testReferenceLine = new ReferenceLine(); + private readonly string testFilePath = string.Empty; + + [Test] + public void Constructor_Always_ExpectedValues() + { + // Call + var importer = new TestStructuresImporter(testImportTarget, testReferenceLine, testFilePath); + + // Assert + Assert.IsInstanceOf(importer); + } + + [Test] + public void Constructor_ImportTargetNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => new TestStructuresImporter(null, testReferenceLine, testFilePath); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("importTarget", exception.ParamName); + } + + [Test] + public void Constructor_ReferenceLineNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => new TestStructuresImporter(testImportTarget, null, testFilePath); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("referenceLine", exception.ParamName); + } + + [Test] + public void Constructor_FilePathNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => new TestStructuresImporter(testImportTarget, testReferenceLine, null); + + // Assert + var exception = Assert.Throws(call); + Assert.AreEqual("filePath", exception.ParamName); + } + + [Test] + [TestCase("")] + [TestCase(" ")] + public void Import_FromInvalidEmptyPath_FalseAndLogError(string filePath) + { + // Setup + var testStructuresImporter = new TestStructuresImporter(testImportTarget, testReferenceLine, filePath); + + // Call + var importResult = true; + Action call = () => importResult = testStructuresImporter.Import(); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string[] messageArray = messages.ToArray(); + string expectedMessage = new FileReaderErrorMessageBuilder(filePath) + .Build(CoreCommonUtilsResources.Error_Path_must_be_specified); + StringAssert.StartsWith(expectedMessage, messageArray[0]); + }); + Assert.IsFalse(importResult); + } + + [Test] + public void Import_FromPathContainingInvalidFileCharacters_FalseAndLogError() + { + // Setup + string filePath = "c:\\Invalid_Characters.shp"; + + var invalidFileNameChars = Path.GetInvalidFileNameChars(); + var invalidPath = filePath.Replace('_', invalidFileNameChars[0]); + + var testStructuresImporter = new TestStructuresImporter(testImportTarget, testReferenceLine, invalidPath); + + // Call + var importResult = true; + Action call = () => importResult = testStructuresImporter.Import(); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string message = messages.First(); + string expectedMessage = new FileReaderErrorMessageBuilder(invalidPath) + .Build(string.Format(CoreCommonUtilsResources.Error_Path_cannot_contain_Characters_0_, string.Join(", ", Path.GetInvalidFileNameChars()))); + StringAssert.StartsWith(expectedMessage, message); + }); + Assert.IsFalse(importResult); + } + + [Test] + public void Import_FromDirectoryPath_FalseAndLogError() + { + // Setup + string folderPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO) + Path.DirectorySeparatorChar; + + var testStructuresImporter = new TestStructuresImporter(testImportTarget, testReferenceLine, folderPath); + + // Call + var importResult = true; + Action call = () => importResult = testStructuresImporter.Import(); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string[] messageArray = messages.ToArray(); + string expectedMessage = new FileReaderErrorMessageBuilder(folderPath) + .Build(CoreCommonUtilsResources.Error_Path_must_not_point_to_empty_file_name); + StringAssert.StartsWith(expectedMessage, messageArray[0]); + }); + Assert.IsFalse(importResult); + } + + [Test] + [TestCase("Multiple_Polygon_with_ID.shp")] + [TestCase("Multiple_PolyLine_with_ID.shp")] + [TestCase("Single_Multi-Polygon_with_ID.shp")] + [TestCase("Single_Multi-PolyLine_with_ID.shp")] + [TestCase("Single_Polygon_with_ID.shp")] + [TestCase("Single_PolyLine_with_ID.shp")] + public void Import_FromFileWithNonPointFeatures_FalseAndLogError(string shapeFileName) + { + // Setup + string filePath = TestHelper.GetTestDataPath(TestDataPath.Core.Components.Gis.IO, + shapeFileName); + + var profilesImporter = new TestStructuresImporter(testImportTarget, testReferenceLine, filePath); + + // Call + var importResult = true; + Action call = () => importResult = profilesImporter.Import(); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string[] messageArray = messages.ToArray(); + string expectedMessage = + string.Format("Fout bij het lezen van bestand '{0}': Kon geen punten vinden in dit bestand.", filePath); + StringAssert.EndsWith(expectedMessage, messageArray[0]); + }); + Assert.IsFalse(importResult); + } + + [Test] + public void Import_InvalidShapefile_ReturnsFalse() + { + // Setup + string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("Structures", "StructuresWithoutKWKIDENT", "Kunstwerken.shp")); + + var profilesImporter = new TestStructuresImporter(testImportTarget, testReferenceLine, invalidFilePath); + + // Call + var importResult = profilesImporter.Import(); + + // Assert + Assert.IsFalse(importResult); + } + + [Test] + public void Import_InvalidCsvFile_ReturnsFalse() + { + // Setup + string invalidFilePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("Structures", "CorrectShpIncorrectCsv", "CorrectKunstwerken_IncorrectCsv.shp")); + + var referencePoints = new List + { + new Point2D(131144.094, 549979.893), + new Point2D(131538.705, 548316.752), + new Point2D(135878.442, 532149.859), + new Point2D(131225.017, 548395.948), + new Point2D(131270.38, 548367.462), + new Point2D(131507.119, 548322.951) + }; + ReferenceLine referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(referencePoints); + + var profilesImporter = new TestStructuresImporter(testImportTarget, referenceLine, invalidFilePath); + + // Call + var importResult = profilesImporter.Import(); + + // Assert + Assert.IsFalse(importResult); + } + + [Test] + public void Import_CancelOfImportToValidTargetWithValidFile_ReturnsFalse() + { + // Setup + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin, + Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); + + var testStructuresImporter = new TestStructuresImporter(testImportTarget, testReferenceLine, filePath); + + testStructuresImporter.Cancel(); + + // Call + bool importResult = testStructuresImporter.Import(); + + // Assert + Assert.IsFalse(importResult); + } + + [Test] + public void Import_ReuseOfCancelledImportToValidTargetWithValidFile_ReturnsTrue() + { + // Setup + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); + + var referencePoints = new List + { + new Point2D(131144.094, 549979.893), + new Point2D(131538.705, 548316.752), + new Point2D(135878.442, 532149.859), + new Point2D(131225.017, 548395.948), + new Point2D(131270.38, 548367.462), + new Point2D(131507.119, 548322.951) + }; + ReferenceLine referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(referencePoints); + var testStructuresImporter = new TestStructuresImporter(new ObservableList(), referenceLine, filePath); + + testStructuresImporter.Cancel(); + bool importResult = testStructuresImporter.Import(); + + // Precondition + Assert.IsFalse(importResult); + + // Call + importResult = testStructuresImporter.Import(); + + // Assert + Assert.IsTrue(importResult); + } + + [Test] + public void Import_LocationOutsideReferenceLine_LogErrorAndReturnTrue() + { + // Setup + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("Structures", "CorrectFiles", "Kunstwerken.shp")); + + var referencePoints = new List + { + new Point2D(131144.094, 549979.893), + new Point2D(131538.705, 548316.752), + new Point2D(135878.442, 532149.859), + new Point2D(131225.017, 548395.948), + new Point2D(131270.38, 548367.462) + }; + ReferenceLine referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(referencePoints); + var testStructuresImporter = new TestStructuresImporter(new ObservableList(), referenceLine, filePath); + + // Call + var importResult = true; + Action call = () => importResult = testStructuresImporter.Import(); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string[] messageArray = messages.ToArray(); + string expectedMessage = "Een kunstwerklocatie met KWKIDENT 'KUNST6' ligt niet op de referentielijn. Locatie wordt overgeslagen."; + StringAssert.StartsWith(expectedMessage, messageArray[0]); + }); + Assert.IsTrue(importResult); + } + + [Test] + public void Import_DuplicateLocation_LogWarningAndReturnTrue() + { + // Setup + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("Structures", "DuplicateLocation", "Kunstwerken.shp")); + + var referencePoints = new List + { + new Point2D(131144.094, 549979.893), + new Point2D(131538.705, 548316.752), + new Point2D(135878.442, 532149.859), + new Point2D(131225.017, 548395.948), + new Point2D(131270.38, 548367.462), + new Point2D(131507.119, 548322.951) + }; + ReferenceLine referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(referencePoints); + var testStructuresImporter = new TestStructuresImporter(new ObservableList(), referenceLine, filePath); + + // Call + var importResult = true; + Action call = () => importResult = testStructuresImporter.Import(); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string[] messageArray = messages.ToArray(); + string expectedMessage = "Kunstwerklocatie met KWKIDENT 'KUNST3' is opnieuw ingelezen."; + StringAssert.StartsWith(expectedMessage, messageArray[0]); + }); + Assert.IsTrue(importResult); + } + + [Test] + public void Import_LocationKWKIDENTNull_LogErrorAndReturnFalse() + { + // Setup + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("Structures", "StructuresWithNullKWKident", "Kunstwerken.shp")); + + var referencePoints = new List + { + new Point2D(131144.094, 549979.893), + new Point2D(131538.705, 548316.752), + new Point2D(135878.442, 532149.859), + new Point2D(131225.017, 548395.948), + new Point2D(131270.38, 548367.462), + new Point2D(131507.119, 548322.951) + }; + ReferenceLine referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(referencePoints); + var testStructuresImporter = new TestStructuresImporter(new ObservableList(), referenceLine, filePath); + + // Call + var importResult = true; + Action call = () => importResult = testStructuresImporter.Import(); + + // Assert + TestHelper.AssertLogMessages(call, messages => + { + string[] messageArray = messages.ToArray(); + string expectedMessage = "Fout bij het lezen van kunstwerk op regel 1. Het kunstwerk heeft geen geldige waarde voor attribuut 'KWKIDENT'. Dit kunstwerk wordt overgeslagen."; + StringAssert.StartsWith(expectedMessage, messageArray[0]); + }); + Assert.IsFalse(importResult); + } + + [Test] + public void Import_IllegalCsvFile_ReturnsFalse() + { + // Setup + string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, + Path.Combine("Structures", "IllegalCsv", "Kunstwerken.shp")); + + var referencePoints = new List + { + new Point2D(131144.094, 549979.893), + new Point2D(131538.705, 548316.752), + new Point2D(135878.442, 532149.859), + new Point2D(131225.017, 548395.948), + new Point2D(131270.38, 548367.462), + new Point2D(131507.119, 548322.951) + }; + ReferenceLine referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(referencePoints); + var testStructuresImporter = new TestStructuresImporter(new ObservableList(), referenceLine, filePath); + + // Call + var importResult = testStructuresImporter.Import(); + + // Assert + Assert.IsFalse(importResult); + } + + private class TestStructuresImporter : StructuresImporter> + { + public TestStructuresImporter(ObservableList importTarget, ReferenceLine referenceLine, string filePath) + : base(importTarget, referenceLine, filePath) {} + + protected override void CreateSpecificStructures(ICollection structureLocations, + Dictionary> groupedStructureParameterRows) {} + } + + private class TestStructure {} } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj =================================================================== diff -u -r423010168fe01b2373e9be55f047659911e670f5 -r1d6be87de63acfac543d4b90aaf0618d3203b0c3 --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj (.../Ringtoets.Common.IO.Test.csproj) (revision 423010168fe01b2373e9be55f047659911e670f5) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/Ringtoets.Common.IO.Test.csproj (.../Ringtoets.Common.IO.Test.csproj) (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -72,7 +72,9 @@ + + Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/Structures/StructuresParameterRowsValidatorTest.cs =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/Structures/StructuresParameterRowsValidatorTest.cs (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/Structures/StructuresParameterRowsValidatorTest.cs (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -0,0 +1,165 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using NUnit.Framework; +using Ringtoets.Common.IO.Structures; + +namespace Ringtoets.Common.IO.Test.Structures +{ + [TestFixture] + public class StructuresParameterRowsValidatorTest + { + [Test] + public void ValidateHeightStructuresParameters_StructureParameterRowsNull_ThrowsArgumentNullException() + { + // Call + TestDelegate call = () => StructuresParameterRowsValidator.ValidateHeightStructuresParameters(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreEqual("structureParameterRows", paramName); + } + + [Test] + public void ValidateHeightStructuresParameters_ParameterIdsMissingOrDuplicated_ExpectedValues() + { + // Setup + var structuresParameterRow = new StructuresParameterRow + { + ParameterId = "KW_HOOGTE1", + NumericalValue = 180.0 + }; + + List structureParameterRows = new List + { + structuresParameterRow, + structuresParameterRow + }; + + // Call + ValidationResult validationResult = StructuresParameterRowsValidator.ValidateHeightStructuresParameters(structureParameterRows); + + // Assert + Assert.IsFalse(validationResult.IsValid); + List expectedErrorMessages = new List + { + "Parameter 'KW_HOOGTE2' ontbreekt.", + "Parameter 'KW_HOOGTE3' ontbreekt.", + "Parameter 'KW_HOOGTE4' ontbreekt.", + "Parameter 'KW_HOOGTE5' ontbreekt.", + "Parameter 'KW_HOOGTE6' ontbreekt.", + "Parameter 'KW_HOOGTE7' ontbreekt.", + "Parameter 'KW_HOOGTE8' ontbreekt." + }; + List expectedWarningMessages = new List + { + "Parameter 'KW_HOOGTE1' komt meermaals voor. De eerste specificatie wordt gebruikt." + }; + CollectionAssert.AreEqual(expectedErrorMessages, validationResult.ErrorMessages); + CollectionAssert.AreEqual(expectedWarningMessages, validationResult.WarningMessages); + } + + [Test] + public void ValidateHeightStructuresParameters_ParametersAllInvalid_ExpectedValues() + { + // Setup + List structureParameterRows = new List + { + new StructuresParameterRow + { + ParameterId = "KW_HOOGTE1", + NumericalValue = double.NaN + }, + new StructuresParameterRow + { + ParameterId = "KW_HOOGTE2", + NumericalValue = double.NaN, + VarianceValue = -10.0 + }, + new StructuresParameterRow + { + ParameterId = "KW_HOOGTE3", + NumericalValue = double.NaN, + VarianceValue = double.NaN + }, + new StructuresParameterRow + { + ParameterId = "KW_HOOGTE4", + NumericalValue = double.PositiveInfinity, + VarianceValue = double.PositiveInfinity + }, + new StructuresParameterRow + { + ParameterId = "KW_HOOGTE5", + NumericalValue = double.PositiveInfinity, + VarianceValue = 10.0, + VarianceType = VarianceType.NotSpecified + }, + new StructuresParameterRow + { + ParameterId = "KW_HOOGTE6", + NumericalValue = double.NegativeInfinity + }, + new StructuresParameterRow + { + ParameterId = "KW_HOOGTE7", + NumericalValue = double.NegativeInfinity, + VarianceValue = -10.0 + }, + new StructuresParameterRow + { + ParameterId = "KW_HOOGTE8", + NumericalValue = double.PositiveInfinity, + VarianceValue = 10.0, + VarianceType = VarianceType.StandardDeviation + } + }; + + // Call + ValidationResult validationResult = StructuresParameterRowsValidator.ValidateHeightStructuresParameters(structureParameterRows); + + // Assert + Assert.IsFalse(validationResult.IsValid); + List expectedErrorMessages = new List + { + "De oriëntatie van het kunstwerk valt buiten het bereik [0, 360].", + "De kerende hoogte van het kunstwerk heeft een ongeldige waarde.", + "De standaard afwijking van de kerende hoogte normaalverdeling heeft een ongeldige waarde.", + "De stroomvoerende breedte bij bodembescherming van het kunstwerk heeft een ongeldige waarde.", + "De variantie van de stroomvoerende breedte bij bodembescherming lognormaalverdeling heeft een ongeldige waarde.", + "Het kritieke overslagdebiet per strekkende meter van het kunstwerk heeft een ongeldige waarde.", + "De variantie van de kritieke overslagdebiet per strekkende meter lognormaalverdeling heeft een ongeldige waarde.", + "De breedte van de kruin van het kunstwerk heeft een ongeldige waarde.", + "De standaard afwijking van de breedte van de kruin normaalverdeling heeft een ongeldige waarde.", + "De waarde voor de faalkans van het kunstwerk valt buiten het bereik [0, 1].", + "Het kombergend oppervlak van het kunstwerk heeft een ongeldige waarde.", + "De variantie van de kombergend oppervlak lognormaalverdeling heeft een ongeldige waarde.", + "De toegestane peilverhoging op het kombergend oppervlak van het kunstwerk heeft een ongeldige waarde.", + "De variantie van de toegestane peilverhoging op het kombergend oppervlak lognormaalverdeling heeft een ongeldige waarde." + }; + List expectedWarningMessages = new List(); + CollectionAssert.AreEqual(expectedErrorMessages, validationResult.ErrorMessages); + CollectionAssert.AreEqual(expectedWarningMessages, validationResult.WarningMessages); + } + } +} \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/ValidationResultTest.cs =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/ValidationResultTest.cs (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/ValidationResultTest.cs (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -0,0 +1,199 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using Core.Common.TestUtil; +using NUnit.Framework; + +namespace Ringtoets.Common.IO.Test +{ + [TestFixture] + public class ValidationResultTest + { + List TestMessages() + { + return new List + { + "Some text." + }; + } + + #region Constructor one parameter + + [Test] + public void Constructor_ErrorMessagesNull_ThrowsArgumentException() + { + // Call + TestDelegate call = () => new ValidationResult(null); + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "errorMessages"); + } + + [Test] + [TestCase(null)] + [TestCase("")] + [TestCase(" ")] + public void Constructor_ErrorMessagesContainsNullOrWhiteSpace_ThrowsArgumentException(string errormessage) + { + // Setup + List errorMessages = TestMessages(); + errorMessages.Add(errormessage); + + // Call + TestDelegate call = () => new ValidationResult(errorMessages); + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "errorMessages"); + } + + [Test] + public void Constructor_ErrorMessagesEmpty_ExpectedValues() + { + // Setup + List errorMessages = new List(); + + // Call + var validationResult = new ValidationResult(errorMessages); + + // Assert + Assert.IsTrue(validationResult.IsValid); + CollectionAssert.IsEmpty(validationResult.ErrorMessages); + CollectionAssert.IsEmpty(validationResult.WarningMessages); + } + + [Test] + public void Constructor_ErrorMessages_ExpectedValues() + { + // Setup + List errorMessages = TestMessages(); + + // Call + var validationResult = new ValidationResult(errorMessages); + + // Assert + Assert.IsFalse(validationResult.IsValid); + CollectionAssert.AreEqual(errorMessages, validationResult.ErrorMessages); + CollectionAssert.IsEmpty(validationResult.WarningMessages); + } + + #endregion + + #region Constructor two parameters + + [Test] + public void Constructor_ErrorMessagesNullWarningMessagesAreValid_ThrowsArgumentException() + { + // Setup + List warningMessages = new List(); + + // Call + TestDelegate call = () => new ValidationResult(null, warningMessages); + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "errorMessages"); + } + + [Test] + public void Constructor_ErrorMessagesAreValidWarningMessagesNull_ThrowsArgumentException() + { + // Setup + List errorMessages = new List(); + + // Call + TestDelegate call = () => new ValidationResult(errorMessages, null); + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "warningMessages"); + } + + [Test] + [TestCase(null)] + [TestCase("")] + [TestCase(" ")] + public void Constructor_ErrorMessagesContainsNullOrWhiteSpaceWarningMessagesAreValid_ThrowsArgumentException(string errormessage) + { + // Setup + List errorMessages = TestMessages(); + errorMessages.Add(errormessage); + List warningMessages = new List(); + + // Call + TestDelegate call = () => new ValidationResult(errorMessages, warningMessages); + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "errorMessages"); + } + + [Test] + [TestCase(null)] + [TestCase("")] + [TestCase(" ")] + public void Constructor_ErrorMessagesAreValidWarningMessagesContainsNullOrWhiteSpace_ThrowsArgumentException(string warningMessage) + { + // Setup + List errorMessages = new List(); + List warningMessages = TestMessages(); + warningMessages.Add(warningMessage); + + // Call + TestDelegate call = () => new ValidationResult(errorMessages, warningMessages); + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(call, "warningMessages"); + } + + [Test] + public void Constructor_ErrorMessagesEmptyWarningMessagesEmpty_ExpectedValues() + { + // Setup + List errorMessages = new List(); + List warningMessages = new List(); + + // Call + var validationResult = new ValidationResult(errorMessages, warningMessages); + + // Assert + Assert.IsTrue(validationResult.IsValid); + CollectionAssert.IsEmpty(validationResult.ErrorMessages); + CollectionAssert.IsEmpty(validationResult.WarningMessages); + } + + [Test] + public void Constructor_ErrorMessagesWarningMessages_ExpectedValues() + { + // Setup + List errorMessages = TestMessages(); + List warningMessages = TestMessages(); + + // Call + var validationResult = new ValidationResult(errorMessages, warningMessages); + + // Assert + Assert.IsFalse(validationResult.IsValid); + CollectionAssert.AreEqual(errorMessages, validationResult.ErrorMessages); + CollectionAssert.AreEqual(warningMessages, validationResult.WarningMessages); + } + + #endregion + } +} \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectFiles/Kunstwerken.csv =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectFiles/Kunstwerken.csv (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectFiles/Kunstwerken.csv (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -0,0 +1,17 @@ +Namespace;Identificatie;Versie;Kunstwerken.identificatie;Parameter.code;Parameter.omschrijving;Grootheid.code;Grootheid.omschrijving;Eenheid.code;Eenheid.omschrijving;Hoedanigheid.code;Hoedanigheid.omschrijving;Waardebepalingsmethode.code;Waardebepalingsmethode.codespace;Waardebewerkingsmethode.code;Waardebewerkingsmethode.codespace;AlphanumeriekeWaarde;NumeriekeWaarde;Standarddeviatie.variance;Boolean;Kwaliteitsoordeel.code +12;KUNST1;1;KW_HOOGTE1;KUNSTW;Kunstwerk;ORIENTATIE;Ori�ntatie;grad;graden;;;Schematiseringshandleiding;;;;;45;0;0; +12;KUNST1;1;KW_HOOGTE2;KRUIN;Kruin;NIVEAU;Niveau;m;meter;;;Schematiseringshandleiding;;;;;5.9;0.01;1; +12;KUNST1;1;KW_HOOGTE3;STROM;Stroming;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;18.5;0.05;1; +12;KUNST1;1;KW_HOOGTE4;OVS;Overslag;DEBIET;Debiet;m3/s/m;kubieke meter per seconden per meter;;;Schematiseringshandleiding;;;;;0.1;0.15;0; +12;KUNST1;1;KW_HOOGTE5;KRUIN;Kruin;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;4;0.05;1; +12;KUNST1;1;KW_HOOGTE6;KUNSTW;Kunstwerk;FAALKANS;Faalkans;;;;;Schematiseringshandleiding;;;;;1;0;0; +12;KUNST1;1;KW_HOOGTE7;KOMBERG;Komberging;OPPERVLAKTE;Oppervlakte;m2;vierkante meter;;;Schematiseringshandleiding;;;;;500000;0.1;0; +12;KUNST1;1;KW_HOOGTE8;PEIL;Peil;VERHOGING;Verhoging;m;meter;;;Schematiseringshandleiding;;;;;6.5;0.1;1; +12;KUNST2;1;KW_HOOGTE1;KUNSTW;Kunstwerk;ORIENTATIE;Ori�ntatie;grad;graden;;;Schematiseringshandleiding;;;;;;0;0; +12;KUNST2;1;KW_HOOGTE2;KRUIN;Kruin;NIVEAU;Niveau;m;meter;;;Schematiseringshandleiding;;;;;;0.01;1; +12;KUNST2;1;KW_HOOGTE3;STROM;Stroming;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;;0.05;1; +12;KUNST2;1;KW_HOOGTE4;OVS;Overslag;DEBIET;Debiet;m3/s/m;kubieke meter per seconden per meter;;;Schematiseringshandleiding;;;;;;0.15;0; +12;KUNST2;1;KW_HOOGTE5;KRUIN;Kruin;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;;0.05;1; +12;KUNST2;1;KW_HOOGTE6;KUNSTW;Kunstwerk;FAALKANS;Faalkans;;;;;Schematiseringshandleiding;;;;;1;0;0; +12;KUNST2;1;KW_HOOGTE7;KOMBERG;Komberging;OPPERVLAKTE;Oppervlakte;m2;vierkante meter;;;Schematiseringshandleiding;;;;;;0.1;0; +12;KUNST2;1;KW_HOOGTE8;PEIL;Peil;VERHOGING;Verhoging;m;meter;;;Schematiseringshandleiding;;;;;;0.1;1; Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectShpIncorrectCsv/CorrectKunstwerken_IncorrectCsv.csv =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectShpIncorrectCsv/CorrectKunstwerken_IncorrectCsv.csv (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectShpIncorrectCsv/CorrectKunstwerken_IncorrectCsv.csv (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -0,0 +1,17 @@ +Namespace;Identificatie;Versie;Kunstwerken.identificatie;Parameter.code;Parameter.omschrijving;Grootheid.code;Grootheid.omschrijving;Eenheid.code;Eenheid.omschrijving;Hoedanigheid.code;Hoedanigheid.omschrijving;Waardebepalingsmethode.code;Waardebepalingsmethode.codespace;Waardebewerkingsmethode.code;Waardebewerkingsmethode.codespace;AlphanumeriekeWaarde;NumeriekeWaarde;Boolean;Kwaliteitsoordeel.code +12;KUNST1;1;KW_HOOGTE1;KUNSTW;Kunstwerk;ORIENTATIE;Ori�ntatie;grad;graden;;;Schematiseringshandleiding;;;;;45;0; +12;KUNST1;1;KW_HOOGTE2;KRUIN;Kruin;NIVEAU;Niveau;m;meter;;;Schematiseringshandleiding;;;;;5.9;1; +12;KUNST1;1;KW_HOOGTE3;STROM;Stroming;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;18.5;1; +12;KUNST1;1;KW_HOOGTE4;OVS;Overslag;DEBIET;Debiet;m3/s/m;kubieke meter per seconden per meter;;;Schematiseringshandleiding;;;;;0.1;0; +12;KUNST1;1;KW_HOOGTE5;KRUIN;Kruin;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;4;1; +12;KUNST1;1;KW_HOOGTE6;KUNSTW;Kunstwerk;FAALKANS;Faalkans;;;;;Schematiseringshandleiding;;;;;1;0; +12;KUNST1;1;KW_HOOGTE7;KOMBERG;Komberging;OPPERVLAKTE;Oppervlakte;m2;vierkante meter;;;Schematiseringshandleiding;;;;;500000;0; +12;KUNST1;1;KW_HOOGTE8;PEIL;Peil;VERHOGING;Verhoging;m;meter;;;Schematiseringshandleiding;;;;;6.5;1; +12;KUNST2;1;KW_HOOGTE1;KUNSTW;Kunstwerk;ORIENTATIE;Ori�ntatie;grad;graden;;;Schematiseringshandleiding;;;;;;0; +12;KUNST2;1;KW_HOOGTE2;KRUIN;Kruin;NIVEAU;Niveau;m;meter;;;Schematiseringshandleiding;;;;;;1; +12;KUNST2;1;KW_HOOGTE3;STROM;Stroming;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;;1; +12;KUNST2;1;KW_HOOGTE4;OVS;Overslag;DEBIET;Debiet;m3/s/m;kubieke meter per seconden per meter;;;Schematiseringshandleiding;;;;;;0; +12;KUNST2;1;KW_HOOGTE5;KRUIN;Kruin;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;;1; +12;KUNST2;1;KW_HOOGTE6;KUNSTW;Kunstwerk;FAALKANS;Faalkans;;;;;Schematiseringshandleiding;;;;;1;0; +12;KUNST2;1;KW_HOOGTE7;KOMBERG;Komberging;OPPERVLAKTE;Oppervlakte;m2;vierkante meter;;;Schematiseringshandleiding;;;;;;0; +12;KUNST2;1;KW_HOOGTE8;PEIL;Peil;VERHOGING;Verhoging;m;meter;;;Schematiseringshandleiding;;;;;;1; Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectShpIncorrectCsv/CorrectKunstwerken_IncorrectCsv.dbf =================================================================== diff -u Binary files differ Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectShpIncorrectCsv/CorrectKunstwerken_IncorrectCsv.prj =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectShpIncorrectCsv/CorrectKunstwerken_IncorrectCsv.prj (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectShpIncorrectCsv/CorrectKunstwerken_IncorrectCsv.prj (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -0,0 +1 @@ +PROJCS["RD_New",GEOGCS["GCS_Amersfoort",DATUM["D_Amersfoort",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.017453292519943295]],PROJECTION["Double_Stereographic"],PARAMETER["False_Easting",155000.0],PARAMETER["False_Northing",463000.0],PARAMETER["Central_Meridian",5.38763888888889],PARAMETER["Scale_Factor",0.9999079],PARAMETER["Latitude_Of_Origin",52.15616055555555],UNIT["Meter",1.0]] \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectShpIncorrectCsv/CorrectKunstwerken_IncorrectCsv.shp =================================================================== diff -u Binary files differ Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/CorrectShpIncorrectCsv/CorrectKunstwerken_IncorrectCsv.shx =================================================================== diff -u Binary files differ Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/DuplicateLocation/Kunstwerken.csv =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/DuplicateLocation/Kunstwerken.csv (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/DuplicateLocation/Kunstwerken.csv (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -0,0 +1,17 @@ +Namespace;Identificatie;Versie;Kunstwerken.identificatie;Parameter.code;Parameter.omschrijving;Grootheid.code;Grootheid.omschrijving;Eenheid.code;Eenheid.omschrijving;Hoedanigheid.code;Hoedanigheid.omschrijving;Waardebepalingsmethode.code;Waardebepalingsmethode.codespace;Waardebewerkingsmethode.code;Waardebewerkingsmethode.codespace;AlphanumeriekeWaarde;NumeriekeWaarde;Standarddeviatie.variance;Boolean;Kwaliteitsoordeel.code +12;KUNST1;1;KW_HOOGTE1;KUNSTW;Kunstwerk;ORIENTATIE;Ori�ntatie;grad;graden;;;Schematiseringshandleiding;;;;;45;0;0; +12;KUNST1;1;KW_HOOGTE2;KRUIN;Kruin;NIVEAU;Niveau;m;meter;;;Schematiseringshandleiding;;;;;5.9;0.01;1; +12;KUNST1;1;KW_HOOGTE3;STROM;Stroming;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;18.5;0.05;1; +12;KUNST1;1;KW_HOOGTE4;OVS;Overslag;DEBIET;Debiet;m3/s/m;kubieke meter per seconden per meter;;;Schematiseringshandleiding;;;;;0.1;0.15;0; +12;KUNST1;1;KW_HOOGTE5;KRUIN;Kruin;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;4;0.05;1; +12;KUNST1;1;KW_HOOGTE6;KUNSTW;Kunstwerk;FAALKANS;Faalkans;;;;;Schematiseringshandleiding;;;;;1;0;0; +12;KUNST1;1;KW_HOOGTE7;KOMBERG;Komberging;OPPERVLAKTE;Oppervlakte;m2;vierkante meter;;;Schematiseringshandleiding;;;;;500000;0.1;0; +12;KUNST1;1;KW_HOOGTE8;PEIL;Peil;VERHOGING;Verhoging;m;meter;;;Schematiseringshandleiding;;;;;6.5;0.1;1; +12;KUNST2;1;KW_HOOGTE1;KUNSTW;Kunstwerk;ORIENTATIE;Ori�ntatie;grad;graden;;;Schematiseringshandleiding;;;;;;0;0; +12;KUNST2;1;KW_HOOGTE2;KRUIN;Kruin;NIVEAU;Niveau;m;meter;;;Schematiseringshandleiding;;;;;;0.01;1; +12;KUNST2;1;KW_HOOGTE3;STROM;Stroming;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;;0.05;1; +12;KUNST2;1;KW_HOOGTE4;OVS;Overslag;DEBIET;Debiet;m3/s/m;kubieke meter per seconden per meter;;;Schematiseringshandleiding;;;;;;0.15;0; +12;KUNST2;1;KW_HOOGTE5;KRUIN;Kruin;BREEDTE;Breedte;m;meter;;;Schematiseringshandleiding;;;;;;0.05;1; +12;KUNST2;1;KW_HOOGTE6;KUNSTW;Kunstwerk;FAALKANS;Faalkans;;;;;Schematiseringshandleiding;;;;;1;0;0; +12;KUNST2;1;KW_HOOGTE7;KOMBERG;Komberging;OPPERVLAKTE;Oppervlakte;m2;vierkante meter;;;Schematiseringshandleiding;;;;;;0.1;0; +12;KUNST2;1;KW_HOOGTE8;PEIL;Peil;VERHOGING;Verhoging;m;meter;;;Schematiseringshandleiding;;;;;;0.1;1; Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/DuplicateLocation/Kunstwerken.dbf =================================================================== diff -u Binary files differ Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/DuplicateLocation/Kunstwerken.prj =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/DuplicateLocation/Kunstwerken.prj (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/DuplicateLocation/Kunstwerken.prj (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -0,0 +1 @@ +PROJCS["RD_New",GEOGCS["GCS_Amersfoort",DATUM["D_Amersfoort",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.017453292519943295]],PROJECTION["Double_Stereographic"],PARAMETER["False_Easting",155000.0],PARAMETER["False_Northing",463000.0],PARAMETER["Central_Meridian",5.38763888888889],PARAMETER["Scale_Factor",0.9999079],PARAMETER["Latitude_Of_Origin",52.15616055555555],UNIT["Meter",1.0]] \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/DuplicateLocation/Kunstwerken.shp =================================================================== diff -u Binary files differ Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/DuplicateLocation/Kunstwerken.shx =================================================================== diff -u Binary files differ Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/IllegalCsv/Kunstwerken.csv =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/IllegalCsv/Kunstwerken.csv (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/IllegalCsv/Kunstwerken.csv (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -0,0 +1 @@ \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/IllegalCsv/Kunstwerken.dbf =================================================================== diff -u Binary files differ Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/IllegalCsv/Kunstwerken.prj =================================================================== diff -u --- Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/IllegalCsv/Kunstwerken.prj (revision 0) +++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/IllegalCsv/Kunstwerken.prj (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -0,0 +1 @@ +PROJCS["RD_New",GEOGCS["GCS_Amersfoort",DATUM["D_Amersfoort",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.017453292519943295]],PROJECTION["Double_Stereographic"],PARAMETER["False_Easting",155000.0],PARAMETER["False_Northing",463000.0],PARAMETER["Central_Meridian",5.38763888888889],PARAMETER["Scale_Factor",0.9999079],PARAMETER["Latitude_Of_Origin",52.15616055555555],UNIT["Meter",1.0]] \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/IllegalCsv/Kunstwerken.shp =================================================================== diff -u Binary files differ Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/Structures/IllegalCsv/Kunstwerken.shx =================================================================== diff -u Binary files differ Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/HeightStructuresImporter.cs =================================================================== diff -u -r423010168fe01b2373e9be55f047659911e670f5 -r1d6be87de63acfac543d4b90aaf0618d3203b0c3 --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/HeightStructuresImporter.cs (.../HeightStructuresImporter.cs) (revision 423010168fe01b2373e9be55f047659911e670f5) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.IO/HeightStructuresImporter.cs (.../HeightStructuresImporter.cs) (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -24,8 +24,8 @@ using System.Linq; using Core.Common.Base; using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.IO; using Ringtoets.Common.IO.FileImporters; -using Ringtoets.Common.IO.Properties; using Ringtoets.Common.IO.Structures; using Ringtoets.HeightStructures.Data; using RingtoetsCommonIOResources = Ringtoets.Common.IO.Properties.Resources; @@ -37,18 +37,6 @@ /// public class HeightStructuresImporter : StructuresImporter> { - private static readonly string[] requiredParameterNames = - { - "KW_HOOGTE1", - "KW_HOOGTE2", - "KW_HOOGTE3", - "KW_HOOGTE4", - "KW_HOOGTE5", - "KW_HOOGTE6", - "KW_HOOGTE7", - "KW_HOOGTE8" - }; - private readonly ObservableList importTarget; /// @@ -61,39 +49,45 @@ /// Thrown when , /// or is null. public HeightStructuresImporter(ObservableList importTarget, ReferenceLine referenceLine, string filePath) - : base(referenceLine, filePath, importTarget) + : base(importTarget, referenceLine, filePath) { this.importTarget = importTarget; } protected override void CreateSpecificStructures(ICollection structureLocations, Dictionary> groupedStructureParameterRows) { - IEnumerable importedHeightStructures = CreateHeightStructures(structureLocations, groupedStructureParameterRows); + IEnumerable importedHeightStructures = CreateHeightStructures(structureLocations.ToList(), groupedStructureParameterRows); foreach (HeightStructure heightStructure in importedHeightStructures) { importTarget.Add(heightStructure); } } - private IEnumerable CreateHeightStructures(IEnumerable structureLocations, + private IEnumerable CreateHeightStructures(IList structureLocations, Dictionary> groupedStructureParameterRows) { var heightStructures = new List(); - foreach (StructureLocation structureLocation in structureLocations) + for (int i = 0; i < structureLocations.Count; i++) { + StructureLocation structureLocation = structureLocations[i]; + string id = structureLocation.Id; if (!groupedStructureParameterRows.ContainsKey(id)) { - log.ErrorFormat(Resources.StructuresImporter_CreateSpecificStructures_no_structursdata_for_location_0_, id); + log.WarnFormat(RingtoetsCommonIOResources.StructuresImporter_CreateSpecificStructures_no_structuresdata_for_location_0_, id); + log.ErrorFormat("Kunstwerk nummer {0} wordt overgeslagen.", i); continue; } List structureParameterRows = groupedStructureParameterRows[id]; - if (!ValidateParameterNames(structureParameterRows, id)) + + ValidationResult parameterRowsValidationResult = StructuresParameterRowsValidator.ValidateHeightStructuresParameters(structureParameterRows); + if (!parameterRowsValidationResult.IsValid) { + LogMessages(parameterRowsValidationResult, i); continue; } @@ -103,30 +97,17 @@ return heightStructures; } - private bool ValidateParameterNames(List structureParameterRows, string id) + private void LogMessages(ValidationResult validationResult, int i) { - bool isValid = true; - if (structureParameterRows.Count > requiredParameterNames.Length) + foreach (string message in validationResult.WarningMessages) { - log.ErrorFormat(RingtoetsCommonIOResources.StructuresImporter_ValidateParameterNames_Structure_0_has_too_many_parameters_expected_parameters_1_, id, string.Join(", ", requiredParameterNames)); - isValid = false; + log.Warn(message); } - - foreach (string name in requiredParameterNames) + foreach (string message in validationResult.ErrorMessages) { - int count = structureParameterRows.Count(row => row.ParameterId.Equals(name)); - if (count < 1) - { - log.ErrorFormat(RingtoetsCommonIOResources.StructuresImporter_ValidateParameterNames_Parameter_0_missing_for_structure_1_, name, id); - isValid = false; - } - if (count > 1) - { - log.ErrorFormat(RingtoetsCommonIOResources.StructuresImporter_ValidateParameterNames_Parameter_0_repeated_for_structure_1_, name, id); - isValid = false; - } + log.Error(message); } - return isValid; + log.ErrorFormat("Kunstwerk nummer {0} wordt overgeslagen.", i); } private static HeightStructure CreateHeightStructure(StructureLocation structureLocation, List structureParameterRows) Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ProfilesImporterTest.cs =================================================================== diff -u -r2973c5f790a5131e427bd5f73e2a620044199639 -r1d6be87de63acfac543d4b90aaf0618d3203b0c3 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ProfilesImporterTest.cs (.../ProfilesImporterTest.cs) (revision 2973c5f790a5131e427bd5f73e2a620044199639) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/FileImporters/ProfilesImporterTest.cs (.../ProfilesImporterTest.cs) (revision 1d6be87de63acfac543d4b90aaf0618d3203b0c3) @@ -41,46 +41,47 @@ [TestFixture] public class ProfilesImporterTest { + private readonly ObservableList testImportTarget = new ObservableList(); + private readonly ReferenceLine testReferenceLine = new ReferenceLine(); + private readonly string testFilePath = string.Empty; + [Test] - public void ParameterdConstructor_ExpectedValues() + public void ParameteredConstructor_ExpectedValues() { - // Setup - ReferenceLine referenceLine = new ReferenceLine(); - // Call - var importer = new TestProfilesImporter(new ObservableList(), referenceLine, ""); + var importer = new TestProfilesImporter(testImportTarget, testReferenceLine, testFilePath); // Assert Assert.IsInstanceOf(importer); } [Test] - public void ParameterdConstructor_ImportTargetNull_ThrowArgumentNullException() + public void ParameteredConstructor_ImportTargetNull_ThrowArgumentNullException() { // Call - TestDelegate call = () => new TestProfilesImporter(null, new ReferenceLine(), ""); + TestDelegate call = () => new TestProfilesImporter(null, testReferenceLine, testFilePath); // Assert var exception = Assert.Throws(call); Assert.AreEqual("importTarget", exception.ParamName); } [Test] - public void ParameterdConstructor_ReferenceLineNull_ThrowArgumentNullException() + public void ParameteredConstructor_ReferenceLineNull_ThrowArgumentNullException() { // Call - TestDelegate call = () => new TestProfilesImporter(new ObservableList(), null, ""); + TestDelegate call = () => new TestProfilesImporter(testImportTarget, null, testFilePath); // Assert var exception = Assert.Throws(call); Assert.AreEqual("referenceLine", exception.ParamName); } [Test] - public void ParameterdConstructor_FilePathNull_ThrowArgumentNullException() + public void ParameteredConstructor_FilePathNull_ThrowArgumentNullException() { // Call - TestDelegate call = () => new TestProfilesImporter(new ObservableList(), new ReferenceLine(), null); + TestDelegate call = () => new TestProfilesImporter(testImportTarget, testReferenceLine, null); // Assert var exception = Assert.Throws(call); @@ -93,13 +94,10 @@ public void Import_FromInvalidEmptyPath_FalseAndLogError(string filePath) { // Setup - ReferenceLine referenceLine = new ReferenceLine(); - var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); + var testProfilesImporter = new TestProfilesImporter(testImportTarget, testReferenceLine, filePath); - // Precondition - var importResult = true; - // Call + var importResult = true; Action call = () => importResult = testProfilesImporter.Import(); // Assert @@ -122,8 +120,7 @@ var invalidFileNameChars = Path.GetInvalidFileNameChars(); var invalidPath = filePath.Replace('_', invalidFileNameChars[0]); - ReferenceLine referenceLine = new ReferenceLine(); - var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, invalidPath); + var testProfilesImporter = new TestProfilesImporter(testImportTarget, testReferenceLine, invalidPath); // Call var importResult = true; @@ -146,8 +143,7 @@ // Setup string folderPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin) + Path.DirectorySeparatorChar; - ReferenceLine referenceLine = new ReferenceLine(); - var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, folderPath); + var testProfilesImporter = new TestProfilesImporter(testImportTarget, testReferenceLine, folderPath); // Call var importResult = true; @@ -177,8 +173,7 @@ string filePath = TestHelper.GetTestDataPath(TestDataPath.Core.Components.Gis.IO, shapeFileName); - ReferenceLine referenceLine = new ReferenceLine(); - var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); + var testProfilesImporter = new TestProfilesImporter(testImportTarget, testReferenceLine, filePath); // Call var importResult = true; @@ -206,8 +201,7 @@ string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin, Path.Combine("DikeProfiles", shapeFileName)); - ReferenceLine referenceLine = new ReferenceLine(); - var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); + var testProfilesImporter = new TestProfilesImporter(testImportTarget, testReferenceLine, filePath); // Call var importResult = true; @@ -473,16 +467,8 @@ string filePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Integration.Plugin, Path.Combine("DikeProfiles", "AllOkTestData", "Voorlanden 12-2.shp")); - var referencePoints = new List - { - new Point2D(130074.3, 543717.4), - new Point2D(130084.3, 543727.4) - }; - ReferenceLine referenceLine = new ReferenceLine(); - referenceLine.SetGeometry(referencePoints); - var testProfilesImporter = new TestProfilesImporter(new ObservableList(), referenceLine, filePath); + var testProfilesImporter = new TestProfilesImporter(testImportTarget, testReferenceLine, filePath); - // Precondition testProfilesImporter.Cancel(); // Call @@ -510,6 +496,8 @@ testProfilesImporter.Cancel(); bool importResult = testProfilesImporter.Import(); + + // Precondition Assert.IsFalse(importResult); // Call