// Copyright (C) Stichting Deltares 2016. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets 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.Linq;
using Application.Ringtoets.Storage.DbContext;
using Application.Ringtoets.Storage.Read;
using NUnit.Framework;
using Ringtoets.Common.Data.AssessmentSection;
using Ringtoets.Common.Data.FailureMechanism;
using Ringtoets.Integration.Data.StandAlone;
namespace Application.Ringtoets.Storage.Test.Read
{
[TestFixture]
public class AssessmentSectionEntityTest
{
[Test]
public void Read_WithoutCollector_ThrowsArgumentNullException()
{
// Setup
var entity = new AssessmentSectionEntity();
// Call
TestDelegate test = () => entity.Read(null);
// Assert
var parameter = Assert.Throws(test).ParamName;
Assert.AreEqual("collector", parameter);
}
[Test]
[TestCase(AssessmentSectionComposition.Dike)]
[TestCase(AssessmentSectionComposition.DikeAndDune)]
[TestCase(AssessmentSectionComposition.Dune)]
public void Read_WithCollector_ReturnsNewAssessmentSection(AssessmentSectionComposition assessmentSectionComposition)
{
// Setup
var testName = "testName";
var entityId = new Random(21).Next(1, 502);
var entity = new AssessmentSectionEntity
{
AssessmentSectionEntityId = entityId,
Name = testName,
Composition = (short) assessmentSectionComposition
};
var collector = new ReadConversionCollector();
// Call
var section = entity.Read(collector);
// Assert
Assert.IsNotNull(section);
Assert.AreEqual(entityId, section.StorageId);
Assert.AreEqual(testName, section.Name);
Assert.AreEqual(assessmentSectionComposition, section.Composition);
Assert.IsNull(section.HydraulicBoundaryDatabase);
Assert.IsNull(section.ReferenceLine);
}
[Test]
public void Read_WithReferenceLineEntities_ReturnsNewAssessmentSectionWithReferenceLineSet()
{
// Setup
var entity = new AssessmentSectionEntity();
var random = new Random(21);
double firstX = random.NextDouble();
double firstY = random.NextDouble();
double secondX = random.NextDouble();
double secondY = random.NextDouble();
entity.ReferenceLinePointEntities.Add(new ReferenceLinePointEntity
{
Order = 2, X = Convert.ToDecimal(firstX), Y = Convert.ToDecimal(firstY)
});
entity.ReferenceLinePointEntities.Add(new ReferenceLinePointEntity
{
Order = 1, X = Convert.ToDecimal(secondX), Y = Convert.ToDecimal(secondY)
});
var collector = new ReadConversionCollector();
// Call
var section = entity.Read(collector);
// Assert
Assert.AreEqual(2, section.ReferenceLine.Points.Count());
Assert.AreEqual(secondX, section.ReferenceLine.Points.ElementAt(0).X, 1e-6);
Assert.AreEqual(secondY, section.ReferenceLine.Points.ElementAt(0).Y, 1e-6);
Assert.AreEqual(firstX, section.ReferenceLine.Points.ElementAt(1).X, 1e-6);
Assert.AreEqual(firstY, section.ReferenceLine.Points.ElementAt(1).Y, 1e-6);
}
[Test]
public void Read_WithHydraulicDatabaseLocationSet_ReturnsNewAssessmentSectionWithHydraulicDatabaseSet()
{
// Setup
var entity = new AssessmentSectionEntity();
var testLocation = "testLocation";
var testVersion = "testVersion";
entity.HydraulicDatabaseLocation = testLocation;
entity.HydraulicDatabaseVersion = testVersion;
entity.HydraulicLocationEntities.Add(new HydraulicLocationEntity
{
Name = "someName"
});
entity.HydraulicLocationEntities.Add(new HydraulicLocationEntity
{
Name = "someName"
});
var collector = new ReadConversionCollector();
// Call
var section = entity.Read(collector);
// Assert
Assert.AreEqual(2, section.HydraulicBoundaryDatabase.Locations.Count);
Assert.AreEqual(testLocation, section.HydraulicBoundaryDatabase.FilePath);
Assert.AreEqual(testVersion, section.HydraulicBoundaryDatabase.Version);
}
[Test]
[TestCase(true)]
[TestCase(false)]
public void Read_WithFailureMechanismWithStochasticSoilModelsSet_ReturnsNewAssessmentSectionWithStochasticSoilModelsInPipingFailureMechanism(bool isRelevant)
{
// Setup
var entity = new AssessmentSectionEntity();
var entityId = new Random(21).Next(1, 502);
var failureMechanismEntity = new FailureMechanismEntity
{
FailureMechanismEntityId = entityId,
FailureMechanismType = (int) FailureMechanismType.Piping,
IsRelevant = Convert.ToByte(isRelevant),
StochasticSoilModelEntities =
{
new StochasticSoilModelEntity(),
new StochasticSoilModelEntity()
}
};
entity.FailureMechanismEntities.Add(failureMechanismEntity);
var collector = new ReadConversionCollector();
// Call
var section = entity.Read(collector);
// Assert
Assert.AreEqual(2, section.PipingFailureMechanism.StochasticSoilModels.Count);
Assert.AreEqual(entityId, section.PipingFailureMechanism.StorageId);
Assert.AreEqual(isRelevant, section.PipingFailureMechanism.IsRelevant);
}
[Test]
public void Read_WithPipingFailureMechanismWithFailureMechanismSectionsSet_ReturnsNewAssessmentSectionWithFailureMechanismSectionsInPipingFailureMechanism()
{
// Setup
var entity = new AssessmentSectionEntity();
var entityId = new Random(21).Next(1, 502);
var failureMechanismEntity = new FailureMechanismEntity
{
FailureMechanismEntityId = entityId,
FailureMechanismType = (int) FailureMechanismType.Piping,
FailureMechanismSectionEntities = CreateFailureMechanismSectionEntities()
};
entity.FailureMechanismEntities.Add(failureMechanismEntity);
var collector = new ReadConversionCollector();
// Call
var section = entity.Read(collector);
// Assert
Assert.AreEqual(2, section.PipingFailureMechanism.Sections.Count());
}
[Test]
public void Read_WithGrassCoverErosionInwardsFailureMechanismWithFailureMechanismSectionsSet_ReturnsNewAssessmentSectionWithFailureMechanismSectionsInGrassCoverErosionInwardsFailureMechanism()
{
// Setup
var entity = new AssessmentSectionEntity();
var entityId = new Random(21).Next(1, 502);
var failureMechanismEntity = new FailureMechanismEntity
{
FailureMechanismEntityId = entityId,
FailureMechanismType = (int) FailureMechanismType.GrassRevetmentTopErosionAndInwards,
FailureMechanismSectionEntities = CreateFailureMechanismSectionEntities()
};
entity.FailureMechanismEntities.Add(failureMechanismEntity);
var collector = new ReadConversionCollector();
// Call
var section = entity.Read(collector);
// Assert
Assert.AreEqual(2, section.GrassCoverErosionInwards.Sections.Count());
}
[Test]
[TestCase(true)]
[TestCase(false)]
public void Read_WithStandAloneFailureMechanismsSet_ReturnsNewAssessmentSectionWithFailureMechanismsSet(bool isRelevant)
{
// Setup
var entity = new AssessmentSectionEntity();
var macrostabilityInwardsEntityId = 2;
var macrostabilityOutwardsEntityId = 3;
var microstabilityEntityId = 4;
var structureHeightEntityId = 5;
var closingEntityId = 16;
var failingOfConstructionPointEntityId = 22;
var failingOfConstructionLengthwiseEntityId = 23;
var stoneRevetmentEntityId = 36;
var waveImpactEntityId = 77;
var waterPressureEntityId = 78;
var grassCoverErosionOutwardsEntityId = 133;
var grassCoverSlipoffOutwardsEntityId = 134;
var grassCoverSlipoffInwardsEntityId = 135;
var duneErosionEntityId = 256;
var technicalInnovationsEntityId = 257;
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, macrostabilityInwardsEntityId, FailureMechanismType.MacrostabilityInwards));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, macrostabilityOutwardsEntityId, FailureMechanismType.MacrostabilityOutwards));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, microstabilityEntityId, FailureMechanismType.Microstability));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, structureHeightEntityId, FailureMechanismType.StructureHeight));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, closingEntityId, FailureMechanismType.ReliabilityClosingOfStructure));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, failingOfConstructionPointEntityId, FailureMechanismType.StrengthAndStabilityPointConstruction));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, failingOfConstructionLengthwiseEntityId, FailureMechanismType.StrengthAndStabilityParallelConstruction));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, stoneRevetmentEntityId, FailureMechanismType.StabilityStoneRevetment));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, waveImpactEntityId, FailureMechanismType.WaveImpactOnAsphaltRevetment));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, waterPressureEntityId, FailureMechanismType.WaterOverpressureAsphaltRevetment));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, grassCoverErosionOutwardsEntityId, FailureMechanismType.GrassRevetmentErosionOutwards));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, grassCoverSlipoffOutwardsEntityId, FailureMechanismType.GrassRevetmentSlidingOutwards));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, grassCoverSlipoffInwardsEntityId, FailureMechanismType.GrassRevetmentSlidingInwards));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, duneErosionEntityId, FailureMechanismType.DuneErosion));
entity.FailureMechanismEntities.Add(CreateFailureMechanismEntity(isRelevant, technicalInnovationsEntityId, FailureMechanismType.TechnicalInnovations));
var collector = new ReadConversionCollector();
// Call
var section = entity.Read(collector);
// Assert
AssertFailureMechanismEqual(isRelevant, macrostabilityInwardsEntityId, 2, section.MacrostabilityInwards);
AssertFailureMechanismEqual(isRelevant, macrostabilityOutwardsEntityId, 2, section.MacrostabilityOutwards);
AssertFailureMechanismEqual(isRelevant, microstabilityEntityId, 2, section.Microstability);
AssertFailureMechanismEqual(isRelevant, structureHeightEntityId, 2, section.HeightStructures);
AssertFailureMechanismEqual(isRelevant, closingEntityId, 2, section.ClosingStructure);
AssertFailureMechanismEqual(isRelevant, failingOfConstructionPointEntityId, 2, section.StrengthStabilityPointConstruction);
AssertFailureMechanismEqual(isRelevant, failingOfConstructionLengthwiseEntityId, 2, section.StrengthStabilityLengthwiseConstruction);
AssertFailureMechanismEqual(isRelevant, stoneRevetmentEntityId, 2, section.StabilityStoneCover);
AssertFailureMechanismEqual(isRelevant, waveImpactEntityId, 2, section.WaveImpactAsphaltCover);
AssertFailureMechanismEqual(isRelevant, waterPressureEntityId, 2, section.WaterPressureAsphaltCover);
AssertFailureMechanismEqual(isRelevant, grassCoverErosionOutwardsEntityId, 2, section.GrassCoverErosionOutwards);
AssertFailureMechanismEqual(isRelevant, grassCoverSlipoffOutwardsEntityId, 2, section.GrassCoverSlipOffOutwards);
AssertFailureMechanismEqual(isRelevant, grassCoverSlipoffInwardsEntityId, 2, section.GrassCoverSlipOffInwards);
AssertFailureMechanismEqual(isRelevant, duneErosionEntityId, 2, section.DuneErosion);
AssertFailureMechanismEqual(isRelevant, technicalInnovationsEntityId, 2, section.TechnicalInnovation);
}
private static FailureMechanismEntity CreateFailureMechanismEntity(bool isRelevant, int entityId, FailureMechanismType failureMechanismType)
{
return new FailureMechanismEntity
{
FailureMechanismEntityId = entityId,
FailureMechanismType = (short) failureMechanismType,
IsRelevant = Convert.ToByte(isRelevant),
FailureMechanismSectionEntities = CreateFailureMechanismSectionEntities()
};
}
private static void AssertFailureMechanismEqual(bool isRelevant, int entityId, int sectionCount, IFailureMechanism failureMechanism)
{
Assert.AreEqual(entityId, failureMechanism.StorageId);
Assert.AreEqual(isRelevant, failureMechanism.IsRelevant);
Assert.AreEqual(sectionCount, failureMechanism.Sections.Count());
}
private static FailureMechanismSectionEntity[] CreateFailureMechanismSectionEntities()
{
return new[]
{
new FailureMechanismSectionEntity
{
FailureMechanismSectionEntityId = 1,
Name = "",
FailureMechanismSectionPointEntities =
{
new FailureMechanismSectionPointEntity()
}
},
new FailureMechanismSectionEntity
{
FailureMechanismSectionEntityId = 2,
Name = "",
FailureMechanismSectionPointEntities =
{
new FailureMechanismSectionPointEntity()
}
}
};
}
}
}