//-----------------------------------------------------------------------
//
// Copyright (c) 2012 Deltares. All rights reserved.
//
// B. Faassen
// barry.faassen@deltares.nl
//
// n.a.
//-----------------------------------------------------------------------
using System;
using System.Linq;
using Deltares.Dam.Data;
using Deltares.Dam.Data.Sensors;
using NUnit.Framework;
using Group = Deltares.Dam.Data.Sensors.Group;
namespace Deltares.Dam.Tests.Sensors
{
[TestFixture]
public class SensorRepositoryTest
{
#region Setup
[TestFixtureSetUp]
public void FixtureSetup()
{
}
[TestFixtureTearDown]
public void FixtureTearDown()
{
}
[SetUp]
public void TestSetup()
{
}
[TearDown]
public void TestTearDown()
{
}
#endregion
[Test]
public void AddNew_TransientSensor_SensorIsAddedToRepositoryAndIsNotTransient()
{
// setup
using (var location = new Location("test"))
{
var repository = new SensorRepository(location);
// call
Sensor sensor = repository.AddNew();
// assert
Assert.IsNotNull(sensor);
Assert.IsFalse(sensor.IsTransient(), "The sensor ID is transient. This should not be the case when added to the repository");
Assert.AreEqual(1, repository.Sensors.Count());
}
}
[Test]
[ExpectedException(typeof(ArgumentException))]
public void Add_SensorWithSameID_Throws()
{
// setup
using (var location = new Location("test"))
{
var repository = new SensorRepository(location);
var sensor1 = new Sensor() { ID = 1, Name = "test1" };
var sensor2 = new Sensor() { ID = 1, Name = "test2" };
// call
repository.Add(sensor1);
// assert
repository.Add(sensor2); // throws
}
}
[Test]
[ExpectedException(typeof(ArgumentException))]
public void Add_SensorWithSameName_Throws()
{
// setup
using (var location = new Location("test"))
{
var repository = new SensorRepository(location);
var sensor1 = new Sensor { ID = 1, Name = "test1" };
var sensor2 = new Sensor { ID = 2, Name = "test1" };
// call
repository.Add(sensor1);
// assert
repository.Add(sensor2); // throws
}
}
///
/// Test was setup because of issues with serializing and deserializing the state of the
/// repository
///
[Test]
public void SerializeDeserialize_ValidRepository_ShouldWorkWithoutExceptions()
{
// setup
using (var location = new Location("test_location_xyz"))
{
var repository = new SensorRepository(location);
const string testSensorXyz = "test_sensor_xyz";
var sensor = new Sensor { ID = 1, Name = testSensorXyz };
sensor.Add(PLLineType.PL1);
// call
repository.Add(sensor);
repository.AddNew();
string xml = repository.Serialize();
var newRepo = SensorRepository.Deserialize(xml);
// assert
Assert.IsNotEmpty(xml);
Assert.AreEqual(repository.Sensors.Count(), newRepo.Sensors.Count());
Assert.IsTrue(repository.Sensors.Any(s => s.Name == testSensorXyz && s.ID == 1 && s.PLLineMappings.Any(p => p == PLLineType.PL1)));
}
}
}
}