namespace Deltares.Dam.Tests { using System; using System.Collections.Generic; using System.IO; using System.Linq; using Deltares.Dam.Data; using NUnit.Framework; [TestFixture] public class GageDikeProcessorTest { private GageDikeProcessor processor; private TimeSerieCollection inputCollection; [TestFixtureSetUp] public void FixtureSetup() { processor = new GageDikeProcessor(); inputCollection = new TimeSerieCollection(); var timeSerie1 = new TimeSerie() { ParameterId = GageDikeProcessor.WaterLevelInputParameterID, LocationId = GageDikeProcessor.WaterLevelInputLocationID }; var timeSerieEntry1 = new TimeSerieEntry() { Value = 2 }; var timeSerieEntry2 = new TimeSerieEntry() { Value = 3 }; timeSerie1.Entries.Add(timeSerieEntry1); timeSerie1.Entries.Add(timeSerieEntry2); inputCollection.Series.Add(timeSerie1); } [Test] public void CalcualtionsSetsTheOutputTimeSeriesCorrectly() { inputCollection = new TimeSerieCollection(); var timeSerie1 = new TimeSerie() { ParameterId = GageDikeProcessor.WaterLevelInputParameterID, LocationId = GageDikeProcessor.WaterLevelInputLocationID }; var timeSerieEntry1 = new TimeSerieEntry() { Value = 2 }; var timeSerieEntry2 = new TimeSerieEntry() { Value = 3 }; timeSerie1.Entries.Add(timeSerieEntry1); timeSerie1.Entries.Add(timeSerieEntry2); inputCollection.Series.Add(timeSerie1); var monitoringPointTimeSerie1 = new TimeSerie() { ParameterId = "Waterpressure", LocationId = "GeometryPoint 1/1" }; var monitoringPointTimeSerie1Entry1 = new TimeSerieEntry() { Value = 1 }; var monitoringPointTimeSerie1Entry2 = new TimeSerieEntry() { Value = 2 }; monitoringPointTimeSerie1.Entries.Add(monitoringPointTimeSerie1Entry1); monitoringPointTimeSerie1.Entries.Add(monitoringPointTimeSerie1Entry2); inputCollection.Series.Add(monitoringPointTimeSerie1); processor.InputTimeSeriesCollection = inputCollection; processor.Process(); Assert.IsNotNull(processor.OutputTimeSeriesCollection); Assert.AreEqual(4, processor.OutputTimeSeriesCollection.Series.Count); Assert.AreEqual(2, processor.OutputTimeSeriesCollection.Series[0].Entries.Count); Assert.AreEqual(2, processor.OutputTimeSeriesCollection.Series[1].Entries.Count); Assert.AreEqual(2, processor.OutputTimeSeriesCollection.Series[2].Entries.Count); Assert.AreEqual(2, processor.OutputTimeSeriesCollection.Series[3].Entries.Count); } [Test] [Category("Integration")] public void ApplicationRetrievesAllUniqueMonitoringPointsIdsWhenLoadingTheTimeSerieCollectionFromFileWithoutTheWaterLevelLocation() { processor.LoadWaterLevelTimeSerie("TestData\\IJkdijk\\ijkdijkpointdata_fews2dam.xml"); Assert.IsFalse(processor.OutputLocations.Contains(GageDikeProcessor.WaterLevelInputLocationID)); } [Test] [Category("Integration")] public void ApplicationCanWriteTheOutputTimeSeriesToFile() { processor = new GageDikeProcessor(); inputCollection = new TimeSerieCollection(); var timeSerie1 = new TimeSerie() { ParameterId = GageDikeProcessor.WaterLevelInputParameterID, LocationId = GageDikeProcessor.WaterLevelInputLocationID }; var timeSerieEntry1 = new TimeSerieEntry() { Value = 2 }; var timeSerieEntry2 = new TimeSerieEntry() { Value = 3 }; timeSerie1.Entries.Add(timeSerieEntry1); timeSerie1.Entries.Add(timeSerieEntry2); inputCollection.Series.Add(timeSerie1); const string testFile = "output.xml"; if (File.Exists(testFile)) File.Delete(testFile); // Set up the model var monitoringPointTimeSerie1 = new TimeSerie() { ParameterId = "Waterpressure", LocationId = "GeometryPoint 1/1" }; var monitoringPointTimeSerie1Entry1 = new TimeSerieEntry() { Value = 1 }; var monitoringPointTimeSerie1Entry2 = new TimeSerieEntry() { Value = 2 }; monitoringPointTimeSerie1.Entries.Add(monitoringPointTimeSerie1Entry1); monitoringPointTimeSerie1.Entries.Add(monitoringPointTimeSerie1Entry2); inputCollection.Series.Add(monitoringPointTimeSerie1); processor.InputTimeSeriesCollection = inputCollection; processor.Process(); processor.SaveResultsToFile(testFile); // The actual testing string fileContent = File.ReadAllText(testFile); Assert.IsNotNull(fileContent); Assert.IsFalse(fileContent.Contains(GageDikeProcessor.WaterLevelInputLocationID)); Assert.IsTrue(fileContent.Contains(GageDikeProcessor.MeasuredPipingStateParameterID)); Assert.IsTrue(fileContent.Contains(GageDikeProcessor.EstimatedPipingStateParameterID)); Assert.IsTrue(fileContent.Contains(GageDikeProcessor.MeasuredPipingLengthParameterID)); Assert.IsTrue(fileContent.Contains(GageDikeProcessor.EstimatedPipingLengthParameterID)); Assert.IsTrue(fileContent.Contains("Transect")); } [Test] [Category("Integration")] public void VerifyThatTheApplicationWorksWithMoreRealisticData() { // Set up the model processor = new GageDikeProcessor(); inputCollection = new TimeSerieCollection(); var waterLevelTimeSerie = new TimeSerie() { ParameterId = GageDikeProcessor.WaterLevelInputParameterID, LocationId = GageDikeProcessor.WaterLevelInputLocationID }; var waterLevelTimeSerieEntry1 = new TimeSerieEntry() { Value = 10 }; var waterLevelTimeSerieEntry2 = new TimeSerieEntry() { Value = 11 }; waterLevelTimeSerie.Entries.Add(waterLevelTimeSerieEntry1); waterLevelTimeSerie.Entries.Add(waterLevelTimeSerieEntry2); inputCollection.Series.Add(waterLevelTimeSerie); var monitoringPointTimeSerie1 = new TimeSerie() { ParameterId = "Waterpressure", LocationId = "GeometryPoint 1/1" }; var monitoringPointTimeSerie1Entry1 = new TimeSerieEntry() { Value = 1 }; var monitoringPointTimeSerie1Entry2 = new TimeSerieEntry() { Value = 2 }; monitoringPointTimeSerie1.Entries.Add(monitoringPointTimeSerie1Entry1); monitoringPointTimeSerie1.Entries.Add(monitoringPointTimeSerie1Entry2); inputCollection.Series.Add(monitoringPointTimeSerie1); var monitoringPointTimeSerie2 = new TimeSerie() { ParameterId = "Waterpressure", LocationId = "GeometryPoint 2/1" }; var monitoringPointTimeSerie2Entry1 = new TimeSerieEntry() { Value = 3 }; var monitoringPointTimeSerie2Entry2 = new TimeSerieEntry() { Value = 4 }; monitoringPointTimeSerie2.Entries.Add(monitoringPointTimeSerie2Entry1); monitoringPointTimeSerie2.Entries.Add(monitoringPointTimeSerie2Entry2); inputCollection.Series.Add(monitoringPointTimeSerie2); const string testFile = "output.xml"; if (File.Exists(testFile)) File.Delete(testFile); processor.InputTimeSeriesCollection = inputCollection; processor.Process(); processor.SaveResultsToFile(testFile); Assert.IsTrue(File.Exists(testFile), "The output serie is not written to file"); var writtenSerie = TimeSerieCollection.LoadFromFile(testFile, false); const int expectedNumberOfWrittenSeries = 6; // 2 for estimated 2 for measured and 2 for the transects Assert.AreEqual(expectedNumberOfWrittenSeries, writtenSerie.Series.Count); } [Test] public void CanExtractTransectsFromMonitoringPointsParameterIDs() { // Just a test to try out the transect LINQ query var points = new List { "GeometryPoint 1/1", "GeometryPoint 1/2", "GeometryPoint 2/1", "GeometryPoint 2/2" }; var transects = from p in points let pCoord = p.Split(' ')[1] let pX = pCoord.Split('/')[0] let pY = pCoord.Split('/')[1] group p by pY into g orderby g.Key select g; Assert.AreEqual(2, transects.Count()); Assert.AreEqual("GeometryPoint 2/1", transects.Single(t => t.Key == "1").ElementAt(1)); Assert.AreEqual("GeometryPoint 1/2", transects.Single(t => t.Key == "2").ElementAt(0)); } } }