// 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);
// }
}
}