// Copyright (C) Stichting Deltares 2018. All rights reserved. // // This file is part of the application DAM - UI. // // DAM - UI 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.CodeDom.Compiler; using System.Collections.Generic; using System.Linq; using Deltares.Dam.Data; using Deltares.Dam.Data.DataPlugins; using Deltares.Dam.Data.DataPlugins.Configuration; using Deltares.Dam.Data.Importers; using Deltares.Dam.Data.Properties; using Deltares.Standard.Language; using Deltares.Standard.TestUtils; using NUnit.Framework; namespace Deltares.Dam.Tests { [TestFixture] public class DataPluginImporterTests { const string directoryWithCsvFiles = @"..\..\..\data\Dam\Waterboards\Groot Salland\Binnenwaarts\"; //Project Invoer1 uses both a locations.csv and a cross section shapefile const string invoer1DirectoryWithCsvFiles = @"..\..\..\data\DamEngineTestProjects\Invoer1\STBI - toDesign\csvfiles\"; const string invoer1DirectoryWithDataShapeFiles = @"..\..\..\data\DamEngineTestProjects\Invoer1\STBI - toDesign\shapefiles\"; private const string Location1Id = "RK210-560"; private const string Location2Id = "RK210-570"; List srcDataSources; DataPluginImporter dataPluginImporter; private void SetupInvoer1WithShapeFiles() { srcDataSources = new List { new DataSource { DataSourceType = DataSourceType.CsvFiles, DataLocation = invoer1DirectoryWithCsvFiles }, new DataSource { DataSourceType = DataSourceType.DataShapeFiles, DataLocation = invoer1DirectoryWithDataShapeFiles } }; dataPluginImporter = new DataPluginImporter { Attributes = new[] { new DataAttribute { AttributeId = LocationShapeFileAttributeMap.LocationAttributeId, AttributeName = "LocationId", DataSource = "Locationv2.shp" }, new DataAttribute { AttributeId = LocationShapeFileAttributeMap.DikeRingAttributeId, AttributeName = "DIKERINGID", DataSource = "Locationv2.shp" }, new DataAttribute { AttributeId = LocationShapeFileAttributeMap.HeadPl3AttributeId, AttributeName = "stijgh_m", DataSource = "winterstijg_zonderDSM.shp" }, } }; dataPluginImporter.SetDataSources("", srcDataSources); } private void SetupInvoer1WithoutShapeFiles() { srcDataSources = new List { new DataSource { DataSourceType = DataSourceType.CsvFiles, DataLocation = invoer1DirectoryWithCsvFiles }, }; dataPluginImporter = new DataPluginImporter(); dataPluginImporter.SetDataSources("", srcDataSources); } [Test] public void CanDefineDataSources() { var srcDataSources = new List(); var dataPluginImporter = new DataPluginImporter(); srcDataSources.Add(new DataSource { DataSourceType = DataSourceType.CsvFiles, DataLocation = directoryWithCsvFiles }); dataPluginImporter.SetDataSources("", srcDataSources); //var destDataSources = dataPluginImporter.DataSources.ToList(); var destDataSources = dataPluginImporter.DataSources.ToList(); Assert.AreEqual(srcDataSources.Count, destDataSources.Count()); Assert.IsTrue(srcDataSources[0].Equals(destDataSources.FirstOrDefault())); } [Test] [ExpectedException(typeof(DataPluginImporterException))] public void ThrowsExceptionWhenRequestingDataWhenDataSourcesNotDefined() { var dataPluginImporter = new DataPluginImporter(); var info = dataPluginImporter.WaterBoardInfo; Assert.IsNotNull(info); } [Test] [Category(Categories.Slow)] public void CanRetrieveWaterboardInfo() { var srcDataSources = new List { new DataSource { DataSourceType = DataSourceType.CsvFiles, DataLocation = directoryWithCsvFiles } }; var dataPluginImporter = new DataPluginImporter(); dataPluginImporter.SetDataSources("", srcDataSources); dataPluginImporter.ImportDataForDikeRings(null, null); var info = dataPluginImporter.WaterBoardInfo; if (LocalizationManager.CurrentLanguage == LanguageType.Dutch) { Assert.AreEqual("Waterschap", info.Name); } else { Assert.AreEqual("WaterBoard", info.Name); } Assert.AreEqual("Waterschap", info.Description); } [Test] public void ValuesFromShapeFileOverwriteValuesFromLocationsCsv() { SetupInvoer1WithShapeFiles(); string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault(); dataPluginImporter.ImportDataForDikeRings(new List { dikeRingId }, null); IEnumerable locationDetails = dataPluginImporter.GetLocationDetails(dikeRingId, Location1Id); var nameValueParameters = locationDetails as NameValueParameter[] ?? locationDetails.ToArray(); Assert.IsTrue(nameValueParameters.Any()); Assert.AreEqual("-3.651", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); locationDetails = dataPluginImporter.GetLocationDetails(dikeRingId, Location2Id); Assert.AreEqual("-3.632", locationDetails.First(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); } [Test] public void ValuesFromLocationsCsvAreCopiedToScenarioIfNotDefinedInScenariosCsvOrShapeFile() { SetupInvoer1WithoutShapeFiles(); string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault(); dataPluginImporter.ImportDataForDikeRings(new List { dikeRingId }, null); string scenarioId = dataPluginImporter.GetScenarioList(dikeRingId, Location1Id).FirstOrDefault(); IEnumerable scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, Location1Id, scenarioId); var nameValueParameters = scenarioDetails as NameValueParameter[] ?? scenarioDetails.ToArray(); Assert.IsTrue(nameValueParameters.Any()); Assert.AreEqual("-99", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, Location2Id, scenarioId); Assert.AreEqual("-99", scenarioDetails.First(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); } // [Test] // public void ValuesFromShapeFileAreCopiedToScenarioIfNotDefinedInScenariosCsv() // { // SetupInvoer1WithShapeFiles(); // string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault(); // dataPluginImporter.ImportDataForDikeRings(new List { dikeRingId }, null); // // string scenarioId = dataPluginImporter.GetScenarioList(dikeRingId, Location1Id).FirstOrDefault(); // IEnumerable scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, Location1Id, scenarioId); // var nameValueParameters = scenarioDetails as NameValueParameter[] ?? scenarioDetails.ToArray(); // Assert.IsTrue(nameValueParameters.Any()); // Assert.AreEqual("-3.651", nameValueParameters.FirstOrDefault(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); // // scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, Location2Id, scenarioId); // Assert.AreEqual("-3.632", scenarioDetails.First(x => x.ParameterName.Equals("HeadPL3")).ParameterValue); // } } }