Index: DamClients/DamUI/trunk/src/Dam/Tests/DataPluginImporterTests.cs =================================================================== diff -u -r2597 -r2609 --- DamClients/DamUI/trunk/src/Dam/Tests/DataPluginImporterTests.cs (.../DataPluginImporterTests.cs) (revision 2597) +++ DamClients/DamUI/trunk/src/Dam/Tests/DataPluginImporterTests.cs (.../DataPluginImporterTests.cs) (revision 2609) @@ -112,6 +112,165 @@ dataPluginImporter.SetDataSources("", srcDataSources); } + private const string HemPolderLocationId1 = "TPL_Hempolder_0010"; + private const string HemPolderLocationId2 = "TPL_Hempolder_0020"; + private void SetupInvoerHemPolderWithShapeFiles(string folder, string shapefile) + { + srcDataSources = new List + { + new DataSource + { + DataSourceType = DataSourceType.CsvFiles, + DataLocation = folder + }, + new DataSource + { + DataSourceType = DataSourceType.DataShapeFiles, + DataLocation = folder + } + }; + dataPluginImporter = new DataPluginImporter + { + Attributes = new[] + { + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.LocationAttributeId, + AttributeName = "LocationId", + DataSource = "Locations.shp" + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.DikeRingAttributeId, + AttributeName = "DikeRingId", + DataSource = "Locations.shp" + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.HeadPl3AttributeId, + AttributeName = "HEADPL3", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.HeadPl4AttributeId, + AttributeName = "HEADPL4", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.PlLineOffsetBelowDikeTopAtRiverAttributeId, + AttributeName = "PLOBDTOPR", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.PlLineOffsetBelowDikeTopAtPolderAttributeId, + AttributeName = "PLOBDTOPP", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.PlLineOffsetBelowShoulderBaseInsideAttributeId, + AttributeName = "PLOBSB", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.PlLineOffsetBelowDikeToeAtPolderAttributeId, + AttributeName = "PLOBDTOEP", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.UsePlLineOffsetBelowDikeCrestMiddleAttributeId, + AttributeName = "USEPLOBDCM", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.PlLineOffsetBelowDikeCrestMiddleAttributeId, + AttributeName = "PLOBDCM", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.UsePlLineOffsetFactorBelowShoulderCrestAttributeId, + AttributeName = "USEPLOFBSC", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.PlLineOffsetFactorBelowShoulderCrestAttributeId, + AttributeName = "PLOFBSC", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.UpliftCriterionStabilityAttributeId, + AttributeName = "UPLSTAB", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.UpliftCriterionPipingAttributeId, + AttributeName = "UPLPIPING", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.DikeTableHeightAttributeId, + AttributeName = "DTH", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.RiverLevelAttributeId, + AttributeName = "WHEIGHT", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.RiverLevelLowAttributeId, + AttributeName = "WHEIGHTLOW", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.RequiredSafetyFactorPipingAttributeId, + AttributeName = "FPIPING", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.RequiredSafetyFactorStabilityInnerSlopeAttributeId, + AttributeName = "FSTABIN", + DataSource = shapefile + }, + new DataAttribute + { + AttributeId = LocationShapeFileAttributeMap.RequiredSafetyFactorStabilityOuterSlopeAttributeId, + AttributeName = "FSTABOUT", + DataSource = shapefile + }, + } + }; + dataPluginImporter.SetDataSources("", srcDataSources); + } + private void SetupInvoerHemPolderWithoutShapeFiles(string folder) + { + srcDataSources = new List + { + new DataSource + { + DataSourceType = DataSourceType.CsvFiles, + DataLocation = folder + }, + }; + dataPluginImporter = new DataPluginImporter(); + dataPluginImporter.SetDataSources("", srcDataSources); + } + [Test] public void CanDefineDataSources() { @@ -167,13 +326,15 @@ Assert.AreEqual("Waterschap", info.Description); } + /// + /// Some parameters for location can be read from either locations.csv or shapefile + /// The value from shapefile overwrites the value from locations.csv + /// In this test the values for headpl2 in the import files are: + /// In shapefiles: -5.37 for both locations + /// In locations.csv: -99 for both locations + /// Expected value in location will be -5.37 for both locations + /// [Test] - // Some parameters for location can be read from either locations.csv or shapefile - // The value from shapefile overwrites the value from locations.csv - // In this test the values for headpl2 in the import files are: - // In shapefiles: -5.37 for both locations - // In locations.csv: -99 for both locations - // Expected value in location will be -5.37 for both locations public void ValuesFromShapeFileOverwriteValuesFromLocationsCsv() { SetupInvoer1WithShapeFiles(); @@ -189,14 +350,16 @@ Assert.AreEqual("-5.37", locationDetails.First(x => x.ParameterName.Equals("HeadPL2")).ParameterValue); } + /// + /// Some parameters for scenario can be read from either locations.csv, shapefile or scenarios.csv + /// The value from scenarios.csv overwrites the value from shapefile, which overwrites the value from locations.csv + /// In this test the values for headpl3 in the import files are: + /// In scenarios.csv: not defined + /// In shapefiles: not defined + /// In locations.csv: -99 for both locations + /// Expected value in scenario will be -99 + /// [Test] - // Some parameters for scenario can be read from either locations.csv, shapefile or scenarios.csv - // The value from scenarios.csv overwrites the value from shapefile, which overwrites the value from locations.csv - // In this test the values for headpl3 in the import files are: - // In scenarios.csv: not defined - // In shapefiles: not defined - // In locations.csv: -99 for both locations - // Expected value in scenario will be -99 public void ValuesFromLocationsCsvAreCopiedToScenarioIfNotDefinedInScenariosCsvOrShapeFile() { SetupInvoer1WithoutShapeFiles(); @@ -213,14 +376,16 @@ Assert.AreEqual("-99", scenarioDetails.First(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); } + /// + /// Some parameters for scenario can be read from either locations.csv, shapefile or scenarios.csv + /// The value from scenarios.csv overwrites the value from shapefile, which overwrites the value from locations.csv + /// In this test the values for headpl3 in the import files are: + /// In scenarios.csv: not defined + /// In shapefiles: -3.651 for location 1, -3.632 for location 2 + /// In locations.csv: -99 for both locations + /// Expected value in scenario will be -3.651 for location 1, -3.632 for location 2 + /// [Test] - // Some parameters for scenario can be read from either locations.csv, shapefile or scenarios.csv - // The value from scenarios.csv overwrites the value from shapefile, which overwrites the value from locations.csv - // In this test the values for headpl3 in the import files are: - // In scenarios.csv: not defined - // In shapefiles: -3.651 for location 1, -3.632 for location 2 - // In locations.csv: -99 for both locations - // Expected value in scenario will be -3.651 for location 1, -3.632 for location 2 public void ValuesFromShapeFileAreCopiedToScenarioIfNotDefinedInScenariosCsv() { SetupInvoer1WithShapeFiles(); @@ -331,9 +496,11 @@ } } + /// + /// RiverLevel must be specified in locations.csv, shapefile or scenarios.csv + /// In this test reading from shapefile is skipped, RiverLevel is defined in locations, not in scenarios + /// [Test] - // RiverLevel must be specified in locations.csv, shapefile or scenarios.csv - // In this test reading from shapefile is skipped, RiverLevel is defined in locations, not in scenarios public void ImportRiverLevelFromLocationsTest() { // Setup folder for situation where RiverLevel is specified in locations @@ -375,9 +542,11 @@ Assert.AreEqual(0, dataPluginImporter.ImportLogMessages.Count); } + /// + /// RiverLevel must be specified in locations.csv, shapefile or scenarios.csv + /// In this test reading from shapefile is skipped, RiverLevel is defined in locations and in scenarios + /// [Test] - // RiverLevel must be specified in locations.csv, shapefile or scenarios.csv - // In this test reading from shapefile is skipped, RiverLevel is defined in locations and in scenarios public void ImportRiverLevelFromScenariosTest() { // Setup folder for situation where RiverLevel is specified in locations and scenarios @@ -419,9 +588,11 @@ Assert.AreEqual(0, dataPluginImporter.ImportLogMessages.Count); } + /// + /// RiverLevel must be specified in locations.csv, shapefile or scenarios.csv + /// In this test reading from shapefile is skipped, RiverLevel is NOT defined in locations or scenarios + /// [Test] - // RiverLevel must be specified in locations.csv, shapefile or scenarios.csv - // In this test reading from shapefile is skipped, RiverLevel is NOT defined in locations or scenarios public void ImportRiverLevelNotSpecifiedTest() { // Setup folder for situation where RiverLevel is NOT specified in locations and scenarios @@ -462,5 +633,372 @@ // Expected: no error messages Assert.AreEqual(0, dataPluginImporter.ImportLogMessages.Count); } + + /// + /// Test for values that can be read from both scenarios.csv and locations.csv/shapefile for situation: + /// Locations.csv: filled with only required values (none) + /// Shapefiles: none + /// Scenarios.csv: filled with only required values (none) + /// Expected result: scenario will be filled with defaults + /// See Log.xlsx for all the values that are in all the files + /// + [Test] + public void ImportHemPolderScenarioDefaultsTest() + { + // Copy import data to test folder + var importFolder = Path.Combine(Directory.GetCurrentDirectory(), "ImportHemPolderScenarioDefaultsTest"); + if (Directory.Exists(importFolder)) + { + Directory.Delete(importFolder, true); + } + if (!Directory.Exists(importFolder)) + { + Directory.CreateDirectory(importFolder); + } + var testDataFolderCsv = Path.Combine(Directory.GetCurrentDirectory(), @"..\..\Dam\Tests\TestData\HempolderImport\csvfiles"); + File.Copy(Path.Combine(testDataFolderCsv, "characteristicpoints.csv"), Path.Combine(importFolder, "characteristicpoints.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "segments.csv"), Path.Combine(importFolder, "segments.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "soilprofiles.csv"), Path.Combine(importFolder, "soilprofiles.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "surfacelines.csv"), Path.Combine(importFolder, "surfacelines.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "locations_basic.csv"), Path.Combine(importFolder, "locations.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "scenarios_basic.csv"), Path.Combine(importFolder, "scenarios.csv")); + // create importer + SetupInvoerHemPolderWithoutShapeFiles(importFolder); + string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault(); + dataPluginImporter.ImportDataForDikeRings(new List { dikeRingId }, null); + // check values for location 1 + string scenarioId = dataPluginImporter.GetScenarioList(dikeRingId, HemPolderLocationId1).FirstOrDefault(); + IEnumerable scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, HemPolderLocationId1, scenarioId); + var nameValueParameters = scenarioDetails as NameValueParameter[] ?? scenarioDetails.ToArray(); + Assert.AreEqual(null, nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); + Assert.AreEqual(null, nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL4")).ParameterValue); + Assert.AreEqual("0.5", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtRiver")).ParameterValue); + Assert.AreEqual("1.5", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtPolder")).ParameterValue); + Assert.AreEqual("0.1", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowShoulderBaseInside")).ParameterValue); + Assert.AreEqual("0.1", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeToeAtPolder")).ParameterValue); + Assert.AreEqual(null, nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual(null, nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual(null, nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual(null, nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("1.2", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionStability")).ParameterValue); + Assert.AreEqual("1.2", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionPiping")).ParameterValue); + Assert.AreEqual(null, nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("DikeTableHeight")).ParameterValue); + Assert.AreEqual(null, nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevel")).ParameterValue); + Assert.AreEqual(null, nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevelLow")).ParameterValue); + Assert.AreEqual("1", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorPiping")).ParameterValue); + Assert.AreEqual("1", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityInnerSlope")).ParameterValue); + Assert.AreEqual("1", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityOuterSlope")).ParameterValue); + } + + /// + /// Test for values that can be read from both scenarios.csv and locations.csv/shapefile for situation: + /// Locations.csv: completely filled + /// Shapefiles: none + /// Scenarios.csv: filled with only required values (waterheight) + /// Expected result: scenario will be filled with values from locations.csv + /// See Log.xlsx for all the values that are in all the files + /// + [Test] + public void ImportHemPolderScenarioFromLocationsCsvTest() + { + // Copy import data to test folder + var importFolder = Path.Combine(Directory.GetCurrentDirectory(), "ImportHemPolderScenarioFromLocationsCsvTest"); + if (Directory.Exists(importFolder)) + { + Directory.Delete(importFolder, true); + } + if (!Directory.Exists(importFolder)) + { + Directory.CreateDirectory(importFolder); + } + var testDataFolderCsv = Path.Combine(Directory.GetCurrentDirectory(), @"..\..\Dam\Tests\TestData\HempolderImport\csvfiles"); + File.Copy(Path.Combine(testDataFolderCsv, "characteristicpoints.csv"), Path.Combine(importFolder, "characteristicpoints.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "segments.csv"), Path.Combine(importFolder, "segments.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "soilprofiles.csv"), Path.Combine(importFolder, "soilprofiles.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "surfacelines.csv"), Path.Combine(importFolder, "surfacelines.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "locations_complete.csv"), Path.Combine(importFolder, "locations.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "scenarios_basic.csv"), Path.Combine(importFolder, "scenarios.csv")); + // create importer + SetupInvoerHemPolderWithoutShapeFiles(importFolder); + string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault(); + dataPluginImporter.ImportDataForDikeRings(new List { dikeRingId }, null); + // check values for location 1 + string scenarioId = dataPluginImporter.GetScenarioList(dikeRingId, HemPolderLocationId1).FirstOrDefault(); + IEnumerable scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, HemPolderLocationId1, scenarioId); + var nameValueParameters = scenarioDetails as NameValueParameter[] ?? scenarioDetails.ToArray(); + Assert.AreEqual("1", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); + Assert.AreEqual("3", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL4")).ParameterValue); + Assert.AreEqual("0.25", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtRiver")).ParameterValue); + Assert.AreEqual("0.26", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtPolder")).ParameterValue); + Assert.AreEqual("0.27", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowShoulderBaseInside")).ParameterValue); + Assert.AreEqual("0.28", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeToeAtPolder")).ParameterValue); + Assert.AreEqual("True", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("0.29", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("True", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("0.3", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("1", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionStability")).ParameterValue); + Assert.AreEqual("3", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionPiping")).ParameterValue); + Assert.AreEqual("2", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("DikeTableHeight")).ParameterValue); + Assert.AreEqual("2", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevel")).ParameterValue); + Assert.AreEqual("1", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevelLow")).ParameterValue); + Assert.AreEqual("0.9", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorPiping")).ParameterValue); + Assert.AreEqual("0.92", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityInnerSlope")).ParameterValue); + Assert.AreEqual("0.94", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityOuterSlope")).ParameterValue); + } + + /// + /// Test for values that can be read from both scenarios.csv and locations.csv/shapefile for situation: + /// Locations.csv: filled completely + /// Shapefiles: line shapes filled completely + /// Scenarios.csv: filled with only required values (waterheight) + /// Expected result: scenario will be filled with values from shapefiles + /// See Log.xlsx for all the values that are in all the files + /// + [Test] + public void ImportHemPolderLineShapeOverLocationsCsvTest() + { + // Copy import data to test folder + var importFolder = Path.Combine(Directory.GetCurrentDirectory(), "ImportHemPolderLineShapeOverLocationsCsvTest"); + if (Directory.Exists(importFolder)) + { + Directory.Delete(importFolder, true); + } + if (!Directory.Exists(importFolder)) + { + Directory.CreateDirectory(importFolder); + } + var testDataFolderCsv = Path.Combine(Directory.GetCurrentDirectory(), @"..\..\Dam\Tests\TestData\HempolderImport\csvfiles"); + var testDataFolderShape = Path.Combine(Directory.GetCurrentDirectory(), @"..\..\Dam\Tests\TestData\HempolderImport\shapefiles"); + File.Copy(Path.Combine(testDataFolderCsv, "characteristicpoints.csv"), Path.Combine(importFolder, "characteristicpoints.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "segments.csv"), Path.Combine(importFolder, "segments.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "soilprofiles.csv"), Path.Combine(importFolder, "soilprofiles.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "surfacelines.csv"), Path.Combine(importFolder, "surfacelines.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "locations_complete.csv"), Path.Combine(importFolder, "locations.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "scenarios_basic.csv"), Path.Combine(importFolder, "scenarios.csv")); + var shapefiles = Directory.GetFiles(testDataFolderShape); + foreach (var shapefile in shapefiles) + { + var fileName = Path.GetFileName(shapefile); + File.Copy(Path.Combine(testDataFolderShape, fileName), Path.Combine(importFolder, fileName)); + } + // create importer + SetupInvoerHemPolderWithShapeFiles(importFolder, "LijnScenario.shp"); + string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault(); + dataPluginImporter.ImportDataForDikeRings(new List { dikeRingId }, null); + // check values for location 1 + string scenarioId = dataPluginImporter.GetScenarioList(dikeRingId, HemPolderLocationId1).FirstOrDefault(); + IEnumerable scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, HemPolderLocationId1, scenarioId); + var nameValueParameters = scenarioDetails as NameValueParameter[] ?? scenarioDetails.ToArray(); + Assert.AreEqual("1.99", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); + Assert.AreEqual("3.99", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL4")).ParameterValue); + Assert.AreEqual("0.2", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtRiver")).ParameterValue); + Assert.AreEqual("0.21", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtPolder")).ParameterValue); + Assert.AreEqual("0.22", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowShoulderBaseInside")).ParameterValue); + Assert.AreEqual("0.23", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeToeAtPolder")).ParameterValue); + Assert.AreEqual("False", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("0.24", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("False", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("0.25", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("3", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionStability")).ParameterValue); + Assert.AreEqual("5", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionPiping")).ParameterValue); + Assert.AreEqual("4", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("DikeTableHeight")).ParameterValue); + Assert.AreEqual("3.5", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevel")).ParameterValue); + Assert.AreEqual("2.5", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevelLow")).ParameterValue); + Assert.AreEqual("0.6", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorPiping")).ParameterValue); + Assert.AreEqual("0.63", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityInnerSlope")).ParameterValue); + Assert.AreEqual("0.66", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityOuterSlope")).ParameterValue); + // check values for location 2 + scenarioId = dataPluginImporter.GetScenarioList(dikeRingId, HemPolderLocationId2).FirstOrDefault(); + scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, HemPolderLocationId2, scenarioId); + nameValueParameters = scenarioDetails as NameValueParameter[] ?? scenarioDetails.ToArray(); + Assert.AreEqual("0.99", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); + Assert.AreEqual("2.99", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL4")).ParameterValue); + Assert.AreEqual("0.1", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtRiver")).ParameterValue); + Assert.AreEqual("0.11", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtPolder")).ParameterValue); + Assert.AreEqual("0.12", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowShoulderBaseInside")).ParameterValue); + Assert.AreEqual("0.13", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeToeAtPolder")).ParameterValue); + Assert.AreEqual("False", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("0.14", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("True", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("0.15", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("2", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionStability")).ParameterValue); + Assert.AreEqual("4", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionPiping")).ParameterValue); + Assert.AreEqual("3", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("DikeTableHeight")).ParameterValue); + Assert.AreEqual("3", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevel")).ParameterValue); + Assert.AreEqual("2", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevelLow")).ParameterValue); + Assert.AreEqual("0.5", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorPiping")).ParameterValue); + Assert.AreEqual("0.53", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityInnerSlope")).ParameterValue); + Assert.AreEqual("0.56", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityOuterSlope")).ParameterValue); + } + + /// + /// Test for values that can be read from both scenarios.csv and locations.csv/shapefile for situation: + /// Locations.csv: filled completely + /// Shapefiles: area shapes filled completely + /// Scenarios.csv: filled with only required values (waterheight) + /// Expected result: scenario will be filled with values from shapefiles + /// See Log.xlsx for all the values that are in all the files + /// + [Test] + public void ImportHemPolderAreaShapeOverLocationsCsvTest() + { + // Copy import data to test folder + var importFolder = Path.Combine(Directory.GetCurrentDirectory(), "ImportHemPolderAreaShapeOverLocationsCsvTest"); + if (Directory.Exists(importFolder)) + { + Directory.Delete(importFolder, true); + } + if (!Directory.Exists(importFolder)) + { + Directory.CreateDirectory(importFolder); + } + var testDataFolderCsv = Path.Combine(Directory.GetCurrentDirectory(), @"..\..\Dam\Tests\TestData\HempolderImport\csvfiles"); + var testDataFolderShape = Path.Combine(Directory.GetCurrentDirectory(), @"..\..\Dam\Tests\TestData\HempolderImport\shapefiles"); + File.Copy(Path.Combine(testDataFolderCsv, "characteristicpoints.csv"), Path.Combine(importFolder, "characteristicpoints.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "segments.csv"), Path.Combine(importFolder, "segments.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "soilprofiles.csv"), Path.Combine(importFolder, "soilprofiles.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "surfacelines.csv"), Path.Combine(importFolder, "surfacelines.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "locations_complete.csv"), Path.Combine(importFolder, "locations.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "scenarios_basic.csv"), Path.Combine(importFolder, "scenarios.csv")); + var shapefiles = Directory.GetFiles(testDataFolderShape); + foreach (var shapefile in shapefiles) + { + var fileName = Path.GetFileName(shapefile); + File.Copy(Path.Combine(testDataFolderShape, fileName), Path.Combine(importFolder, fileName)); + } + // create importer + SetupInvoerHemPolderWithShapeFiles(importFolder, "VlakScenario.shp"); + string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault(); + dataPluginImporter.ImportDataForDikeRings(new List { dikeRingId }, null); + // check values for location 1 + string scenarioId = dataPluginImporter.GetScenarioList(dikeRingId, HemPolderLocationId1).FirstOrDefault(); + IEnumerable scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, HemPolderLocationId1, scenarioId); + var nameValueParameters = scenarioDetails as NameValueParameter[] ?? scenarioDetails.ToArray(); + Assert.AreEqual("0.9", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); + Assert.AreEqual("2.9", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL4")).ParameterValue); + Assert.AreEqual("0.05", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtRiver")).ParameterValue); + Assert.AreEqual("0.06", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtPolder")).ParameterValue); + Assert.AreEqual("0.07", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowShoulderBaseInside")).ParameterValue); + Assert.AreEqual("0.08", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeToeAtPolder")).ParameterValue); + Assert.AreEqual("True", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("0.09", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("False", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("0.1", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("4", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionStability")).ParameterValue); + Assert.AreEqual("6", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionPiping")).ParameterValue); + Assert.AreEqual("5", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("DikeTableHeight")).ParameterValue); + Assert.AreEqual("4.5", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevel")).ParameterValue); + Assert.AreEqual("3.5", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevelLow")).ParameterValue); + Assert.AreEqual("0.81", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorPiping")).ParameterValue); + Assert.AreEqual("0.83", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityInnerSlope")).ParameterValue); + Assert.AreEqual("0.85", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityOuterSlope")).ParameterValue); + // check values for location 2 + scenarioId = dataPluginImporter.GetScenarioList(dikeRingId, HemPolderLocationId2).FirstOrDefault(); + scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, HemPolderLocationId2, scenarioId); + nameValueParameters = scenarioDetails as NameValueParameter[] ?? scenarioDetails.ToArray(); + Assert.AreEqual("1.9", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); + Assert.AreEqual("3.9", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL4")).ParameterValue); + Assert.AreEqual("0.15", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtRiver")).ParameterValue); + Assert.AreEqual("0.16", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtPolder")).ParameterValue); + Assert.AreEqual("0.17", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowShoulderBaseInside")).ParameterValue); + Assert.AreEqual("0.18", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeToeAtPolder")).ParameterValue); + Assert.AreEqual("False", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("0.19", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("True", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("0.2", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("3", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionStability")).ParameterValue); + Assert.AreEqual("5", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionPiping")).ParameterValue); + Assert.AreEqual("4", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("DikeTableHeight")).ParameterValue); + Assert.AreEqual("4", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevel")).ParameterValue); + Assert.AreEqual("3", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevelLow")).ParameterValue); + Assert.AreEqual("0.7", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorPiping")).ParameterValue); + Assert.AreEqual("0.75", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityInnerSlope")).ParameterValue); + Assert.AreEqual("0.8", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityOuterSlope")).ParameterValue); + } + + /// + /// Test for values that can be read from both scenarios.csv and locations.csv/shapefile for situation: + /// Locations.csv: filled completely + /// Shapefiles: line shapes filled completely + /// Scenarios.csv: filled completely + /// Expected result: scenario will be filled with values from scenarios.csv + /// See Log.xlsx for all the values that are in all the files + /// + [Test] + public void ImportHemPolderScenarioOverShapeAndLocationsCsvTest() + { + // Copy import data to test folder + var importFolder = Path.Combine(Directory.GetCurrentDirectory(), "ImportHemPolderScenarioOverShapeAndLocationsCsvTest"); + if (Directory.Exists(importFolder)) + { + Directory.Delete(importFolder, true); + } + if (!Directory.Exists(importFolder)) + { + Directory.CreateDirectory(importFolder); + } + var testDataFolderCsv = Path.Combine(Directory.GetCurrentDirectory(), @"..\..\Dam\Tests\TestData\HempolderImport\csvfiles"); + var testDataFolderShape = Path.Combine(Directory.GetCurrentDirectory(), @"..\..\Dam\Tests\TestData\HempolderImport\shapefiles"); + File.Copy(Path.Combine(testDataFolderCsv, "characteristicpoints.csv"), Path.Combine(importFolder, "characteristicpoints.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "segments.csv"), Path.Combine(importFolder, "segments.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "soilprofiles.csv"), Path.Combine(importFolder, "soilprofiles.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "surfacelines.csv"), Path.Combine(importFolder, "surfacelines.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "locations_complete.csv"), Path.Combine(importFolder, "locations.csv")); + File.Copy(Path.Combine(testDataFolderCsv, "scenarios_complete.csv"), Path.Combine(importFolder, "scenarios.csv")); + var shapefiles = Directory.GetFiles(testDataFolderShape); + foreach (var shapefile in shapefiles) + { + var fileName = Path.GetFileName(shapefile); + File.Copy(Path.Combine(testDataFolderShape, fileName), Path.Combine(importFolder, fileName)); + } + // create importer + SetupInvoerHemPolderWithShapeFiles(importFolder, "LijnScenario.shp"); + string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault(); + dataPluginImporter.ImportDataForDikeRings(new List { dikeRingId }, null); + // check values for location 1 + string scenarioId = dataPluginImporter.GetScenarioList(dikeRingId, HemPolderLocationId1).FirstOrDefault(); + IEnumerable scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, HemPolderLocationId1, scenarioId); + var nameValueParameters = scenarioDetails as NameValueParameter[] ?? scenarioDetails.ToArray(); + Assert.AreEqual("0.11", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); + Assert.AreEqual("2.11", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL4")).ParameterValue); + Assert.AreEqual("0.55", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtRiver")).ParameterValue); + Assert.AreEqual("0.56", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtPolder")).ParameterValue); + Assert.AreEqual("0.57", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowShoulderBaseInside")).ParameterValue); + Assert.AreEqual("0.58", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeToeAtPolder")).ParameterValue); + Assert.AreEqual("True", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("0.59", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("True", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("0.6", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("0.88", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionStability")).ParameterValue); + Assert.AreEqual("0.77", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionPiping")).ParameterValue); + Assert.AreEqual("2.88", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("DikeTableHeight")).ParameterValue); + Assert.AreEqual("1.11", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevel")).ParameterValue); + Assert.AreEqual("1.77", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevelLow")).ParameterValue); + Assert.AreEqual("1.09", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorPiping")).ParameterValue); + Assert.AreEqual("1.12", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityInnerSlope")).ParameterValue); + Assert.AreEqual("1.14", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityOuterSlope")).ParameterValue); + // check values for location 2 + scenarioId = dataPluginImporter.GetScenarioList(dikeRingId, HemPolderLocationId2).FirstOrDefault(); + scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, HemPolderLocationId2, scenarioId); + nameValueParameters = scenarioDetails as NameValueParameter[] ?? scenarioDetails.ToArray(); + Assert.AreEqual("1.11", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); + Assert.AreEqual("3.11", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL4")).ParameterValue); + Assert.AreEqual("0.65", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtRiver")).ParameterValue); + Assert.AreEqual("0.66", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeTopAtPolder")).ParameterValue); + Assert.AreEqual("0.67", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowShoulderBaseInside")).ParameterValue); + Assert.AreEqual("0.68", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeToeAtPolder")).ParameterValue); + Assert.AreEqual("True", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("0.69", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetBelowDikeCrestMiddle")).ParameterValue); + Assert.AreEqual("True", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UsePlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("0.7", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("PlLineOffsetFactorBelowShoulderCrest")).ParameterValue); + Assert.AreEqual("0.99", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionStability")).ParameterValue); + Assert.AreEqual("0.66", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("UpliftCriterionPiping")).ParameterValue); + Assert.AreEqual("2.99", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("DikeTableHeight")).ParameterValue); + Assert.AreEqual("1.22", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevel")).ParameterValue); + Assert.AreEqual("1.88", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RiverLevelLow")).ParameterValue); + Assert.AreEqual("1.1", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorPiping")).ParameterValue); + Assert.AreEqual("1.13", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityInnerSlope")).ParameterValue); + Assert.AreEqual("1.15", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("RequiredSafetyFactorStabilityOuterSlope")).ParameterValue); + } } }