// Copyright (C) Stichting Deltares 2019. 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.General;
using Deltares.DamEngine.Data.General.Sensors;
using NUnit.Framework;
namespace Deltares.DamEngine.Calculators.Tests.Sensors
{
[TestFixture]
public class SensorLocationTest
{
readonly Location location = new Location();
#region Setup
[TestFixtureSetUp]
public void FixtureSetup()
{
}
[TestFixtureTearDown]
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}};
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.Ignore;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_Pl1PlLineOffsetBelowDikeToeAtPolderAndDataSourceTypeLocationData_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double testValue = 1.1;
var sensorValues = new Dictionary { { sensor, testValue } };
var sensorLocation = CreateValidSensorLocation();
location.PlLineOffsetBelowDikeToeAtPolder = testValue;
sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.LocationData;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder, sensorValues, sensor);
// assert
Assert.AreEqual(testValue, actualValue);
}
[Test]
public void GetValue_Pl1PlLineOffsetBelowDikeToeAtPolderAndDataSourceTypeSensor_ShouldReturnNull()
{
// setup
var sensor = new Sensor();
const double sensorValue = 1.1;
var sensorValues = new Dictionary { { sensor, sensorValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder = DataSourceTypeSensors.Sensor;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeToeAtPolder, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_Pl1PLLineOffsetBelowDikeTopAtPolderAndDataSourceTypeIgnore_ShouldReturnNull()
{
// setup
var sensor = new Sensor();
const double sensorValue = 1.1;
var sensorValues = new Dictionary { { sensor, sensorValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.Ignore;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_Pl1PLLineOffsetBelowDikeTopAtPolderAndDataSourceTypeLocationData_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double testValue = 1.1;
var sensorValues = new Dictionary { { sensor, testValue } };
var sensorLocation = CreateValidSensorLocation();
location.PlLineOffsetBelowDikeTopAtPolder = testValue;
sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.LocationData;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder, sensorValues, sensor);
// assert
Assert.AreEqual(testValue, actualValue);
}
[Test]
public void GetValue_Pl1PLLineOffsetBelowDikeTopAtPolderAndDataSourceTypeSensor_ShouldReturnNull()
{
// setup
var sensor = new Sensor();
const double sensorValue = 1.1;
var sensorValues = new Dictionary { { sensor, sensorValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder = DataSourceTypeSensors.Sensor;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtPolder, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_Pl1PlLineOffsetBelowDikeTopAtRiverAndDataSourceTypeIgnore_ShouldReturnNull()
{
// setup
var sensor = new Sensor();
const double sensorValue = 1.1;
var sensorValues = new Dictionary { { sensor, sensorValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.Ignore;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_Pl1PlLineOffsetBelowDikeTopAtRiverAndDataSourceTypeLocationData_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double testValue = 1.1;
var sensorValues = new Dictionary { { sensor, testValue } };
var sensorLocation = CreateValidSensorLocation();
location.PlLineOffsetBelowDikeTopAtRiver = testValue;
sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.LocationData;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver, sensorValues, sensor);
// assert
Assert.AreEqual(testValue, actualValue);
}
[Test]
public void GetValue_Pl1PlLineOffsetBelowDikeTopAtRiverAndDataSourceTypeSensor_ShouldReturnNull()
{
// setup
var sensor = new Sensor();
const double sensorValue = 1.1;
var sensorValues = new Dictionary { { sensor, sensorValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver = DataSourceTypeSensors.Sensor;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowDikeTopAtRiver, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_Pl1PLLineOffsetBelowShoulderBaseInsideAndDataSourceTypeIgnore_ShouldReturnNull()
{
// setup
var sensor = new Sensor();
const double sensorValue = 1.1;
var sensorValues = new Dictionary { { sensor, sensorValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.Ignore;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowShoulderBaseInside, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_Pl1PLLineOffsetBelowShoulderBaseInsideAndDataSourceTypeLocationData_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double testValue = 1.1;
var sensorValues = new Dictionary { { sensor, testValue } };
var sensorLocation = CreateValidSensorLocation();
location.PlLineOffsetBelowShoulderBaseInside = testValue;
sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.LocationData;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowShoulderBaseInside, sensorValues, sensor);
// assert
Assert.AreEqual(testValue, actualValue);
}
[Test]
public void GetValue_Pl1PLLineOffsetBelowShoulderBaseInsideAndDataSourceTypeSensor_ShouldReturnNull()
{
// setup
var sensor = new Sensor();
const double sensorValue = 1.1;
var sensorValues = new Dictionary { { sensor, sensorValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1PlLineOffsetBelowShoulderBaseInside = DataSourceTypeSensors.Sensor;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1PlLineOffsetBelowShoulderBaseInside, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_WaterLevelAtPolderAndDataSourceTypeIgnore_ShouldReturnNull()
{
// setup
var sensor = new Sensor();
const double sensorValue = 1.1;
var sensorValues = new Dictionary { { sensor, sensorValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.Ignore;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtPolder, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_WaterLevelAtPolderAndDataSourceTypeLocationData_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double testValue = 1.1;
var sensorValues = new Dictionary { { sensor, testValue } };
var sensorLocation = CreateValidSensorLocation();
location.PolderLevel = testValue;
sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.LocationData;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtPolder, sensorValues, sensor);
// assert
Assert.AreEqual(testValue, actualValue);
}
[Test]
public void GetValue_WaterLevelAtPolderAndDataSourceTypeSensor_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double expectedValue = 1.1;
var sensorValues = new Dictionary { { sensor, expectedValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1WaterLevelAtPolder = DataSourceTypeSensors.Sensor;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtPolder, sensorValues, sensor);
// assert
Assert.AreEqual(expectedValue, actualValue);
}
[Test]
public void GetValue_WaterLevelAtRiverAndDataSourceTypeIgnore_ShouldReturnNull()
{
// setup
var sensor = new Sensor();
const double sensorValue = 1.1;
var sensorValues = new Dictionary { { sensor, sensorValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.Ignore;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtRiver, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_WaterLevelAtRiverAndDataSourceTypeLocationData_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double testValue = 1.1;
var sensorValues = new Dictionary { { sensor, testValue } };
var sensorLocation = CreateValidSensorLocation();
location.RiverLevel = testValue;
Assert.AreEqual(testValue, location.RiverLevel);
sensorLocation.SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.LocationData;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtRiver, sensorValues, sensor);
// assert
Assert.AreEqual(testValue, actualValue);
}
[Test]
public void GetValue_WaterLevelAtRiverAndDataSourceTypeSensor_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double expectedValue = 1.1;
var sensorValues = new Dictionary { { sensor, expectedValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl1WaterLevelAtRiver = DataSourceTypeSensors.Sensor;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl1WaterLevelAtRiver, sensorValues, sensor);
// assert
Assert.AreEqual(expectedValue, actualValue);
}
[Test]
public void GetValue_Pl3AndDataSourceTypeIgnore_ShouldReturnNull()
{
// setup
var sensor = new Sensor();
const double sensorValue = 1.1;
var sensorValues = new Dictionary { { sensor, sensorValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl3 = DataSourceTypeSensors.Ignore;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl3, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_Pl3AndDataSourceTypeLocationData_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double testValue = 1.1;
var sensorValues = new Dictionary { { sensor, testValue } };
var sensorLocation = CreateValidSensorLocation();
location.HeadPl3 = testValue;
sensorLocation.SourceTypePl3 = DataSourceTypeSensors.LocationData;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl3, sensorValues, sensor);
// assert
Assert.AreEqual(testValue, actualValue);
}
[Test]
public void GetValue_Pl3AndDataSourceTypeSensor_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double expectedValue = 1.1;
var sensorValues = new Dictionary { { sensor, expectedValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl3 = DataSourceTypeSensors.Sensor;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl3, sensorValues, sensor);
// assert
Assert.AreEqual(expectedValue, actualValue);
}
[Test]
public void GetValue_Pl4AndDataSourceTypeIgnore_ShouldReturnNull()
{
// setup
var sensor = new Sensor();
const double sensorValue = 1.1;
var sensorValues = new Dictionary { { sensor, sensorValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl4 = DataSourceTypeSensors.Ignore;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl4, sensorValues, sensor);
// assert
Assert.IsNull(actualValue);
}
[Test]
public void GetValue_Pl4AndDataSourceTypeLocationData_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double testValue = 1.1;
var sensorValues = new Dictionary { { sensor, testValue } };
var sensorLocation = CreateValidSensorLocation();
location.HeadPl4 = testValue;
sensorLocation.SourceTypePl4 = DataSourceTypeSensors.LocationData;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl4, sensorValues, sensor);
// assert
Assert.AreEqual(testValue, actualValue);
}
[Test]
public void GetValue_Pl4AndDataSourceTypeSensor_ShouldReturnValue()
{
// setup
var sensor = new Sensor();
const double expectedValue = 1.1;
var sensorValues = new Dictionary { { sensor, expectedValue } };
var sensorLocation = CreateValidSensorLocation();
sensorLocation.SourceTypePl4 = DataSourceTypeSensors.Sensor;
// call
var actualValue = sensorLocation.GetValue(x => x.SourceTypePl4, sensorValues, sensor);
// assert
Assert.AreEqual(expectedValue, actualValue);
}
#endregion
#region Helper methods
///
/// Creates and initializes a valid sensor location for testing.
///
///
private SensorLocation CreateValidSensorLocation()
{
var factory = new SensorFactory();
var sensorLocation = factory.CreateSensorLocation(location);
return sensorLocation;
}
#endregion
}
}