// 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 Deltares.Dam.Data.DataPlugins.Configuration;
using Deltares.Geometry;
using Deltares.Standard.TestUtils;
namespace Deltares.Dam.Tests
{
using System;
using System.Collections.Generic;
using System.Linq;
using Deltares.Dam.Data;
using Deltares.Dam.Data.DataPlugins;
using NUnit.Framework;
[TestFixture]
public class DataPluginImporterCsvTests
{
const string directoryWithCsvFiles = @"..\..\..\data\Dam\Waterboards\Groot Salland\Binnenwaarts\";
private const string location18_6Id = "dwp18_6";
private const string segment05_4Id = "segment_dijkring10_dwp05_4";
private const string surfaceline40_0Id = "dijkring10_dwp40_0";
private const string soilprofile10Y_149_STBI_pId = "10Y_149_STBI_p";
List srcDataSources;
DataPluginImporter dataPluginImporter;
[TestFixtureSetUp]
public void TestFixtureSetup()
{
srcDataSources = new List();
srcDataSources.Add(new DataSource()
{
DataSourceType = DataSourceType.CsvFiles,
DataLocation = directoryWithCsvFiles
});
dataPluginImporter = new DataPluginImporter();
dataPluginImporter.SetDataSources("", srcDataSources);
}
[Test]
[Category(Categories.Slow)]
public void CanImportDikeData()
{
IEnumerable dikeList = dataPluginImporter.GetDikeRingIdList();
Assert.AreEqual(1, dikeList.Count());
string dikeRingId = dikeList.FirstOrDefault();
dataPluginImporter.ImportDataForDikeRings(dikeList, null);
Info dikeInfo = dataPluginImporter.GetDikeRingInfo(dikeRingId);
Assert.AreEqual("dijkring10", dikeInfo.Name);
}
[Test]
public void CanRetrieveLocationData()
{
string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault();
dataPluginImporter.ImportDataForDikeRings(new List() { dikeRingId }, null);
IEnumerable locationIdList = dataPluginImporter.GetLocationIdList(dikeRingId);
Assert.AreEqual(24, locationIdList.Count());
Info locationInfo = dataPluginImporter.GetLocationInfo(dikeRingId, location18_6Id);
Assert.AreEqual(location18_6Id, locationInfo.Name);
IEnumerable locationDetails = dataPluginImporter.GetLocationDetails(dikeRingId, location18_6Id);
Assert.IsTrue(locationDetails.Count() > 0);
Assert.AreEqual("dijkring10_dwp18_6", locationDetails.Where(x => x.ParameterName.Equals("SurfaceLineId")).FirstOrDefault().ParameterValue);
Assert.AreEqual("segment_dijkring10_dwp18_6", locationDetails.Where(x => x.ParameterName.Equals("SegmentId")).FirstOrDefault().ParameterValue);
Assert.AreEqual("192584.1", locationDetails.Where(x => x.ParameterName.Equals("XRd")).FirstOrDefault().ParameterValue);
Assert.AreEqual("511740.3", locationDetails.Where(x => x.ParameterName.Equals("YRd")).FirstOrDefault().ParameterValue);
Assert.AreEqual("-3", locationDetails.Where(x => x.ParameterName.Equals("PolderLevel")).FirstOrDefault().ParameterValue);
}
[Test]
public void CanRetrieveSegmentData()
{
string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault();
dataPluginImporter.ImportDataForDikeRings(new List() { dikeRingId }, null);
IEnumerable segmentIdList = dataPluginImporter.GetSegmentIdList(dikeRingId);
Assert.AreEqual(24, segmentIdList.Count());
IEnumerable segmentProfile1DIdList = dataPluginImporter.GetProfile1DIdListForSegment(dikeRingId, segment05_4Id, FailureMechanismSystemType.StabilityInside);
Assert.AreEqual(0, segmentProfile1DIdList.Count());
IEnumerable segmentProfile2DIdList = dataPluginImporter.GetProfile2DIdListForSegment(dikeRingId, segment05_4Id, FailureMechanismSystemType.StabilityInside);
Assert.AreEqual(1, segmentProfile2DIdList.Count());
string soilProfile2DId = segmentProfile2DIdList.FirstOrDefault();
Assert.AreEqual("10Y_054_STBI.sti", soilProfile2DId);
IEnumerable profileDetails = dataPluginImporter.GetSegmentProfile2DDetails(dikeRingId, segment05_4Id, soilProfile2DId, FailureMechanismSystemType.StabilityInside);
Assert.AreEqual("100", profileDetails.Where(x => x.ParameterName.Equals("Probability")).FirstOrDefault().ParameterValue);
Assert.AreEqual("StabilityInside", profileDetails.Where(x => x.ParameterName.Equals("FailureMechanismType")).FirstOrDefault().ParameterValue);
}
[Test]
public void CanRetrieveSurfaceLines()
{
const double cToleranceCoordinate = 0.001;
// Check if surfacelines available
string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault();
dataPluginImporter.ImportDataForDikeRings(new List() { dikeRingId }, null);
IEnumerable surfaceLineIdList = dataPluginImporter.GetSurfaceLineIdList(dikeRingId);
Assert.AreEqual(13, surfaceLineIdList.Count());
// Check begin- and endpoint of 1 surfaceline
IList surfaceLinePoints = dataPluginImporter.GetSurfaceLinePoints(dikeRingId, surfaceline40_0Id);
Assert.IsTrue(surfaceLinePoints.Count() > 0);
Assert.AreEqual(0.0, surfaceLinePoints[0].X, cToleranceCoordinate);
Assert.AreEqual(0.0, surfaceLinePoints[0].Y, cToleranceCoordinate);
Assert.AreEqual(-0.48, surfaceLinePoints[0].Z, cToleranceCoordinate);
int lastPointIndex = surfaceLinePoints.Count() - 1;
Assert.AreEqual(71.25, surfaceLinePoints[lastPointIndex].X, cToleranceCoordinate);
Assert.AreEqual(0.0, surfaceLinePoints[lastPointIndex].Y, cToleranceCoordinate);
Assert.AreEqual(-0.36, surfaceLinePoints[lastPointIndex].Z, cToleranceCoordinate);
// Check specific characteristic points of 1 surfaceline
IEnumerable surfaceLineCharacteristicPoints = dataPluginImporter.GetSurfaceLineCharacteristicPoints(dikeRingId, surfaceline40_0Id);
Assert.AreEqual(13, surfaceLineIdList.Count());
Assert.IsTrue(surfaceLineCharacteristicPoints.Count() > 0);
DpCharacteristicPoint pointSurfaceLevelOutside =
surfaceLineCharacteristicPoints.Where(x => x.Id.Equals("SurfaceLevelInside")).FirstOrDefault();
Assert.AreEqual(71.25, pointSurfaceLevelOutside.X, cToleranceCoordinate);
Assert.AreEqual(0.0, pointSurfaceLevelOutside.Y, cToleranceCoordinate);
Assert.AreEqual(-0.36, pointSurfaceLevelOutside.Z, cToleranceCoordinate);
DpCharacteristicPoint pointDitchPolderSide =
surfaceLineCharacteristicPoints.Where(x => x.Id.Equals("DitchPolderSide")).FirstOrDefault();
Assert.IsNull(pointDitchPolderSide.Id);
}
[Test]
public void CanRetrieveSoilProfile1Ds()
{
const double cToleranceCoordinate = 0.001;
// Check if soilprofiles available
string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault();
dataPluginImporter.ImportDataForDikeRings(new List() { dikeRingId }, null);
IEnumerable soilProfile1DIdList = dataPluginImporter.GetSoilProfile1DIdList(dikeRingId);
Assert.AreEqual(26, soilProfile1DIdList.Count());
DpSoilProfile soilProfile = dataPluginImporter.GetSoilProfile1DDetails(dikeRingId, soilprofile10Y_149_STBI_pId);
Assert.AreEqual(4, soilProfile.Layers.Count());
Assert.AreEqual(60.0, soilProfile.Layers[0].TopLevel, cToleranceCoordinate);
Assert.AreEqual("klei", soilProfile.Layers[0].SoilName);
Assert.AreEqual(-3.2, soilProfile.Layers[1].TopLevel, cToleranceCoordinate);
Assert.AreEqual("veen", soilProfile.Layers[1].SoilName);
Assert.AreEqual(-5.0, soilProfile.Layers[2].TopLevel, cToleranceCoordinate);
Assert.AreEqual("WL_zand", soilProfile.Layers[2].SoilName);
Assert.AreEqual(-25.0, soilProfile.Layers[3].TopLevel, cToleranceCoordinate);
Assert.AreEqual("DummyForBottomLevel", soilProfile.Layers[3].SoilName);
}
[Test]
public void CanRetrieveScenarios()
{
const double cToleranceDimension = 0.001;
string dikeRingId = dataPluginImporter.GetDikeRingIdList().FirstOrDefault();
dataPluginImporter.ImportDataForDikeRings(new List() { dikeRingId }, null);
List scenarioList = dataPluginImporter.GetScenarioList(dikeRingId, location18_6Id).ToList();
Assert.AreEqual(1, scenarioList.Count());
IEnumerable scenarioDetails = dataPluginImporter.GetScenarioDetails(dikeRingId, location18_6Id, "1");
foreach (NameValueParameter nameValue in scenarioDetails)
{
switch (nameValue.ParameterName)
{
case "WaterLevel":
Assert.AreEqual(1.5, Convert.ToDouble(nameValue.ParameterValue), cToleranceDimension);
break;
case "DikeTableHeight":
Assert.AreEqual(2, Convert.ToDouble(nameValue.ParameterValue), cToleranceDimension);
break;
}
}
}
}
}