// Copyright (C) Stichting Deltares 2025. 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; using System.Collections.Generic; using System.Linq; using Deltares.Dam.Data; using Deltares.Dam.Data.Sensors; using Deltares.Geotechnics.GeotechnicalGeometry; using Deltares.Geotechnics.SurfaceLines; using NUnit.Framework; namespace Deltares.Dam.Tests.Sensors { [TestFixture] public class SensorLocationTest { private Location location; #region Serialization Tests [Test] public void SerializeDeserialize_ValidSensorLocation_ShouldBePersitable() { // setup SensorLocation left = CreateValidSensorLocation(); // call string xml = left.Serialize(); SensorLocation right = SensorLocation.Deserialize(xml); // assert Assert.That(right.GroupID, Is.EqualTo(left.GroupID)); } #endregion #region Helper methods /// /// Creates and initializes a valid sensor location for testing. /// /// private SensorLocation CreateValidSensorLocation() { var factory = new SensorFactory(); SensorLocation sensorLocation = factory.CreateSensorLocation(location); Assert.That(sensorLocation.IsValid(), Is.True, "The initialized test sensor location is not valid"); return sensorLocation; } #endregion #region Setup [SetUp] public void FixtureSetup() {} [TearDown] public void FixtureTearDown() {} [SetUp] public void TestSetup() { location = new Location(); location.Scenarios.Add(new Scenario()); } [TearDown] public void TestTearDown() { location.Scenarios.Clear(); location.Dispose(); } #endregion #region Validation Tests [Test] public void IsValid_InputOuterWaterLevelIsSetToIgnore_ShouldReturnFalse() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.Ignore; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.False); } [Test] public void IsValid_InputOuterWaterLevelIsSetToLocationData_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.LocationData; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputOuterWaterLevelIsSetToSensor_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.Sensor; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL1PolderLevelIsSetToIgnore_ShouldReturnFalse() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.Ignore; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.False); } [Test] public void IsValid_InputPL1PolderLevelIsSetToLocationData_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.LocationData; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL1PolderLevelIsSetToSensor_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.Sensor; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL3IsSetToIgnore_ShouldReturnFalse() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl3 = DataSourceTypeSensors.Ignore; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.False); } [Test] public void IsValid_InputPL3IsSetToLocationData_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl3 = DataSourceTypeSensors.LocationData; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL3IsSetToSensor_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.Sensor; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL4IsSetToIgnore_ShouldReturnFalse() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl4 = DataSourceTypeSensors.Ignore; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.False); } [Test] public void IsValid_InputPL4IsSetToLocationData_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl4 = DataSourceTypeSensors.LocationData; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL4IsSetToSensor_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl4 = DataSourceTypeSensors.Sensor; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL1PLLineOffsetBelowDikeToeAtPolderIsSetToIgnore_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.Ignore; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL1PLLineOffsetBelowDikeToeAtPolderIsSetToLocationData_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.LocationData; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL1PLLineOffsetBelowDikeToeAtPolderIsSetToSensor_ShouldReturnFalse() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.Sensor; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.False); } [Test] public void IsValid_InputPL1PLLineOffsetBelowDikeTopAtPolderIsSetToIgnore_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.Ignore; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL1PLLineOffsetBelowDikeTopAtPolderIsSetToLocationData_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.LocationData; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL1PLLineOffsetBelowDikeTopAtPolderIsSetToSensor_ShouldReturnFalse() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.Sensor; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.False); } [Test] public void IsValid_InputPL1PLLineOffsetBelowDikeTopAtRiverIsSetToIgnore_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.Ignore; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL1PLLineOffsetBelowDikeTopAtRiverIsSetToLocationData_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.LocationData; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL1PLLineOffsetBelowDikeTopAtRiverIsSetToSensor_ShouldReturnFalse() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.Sensor; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.False); } [Test] public void IsValid_InputPL1PLLineOffsetBelowShoulderBaseInsideIsSetToIgnore_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.Ignore; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL1PLLineOffsetBelowShoulderBaseInsideIsSetToLocationData_ShouldReturnTrue() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.LocationData; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.True); } [Test] public void IsValid_InputPL1PLLineOffsetBelowShoulderBaseInsideIsSetToSensor_ShouldReturnFalse() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.Sensor; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.False); } [Test] public void IsValid_GroupIsSetToNull_ShouldReturnFalse() { // setup using (var location1 = new Location()) { var sensorLocation = new SensorLocation { Group = null, Location = location1, SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.LocationData, SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.LocationData, SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.LocationData, SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.LocationData, SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.LocationData, SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.LocationData, SourceTypePl3 = DataSourceTypeSensors.LocationData, SourceTypePl4 = DataSourceTypeSensors.LocationData }; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.False); } } [Test] public void IsValid_LocationIsSetToNull_ShouldReturnFalse() { // setup SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.Location = null; // call bool actual = sensorLocation.IsValid(); // assert Assert.That(actual, Is.False); } #endregion #region Sensor Or Location Data Value Tests [Test] public void GetSensorsSortedByRelativeLocationAlongProfile_3SensorsForPL1_PointsAreSortedAsExpected() { var sensor1 = new Sensor { RelativeLocation = 10, ID = 1, Name = "1", PLLineMappings = new[] { PLLineType.PL1 } }; var sensor2 = new Sensor { RelativeLocation = 5, ID = 2, Name = "2", PLLineMappings = new[] { PLLineType.PL1 } }; var sensor3 = new Sensor { RelativeLocation = 12, ID = 3, Name = "3", PLLineMappings = new[] { PLLineType.PL1 } }; using (var surfaceLine = new SurfaceLine2 { CharacteristicPoints = { GeometryMustContainPoint = true }, Geometry = new LocalizedGeometryPointString() }) using (var testLocation = new Location("testLocation") { SurfaceLine2 = surfaceLine }) { testLocation.AddNewSensorData(); var repository = new SensorRepository(testLocation); repository.Add(new[] { sensor1, sensor2, sensor3 }); testLocation.SensorLocation.SurfaceLine.EnsurePointOfType(0, 0, 0, CharacteristicPointType.SurfaceLevelOutside); List> table = testLocation.SensorLocation.GetSensorsSortedByRelativeLocationAlongProfile(PLLineType.PL1).ToList(); Assert.That(table.ElementAt(0).Key, Is.EqualTo(5)); Assert.That(table.ElementAt(1).Key, Is.EqualTo(10)); Assert.That(table.ElementAt(2).Key, Is.EqualTo(12)); Assert.That(table[0].Key, Is.EqualTo(5)); Assert.That(table[1].Key, Is.EqualTo(10)); Assert.That(table[2].Key, Is.EqualTo(12)); List sortedSensors = testLocation.SensorLocation.GetSensorsSortedByRelativeLocationAlongProfile(PLLineType.PL1).Select(s => s.Value).ToList(); Assert.That(sortedSensors[0].RelativeLocation, Is.EqualTo(5)); Assert.That(sortedSensors[1].RelativeLocation, Is.EqualTo(10)); Assert.That(sortedSensors[2].RelativeLocation, Is.EqualTo(12)); } } [Test] public void GetValue_PL1PLLineOffsetBelowDikeToeAtPolderAndDataSourceTypeIgnore_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.Ignore; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_PL1PLLineOffsetBelowDikeToeAtPolderAndDataSourceTypeLocationData_ShouldReturnValue() { // setup var sensor = new Sensor(); const double testValue = 1.1; var sensorValues = new Dictionary { { sensor, testValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); location.Scenarios[0].PlLineOffsetBelowDikeToeAtPolder = testValue; sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.LocationData; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(testValue)); } [Test] public void GetValue_PL1PLLineOffsetBelowDikeToeAtPolderAndDataSourceTypeSensor_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.Sensor; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_PL1PLLineOffsetBelowDikeTopAtPolderAndDataSourceTypeIgnore_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.Ignore; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_PL1PLLineOffsetBelowDikeTopAtPolderAndDataSourceTypeLocationData_ShouldReturnValue() { // setup var sensor = new Sensor(); const double testValue = 1.1; var sensorValues = new Dictionary { { sensor, testValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); location.Scenarios[0].PlLineOffsetBelowDikeTopAtPolder = testValue; sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.LocationData; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(testValue)); } [Test] public void GetValue_PL1PLLineOffsetBelowDikeTopAtPolderAndDataSourceTypeSensor_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.Sensor; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_PL1PLLineOffsetBelowDikeTopAtRiverAndDataSourceTypeIgnore_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.Ignore; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_PL1PLLineOffsetBelowDikeTopAtRiverAndDataSourceTypeLocationData_ShouldReturnValue() { // setup var sensor = new Sensor(); const double testValue = 1.1; var sensorValues = new Dictionary { { sensor, testValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); location.Scenarios[0].PlLineOffsetBelowDikeTopAtRiver = testValue; sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.LocationData; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(testValue)); } [Test] public void GetValue_PL1PLLineOffsetBelowDikeTopAtRiverAndDataSourceTypeSensor_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.Sensor; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_PL1PLLineOffsetBelowShoulderBaseInsideAndDataSourceTypeIgnore_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.Ignore; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowShoulderBaseInside, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_PL1PLLineOffsetBelowShoulderBaseInsideAndDataSourceTypeLocationData_ShouldReturnValue() { // setup var sensor = new Sensor(); const double testValue = 1.1; var sensorValues = new Dictionary { { sensor, testValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); location.Scenarios[0].PlLineOffsetBelowShoulderBaseInside = testValue; sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.LocationData; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowShoulderBaseInside, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(testValue)); } [Test] public void GetValue_PL1PLLineOffsetBelowShoulderBaseInsideAndDataSourceTypeSensor_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.Sensor; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowShoulderBaseInside, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_WaterLevelAtPolderAndDataSourceTypeIgnore_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.Ignore; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtPolder, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_WaterLevelAtPolderAndDataSourceTypeLocationData_ShouldReturnValue() { // setup var random = new Random(21); double polderLevel = random.NextDouble(); location.Scenarios[0].PolderLevel = polderLevel; var sensor = new Sensor(); var sensorValues = new Dictionary { { sensor, random.NextDouble() } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.LocationData; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtPolder, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(polderLevel)); } [Test] public void GetValue_WaterLevelAtPolderAndDataSourceTypeSensor_ShouldReturnValue() { // setup var sensor = new Sensor(); const double expectedValue = 1.1; var sensorValues = new Dictionary { { sensor, expectedValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.Sensor; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtPolder, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(expectedValue)); } [Test] public void GetValue_WaterLevelAtRiverAndDataSourceTypeIgnore_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.Ignore; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtRiver, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_WaterLevelAtRiverAndDataSourceTypeLocationData_ShouldReturnValue() { // setup var sensor = new Sensor(); const double testValue = 1.1; var sensorValues = new Dictionary { { sensor, testValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); location.Scenarios[0].RiverLevel = testValue; sensorLocation.SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.LocationData; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtRiver, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(testValue)); } [Test] public void GetValue_WaterLevelAtRiverAndDataSourceTypeSensor_ShouldReturnValue() { // setup var sensor = new Sensor(); const double expectedValue = 1.1; var sensorValues = new Dictionary { { sensor, expectedValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.Sensor; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtRiver, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(expectedValue)); } [Test] public void GetValue_PL3AndDataSourceTypeIgnore_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl3 = DataSourceTypeSensors.Ignore; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl3, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_PL3AndDataSourceTypeLocationData_ShouldReturnValue() { // setup var sensor = new Sensor(); const double testValue = 1.1; var sensorValues = new Dictionary { { sensor, testValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); location.Scenarios[0].HeadPl3 = testValue; sensorLocation.SourceTypePl3 = DataSourceTypeSensors.LocationData; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl3, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(testValue)); } [Test] public void GetValue_PL3AndDataSourceTypeSensor_ShouldReturnValue() { // setup var sensor = new Sensor(); const double expectedValue = 1.1; var sensorValues = new Dictionary { { sensor, expectedValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl3 = DataSourceTypeSensors.Sensor; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl3, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(expectedValue)); } [Test] public void GetValue_PL4AndDataSourceTypeIgnore_ShouldReturnNull() { // setup var sensor = new Sensor(); const double sensorValue = 1.1; var sensorValues = new Dictionary { { sensor, sensorValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl4 = DataSourceTypeSensors.Ignore; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl4, sensorValues, sensor); // assert Assert.That(actualValue, Is.Null); } [Test] public void GetValue_PL4AndDataSourceTypeLocationData_ShouldReturnValue() { // setup var sensor = new Sensor(); const double testValue = 1.1; var sensorValues = new Dictionary { { sensor, testValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); location.Scenarios[0].HeadPl4 = testValue; sensorLocation.SourceTypePl4 = DataSourceTypeSensors.LocationData; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl4, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(testValue)); } [Test] public void GetValue_PL4AndDataSourceTypeSensor_ShouldReturnValue() { // setup var sensor = new Sensor(); const double expectedValue = 1.1; var sensorValues = new Dictionary { { sensor, expectedValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); sensorLocation.SourceTypePl4 = DataSourceTypeSensors.Sensor; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl4, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(expectedValue)); } #endregion } }