// Copyright (C) Stichting Deltares 2025. All rights reserved. // // This file is part of the Dam Engine. // // The Dam Engine 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.Collections.Generic; using Deltares.DamEngine.Data.Design; using Deltares.DamEngine.Data.General; using Deltares.DamEngine.Data.General.Sensors; using NUnit.Framework; namespace Deltares.DamEngine.Calculators.Tests.Sensors; [TestFixture] public class SensorLocationTest { private readonly Location location = new Location(); #region Helper methods /// /// Creates and initializes a valid sensor location for testing. /// /// private SensorLocation CreateValidSensorLocation() { var factory = new SensorFactory(); var scenario = new DesignScenario(); location.CurrentScenario = scenario; SensorLocation sensorLocation = factory.CreateSensorLocation(location); return sensorLocation; } #endregion #region Setup [SetUp] public void FixtureSetup() { location.Scenarios.Add(new DesignScenario()); } [TearDown] public void FixtureTearDown() {} [SetUp] public void TestSetup() {} [TearDown] public void TestTearDown() {} #endregion #region Sensor Or Location Data Value Tests [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.CurrentScenario.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.CurrentScenario.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.CurrentScenario.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.CurrentScenario.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 sensor = new Sensor(); const double testValue = 1.1; var sensorValues = new Dictionary { { sensor, testValue } }; SensorLocation sensorLocation = CreateValidSensorLocation(); location.CurrentScenario.PolderLevel = testValue; sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.LocationData; // call double? actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtPolder, sensorValues, sensor); // assert Assert.That(actualValue, Is.EqualTo(testValue)); } [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.CurrentScenario.RiverLevel = testValue; Assert.That(location.CurrentScenario.RiverLevel, Is.EqualTo(testValue)); sensorLocation.SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.Sensor; // 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.CurrentScenario.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.CurrentScenario.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 }