Index: DamClients/DamLive/trunk/src/Deltares.DamLive.Tests/DamLiveHHNKTests.cs
===================================================================
diff -u
--- DamClients/DamLive/trunk/src/Deltares.DamLive.Tests/DamLiveHHNKTests.cs (revision 0)
+++ DamClients/DamLive/trunk/src/Deltares.DamLive.Tests/DamLiveHHNKTests.cs (revision 5591)
@@ -0,0 +1,205 @@
+// Copyright (C) Stichting Deltares 2023. All rights reserved.
+//
+// This file is part of the application DAM - Live.
+//
+// DAM - Live is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero 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.IO;
+using System.Linq;
+using Deltares.Dam.Application.Live;
+using Deltares.Dam.Data;
+using Deltares.DamLive.TestHelper;
+using Deltares.Standard.IO;
+using NUnit.Framework;
+
+namespace Deltares.DamLive.Tests;
+
+[TestFixture]
+[Category("Integration")]
+public class DamLiveHHNKTests
+{
+ [Test]
+ [Category("Integration")]
+ [Category("Work_In_Progress")]
+ public void CalculateStabilityUsingTestFilesHasExpectedResultsInOutputFile()
+ {
+ const double cTolerance = 0.0005;
+ SetupStabilityProject();
+ runner.Initialize();
+ runner.DamProjectData.MaxCalculationCores = 1;
+ Assert.That(runner, Is.Not.Null);
+ Assert.Multiple(() =>
+ {
+ Assert.That(runner.DamProjectData, Is.Not.Null);
+ Assert.That(runner.CalculationParameters, Is.Not.Null);
+ });
+ Assert.Multiple(() =>
+ {
+ Assert.That(runner.CalculationParameters.CalculationModules, Is.Not.Null);
+ Assert.That(runner.CalculationParameters.MStabParameters, Is.Not.Null);
+ });
+
+ runner.Run();
+ //runner.WriteResultsToFile(outputFile);
+
+ AssertNoErrors();
+
+ // Assertions
+ List series = runner.OutputTimeSeriesCollection.Series;
+ var seriesCount = 0;
+ string[] validParameterIDs = Enum.GetNames(typeof(TimeSerieParameters));
+ foreach (TimeSerie timeSeries in series)
+ {
+ Assert.Multiple(() =>
+ {
+ Assert.That(validParameterIDs.Any(n => n == timeSeries.ParameterId), Is.True);
+ Assert.That(locations.Any(l => l.Name == timeSeries.LocationId), Is.True);
+ });
+ // StabilityInside check
+ if (timeSeries.ParameterId == TimeSerieParameters.StabilityInsideFactor.ToString())
+ {
+ if (timeSeries.LocationId == "Purmer_PU0110+20_R_V")
+ {
+ TimeSerieEntry firstEntry = timeSeries.Entries.First();
+ Assert.That(firstEntry.Value, Is.EqualTo(0.742).Within(cTolerance), "The computed safety factory is not correct");
+ }
+
+ if (timeSeries.LocationId == "Purmer_PU0042+00_K")
+ {
+ TimeSerieEntry firstEntry = timeSeries.Entries.First();
+ Assert.That(firstEntry.Value, Is.EqualTo(0.8555).Within(cTolerance), "The computed safety factory is not correct");
+ }
+ }
+ seriesCount++;
+ }
+ Assert.That(seriesCount, Is.GreaterThan(0), "No output time series");
+ }
+
+ #region Helper methods
+
+ ///
+ /// Asserts that there are no errors in the runner
+ ///
+ private void AssertNoErrors()
+ {
+ if (runner.HasErrors)
+ {
+ Assert.Fail("The test failed. See the error log in the test output console for more info");
+ }
+ }
+
+ #endregion
+
+ #region Test Setup
+
+ private const string projectStabilityFilename = @"DAMLive.damx";
+ private const string input1aFilename = @"live.InputTimeSeries.xml";
+ private const string output1aFilename = @"live.OutputTimeSeries.xml";
+ private const string calculationParametersStabilityFilename = @"live.ParametersFile.xml";
+
+ private const string testWorkingFolder = @".\damLiveHHNKWork";
+ private const string testStablityDataFolder = @"..\..\..\..\data\HHNK Purmer";
+ private List locations;
+
+ private string inputFile;
+ private string outputFile;
+ private string projectFile;
+ private string parameterFile;
+
+ private DamEngineRunner runner;
+
+ [SetUp]
+ public void SetupFixture()
+ {
+ IoHelper.RemoveTestWorkingDirectory(testWorkingFolder); // to be sure no test directory exist from previous tests
+ Directory.CreateDirectory(testWorkingFolder);
+ }
+
+ [TearDown]
+ public void TearDownFixture()
+ {
+ IoHelper.RemoveTestWorkingDirectory(testWorkingFolder);
+ }
+
+ [TearDown]
+ public void TearDownTest()
+ {
+ AssertNoErrors();
+ }
+
+ [SetUp]
+ public void SetupTest() {}
+
+ ///
+ /// Sets up the stability project.
+ ///
+ private void SetupStabilityProject()
+ {
+ string actualTestPath = Path.GetFullPath(testWorkingFolder);
+
+ Directory.CreateDirectory(actualTestPath);
+
+ DirectoryHelper.CopyRecursive(actualTestPath, testStablityDataFolder);
+
+ inputFile = Path.Combine(actualTestPath, input1aFilename);
+ outputFile = Path.Combine(actualTestPath, output1aFilename);
+ parameterFile = Path.Combine(actualTestPath, calculationParametersStabilityFilename);
+ projectFile = Path.Combine(actualTestPath, projectStabilityFilename);
+ DamProject.SetTestProgramVersion("24.1");
+ DamProjectData damData = DamProject.LoadData(projectFile);
+ locations = damData.Locations;
+
+ // Load the sensor time serie data (see input file for details)
+ TimeSerieCollection inputTimeSeries = TimeSerieCollection.LoadFromFile(inputFile);
+ ShortenTimeSeries(inputTimeSeries);
+ inputTimeSeries.Save(Path.ChangeExtension(inputFile, "short.xml"));
+
+ runner = new DamEngineRunner
+ {
+ DamXFile = new FileInfo(projectFile),
+ ParametersFile = new FileInfo(parameterFile),
+ FewsInputFile = new FileInfo(inputFile),
+ FewsOutputFile = new FileInfo(outputFile),
+ Filter = "",
+ InputTimeSeriesCollection = inputTimeSeries
+ };
+ }
+
+ ///
+ /// Make timeserie shorter for testing: the first, the last and the middle entry are only used
+ ///
+ ///
+ private static void ShortenTimeSeries(TimeSerieCollection inputTimeSeries)
+ {
+ foreach (TimeSerie serie in inputTimeSeries.Series)
+ {
+ for (int i = serie.Entries.Count - 2; i > 0; i--)
+ {
+ if (i != 120) // keep the time entry in the middle of the serie
+ {
+ serie.Entries.RemoveAt(i);
+ }
+ }
+ }
+ }
+
+ #endregion
+
+}
\ No newline at end of file