Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Application.Ringtoets.Storage.csproj
===================================================================
diff -u -rd09b94cdc3d7c18ffa7ce53b727c34d189f588a9 -r164e03c3a4957d7a0dd4012f146b0ca139a7a4cc
--- Application/Ringtoets/src/Application.Ringtoets.Storage/Application.Ringtoets.Storage.csproj (.../Application.Ringtoets.Storage.csproj) (revision d09b94cdc3d7c18ffa7ce53b727c34d189f588a9)
+++ Application/Ringtoets/src/Application.Ringtoets.Storage/Application.Ringtoets.Storage.csproj (.../Application.Ringtoets.Storage.csproj) (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -36,6 +36,7 @@
..\..\..\..\packages\EntityFramework.6.1.3\lib\net40\EntityFramework.dll
True
+
@@ -54,6 +55,8 @@
+
+
@@ -94,6 +97,7 @@
+
Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/FailureMechanismConverterBase.cs
===================================================================
diff -u -rd09b94cdc3d7c18ffa7ce53b727c34d189f588a9 -r164e03c3a4957d7a0dd4012f146b0ca139a7a4cc
--- Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/FailureMechanismConverterBase.cs (.../FailureMechanismConverterBase.cs) (revision d09b94cdc3d7c18ffa7ce53b727c34d189f588a9)
+++ Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/FailureMechanismConverterBase.cs (.../FailureMechanismConverterBase.cs) (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -27,15 +27,22 @@
namespace Application.Ringtoets.Storage.Converters
{
- public abstract class FailureMechanismConverterBase : IEntityConverter where T : IFailureMechanism
+ ///
+ /// Common implementation for converting
+ /// failure mechanisms.
+ ///
+ /// The type of failure mechanism used to convert from and to by
+ /// this converter.
+ ///
+ public abstract class FailureMechanismConverterBase : IFailureMechanismEntityConverter where T : IFailureMechanism
{
public T ConvertEntityToModel(FailureMechanismEntity entity)
{
if (entity == null)
{
throw new ArgumentNullException("entity");
}
- if (entity.FailureMechanismType != (short)GetFailureMechanismType())
+ if (!CorrespondsToFailureMechanismType(entity))
{
throw new ArgumentException("Incorrect modelType", "entity");
}
@@ -64,6 +71,11 @@
entity.IsRelevant = modelObject.IsRelevant ? (byte)1 : (byte)0;
}
+ public bool CorrespondsToFailureMechanismType(FailureMechanismEntity entity)
+ {
+ return (short)GetFailureMechanismType() == entity.FailureMechanismType;
+ }
+
protected abstract T ConstructFailureMechanism();
protected abstract FailureMechanismType GetFailureMechanismType();
Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/FailureMechanismPlaceholderConverter.cs
===================================================================
diff -u
--- Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/FailureMechanismPlaceholderConverter.cs (revision 0)
+++ Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/FailureMechanismPlaceholderConverter.cs (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -0,0 +1,55 @@
+// 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 Application.Ringtoets.Storage.DbContext;
+
+using Ringtoets.Integration.Data.Placeholders;
+
+namespace Application.Ringtoets.Storage.Converters
+{
+ ///
+ /// Converter for to
+ /// and to .
+ ///
+ public class FailureMechanismPlaceholderConverter : FailureMechanismConverterBase
+ {
+ private readonly FailureMechanismType type;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The type of failure mechanism where the placeholder is used for.
+ public FailureMechanismPlaceholderConverter(FailureMechanismType type)
+ {
+ this.type = type;
+ }
+
+ protected override FailureMechanismPlaceholder ConstructFailureMechanism()
+ {
+ return new FailureMechanismPlaceholder(GetFailureMechanismType().ToString());
+ }
+
+ protected override FailureMechanismType GetFailureMechanismType()
+ {
+ return type;
+ }
+ }
+}
\ No newline at end of file
Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/IFailureMechanismEntityConverter.cs
===================================================================
diff -u
--- Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/IFailureMechanismEntityConverter.cs (revision 0)
+++ Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/IFailureMechanismEntityConverter.cs (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -0,0 +1,22 @@
+using Application.Ringtoets.Storage.DbContext;
+
+using Ringtoets.Common.Data.FailureMechanism;
+
+namespace Application.Ringtoets.Storage.Converters
+{
+ ///
+ /// Interface that declares a converter that converts between
+ /// and instances.
+ ///
+ /// The type of failure mechanism supported by the converter.
+ public interface IFailureMechanismEntityConverter : IEntityConverter where T : IFailureMechanism
+ {
+ ///
+ /// Determines if the corresponds to the type
+ /// of failure mechanism that this converter can deal with.
+ ///
+ /// The entity.
+ /// True if the converter can handle the entity, false if not.
+ bool CorrespondsToFailureMechanismType(FailureMechanismEntity entity);
+ }
+}
\ No newline at end of file
Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/PipingFailureMechanismConverter.cs
===================================================================
diff -u -rd09b94cdc3d7c18ffa7ce53b727c34d189f588a9 -r164e03c3a4957d7a0dd4012f146b0ca139a7a4cc
--- Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/PipingFailureMechanismConverter.cs (.../PipingFailureMechanismConverter.cs) (revision d09b94cdc3d7c18ffa7ce53b727c34d189f588a9)
+++ Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/PipingFailureMechanismConverter.cs (.../PipingFailureMechanismConverter.cs) (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -37,7 +37,7 @@
protected override FailureMechanismType GetFailureMechanismType()
{
- return FailureMechanismType.PipingFailureMechanism;
+ return FailureMechanismType.Piping;
}
}
}
\ No newline at end of file
Index: Application/Ringtoets/src/Application.Ringtoets.Storage/DbContext/FailureMechanismType.cs
===================================================================
diff -u -r8b5a6f938fe2b04cd78623649df37580e145055f -r164e03c3a4957d7a0dd4012f146b0ca139a7a4cc
--- Application/Ringtoets/src/Application.Ringtoets.Storage/DbContext/FailureMechanismType.cs (.../FailureMechanismType.cs) (revision 8b5a6f938fe2b04cd78623649df37580e145055f)
+++ Application/Ringtoets/src/Application.Ringtoets.Storage/DbContext/FailureMechanismType.cs (.../FailureMechanismType.cs) (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -21,16 +21,99 @@
namespace Application.Ringtoets.Storage.DbContext
{
+ ///
+ /// The type failure mechanism available in the application.
+ ///
public enum FailureMechanismType
{
- PipingFailureMechanism = 0,
- OvertoppingFailureMechanism = 1,
- MacrostabilityInwardsFailureMechanism = 2,
- StructuresOvertoppingFailureMechanism = 3,
- StructuresClosureFailureMechanism = 4,
- StructuresStructuralFailureFailureMechanism = 5,
- StoneRevetmentFailureMechanism = 6,
- AsphaltRevetmentFailureMechanism = 7,
- RoughnessRevetmentFailureMechanism = 8
+ ///
+ /// Piping - STPH
+ ///
+ Piping = 1,
+
+ ///
+ /// Macrostability binnenwaarts - STBI
+ ///
+ MacrostabilityInwards = 2,
+
+ ///
+ /// Golfklappen op asfaltbekleding - AGK
+ ///
+ WaveImpactOnAsphaltRevetment = 3,
+
+ ///
+ /// Grasbekleding erosie buitentalud - GEBU
+ ///
+ GrassRevetmentErosionOutwards = 4,
+
+ ///
+ /// Grasbekleding afschuiven buitentalud - GABU
+ ///
+ GrassRevetmentSlidingOutwards = 5,
+
+ ///
+ /// Grasbekleding erosie kruin en binnentalud - GEKB
+ ///
+ GrassRevetmentTopErosionAndInwards = 6,
+
+ ///
+ /// Stabiliteit steenzetting - ZST
+ ///
+ StabilityStoneRevetment = 7,
+
+ ///
+ /// Duinafslag - DA
+ ///
+ DuneErosion = 8,
+
+ ///
+ /// Hoogte kunstwerk - HTKW
+ ///
+ StructureHeight = 9,
+
+ ///
+ /// Betrouwbaarheid sluiting kunstwerk - BSKW
+ ///
+ ReliabilityClosingOfStructure = 10,
+
+ ///
+ /// Piping bij kunstwerk - PKW
+ ///
+ PipingAtStructure = 11,
+
+ ///
+ /// Sterkte en stabiliteit puntconstructies - STKWp
+ ///
+ StrengthAndStabilityPointConstruction = 12,
+
+ ///
+ /// Macrostabiliteit buitenwaarts - STBU
+ ///
+ MacrostabilityOutwards = 13,
+
+ ///
+ /// Microstabiliteit - STMI
+ ///
+ Microstability = 14,
+
+ ///
+ /// Wateroverdruk bij asfaltbekleding - AWO
+ ///
+ WaterOverpressureAsphaltRevetment = 15,
+
+ ///
+ /// Grasbekleding afschuiven binnentalud - GABI
+ ///
+ GrassRevetmentSlidingInwards = 16,
+
+ ///
+ /// Sterkte en stabiliteit langsconstructires - STKWl
+ ///
+ StrengthAndStabilityParallelConstruction = 17,
+
+ ///
+ /// Technische innovaties - INN
+ ///
+ TechnicalInnovations = 18
}
}
\ No newline at end of file
Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/AssessmentSectionPersistor.cs
===================================================================
diff -u -rc4d2af65ad23757fb3bd11f93458839bc1787ded -r164e03c3a4957d7a0dd4012f146b0ca139a7a4cc
--- Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/AssessmentSectionPersistor.cs (.../AssessmentSectionPersistor.cs) (revision c4d2af65ad23757fb3bd11f93458839bc1787ded)
+++ Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/AssessmentSectionPersistor.cs (.../AssessmentSectionPersistor.cs) (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -24,11 +24,14 @@
using System.Data.Entity;
using System.Diagnostics;
using System.Linq;
+
using Application.Ringtoets.Storage.Converters;
using Application.Ringtoets.Storage.DbContext;
using Application.Ringtoets.Storage.Exceptions;
using Application.Ringtoets.Storage.Properties;
+
using Ringtoets.Integration.Data;
+using Ringtoets.Integration.Data.Placeholders;
namespace Application.Ringtoets.Storage.Persistors
{
@@ -43,6 +46,8 @@
private readonly ICollection modifiedList = new List();
private readonly PipingFailureMechanismPersistor pipingFailureMechanismEntityPersistor;
+ private readonly IDictionary placeholderPersistors;
+
private readonly HydraulicBoundaryLocationPersistor hydraulicLocationEntityPersistor;
private readonly ReferenceLinePersistor referenceLinePersistor;
@@ -62,6 +67,8 @@
converter = new AssessmentSectionConverter();
pipingFailureMechanismEntityPersistor = new PipingFailureMechanismPersistor(ringtoetsContext);
+ placeholderPersistors = CreatePlaceHolderPersistors(ringtoetsContext);
+
hydraulicLocationEntityPersistor = new HydraulicBoundaryLocationPersistor(ringtoetsContext);
referenceLinePersistor = new ReferenceLinePersistor(ringtoetsContext);
}
@@ -82,10 +89,14 @@
foreach (var failureMechanismEntity in entity.FailureMechanismEntities)
{
- if (failureMechanismEntity.FailureMechanismType == (int) FailureMechanismType.PipingFailureMechanism)
+ if (failureMechanismEntity.FailureMechanismType == (int)FailureMechanismType.Piping)
{
pipingFailureMechanismEntityPersistor.LoadModel(failureMechanismEntity, assessmentSection.PipingFailureMechanism);
}
+ else
+ {
+ LoadExternalFailureMechanism(failureMechanismEntity, assessmentSection);
+ }
}
assessmentSection.ReferenceLine = referenceLinePersistor.LoadModel(entity.ReferenceLinePointEntities);
@@ -169,9 +180,61 @@
UpdateStorageIdsInModel();
pipingFailureMechanismEntityPersistor.PerformPostSaveActions();
+ foreach (FailureMechanismPlaceholderPersistor persistor in placeholderPersistors.Values)
+ {
+ persistor.PerformPostSaveActions();
+ }
hydraulicLocationEntityPersistor.PerformPostSaveActions();
}
+ private IDictionary CreatePlaceHolderPersistors(IRingtoetsEntities ringtoetsContext)
+ {
+ return new[]
+ {
+ FailureMechanismType.MacrostabilityInwards,
+ FailureMechanismType.StructureHeight,
+ FailureMechanismType.ReliabilityClosingOfStructure,
+ FailureMechanismType.StrengthAndStabilityPointConstruction,
+ FailureMechanismType.StabilityStoneRevetment,
+ FailureMechanismType.WaveImpactOnAsphaltRevetment,
+ FailureMechanismType.GrassRevetmentErosionOutwards,
+ FailureMechanismType.DuneErosion
+ }.ToDictionary(type => type, type => new FailureMechanismPlaceholderPersistor(ringtoetsContext, type));
+ }
+
+ private void LoadExternalFailureMechanism(FailureMechanismEntity failureMechanismEntity, AssessmentSection assessmentSection)
+ {
+ var failureMechanismType = (FailureMechanismType)failureMechanismEntity.FailureMechanismType;
+ FailureMechanismPlaceholderPersistor persistor = placeholderPersistors[failureMechanismType];
+ FailureMechanismPlaceholder failureMechanism = GetFailureMechanismPlaceholder(assessmentSection, failureMechanismType);
+ persistor.LoadModel(failureMechanismEntity, failureMechanism);
+ }
+
+ private static FailureMechanismPlaceholder GetFailureMechanismPlaceholder(AssessmentSection assessmentSection, FailureMechanismType failureMechanismType)
+ {
+ switch (failureMechanismType)
+ {
+ case FailureMechanismType.WaveImpactOnAsphaltRevetment:
+ return assessmentSection.AsphaltRevetment;
+ case FailureMechanismType.MacrostabilityInwards:
+ return assessmentSection.MacrostabilityInwards;
+ case FailureMechanismType.StructureHeight:
+ return assessmentSection.Overtopping;
+ case FailureMechanismType.GrassRevetmentErosionOutwards:
+ return assessmentSection.GrassRevetment;
+ case FailureMechanismType.StabilityStoneRevetment:
+ return assessmentSection.StoneRevetment;
+ case FailureMechanismType.ReliabilityClosingOfStructure:
+ return assessmentSection.Closing;
+ case FailureMechanismType.StrengthAndStabilityPointConstruction:
+ return assessmentSection.FailingOfConstruction;
+ case FailureMechanismType.DuneErosion:
+ return assessmentSection.DuneErosion;
+ default:
+ throw new NotImplementedException();
+ }
+ }
+
///
/// Updates the children of , in reference to , in the storage.
///
@@ -182,6 +245,15 @@
pipingFailureMechanismEntityPersistor.UpdateModel(entity.FailureMechanismEntities, model.PipingFailureMechanism);
pipingFailureMechanismEntityPersistor.RemoveUnModifiedEntries(entity.FailureMechanismEntities);
+ foreach (KeyValuePair keyValuePair in placeholderPersistors)
+ {
+ FailureMechanismPlaceholder failureMechanism = GetFailureMechanismPlaceholder(model, keyValuePair.Key);
+
+ FailureMechanismPlaceholderPersistor persistor = keyValuePair.Value;
+ persistor.UpdateModel(entity.FailureMechanismEntities, failureMechanism);
+ persistor.RemoveUnModifiedEntries(entity.FailureMechanismEntities);
+ }
+
hydraulicLocationEntityPersistor.UpdateModel(entity.HydraulicLocationEntities, model.HydraulicBoundaryDatabase);
referenceLinePersistor.InsertModel(entity.ReferenceLinePointEntities, model.ReferenceLine);
}
@@ -196,6 +268,15 @@
pipingFailureMechanismEntityPersistor.InsertModel(entity.FailureMechanismEntities, model.PipingFailureMechanism);
pipingFailureMechanismEntityPersistor.RemoveUnModifiedEntries(entity.FailureMechanismEntities);
+ foreach (KeyValuePair keyValuePair in placeholderPersistors)
+ {
+ FailureMechanismPlaceholder failureMechanism = GetFailureMechanismPlaceholder(model, keyValuePair.Key);
+
+ FailureMechanismPlaceholderPersistor persistor = keyValuePair.Value;
+ persistor.InsertModel(entity.FailureMechanismEntities, failureMechanism);
+ persistor.RemoveUnModifiedEntries(entity.FailureMechanismEntities);
+ }
+
hydraulicLocationEntityPersistor.InsertModel(entity.HydraulicLocationEntities, model.HydraulicBoundaryDatabase);
referenceLinePersistor.InsertModel(entity.ReferenceLinePointEntities, model.ReferenceLine);
}
@@ -268,8 +349,8 @@
{
foreach (var entry in insertedList)
{
- Debug.Assert(entry.Key.AssessmentSectionEntityId > 0,
- "AssessmentSectionEntityId is not set. Have you called IRingtoetsEntities.SaveChanges?");
+ Debug.Assert(entry.Key.AssessmentSectionEntityId > 0,
+ "AssessmentSectionEntityId is not set. Have you called IRingtoetsEntities.SaveChanges?");
entry.Value.StorageId = entry.Key.AssessmentSectionEntityId;
}
insertedList.Clear();
Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/FailureMechanismPersistorBase.cs
===================================================================
diff -u -r35dd019140ab3d11241908744c43ddac43a8989e -r164e03c3a4957d7a0dd4012f146b0ca139a7a4cc
--- Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/FailureMechanismPersistorBase.cs (.../FailureMechanismPersistorBase.cs) (revision 35dd019140ab3d11241908744c43ddac43a8989e)
+++ Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/FailureMechanismPersistorBase.cs (.../FailureMechanismPersistorBase.cs) (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -40,15 +40,15 @@
private readonly Dictionary insertedList = new Dictionary();
private readonly ICollection modifiedList = new List();
- private readonly IEntityConverter converter;
+ private readonly FailureMechanismConverterBase converter;
///
/// New instance of .
///
/// The storage context.
/// An implementation of the to use in the persistor.
/// Thrown when is null.
- protected FailureMechanismPersistorBase(IRingtoetsEntities ringtoetsContext, IEntityConverter converter)
+ protected FailureMechanismPersistorBase(IRingtoetsEntities ringtoetsContext, FailureMechanismConverterBase converter)
{
if (ringtoetsContext == null)
{
@@ -194,8 +194,9 @@
/// Thrown when the is read-only.
public void RemoveUnModifiedEntries(ICollection parentNavigationProperty)
{
- var untouchedModifiedList = parentNavigationProperty.Where(e => e.FailureMechanismEntityId > 0 && !modifiedList.Contains(e));
- failureMechanismSet.RemoveRange(untouchedModifiedList);
+ IEnumerable failureMechanismOrphans = parentNavigationProperty.Where(e => converter.CorrespondsToFailureMechanismType(e) &&
+ e.FailureMechanismEntityId > 0 && !modifiedList.Contains(e));
+ failureMechanismSet.RemoveRange(failureMechanismOrphans);
modifiedList.Clear();
}
Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/FailureMechanismPlaceholderPersistor.cs
===================================================================
diff -u
--- Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/FailureMechanismPlaceholderPersistor.cs (revision 0)
+++ Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/FailureMechanismPlaceholderPersistor.cs (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -0,0 +1,59 @@
+// 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 Application.Ringtoets.Storage.Converters;
+using Application.Ringtoets.Storage.DbContext;
+
+using Ringtoets.Integration.Data.Placeholders;
+
+namespace Application.Ringtoets.Storage.Persistors
+{
+ ///
+ /// The persistor for instances.
+ ///
+ public class FailureMechanismPlaceholderPersistor : FailureMechanismPersistorBase
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The storage context.
+ /// Type of the failure mechanism for which the
+ /// placeholder is a stand-in.
+ /// Thrown when is null.
+ public FailureMechanismPlaceholderPersistor(IRingtoetsEntities ringtoetsContext, FailureMechanismType failureMechanismType) :
+ base(ringtoetsContext, CreateConverterForType(failureMechanismType)) {}
+
+ protected override void LoadChildren(FailureMechanismPlaceholder model, FailureMechanismEntity entity) {}
+
+ protected override void UpdateChildren(FailureMechanismPlaceholder model, FailureMechanismEntity entity) {}
+
+ protected override void InsertChildren(FailureMechanismPlaceholder model, FailureMechanismEntity entity) {}
+
+ protected override void PerformChildPostSaveAction() {}
+
+ private static FailureMechanismConverterBase CreateConverterForType(FailureMechanismType failureMechanismType)
+ {
+ return new FailureMechanismPlaceholderConverter(failureMechanismType);
+ }
+ }
+}
\ No newline at end of file
Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Application.Ringtoets.Storage.Test.csproj
===================================================================
diff -u -rd09b94cdc3d7c18ffa7ce53b727c34d189f588a9 -r164e03c3a4957d7a0dd4012f146b0ca139a7a4cc
--- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Application.Ringtoets.Storage.Test.csproj (.../Application.Ringtoets.Storage.Test.csproj) (revision d09b94cdc3d7c18ffa7ce53b727c34d189f588a9)
+++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Application.Ringtoets.Storage.Test.csproj (.../Application.Ringtoets.Storage.Test.csproj) (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -82,13 +82,15 @@
+
+
Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/FailureMechanismConverterBaseTest.cs
===================================================================
diff -u -rd09b94cdc3d7c18ffa7ce53b727c34d189f588a9 -r164e03c3a4957d7a0dd4012f146b0ca139a7a4cc
--- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/FailureMechanismConverterBaseTest.cs (.../FailureMechanismConverterBaseTest.cs) (revision d09b94cdc3d7c18ffa7ce53b727c34d189f588a9)
+++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/FailureMechanismConverterBaseTest.cs (.../FailureMechanismConverterBaseTest.cs) (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -45,12 +45,12 @@
// Setup
var converter = new SimpleFailureMechanismConverter
{
- FailureMechanismType = FailureMechanismType.AsphaltRevetmentFailureMechanism
+ FailureMechanismType = FailureMechanismType.StrengthAndStabilityParallelConstruction
};
var entity = new FailureMechanismEntity
{
- FailureMechanismType = (short)FailureMechanismType.PipingFailureMechanism
+ FailureMechanismType = (short)FailureMechanismType.Piping
};
// Call
@@ -62,8 +62,8 @@
}
[Test]
- [TestCase(0, FailureMechanismType.PipingFailureMechanism, 1)]
- [TestCase(1, FailureMechanismType.OvertoppingFailureMechanism, 5)]
+ [TestCase(0, FailureMechanismType.Piping, 1)]
+ [TestCase(1, FailureMechanismType.DuneErosion, 5)]
public void ConvertEntityToModel_ValidEntity_ReturnInitializedFailureMechanism(
byte isRelevant, FailureMechanismType type, long id)
{
@@ -97,8 +97,8 @@
}
[Test]
- [TestCase(true, FailureMechanismType.MacrostabilityInwardsFailureMechanism, 123456789)]
- [TestCase(false, FailureMechanismType.StructuresClosureFailureMechanism, 986532)]
+ [TestCase(true, FailureMechanismType.MacrostabilityInwards, 123456789)]
+ [TestCase(false, FailureMechanismType.GrassRevetmentSlidingOutwards, 986532)]
public void ConvertModelToEntity_ValidFailureMechanism_ProperlyInitializeEntity(
bool isRelevant, FailureMechanismType type, long id)
{
@@ -162,6 +162,51 @@
mocks.VerifyAll();
}
+ [Test]
+ public void CorrespondsToFailureMechanismType_TypeMatches_ReturnTrue()
+ {
+ // Setup
+ var type = FailureMechanismType.DuneErosion;
+ var entity = new FailureMechanismEntity
+ {
+ FailureMechanismType = (short)type
+ };
+
+ var converter = new SimpleFailureMechanismConverter
+ {
+ FailureMechanismType = type
+ };
+
+ // Call
+ bool isCorresponding = converter.CorrespondsToFailureMechanismType(entity);
+
+ // Assert
+ Assert.IsTrue(isCorresponding);
+ }
+
+ [Test]
+ public void CorrespondsToFailureMechanismType_TypeDoesNotMatch_ReturnFalse()
+ {
+ // Setup
+ var type1 = FailureMechanismType.GrassRevetmentSlidingInwards;
+ var type2 = FailureMechanismType.PipingAtStructure;
+ var entity = new FailureMechanismEntity
+ {
+ FailureMechanismType = (short)type1
+ };
+
+ var converter = new SimpleFailureMechanismConverter
+ {
+ FailureMechanismType = type2
+ };
+
+ // Call
+ bool isCorresponding = converter.CorrespondsToFailureMechanismType(entity);
+
+ // Assert
+ Assert.IsFalse(isCorresponding);
+ }
+
private class SimpleFailureMechanismConverter : FailureMechanismConverterBase where T : IFailureMechanism
{
protected override T ConstructFailureMechanism()
Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/FailureMechanismPlaceholderConverterTest.cs
===================================================================
diff -u
--- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/FailureMechanismPlaceholderConverterTest.cs (revision 0)
+++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/FailureMechanismPlaceholderConverterTest.cs (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -0,0 +1,79 @@
+using Application.Ringtoets.Storage.Converters;
+using Application.Ringtoets.Storage.DbContext;
+
+using NUnit.Framework;
+
+using Ringtoets.Integration.Data.Placeholders;
+
+namespace Application.Ringtoets.Storage.Test.Converters
+{
+ [TestFixture]
+ public class FailureMechanismPlaceholderConverterTest
+ {
+ [Test]
+ public void Constructor_ExpectedValues()
+ {
+ // Call
+ var converter = new FailureMechanismPlaceholderConverter(FailureMechanismType.StrengthAndStabilityParallelConstruction);
+
+ // Assert
+ Assert.IsInstanceOf>(converter);
+ }
+
+ [Test]
+ [TestCase(984753874, true)]
+ [TestCase(123, false)]
+ public void ConvertEntityToModel_ProperEntity_ReturnNewlyCreatedFailureMechanism(
+ long id, bool isRelevant)
+ {
+ // Setup
+ var type = FailureMechanismType.StructureHeight;
+
+ var entity = new FailureMechanismEntity
+ {
+ FailureMechanismType = (short)type,
+ FailureMechanismEntityId = id,
+ IsRelevant = isRelevant ? (byte)1 : (byte)0
+ };
+
+ var converter = new FailureMechanismPlaceholderConverter(type);
+
+ // Call
+ FailureMechanismPlaceholder failureMechanism = converter.ConvertEntityToModel(entity);
+
+ // Assert
+ Assert.AreEqual(id, failureMechanism.StorageId);
+ Assert.AreEqual(isRelevant, failureMechanism.IsRelevant);
+ }
+
+ [Test]
+ [TestCase(98546309845, FailureMechanismType.GrassRevetmentSlidingOutwards, true)]
+ [TestCase(1, FailureMechanismType.StabilityStoneRevetment, false)]
+ public void ConvertModelToEntity_InitializedFailureMechanism_ChangeValuesForEntity(
+ long id, FailureMechanismType type, bool isRelevant)
+ {
+ // Setup
+
+ var converter = new FailureMechanismPlaceholderConverter(type);
+
+ var failureMechanism = new FailureMechanismPlaceholder("A")
+ {
+ StorageId = id,
+ IsRelevant = isRelevant
+ };
+
+ var entity = new FailureMechanismEntity();
+
+ // Call
+ converter.ConvertModelToEntity(failureMechanism, entity);
+
+ // Assert
+ Assert.AreEqual(id, entity.FailureMechanismEntityId);
+ Assert.AreEqual((short)type, entity.FailureMechanismType);
+ var expectedIsRelevantValue = isRelevant ?
+ (byte)1 :
+ (byte)0;
+ Assert.AreEqual(expectedIsRelevantValue, entity.IsRelevant);
+ }
+ }
+}
\ No newline at end of file
Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/PipingFailureMechanismConverterTest.cs
===================================================================
diff -u -r35dd019140ab3d11241908744c43ddac43a8989e -r164e03c3a4957d7a0dd4012f146b0ca139a7a4cc
--- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/PipingFailureMechanismConverterTest.cs (.../PipingFailureMechanismConverterTest.cs) (revision 35dd019140ab3d11241908744c43ddac43a8989e)
+++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/PipingFailureMechanismConverterTest.cs (.../PipingFailureMechanismConverterTest.cs) (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -67,7 +67,7 @@
FailureMechanismEntity entity = new FailureMechanismEntity
{
FailureMechanismEntityId = storageId,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism,
+ FailureMechanismType = (int) FailureMechanismType.Piping,
IsRelevant = isRelevant
};
@@ -90,7 +90,7 @@
FailureMechanismEntity entity = new FailureMechanismEntity
{
FailureMechanismEntityId = storageId,
- FailureMechanismType = (int) FailureMechanismType.MacrostabilityInwardsFailureMechanism,
+ FailureMechanismType = (int) FailureMechanismType.MacrostabilityInwards,
IsRelevant = 1
};
Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/AssessmentSectionPersistorTest.cs
===================================================================
diff -u -r4e14ed090d09a220a790b3562ceb4232dab1cce6 -r164e03c3a4957d7a0dd4012f146b0ca139a7a4cc
--- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/AssessmentSectionPersistorTest.cs (.../AssessmentSectionPersistorTest.cs) (revision 4e14ed090d09a220a790b3562ceb4232dab1cce6)
+++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/AssessmentSectionPersistorTest.cs (.../AssessmentSectionPersistorTest.cs) (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -96,19 +96,21 @@
const string name = "test";
const int norm = 30000;
const long pipingFailureMechanismStorageId = 1L;
+ const long asphaltFailureMechanismStorageId = 2L;
+ const long overtoppingFailureMechanismStorageId = 3L;
const string hydraulicDatabaseVersion = "1.0";
const string hydraulicDatabasePath = "/temp/test";
const string hydraulicDatabaseLocationName = "test";
const double hydraulicDatabaseLocationDesignWaterLevel = 15.6;
- const long hydraulicDatabaseLocationLocationId = 1300001;
+ const long hydraulicDatabaseLocationLocationId = 1300001L;
const long hydraulicDatabaseLocationStorageId = 1234L;
const decimal hydraulicDatabaseLocationX = 253;
const decimal hydraulicDatabaseLocationY = 123;
const string otherHydraulicDatabaseLocationName = "test2";
const double otherHydraulicDatabaseLocationDesignWaterLevel = 18.6;
- const long otherHydraulicDatabaseLocationLocationId = 1300005;
+ const long otherHydraulicDatabaseLocationLocationId = 1300005L;
const long otherHydraulicDatabaseLocationStorageId = 4321L;
const decimal otherHydraulicDatabaseLocationX = 3927;
const decimal otherHydraulicDatabaseLocationY = 372;
@@ -118,12 +120,27 @@
AssessmentSectionPersistor persistor = new AssessmentSectionPersistor(ringtoetsEntities);
var entity = new AssessmentSectionEntity
{
- AssessmentSectionEntityId = storageId, Name = name, Norm = norm, FailureMechanismEntities = new List
+ AssessmentSectionEntityId = storageId, Name = name, Norm = norm,
+ FailureMechanismEntities = new List
{
new FailureMechanismEntity
{
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism, FailureMechanismEntityId = pipingFailureMechanismStorageId
- }
+ FailureMechanismType = (int) FailureMechanismType.Piping,
+ FailureMechanismEntityId = pipingFailureMechanismStorageId,
+ IsRelevant = 0
+ },
+ new FailureMechanismEntity
+ {
+ FailureMechanismType = (short) FailureMechanismType.WaveImpactOnAsphaltRevetment,
+ FailureMechanismEntityId = asphaltFailureMechanismStorageId,
+ IsRelevant = 0
+ },
+ new FailureMechanismEntity
+ {
+ FailureMechanismType = (short) FailureMechanismType.StructureHeight,
+ FailureMechanismEntityId = overtoppingFailureMechanismStorageId,
+ IsRelevant = 1
+ },
},
HydraulicDatabaseVersion = hydraulicDatabaseVersion, HydraulicDatabaseLocation = hydraulicDatabasePath,
Composition = (short) composition,
@@ -158,7 +175,16 @@
Assert.AreEqual(name, section.Name);
Assert.AreEqual(composition, section.Composition);
Assert.AreEqual(norm, section.FailureMechanismContribution.Norm);
+
Assert.AreEqual(pipingFailureMechanismStorageId, section.PipingFailureMechanism.StorageId);
+ Assert.IsFalse(section.PipingFailureMechanism.IsRelevant);
+
+ Assert.AreEqual(asphaltFailureMechanismStorageId, section.AsphaltRevetment.StorageId);
+ Assert.IsFalse(section.AsphaltRevetment.IsRelevant);
+
+ Assert.AreEqual(overtoppingFailureMechanismStorageId, section.Overtopping.StorageId);
+ Assert.IsTrue(section.Overtopping.IsRelevant);
+
Assert.AreEqual(hydraulicDatabaseVersion, section.HydraulicBoundaryDatabase.Version);
Assert.AreEqual(hydraulicDatabasePath, section.HydraulicBoundaryDatabase.FilePath);
Assert.AreEqual(2, section.HydraulicBoundaryDatabase.Locations.Count);
@@ -352,6 +378,59 @@
}
[Test]
+ public void InsertModel_PersistingFailureMechanismPlaceholders_FailureMechanismEntitiesHaveElementsAdded()
+ {
+ // Setup
+ var ringtoetsContext = RingtoetsEntitiesHelper.Create(mockRepository);
+ mockRepository.ReplayAll();
+
+ var persistor = new AssessmentSectionPersistor(ringtoetsContext);
+
+ var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike)
+ {
+ PipingFailureMechanism =
+ {
+ IsRelevant = false
+ },
+ Closing =
+ {
+ IsRelevant = false
+ },
+ AsphaltRevetment =
+ {
+ IsRelevant = true
+ }
+ };
+
+ var parentNavigationProperty = new List();
+
+ // Call
+ persistor.InsertModel(parentNavigationProperty, assessmentSection, 0);
+
+ // Assert
+ Assert.AreEqual(1, parentNavigationProperty.Count);
+
+ AssessmentSectionEntity assessmentSectionEntity = parentNavigationProperty[0];
+ Assert.AreEqual(9, assessmentSectionEntity.FailureMechanismEntities.Count);
+
+ FailureMechanismEntity pipingFailureMechanismEntity = assessmentSectionEntity.FailureMechanismEntities
+ .First(fme => fme.FailureMechanismType == (short)FailureMechanismType.Piping);
+ Assert.AreEqual(0, pipingFailureMechanismEntity.IsRelevant,
+ "Set IsRelevant to false, so expecting a value of 0.");
+
+ FailureMechanismEntity closingFailureMechanismEntity = assessmentSectionEntity.FailureMechanismEntities
+ .First(fme => fme.FailureMechanismType == (short)FailureMechanismType.ReliabilityClosingOfStructure);
+ Assert.AreEqual(0, closingFailureMechanismEntity.IsRelevant,
+ "Set IsRelevant to false, so expecting a value of 0.");
+
+ FailureMechanismEntity asphaltFailureMechanismEntity = assessmentSectionEntity.FailureMechanismEntities
+ .First(fme => fme.FailureMechanismType == (short)FailureMechanismType.WaveImpactOnAsphaltRevetment);
+ Assert.AreEqual(1, asphaltFailureMechanismEntity.IsRelevant,
+ "Set IsRelevant to true, so expecting a value of 1.");
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
public void InsertModel_SingleEntityInParentNavigationPropertySingleAssessmentSectionWithSameStorageId_AssessmentSectionAsEntityInParentNavigationProperty()
{
// Setup
@@ -416,7 +495,7 @@
AssessmentSection assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike)
{
- HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase()
+ HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase
{
Locations =
{
@@ -445,8 +524,8 @@
var entity = parentNavigationProperty.ToList()[0];
Assert.AreNotEqual(assessmentSection, entity);
- Assert.AreEqual(1, entity.FailureMechanismEntities.Count);
- Assert.AreEqual(1, entity.FailureMechanismEntities.Count(db => db.FailureMechanismType.Equals((int) FailureMechanismType.PipingFailureMechanism)));
+ Assert.AreEqual(9, entity.FailureMechanismEntities.Count);
+ Assert.AreEqual(1, entity.FailureMechanismEntities.Count(db => db.FailureMechanismType.Equals((short) FailureMechanismType.Piping)));
Assert.AreEqual(1, entity.HydraulicLocationEntities.Count);
var locationEntity = entity.HydraulicLocationEntities.First();
Assert.AreEqual(name, locationEntity.Name);
@@ -463,6 +542,135 @@
}
[Test]
+ public void UpdateModel_AssessmentSectionNeverPersistedBefore_FailureMechanismEntitiesHaveElementsAdded()
+ {
+ // Setup
+ var ringtoetsContext = RingtoetsEntitiesHelper.Create(mockRepository);
+ mockRepository.ReplayAll();
+
+ var persistor = new AssessmentSectionPersistor(ringtoetsContext);
+
+ var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike)
+ {
+ PipingFailureMechanism =
+ {
+ IsRelevant = false
+ },
+ Overtopping =
+ {
+ IsRelevant = false
+ },
+ StoneRevetment =
+ {
+ IsRelevant = true
+ }
+ };
+
+ // Precondition:
+ Assert.AreEqual(0, assessmentSection.StorageId,
+ "StorageId of 0 expected for assessment sections that haven't been persisted before.");
+
+ var parentNavigationProperty = new List();
+
+ // Call
+ persistor.UpdateModel(parentNavigationProperty, assessmentSection, 0);
+
+ // Assert
+ Assert.AreEqual(1, parentNavigationProperty.Count);
+
+ AssessmentSectionEntity assessmentSectionEntity = parentNavigationProperty[0];
+ Assert.AreEqual(9, assessmentSectionEntity.FailureMechanismEntities.Count);
+
+ FailureMechanismEntity pipingFailureMechanismEntity = assessmentSectionEntity.FailureMechanismEntities
+ .First(fme => fme.FailureMechanismType == (short)FailureMechanismType.Piping);
+ Assert.AreEqual(0, pipingFailureMechanismEntity.IsRelevant,
+ "Set IsRelevant to false, so expecting a value of 0.");
+
+ FailureMechanismEntity closingFailureMechanismEntity = assessmentSectionEntity.FailureMechanismEntities
+ .First(fme => fme.FailureMechanismType == (short)FailureMechanismType.StructureHeight);
+ Assert.AreEqual(0, closingFailureMechanismEntity.IsRelevant,
+ "Set IsRelevant to false, so expecting a value of 0.");
+
+ FailureMechanismEntity asphaltFailureMechanismEntity = assessmentSectionEntity.FailureMechanismEntities
+ .First(fme => fme.FailureMechanismType == (short)FailureMechanismType.StabilityStoneRevetment);
+ Assert.AreEqual(1, asphaltFailureMechanismEntity.IsRelevant,
+ "Set IsRelevant to true, so expecting a value of 1.");
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
+ public void UpdateModel_AssessmentSectionHadBeenPersistedBefore_FailureMechanismEntitiesHaveElementsUpdated()
+ {
+ // Setup
+ var ringtoetsContext = RingtoetsEntitiesHelper.Create(mockRepository);
+ mockRepository.ReplayAll();
+
+ var persistor = new AssessmentSectionPersistor(ringtoetsContext);
+
+ var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike)
+ {
+ PipingFailureMechanism =
+ {
+ IsRelevant = false
+ },
+ FailingOfConstruction =
+ {
+ IsRelevant = false
+ },
+ MacrostabilityInwards =
+ {
+ IsRelevant = true
+ }
+ };
+
+ var parentNavigationProperty = new List();
+
+ persistor.InsertModel(parentNavigationProperty, assessmentSection, 0);
+ parentNavigationProperty[0].AssessmentSectionEntityId = 1;
+ AssessmentSectionEntity sectionEntity = parentNavigationProperty[0];
+ for (int i = 0; i < sectionEntity.FailureMechanismEntities.Count; i++)
+ {
+ sectionEntity.FailureMechanismEntities.ElementAt(i).FailureMechanismEntityId = i+1;
+ }
+ persistor.PerformPostSaveActions();
+
+ // Precondition:
+ Assert.AreNotEqual(0, assessmentSection.StorageId,
+ "StorageId > 0 expected for failure mechanism that have been persisted.");
+ Assert.AreNotEqual(0, assessmentSection.PipingFailureMechanism.StorageId,
+ "StorageId > 0 expected for failure mechanisms that have been persisted.");
+ Assert.AreNotEqual(0, assessmentSection.FailingOfConstruction.StorageId,
+ "StorageId > 0 expected for failure mechanisms that have been persisted.");
+ Assert.AreNotEqual(0, assessmentSection.MacrostabilityInwards.StorageId,
+ "StorageId > 0 expected for failure mechanisms that have been persisted.");
+
+ // Call
+ persistor.UpdateModel(parentNavigationProperty, assessmentSection, 0);
+
+ // Assert
+ Assert.AreEqual(1, parentNavigationProperty.Count);
+
+ AssessmentSectionEntity assessmentSectionEntity = parentNavigationProperty[0];
+ Assert.AreEqual(9, assessmentSectionEntity.FailureMechanismEntities.Count);
+
+ FailureMechanismEntity pipingFailureMechanismEntity = assessmentSectionEntity.FailureMechanismEntities
+ .First(fme => fme.FailureMechanismType == (short)FailureMechanismType.Piping);
+ Assert.AreEqual(0, pipingFailureMechanismEntity.IsRelevant,
+ "Set IsRelevant to false, so expecting a value of 0.");
+
+ FailureMechanismEntity closingFailureMechanismEntity = assessmentSectionEntity.FailureMechanismEntities
+ .First(fme => fme.FailureMechanismType == (short)FailureMechanismType.StrengthAndStabilityPointConstruction);
+ Assert.AreEqual(0, closingFailureMechanismEntity.IsRelevant,
+ "Set IsRelevant to false, so expecting a value of 0.");
+
+ FailureMechanismEntity asphaltFailureMechanismEntity = assessmentSectionEntity.FailureMechanismEntities
+ .First(fme => fme.FailureMechanismType == (short)FailureMechanismType.MacrostabilityInwards);
+ Assert.AreEqual(1, asphaltFailureMechanismEntity.IsRelevant,
+ "Set IsRelevant to true, so expecting a value of 1.");
+ mockRepository.VerifyAll();
+ }
+
+ [Test]
public void UpdateModel_NullParentNavigationProperty_ThrowsArgumentNullException()
{
// Setup
@@ -785,8 +993,8 @@
var entity = parentNavigationProperty.ToList()[0];
Assert.AreNotEqual(assessmentSection, entity);
- Assert.AreEqual(1, entity.FailureMechanismEntities.Count);
- Assert.AreEqual(1, entity.FailureMechanismEntities.Count(db => db.FailureMechanismType.Equals((int) FailureMechanismType.PipingFailureMechanism)));
+ Assert.AreEqual(9, entity.FailureMechanismEntities.Count);
+ Assert.AreEqual(1, entity.FailureMechanismEntities.Count(db => db.FailureMechanismType.Equals((short) FailureMechanismType.Piping)));
Assert.AreEqual(1, entity.HydraulicLocationEntities.Count);
var hydraulicLocationEntity = entity.HydraulicLocationEntities.First();
Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/FailureMechanismPlaceholderPersistorTest.cs
===================================================================
diff -u
--- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/FailureMechanismPlaceholderPersistorTest.cs (revision 0)
+++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/FailureMechanismPlaceholderPersistorTest.cs (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -0,0 +1,172 @@
+using System.Collections.Generic;
+
+using Application.Ringtoets.Storage.DbContext;
+using Application.Ringtoets.Storage.Persistors;
+
+using NUnit.Framework;
+
+using Rhino.Mocks;
+
+using Ringtoets.Integration.Data.Placeholders;
+
+namespace Application.Ringtoets.Storage.Test.Persistors
+{
+ [TestFixture]
+ public class FailureMechanismPlaceholderPersistorTest
+ {
+ [Test]
+ public void Constructor_ExpectedValues()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var storageContext = mocks.Stub();
+ mocks.ReplayAll();
+
+ // Call
+ var persistor = new FailureMechanismPlaceholderPersistor(storageContext, FailureMechanismType.MacrostabilityInwards);
+
+ // Assert
+ Assert.IsInstanceOf>(persistor);
+ mocks.VerifyAll();
+ }
+
+ [Test]
+ [TestCase(FailureMechanismType.Microstability, 12345678, true)]
+ [TestCase(FailureMechanismType.ReliabilityClosingOfStructure, 546, false)]
+ public void LoadModel_ValidEntity_ProperlyInitializePlaceholderFailureMechanism(
+ FailureMechanismType type, long id, bool isRelevant)
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var storageContext = mocks.Stub();
+ mocks.ReplayAll();
+
+ var persistor = new FailureMechanismPlaceholderPersistor(storageContext, type);
+
+ var failureMechanism = new FailureMechanismPlaceholder("A");
+ var entity = new FailureMechanismEntity
+ {
+ FailureMechanismType = (short)type,
+ FailureMechanismEntityId = id,
+ IsRelevant = isRelevant ? (byte)1 : (byte)0
+ };
+
+ // Call
+ persistor.LoadModel(entity, failureMechanism);
+
+ // Assert
+ Assert.AreEqual(id, failureMechanism.StorageId);
+ Assert.AreEqual(isRelevant, failureMechanism.IsRelevant);
+ }
+
+ [Test]
+ [TestCase(FailureMechanismType.DuneErosion, true)]
+ [TestCase(FailureMechanismType.StabilityStoneRevetment, false)]
+ public void UpdateModel_FailureMechanismNotPersisted_FailureMechanismAddedToPersistedCollection(
+ FailureMechanismType type, bool isRelevant)
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var storageContext = mocks.Stub();
+ mocks.ReplayAll();
+
+ var parentNavigationProperty = new List();
+
+ var persistor = new FailureMechanismPlaceholderPersistor(storageContext, type);
+
+ var failureMechanism = new FailureMechanismPlaceholder("A")
+ {
+ IsRelevant = isRelevant
+ };
+
+ // Precondition
+ Assert.AreEqual(0, failureMechanism.StorageId,
+ "StorageId should be 0 to denote the failure mechanism as unsaved.");
+
+ // Call
+ persistor.UpdateModel(parentNavigationProperty, failureMechanism);
+
+ // Assert
+ Assert.AreEqual(1, parentNavigationProperty.Count);
+
+ FailureMechanismEntity entity = parentNavigationProperty[0];
+ Assert.AreEqual((short)type, entity.FailureMechanismType);
+ var expectedIsRelevantValue = isRelevant ? (byte)1 : (byte)0;
+ Assert.AreEqual(expectedIsRelevantValue, entity.IsRelevant);
+ }
+
+ [Test]
+ [TestCase(FailureMechanismType.DuneErosion, true)]
+ [TestCase(FailureMechanismType.StabilityStoneRevetment, false)]
+ public void UpdateModel_FailureMechanismHasBeenPersistedAlready_EntityUpdateWithNewValues(
+ FailureMechanismType type, bool isRelevant)
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var storageContext = mocks.Stub();
+ mocks.ReplayAll();
+
+ const int id = 234567;
+ FailureMechanismEntity alreadyExistingEntity = new FailureMechanismEntity
+ {
+ FailureMechanismEntityId = id,
+ FailureMechanismType = (short)type
+ };
+ var parentNavigationProperty = new List
+ {
+ alreadyExistingEntity,
+ };
+
+ var persistor = new FailureMechanismPlaceholderPersistor(storageContext, type);
+
+ var failureMechanism = new FailureMechanismPlaceholder("A")
+ {
+ IsRelevant = isRelevant,
+ StorageId = id
+ };
+
+ // Call
+ persistor.UpdateModel(parentNavigationProperty, failureMechanism);
+
+ // Assert
+ Assert.AreEqual(1, parentNavigationProperty.Count);
+
+ Assert.AreEqual((short)type, alreadyExistingEntity.FailureMechanismType);
+ var expectedIsRelevantValue = isRelevant ? (byte)1 : (byte)0;
+ Assert.AreEqual(expectedIsRelevantValue, alreadyExistingEntity.IsRelevant);
+ }
+
+ [Test]
+ public void PerformPostSaveActions_PlaceholderRecentlyInserted_SetIdOfPlaceholder()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var storageContext = mocks.Stub();
+ mocks.ReplayAll();
+
+ var type = FailureMechanismType.PipingAtStructure;
+
+ var parentNavigationProperty = new List();
+
+ var persistor = new FailureMechanismPlaceholderPersistor(storageContext, type);
+
+ var failureMechanism = new FailureMechanismPlaceholder("A");
+
+ // Precondition
+ Assert.AreEqual(0, failureMechanism.StorageId,
+ "StorageId should be 0 to denote the failure mechanism as unsaved.");
+
+ const long id = 63547234L;
+ persistor.UpdateModel(parentNavigationProperty, failureMechanism);
+ parentNavigationProperty[0].FailureMechanismEntityId = id;
+
+ // Call
+ persistor.PerformPostSaveActions();
+
+ // Assert
+ Assert.AreEqual(1, parentNavigationProperty.Count);
+
+ Assert.AreEqual(id, failureMechanism.StorageId);
+ }
+ }
+}
\ No newline at end of file
Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/PipingFailureMechanismPersistorTest.cs
===================================================================
diff -u -r35dd019140ab3d11241908744c43ddac43a8989e -r164e03c3a4957d7a0dd4012f146b0ca139a7a4cc
--- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/PipingFailureMechanismPersistorTest.cs (.../PipingFailureMechanismPersistorTest.cs) (revision 35dd019140ab3d11241908744c43ddac43a8989e)
+++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/PipingFailureMechanismPersistorTest.cs (.../PipingFailureMechanismPersistorTest.cs) (revision 164e03c3a4957d7a0dd4012f146b0ca139a7a4cc)
@@ -124,7 +124,7 @@
FailureMechanismEntity entity = new FailureMechanismEntity
{
FailureMechanismEntityId = storageId,
- FailureMechanismType = (int) FailureMechanismType.StoneRevetmentFailureMechanism,
+ FailureMechanismType = (short) FailureMechanismType.StabilityStoneRevetment,
};
PipingFailureMechanismPersistor persistor = new PipingFailureMechanismPersistor(ringtoetsEntities);
@@ -152,7 +152,7 @@
FailureMechanismEntity entity = new FailureMechanismEntity
{
FailureMechanismEntityId = storageId,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism,
+ FailureMechanismType = (int) FailureMechanismType.Piping,
IsRelevant = 0
};
PipingFailureMechanismPersistor persistor = new PipingFailureMechanismPersistor(ringtoetsEntities);
@@ -185,7 +185,7 @@
FailureMechanismEntity entity = new FailureMechanismEntity
{
FailureMechanismEntityId = storageId,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism,
+ FailureMechanismType = (int) FailureMechanismType.Piping,
StochasticSoilModelEntities = new List
{
new StochasticSoilModelEntity
@@ -270,7 +270,7 @@
Assert.AreEqual(1, parentNavigationProperty.Count);
FailureMechanismEntity entity = parentNavigationProperty[0];
Assert.AreNotEqual(model, entity);
- Assert.AreEqual((int) FailureMechanismType.PipingFailureMechanism, entity.FailureMechanismType);
+ Assert.AreEqual((int) FailureMechanismType.Piping, entity.FailureMechanismType);
Assert.AreEqual(1, entity.IsRelevant);
mockRepository.VerifyAll();
@@ -287,7 +287,7 @@
FailureMechanismEntity entityToDelete = new FailureMechanismEntity
{
FailureMechanismEntityId = storageId,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism
+ FailureMechanismType = (int) FailureMechanismType.Piping
};
IList parentNavigationProperty = new List
{
@@ -419,12 +419,12 @@
new FailureMechanismEntity
{
FailureMechanismEntityId = storageId,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism
+ FailureMechanismType = (int) FailureMechanismType.Piping
},
new FailureMechanismEntity
{
FailureMechanismEntityId = storageId,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism
+ FailureMechanismType = (int) FailureMechanismType.Piping
}
};
PipingFailureMechanism model = new PipingFailureMechanism
@@ -455,7 +455,7 @@
new FailureMechanismEntity
{
FailureMechanismEntityId = storageId,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism,
+ FailureMechanismType = (int) FailureMechanismType.Piping,
IsRelevant = 1
}
};
@@ -517,7 +517,7 @@
new FailureMechanismEntity
{
FailureMechanismEntityId = storageId,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism,
+ FailureMechanismType = (int) FailureMechanismType.Piping,
StochasticSoilModelEntities = new List
{
new StochasticSoilModelEntity
@@ -566,7 +566,7 @@
FailureMechanismEntity entityToDelete = new FailureMechanismEntity
{
FailureMechanismEntityId = 4567L,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism
+ FailureMechanismType = (int) FailureMechanismType.Piping
};
ObservableCollection parentNavigationProperty = new ObservableCollection
@@ -610,12 +610,12 @@
FailureMechanismEntity entityToUpdate = new FailureMechanismEntity
{
FailureMechanismEntityId = storageId,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism
+ FailureMechanismType = (int) FailureMechanismType.Piping
};
FailureMechanismEntity entityToDelete = new FailureMechanismEntity
{
FailureMechanismEntityId = 4567L,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism
+ FailureMechanismType = (int) FailureMechanismType.Piping
};
ringtoetsEntities.FailureMechanismEntities.Add(entityToUpdate);
ringtoetsEntities.FailureMechanismEntities.Add(entityToDelete);
@@ -653,12 +653,12 @@
FailureMechanismEntity firstEntityToDelete = new FailureMechanismEntity
{
FailureMechanismEntityId = 1234L,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism
+ FailureMechanismType = (int) FailureMechanismType.Piping
};
FailureMechanismEntity secondEntityToDelete = new FailureMechanismEntity
{
FailureMechanismEntityId = 4567L,
- FailureMechanismType = (int) FailureMechanismType.PipingFailureMechanism
+ FailureMechanismType = (int) FailureMechanismType.Piping
};
ObservableCollection parentNavigationProperty = new ObservableCollection
{