Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/PipingFailureMechanismEntityConverter.cs =================================================================== diff -u -rd242e89e13ef602facae6a1ef91660242bcef340 -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/PipingFailureMechanismEntityConverter.cs (.../PipingFailureMechanismEntityConverter.cs) (revision d242e89e13ef602facae6a1ef91660242bcef340) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/PipingFailureMechanismEntityConverter.cs (.../PipingFailureMechanismEntityConverter.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -39,6 +39,11 @@ throw new ArgumentNullException("entity"); } + if (entity.FailureMechanismType != (int)FailureMechanismType.DikesPipingFailureMechanism) + { + throw new ArgumentException(@"Incorrect modelType", "entity"); + } + var failureMechanism = new PipingFailureMechanism(); failureMechanism.StorageId = entity.FailureMechanismEntityId; Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/ProjectEntityConverter.cs =================================================================== diff -u -rd242e89e13ef602facae6a1ef91660242bcef340 -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/ProjectEntityConverter.cs (.../ProjectEntityConverter.cs) (revision d242e89e13ef602facae6a1ef91660242bcef340) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Converters/ProjectEntityConverter.cs (.../ProjectEntityConverter.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -35,19 +35,20 @@ /// Converts to . /// /// The to convert. - /// The to obtain the model. /// A new instance of , based on the properties of . - /// Thrown when or is null. + /// Thrown when is null. public Project ConvertEntityToModel(ProjectEntity entity) { if (entity == null) { throw new ArgumentNullException("entity"); } - var project = new Project(); - project.StorageId = entity.ProjectEntityId; - project.Description = entity.Description; + var project = new Project + { + StorageId = entity.ProjectEntityId, + Description = entity.Description + }; return project; } @@ -73,7 +74,7 @@ } entity.ProjectEntityId = modelObject.StorageId; entity.Description = modelObject.Description; - entity.LastUpdated = new DateTime().Ticks; + entity.LastUpdated = (int)(DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1)).TotalSeconds; } } } \ No newline at end of file Index: Application/Ringtoets/src/Application.Ringtoets.Storage/DbContext/IRingtoetsEntities.cs =================================================================== diff -u -ra6371ac68897b69e2efd537fa29bb6564f50fdcf -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/src/Application.Ringtoets.Storage/DbContext/IRingtoetsEntities.cs (.../IRingtoetsEntities.cs) (revision a6371ac68897b69e2efd537fa29bb6564f50fdcf) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/DbContext/IRingtoetsEntities.cs (.../IRingtoetsEntities.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -31,26 +31,34 @@ public interface IRingtoetsEntities { /// - /// of + /// Gets a of containing + /// every entity found in the database. /// DbSet ProjectEntities { get; } /// - /// of + /// Gets a of containing + /// every entity found in the database. /// DbSet DikeAssessmentSectionEntities { get; } /// - /// of + /// Gets a of containing + /// every entity found in the database. /// DbSet FailureMechanismEntities { get; } /// - /// of + /// Gets a of containing + /// every entity found in the database. /// DbSet HydraulicLocationEntities { get; } - DbSet Set() where TEntity : class; + /// + /// Gets a of containing + /// every entity found in the database. + /// + DbSet ReferenceLinePointEntities { get; } /// /// Persists all updates to the database and resets change tracking in the object context, see . Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/DikeAssessmentSectionEntityPersistor.cs =================================================================== diff -u -r0b5ecd8a04803bce1ed8398053e9b7cb7404b886 -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/DikeAssessmentSectionEntityPersistor.cs (.../DikeAssessmentSectionEntityPersistor.cs) (revision 0b5ecd8a04803bce1ed8398053e9b7cb7404b886) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/DikeAssessmentSectionEntityPersistor.cs (.../DikeAssessmentSectionEntityPersistor.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -37,7 +37,7 @@ /// public class DikeAssessmentSectionEntityPersistor { - private readonly IRingtoetsEntities dbContext; + private readonly DbSet dikeAssessmentSectionSet; private readonly DikeAssessmentSectionEntityConverter converter; private readonly Dictionary insertedList = new Dictionary(); private readonly ICollection modifiedList = new List(); @@ -57,13 +57,13 @@ { throw new ArgumentNullException("ringtoetsContext"); } - dbContext = ringtoetsContext; + dikeAssessmentSectionSet = ringtoetsContext.DikeAssessmentSectionEntities; converter = new DikeAssessmentSectionEntityConverter(); - dikePipingFailureMechanismEntityPersistor = new DikesPipingFailureMechanismEntityPersistor(dbContext); - hydraulicLocationEntityPersistor = new HydraulicLocationEntityPersistor(dbContext); - referenceLinePersistor = new ReferenceLinePersistor(dbContext); + dikePipingFailureMechanismEntityPersistor = new DikesPipingFailureMechanismEntityPersistor(ringtoetsContext); + hydraulicLocationEntityPersistor = new HydraulicLocationEntityPersistor(ringtoetsContext); + referenceLinePersistor = new ReferenceLinePersistor(ringtoetsContext); } /// @@ -156,7 +156,7 @@ public void RemoveUnModifiedEntries(ICollection parentNavigationProperty) { var untouchedModifiedList = parentNavigationProperty.Where(e => e.DikeAssessmentSectionEntityId > 0 && !modifiedList.Contains(e)); - dbContext.Set().RemoveRange(untouchedModifiedList); + dikeAssessmentSectionSet.RemoveRange(untouchedModifiedList); modifiedList.Clear(); } @@ -182,12 +182,7 @@ dikePipingFailureMechanismEntityPersistor.UpdateModel(entity.FailureMechanismEntities, model.PipingFailureMechanism); dikePipingFailureMechanismEntityPersistor.RemoveUnModifiedEntries(entity.FailureMechanismEntities); - if (model.HydraulicBoundaryDatabase != null) - { - hydraulicLocationEntityPersistor.UpdateModel(entity.HydraulicLocationEntities, model.HydraulicBoundaryDatabase); - } - hydraulicLocationEntityPersistor.RemoveUnModifiedEntries(entity.HydraulicLocationEntities); - + hydraulicLocationEntityPersistor.UpdateModel(entity.HydraulicLocationEntities, model.HydraulicBoundaryDatabase); referenceLinePersistor.InsertModel(entity.ReferenceLinePointEntities, model.ReferenceLine); } @@ -199,15 +194,9 @@ private void InsertChildren(DikeAssessmentSection model, DikeAssessmentSectionEntity entity) { dikePipingFailureMechanismEntityPersistor.InsertModel(entity.FailureMechanismEntities, model.PipingFailureMechanism); - - if (model.HydraulicBoundaryDatabase != null) - { - hydraulicLocationEntityPersistor.InsertModel(entity.HydraulicLocationEntities, model.HydraulicBoundaryDatabase); - } - dikePipingFailureMechanismEntityPersistor.RemoveUnModifiedEntries(entity.FailureMechanismEntities); - hydraulicLocationEntityPersistor.RemoveUnModifiedEntries(entity.HydraulicLocationEntities); + hydraulicLocationEntityPersistor.InsertModel(entity.HydraulicLocationEntities, model.HydraulicBoundaryDatabase); referenceLinePersistor.InsertModel(entity.ReferenceLinePointEntities, model.ReferenceLine); } Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/DikesPipingFailureMechanismEntityPersistor.cs =================================================================== diff -u -r503a1871546f1694465c356bf06c167bc67740dd -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/DikesPipingFailureMechanismEntityPersistor.cs (.../DikesPipingFailureMechanismEntityPersistor.cs) (revision 503a1871546f1694465c356bf06c167bc67740dd) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/DikesPipingFailureMechanismEntityPersistor.cs (.../DikesPipingFailureMechanismEntityPersistor.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -31,54 +31,13 @@ /// public class DikesPipingFailureMechanismEntityPersistor : FailureMechanismEntityPersistorBase { - private readonly PipingFailureMechanismEntityConverter converter; - /// /// New instance of . /// /// The storage context. /// Thrown when is null. - public DikesPipingFailureMechanismEntityPersistor(IRingtoetsEntities ringtoetsContext) : base(ringtoetsContext) { - converter = new PipingFailureMechanismEntityConverter(); + public DikesPipingFailureMechanismEntityPersistor(IRingtoetsEntities ringtoetsContext) : + base(ringtoetsContext, new PipingFailureMechanismEntityConverter()) { } - - /// - /// Loads the as . - /// - /// to load from. - /// The to load data in. - /// Thrown when: - /// is null. - /// is null. - /// - public override void LoadModel(FailureMechanismEntity entity, PipingFailureMechanism pipingFailureMechanism) - { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } - if (pipingFailureMechanism == null) - { - throw new ArgumentNullException("pipingFailureMechanism"); - } - - if (entity.FailureMechanismType != (int) FailureMechanismType.DikesPipingFailureMechanism) - { - throw new ArgumentException(@"Incorrect modelType", "entity"); - } - - var model = ConvertEntityToModel(entity); - pipingFailureMechanism.StorageId = model.StorageId; - } - - protected override void ConvertModelToEntity(PipingFailureMechanism model, FailureMechanismEntity entity) - { - converter.ConvertModelToEntity(model, entity); - } - - protected override PipingFailureMechanism ConvertEntityToModel(FailureMechanismEntity entity) - { - return converter.ConvertEntityToModel(entity); - } } } \ No newline at end of file Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/FailureMechanismEntityPersistorBase.cs =================================================================== diff -u -ra6371ac68897b69e2efd537fa29bb6564f50fdcf -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/FailureMechanismEntityPersistorBase.cs (.../FailureMechanismEntityPersistorBase.cs) (revision a6371ac68897b69e2efd537fa29bb6564f50fdcf) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/FailureMechanismEntityPersistorBase.cs (.../FailureMechanismEntityPersistorBase.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.Data.Entity; using System.Linq; +using Application.Ringtoets.Storage.Converters; using Application.Ringtoets.Storage.DbContext; using Application.Ringtoets.Storage.Exceptions; using Application.Ringtoets.Storage.Properties; @@ -35,25 +36,55 @@ /// public abstract class FailureMechanismEntityPersistorBase where T : IFailureMechanism { - private readonly DbSet dbSet; + private readonly DbSet failureMechanismSet; private readonly Dictionary insertedList = new Dictionary(); private readonly ICollection modifiedList = new List(); + private readonly IEntityConverter converter; + /// /// New instance of . /// /// The storage context. + /// An implementation of the to use in the persistor. /// Thrown when is null. - protected FailureMechanismEntityPersistorBase(IRingtoetsEntities ringtoetsContext) + protected FailureMechanismEntityPersistorBase(IRingtoetsEntities ringtoetsContext, IEntityConverter converter) { if (ringtoetsContext == null) { throw new ArgumentNullException("ringtoetsContext"); } - dbSet = ringtoetsContext.FailureMechanismEntities; + failureMechanismSet = ringtoetsContext.FailureMechanismEntities; + this.converter = converter; } + /// + /// Loads the as . + /// + /// to load from. + /// The to load data in. + /// Thrown when: + /// is null. + /// is null. + /// + public void LoadModel(FailureMechanismEntity entity, IFailureMechanism pipingFailureMechanism) + { + if (entity == null) + { + throw new ArgumentNullException("entity"); + } + if (pipingFailureMechanism == null) + { + throw new ArgumentNullException("pipingFailureMechanism"); + } + + var model = converter.ConvertEntityToModel(entity); + + pipingFailureMechanism.StorageId = model.StorageId; + } + + /// /// Ensures that the is set as in the . /// /// Collection where objects can be searched and added. Usually, this collection is a navigation property of a . @@ -73,17 +104,16 @@ { throw new ArgumentNullException("model"); } - if (model.StorageId < 1) - { - InsertModel(parentNavigationProperty, model); - return; - } - if (parentNavigationProperty == null) { throw new ArgumentNullException("parentNavigationProperty"); } + if (model.StorageId < 1) + { + InsertModel(parentNavigationProperty, model); + return; + } FailureMechanismEntity entity; try { @@ -100,7 +130,7 @@ modifiedList.Add(entity); - ConvertModelToEntity(model, entity); + converter.ConvertModelToEntity(model, entity); } /// @@ -123,7 +153,7 @@ parentNavigationProperty.Add(entity); insertedList.Add(entity, model); - ConvertModelToEntity(model, entity); + converter.ConvertModelToEntity(model, entity); if (model.StorageId > 0) { @@ -132,34 +162,15 @@ } /// - /// Loads a new model of type based on the . - /// - /// Database entity containing information for the new model. - /// The assessment section to add the failure mechanism to. - public abstract void LoadModel(FailureMechanismEntity entity, T dikeAssessmentSection); - - /// /// All unmodified in will be removed. /// /// List where objects can be searched. Usually, this collection is a navigation property of a . /// Thrown when the is read-only. public void RemoveUnModifiedEntries(ICollection parentNavigationProperty) { - var originalList = parentNavigationProperty.ToList(); - foreach (var u in modifiedList) - { - originalList.Remove(u); - } + var untouchedModifiedList = parentNavigationProperty.Where(e => e.DikeAssessmentSectionEntityId > 0 && !modifiedList.Contains(e)); + failureMechanismSet.RemoveRange(untouchedModifiedList); - foreach (var toDelete in originalList) - { - // If id = 0, the entity is marked as inserted - if (toDelete.FailureMechanismEntityId > 0) - { - dbSet.Remove(toDelete); - } - } - modifiedList.Clear(); } @@ -174,8 +185,5 @@ } insertedList.Clear(); } - - protected abstract void ConvertModelToEntity(T model, FailureMechanismEntity entity); - protected abstract T ConvertEntityToModel(FailureMechanismEntity entity); } } \ No newline at end of file Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/HydraulicLocationEntityPersistor.cs =================================================================== diff -u -r0b5ecd8a04803bce1ed8398053e9b7cb7404b886 -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/HydraulicLocationEntityPersistor.cs (.../HydraulicLocationEntityPersistor.cs) (revision 0b5ecd8a04803bce1ed8398053e9b7cb7404b886) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/HydraulicLocationEntityPersistor.cs (.../HydraulicLocationEntityPersistor.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -36,7 +36,7 @@ /// public class HydraulicLocationEntityPersistor { - private readonly IRingtoetsEntities ringtoetsContext; + private readonly DbSet hydraulicLocationSet; private readonly HydraulicLocationConverter converter; private readonly Dictionary insertedList = new Dictionary(); @@ -54,7 +54,7 @@ throw new ArgumentNullException("ringtoetsContext"); } - this.ringtoetsContext = ringtoetsContext; + hydraulicLocationSet = ringtoetsContext.HydraulicLocationEntities; converter = new HydraulicLocationConverter(); } @@ -86,9 +86,14 @@ { if (model == null) { - throw new ArgumentNullException("model"); + return; } + if (parentNavigationProperty == null) + { + throw new ArgumentNullException("parentNavigationProperty"); + } + foreach (var location in model.Locations) { if (location == null) @@ -102,11 +107,6 @@ continue; } - if (parentNavigationProperty == null) - { - throw new ArgumentNullException("parentNavigationProperty"); - } - HydraulicLocationEntity entity; try { @@ -126,6 +126,8 @@ converter.ConvertModelToEntity(location, entity); } + + RemoveUnModifiedEntries(parentNavigationProperty); } /// @@ -151,17 +153,19 @@ { InsertLocation(parentNavigationProperty, location); } + + RemoveUnModifiedEntries(parentNavigationProperty); } /// /// Removes all entities from that are not marked as 'updated'. /// /// List where objects can be searched. /// Usually, this collection is a navigation property of a . - public void RemoveUnModifiedEntries(ICollection parentNavigationProperty) + private void RemoveUnModifiedEntries(ICollection parentNavigationProperty) { var untouchedModifiedList = parentNavigationProperty.Where(e => e.HydraulicLocationEntityId > 0 && !modifiedList.Contains(e)); - ringtoetsContext.Set().RemoveRange(untouchedModifiedList); + hydraulicLocationSet.RemoveRange(untouchedModifiedList); modifiedList.Clear(); } @@ -187,14 +191,17 @@ var entity = new HydraulicLocationEntity(); parentNavigationProperty.Add(entity); - insertedList.Add(entity, location); converter.ConvertModelToEntity(location, entity); if (location.StorageId > 0) { modifiedList.Add(entity); } + else + { + insertedList.Add(entity, location); + } } } } \ No newline at end of file Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/ProjectEntityPersistor.cs =================================================================== diff -u -ra6371ac68897b69e2efd537fa29bb6564f50fdcf -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/ProjectEntityPersistor.cs (.../ProjectEntityPersistor.cs) (revision a6371ac68897b69e2efd537fa29bb6564f50fdcf) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/ProjectEntityPersistor.cs (.../ProjectEntityPersistor.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -38,7 +38,7 @@ /// public class ProjectEntityPersistor { - private readonly DbSet dbSet; + private readonly DbSet projectEntitySet; private readonly ProjectEntityConverter converter; private readonly Dictionary insertedList = new Dictionary(); private readonly ICollection modifiedList = new List(); @@ -56,7 +56,7 @@ { throw new ArgumentNullException("ringtoetsContext"); } - dbSet = ringtoetsContext.ProjectEntities; + projectEntitySet = ringtoetsContext.ProjectEntities; converter = new ProjectEntityConverter(); @@ -70,9 +70,28 @@ /// Thrown when there are more than one elements in the sequence. public Project GetEntityAsModel() { - var entry = dbSet.SingleOrDefault(); + var entry = projectEntitySet.SingleOrDefault(); + if (entry == null) + { + return null; + } + var project = converter.ConvertEntityToModel(entry); - return LoadModel(entry); + var nrOfItems = entry.DikeAssessmentSectionEntities.Count; + var assessmentSections = new object[nrOfItems]; + + foreach (var sectionEntity in entry.DikeAssessmentSectionEntities) + { + assessmentSections[sectionEntity.Order] = dikeAssessmentSectionEntityPersistor.LoadModel(sectionEntity); + } + + // Add to items sorted + foreach (var assessmentSection in assessmentSections) + { + project.Items.Add(assessmentSection); + } + + return project; } /// @@ -85,7 +104,23 @@ /// The parentNavigationProperty is read-only. public void InsertModel(Project project) { - InsertModel(dbSet, project); + if (project == null) + { + throw new ArgumentNullException("project", @"Cannot update databaseSet when no project is set."); + } + + var entity = new ProjectEntity(); + projectEntitySet.Add(entity); + insertedList.Add(entity, project); + + converter.ConvertModelToEntity(project, entity); + + if (project.StorageId > 0) + { + modifiedList.Add(entity); + } + + InsertChildren(project, entity); } /// @@ -109,7 +144,7 @@ ProjectEntity entity; try { - entity = dbSet.SingleOrDefault(db => db.ProjectEntityId == model.StorageId); + entity = projectEntitySet.SingleOrDefault(db => db.ProjectEntityId == model.StorageId); } catch (InvalidOperationException exception) { @@ -130,8 +165,8 @@ /// public void RemoveUnModifiedEntries() { - var untouchedList = dbSet.ToList().Where(e => !modifiedList.Contains(e)); - dbSet.RemoveRange(untouchedList); + var untouchedList = projectEntitySet.ToList().Where(e => !modifiedList.Contains(e)); + projectEntitySet.RemoveRange(untouchedList); modifiedList.Clear(); } @@ -145,52 +180,6 @@ dikeAssessmentSectionEntityPersistor.PerformPostSaveActions(); } - private void InsertModel(DbSet parentNavigationProperty, Project project) - { - if (project == null) - { - throw new ArgumentNullException("project", @"Cannot update databaseSet when no project is set."); - } - - var entity = new ProjectEntity(); - dbSet.Add(entity); - insertedList.Add(entity, project); - - converter.ConvertModelToEntity(project, entity); - - if (project.StorageId > 0) - { - modifiedList.Add(entity); - } - - InsertChildren(project, entity); - } - - private Project LoadModel(ProjectEntity entity) - { - if (entity == null) - { - return null; - } - var project = converter.ConvertEntityToModel(entity); - - var nrOfItems = entity.DikeAssessmentSectionEntities.Count; - var assessmentSections = new object[nrOfItems]; - - foreach (var sectionEntity in entity.DikeAssessmentSectionEntities) - { - assessmentSections[sectionEntity.Order] = dikeAssessmentSectionEntityPersistor.LoadModel(sectionEntity); - } - - // Add to items sorted - foreach (var assessmentSection in assessmentSections) - { - project.Items.Add(assessmentSection); - } - - return project; - } - /// /// Updates the children of , in reference to , in the storage. /// @@ -199,13 +188,10 @@ private void UpdateChildren(Project project, ProjectEntity entity) { var order = 0; - foreach (var item in project.Items) + foreach (var item in project.Items.Where(i => i is DikeAssessmentSection).Cast()) { - if (item is DikeAssessmentSection) - { - dikeAssessmentSectionEntityPersistor.UpdateModel(entity.DikeAssessmentSectionEntities, (DikeAssessmentSection) item, order); - order++; - } + dikeAssessmentSectionEntityPersistor.UpdateModel(entity.DikeAssessmentSectionEntities, item, order); + order++; } dikeAssessmentSectionEntityPersistor.RemoveUnModifiedEntries(entity.DikeAssessmentSectionEntities); } @@ -218,13 +204,10 @@ private void InsertChildren(Project project, ProjectEntity entity) { var order = 0; - foreach (var item in project.Items) + foreach (var item in project.Items.Where(i => i is DikeAssessmentSection).Cast()) { - if (item is DikeAssessmentSection) - { - dikeAssessmentSectionEntityPersistor.InsertModel(entity.DikeAssessmentSectionEntities, (DikeAssessmentSection) item, order); - order++; - } + dikeAssessmentSectionEntityPersistor.InsertModel(entity.DikeAssessmentSectionEntities, item, order); + order++; } dikeAssessmentSectionEntityPersistor.RemoveUnModifiedEntries(entity.DikeAssessmentSectionEntities); } Index: Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/ReferenceLinePersistor.cs =================================================================== diff -u -r1d52c0ffc913d7803070bd9797d811a991b5c365 -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/ReferenceLinePersistor.cs (.../ReferenceLinePersistor.cs) (revision 1d52c0ffc913d7803070bd9797d811a991b5c365) +++ Application/Ringtoets/src/Application.Ringtoets.Storage/Persistors/ReferenceLinePersistor.cs (.../ReferenceLinePersistor.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Data.Entity; using System.Linq; using Application.Ringtoets.Storage.Converters; using Application.Ringtoets.Storage.DbContext; @@ -10,21 +11,21 @@ public class ReferenceLinePersistor { private readonly ReferenceLineConverter converter; - private readonly IRingtoetsEntities context; + private readonly DbSet referenceLineEntities; /// /// Creates a new instance of . /// - /// The storage context. - /// Thrown when is null. - public ReferenceLinePersistor(IRingtoetsEntities ringtoetsContext) + /// The storage context. + /// Thrown when is null. + public ReferenceLinePersistor(IRingtoetsEntities ringtoetsEntities) { - if (ringtoetsContext == null) + if (ringtoetsEntities == null) { - throw new ArgumentNullException("ringtoetsContext"); + throw new ArgumentNullException("ringtoetsEntities"); } - context = ringtoetsContext; + referenceLineEntities = ringtoetsEntities.ReferenceLinePointEntities; converter = new ReferenceLineConverter(); } @@ -44,7 +45,8 @@ if (entityCollection.Any()) { - context.Set().RemoveRange(entityCollection); + referenceLineEntities.RemoveRange(entityCollection); + entityCollection.Clear(); } if (referenceLine != null) Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/PipingFailureMechanismEntityConverterTest.cs =================================================================== diff -u -rd242e89e13ef602facae6a1ef91660242bcef340 -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/PipingFailureMechanismEntityConverterTest.cs (.../PipingFailureMechanismEntityConverterTest.cs) (revision d242e89e13ef602facae6a1ef91660242bcef340) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/PipingFailureMechanismEntityConverterTest.cs (.../PipingFailureMechanismEntityConverterTest.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -81,6 +81,26 @@ } [Test] + public void ConvertEntityToModel_EntityWithIncorrectType_ReturnsEntityAsModel() + { + // Setup + PipingFailureMechanismEntityConverter converter = new PipingFailureMechanismEntityConverter(); + + const long storageId = 1234L; + FailureMechanismEntity entity = new FailureMechanismEntity + { + FailureMechanismEntityId = storageId, + FailureMechanismType = (int)FailureMechanismType.DikesMacrostabilityInwardsFailureMechanism, + }; + + // Call + TestDelegate test = () => converter.ConvertEntityToModel(entity); + + // Assert + Assert.Throws(test); + } + + [Test] public void ConvertModelToEntity_NullModel_ThrowsArgumentNullException() { // Setup Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/ProjectEntityConverterTest.cs =================================================================== diff -u -rd242e89e13ef602facae6a1ef91660242bcef340 -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/ProjectEntityConverterTest.cs (.../ProjectEntityConverterTest.cs) (revision d242e89e13ef602facae6a1ef91660242bcef340) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Converters/ProjectEntityConverterTest.cs (.../ProjectEntityConverterTest.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -117,14 +117,31 @@ ProjectEntity projectEntity = new ProjectEntity(); ProjectEntityConverter converter = new ProjectEntityConverter(); + var timeStart = DateTime.Now.ToUniversalTime(); + timeStart = Round(timeStart, false); + // Call converter.ConvertModelToEntity(project, projectEntity); + var timeEnd = DateTime.Now.ToUniversalTime(); + timeStart = Round(timeStart, true); + // Assert + Assert.IsTrue(projectEntity.LastUpdated.HasValue); + var lastUpdatedDateTime = new DateTime(1970, 1, 1).AddSeconds(projectEntity.LastUpdated.Value); + Assert.AreNotEqual(projectEntity, project); Assert.AreEqual(storageId, projectEntity.ProjectEntityId); Assert.AreEqual(description, projectEntity.Description); - Assert.IsNotNull(projectEntity.LastUpdated); + Assert.GreaterOrEqual(timeEnd.Ticks, lastUpdatedDateTime.Ticks); + Assert.LessOrEqual(timeStart.Ticks, lastUpdatedDateTime.Ticks); } + + private static DateTime Round(DateTime timeStart, bool up) + { + var tickSecond = 10000000; + timeStart = new DateTime(((timeStart.Ticks + (up ? tickSecond : -tickSecond) / 2)/tickSecond)*tickSecond); + return timeStart; + } } } \ No newline at end of file Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/DikeAssessmentSectionEntityPersistorTest.cs =================================================================== diff -u -ra6371ac68897b69e2efd537fa29bb6564f50fdcf -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/DikeAssessmentSectionEntityPersistorTest.cs (.../DikeAssessmentSectionEntityPersistorTest.cs) (revision a6371ac68897b69e2efd537fa29bb6564f50fdcf) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/DikeAssessmentSectionEntityPersistorTest.cs (.../DikeAssessmentSectionEntityPersistorTest.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -26,7 +26,6 @@ using Application.Ringtoets.Storage.DbContext; using Application.Ringtoets.Storage.Exceptions; using Application.Ringtoets.Storage.Persistors; -using Application.Ringtoets.Storage.Test.DbContext; using Application.Ringtoets.Storage.TestUtil; using NUnit.Framework; using Rhino.Mocks; @@ -241,10 +240,11 @@ public void InsertModel_NullParentNavigationProperty_ThrowsArgumentNullException() { // Setup - var ringtoetsEntities = mockRepository.StrictMock(); + var ringtoetsEntities = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + DikeAssessmentSectionEntityPersistor persistor = new DikeAssessmentSectionEntityPersistor(ringtoetsEntities); var dikeAssessmentSection = new DikeAssessmentSection(); - mockRepository.ReplayAll(); // Call TestDelegate test = () => persistor.InsertModel(null, dikeAssessmentSection, 0); @@ -279,7 +279,6 @@ const int norm = 30000; var ringtoetsEntities = RingtoetsEntitiesHelper.Create(mockRepository); - mockRepository.ReplayAll(); ICollection parentNavigationProperty = new List(); @@ -410,10 +409,11 @@ public void UpdateModel_NullParentNavigationProperty_ThrowsArgumentNullException() { // Setup - var ringtoetsEntities = mockRepository.StrictMock(); + var ringtoetsEntities = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + DikeAssessmentSectionEntityPersistor persistor = new DikeAssessmentSectionEntityPersistor(ringtoetsEntities); var dikeAssessmentSection = new DikeAssessmentSection(); - mockRepository.ReplayAll(); // Call TestDelegate test = () => persistor.UpdateModel(null, dikeAssessmentSection, 0); Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/HydraulicLocationEntityPersistorTest.cs =================================================================== diff -u -r0b5ecd8a04803bce1ed8398053e9b7cb7404b886 -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/HydraulicLocationEntityPersistorTest.cs (.../HydraulicLocationEntityPersistorTest.cs) (revision 0b5ecd8a04803bce1ed8398053e9b7cb7404b886) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/HydraulicLocationEntityPersistorTest.cs (.../HydraulicLocationEntityPersistorTest.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -22,11 +22,11 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; -using System.Data.Entity; using System.Linq; using Application.Ringtoets.Storage.DbContext; using Application.Ringtoets.Storage.Exceptions; using Application.Ringtoets.Storage.Persistors; +using Application.Ringtoets.Storage.TestUtil; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.HydraRing.Data; @@ -59,8 +59,7 @@ public void Constructor_EmptyDataSet_NewInstance() { // Setup - - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); mockRepository.ReplayAll(); // Call @@ -76,10 +75,11 @@ public void LoadModel_NullEntity_ThrowsArgumentNullException() { // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); - var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); + // Call TestDelegate test = () => persistor.LoadModel(null); @@ -93,10 +93,11 @@ public void LoadModel_ValidEntityValidModel_EntityAsModel() { // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); - var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); + const string name = "test"; const double designWaterLevel = 15.6; const long locationId = 1300001; @@ -136,11 +137,12 @@ public void InsertModel_NullParentNavigationProperty_ThrowsArgumentNullException() { // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(1, "test", 1, 1)); - mockRepository.ReplayAll(); // Call TestDelegate test = () => persistor.InsertModel(null, hydraulicBoundaryDatabase); @@ -156,10 +158,11 @@ public void InsertModel_NullModel_DoesNotAddEntityInParentNavigationProperty() { // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); var parentNavigationProperty = new List(); - mockRepository.ReplayAll(); // Call TestDelegate test = () => persistor.InsertModel(parentNavigationProperty, null); @@ -175,7 +178,9 @@ public void InsertModel_SingleEntityInParentNavigationPropertyHydraulicLocationWithSameStorageId_HydraulicLocationAsEntityInParentNavigationProperty() { // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); const long storageId = 1234L; @@ -197,8 +202,6 @@ HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.Add(model); - mockRepository.ReplayAll(); - // Call persistor.InsertModel(parentNavigationProperty, hydraulicBoundaryDatabase); @@ -215,15 +218,15 @@ public void InsertModel_LocationNull_ThrowsArgumentNullException() { // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); IList parentNavigationProperty = new List(); HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.Add(null); - mockRepository.ReplayAll(); - // Call TestDelegate test = () => persistor.InsertModel(parentNavigationProperty, hydraulicBoundaryDatabase); @@ -237,14 +240,15 @@ public void InsertModel_LocationToBig_ThrowsOverflowException() { // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); IList parentNavigationProperty = new List(); HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(1, "name", Double.PositiveInfinity, 1)); - mockRepository.ReplayAll(); // Call TestDelegate test = () => persistor.InsertModel(parentNavigationProperty, hydraulicBoundaryDatabase); @@ -260,10 +264,11 @@ { // Setup const long storageId = 1234L; - var ringtoetsEntitiesMock = mockRepository.StrictMock(); - var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); + HydraulicBoundaryLocation model = new HydraulicBoundaryLocation(13001, "test", 13, 52) { StorageId = storageId @@ -283,21 +288,20 @@ } [Test] - public void UpdateModel_EmptyDatasetNullModel_ThrowsArgumentNullException() + public void UpdateModel_EmptyDatasetNullModel_DoesNotThrow() { // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); IList parentNavigationProperty = new List(); - mockRepository.ReplayAll(); // Call TestDelegate test = () => persistor.UpdateModel(parentNavigationProperty, null); // Assert - var exception = Assert.Throws(test); - Assert.AreEqual("model", exception.ParamName); - mockRepository.VerifyAll(); + Assert.DoesNotThrow(test); } [Test] @@ -306,10 +310,11 @@ // Setup const long storageId = 1234L; - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); IList parentNavigationProperty = new List(); - var expectedMessage = String.Format("Het object 'HydraulicLocationEntity' met id '{0}' is niet gevonden.", storageId); HydraulicBoundaryLocation model = new HydraulicBoundaryLocation(13001, "test", 13, 52) { @@ -319,12 +324,11 @@ HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.Add(model); - mockRepository.ReplayAll(); - // Call TestDelegate test = () => persistor.UpdateModel(parentNavigationProperty, hydraulicBoundaryDatabase); // Assert + var expectedMessage = String.Format("Het object 'HydraulicLocationEntity' met id '{0}' is niet gevonden.", storageId); var exception = Assert.Throws(test); Assert.AreEqual(expectedMessage, exception.Message); mockRepository.VerifyAll(); @@ -335,8 +339,10 @@ { // Setup const long storageId = 1234L; - var expectedMessage = String.Format("Het object 'HydraulicLocationEntity' met id '{0}' is niet gevonden.", storageId); - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); IList parentNavigationProperty = new List { @@ -358,12 +364,11 @@ HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.Add(model); - mockRepository.ReplayAll(); - // Call TestDelegate test = () => persistor.UpdateModel(parentNavigationProperty, hydraulicBoundaryDatabase); // Assert + var expectedMessage = String.Format("Het object 'HydraulicLocationEntity' met id '{0}' is niet gevonden.", storageId); var exception = Assert.Throws(test); Assert.AreEqual(expectedMessage, exception.Message); mockRepository.VerifyAll(); @@ -375,7 +380,9 @@ // Setup const long storageId = 1234L; - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); IList parentNavigationProperty = new List { @@ -393,8 +400,6 @@ HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.Add(model); - mockRepository.ReplayAll(); - // Call persistor.UpdateModel(parentNavigationProperty, hydraulicBoundaryDatabase); @@ -410,10 +415,11 @@ public void UpdateModel_NoStorageIdSet_InsertNewEntity() { // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); - var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); + IList parentNavigationProperty = new List(); HydraulicBoundaryLocation model = new HydraulicBoundaryLocation(13001, "test", 13, 52) { @@ -438,15 +444,15 @@ public void UpdateModel_LocationNull_ThrowsArgumentException() { // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); IList parentNavigationProperty = new List(); HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.Add(null); - mockRepository.ReplayAll(); - // Call TestDelegate test = () => persistor.UpdateModel(parentNavigationProperty, hydraulicBoundaryDatabase); @@ -460,15 +466,15 @@ public void UpdateModel_LocationToBig_ThrowsOverflowException() { // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); IList parentNavigationProperty = new List(); HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(1, "name", Double.PositiveInfinity, 1)); - mockRepository.ReplayAll(); - // Call TestDelegate test = () => persistor.UpdateModel(parentNavigationProperty, hydraulicBoundaryDatabase); @@ -483,23 +489,23 @@ { // Setup const long storageId = 0L; // Newly inserted entities have Id = 0 untill they are saved + + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + HydraulicLocationEntity entityToDelete = new HydraulicLocationEntity { HydraulicLocationEntityId = 4567L, Name = "Entity to delete" }; + ringtoetsEntitiesMock.HydraulicLocationEntities.Add(entityToDelete); + ObservableCollection parentNavigationProperty = new ObservableCollection { entityToDelete }; - var ringtoetsEntitiesMock = mockRepository.StrictMock(); - - var set = mockRepository.StrictMock>(); - ringtoetsEntitiesMock.Expect(c => c.Set()).Return(set); - set.Expect(s => s.RemoveRange(Arg>.List.Equal(new[] { entityToDelete }))); - mockRepository.ReplayAll(); HydraulicLocationEntityPersistor persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); @@ -509,7 +515,6 @@ // Call persistor.UpdateModel(parentNavigationProperty, hydraulicBoundaryDatabase); - persistor.RemoveUnModifiedEntries(parentNavigationProperty); // Assert Assert.AreEqual(2, parentNavigationProperty.Count); @@ -521,105 +526,15 @@ } [Test] - public void RemoveUnModifiedEntries_MultipleEntitiesInParentNavigationPropertySingleModelStorageId_UpdatedHydraulicLocationmAsEntityAndOtherDeletedInDbSet() + public void PerformPostSaveActions_NoInserts_DoesNotThrowException() { // Setup - const long storageId = 1234L; - HydraulicLocationEntity entityToUpdate = new HydraulicLocationEntity - { - HydraulicLocationEntityId = storageId, - }; - HydraulicLocationEntity entityToDelete = new HydraulicLocationEntity - { - HydraulicLocationEntityId = 4567L, - }; - - ObservableCollection parentNavigationProperty = new ObservableCollection - { - entityToDelete, - entityToUpdate - }; - - var ringtoetsEntitiesMock = mockRepository.StrictMock(); - - var set = mockRepository.StrictMock>(); - ringtoetsEntitiesMock.Expect(c => c.Set()).Return(set); - set.Expect(s => s.RemoveRange(Arg>.List.Equal(new[] { entityToDelete }))); - + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); mockRepository.ReplayAll(); HydraulicLocationEntityPersistor persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); - HydraulicBoundaryLocation hydraulicBoundaryLocation = new HydraulicBoundaryLocation(13001, "test", 13, 52) - { - StorageId = storageId - }; - HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); - hydraulicBoundaryDatabase.Locations.Add(hydraulicBoundaryLocation); - - TestDelegate updateTest = () => persistor.UpdateModel(parentNavigationProperty, hydraulicBoundaryDatabase); - Assert.DoesNotThrow(updateTest, "Precondition failed: Update should not throw exception."); - // Call - persistor.RemoveUnModifiedEntries(parentNavigationProperty); - - // Assert - Assert.AreEqual(2, parentNavigationProperty.Count); - Assert.IsInstanceOf(entityToUpdate); - Assert.AreEqual(storageId, entityToUpdate.HydraulicLocationEntityId); - - mockRepository.VerifyAll(); - } - - [Test] - public void RemoveUnModifiedEntries_MultipleEntitiesInParentNavigationPropertyEmptyHydraulicLocation_EmptyDatabaseSet() - { - // Setup - HydraulicLocationEntity firstEntityToDelete = new HydraulicLocationEntity - { - HydraulicLocationEntityId = 1234L - }; - HydraulicLocationEntity secondEntityToDelete = new HydraulicLocationEntity - { - HydraulicLocationEntityId = 4567L - }; - ObservableCollection parentNavigationProperty = new ObservableCollection - { - firstEntityToDelete, - secondEntityToDelete - }; - - var ringtoetsEntitiesMock = mockRepository.StrictMock(); - var set = mockRepository.StrictMock>(); - ringtoetsEntitiesMock.Expect(c => c.Set()).Return(set); - set.Expect(s => s.RemoveRange(Arg>.List.Equal(parentNavigationProperty.ToList()))); - mockRepository.ReplayAll(); - - HydraulicBoundaryLocation hydraulicBoundaryLocation = new HydraulicBoundaryLocation(13001, "test", 13, 52); - var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); - hydraulicBoundaryDatabase.Locations.Add(hydraulicBoundaryLocation); - - HydraulicLocationEntityPersistor persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); - - TestDelegate test = () => persistor.UpdateModel(parentNavigationProperty, hydraulicBoundaryDatabase); - Assert.DoesNotThrow(test, "Precondition failed: UpdateModel"); - - // Call - persistor.RemoveUnModifiedEntries(parentNavigationProperty); - - // Assert - mockRepository.VerifyAll(); - } - - [Test] - public void PerformPostSaveActions_NoInserts_DoesNotThrowException() - { - // Setup - var ringtoetsEntitiesMock = mockRepository.StrictMock(); - HydraulicLocationEntityPersistor persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); - mockRepository.ReplayAll(); - - // Call TestDelegate test = () => persistor.PerformPostSaveActions(); // Assert @@ -635,15 +550,11 @@ public void PerformPostSaveActions_MultipleModelsInsertedWithoutStorageId_ModelsWithStorageId(int numberOfInserts) { // Setup - var insertedHydraulicLocationEntities = new List(); - var parentNavigationPropertyMock = mockRepository.StrictMock>(); - parentNavigationPropertyMock.Expect(m => m.Add(null)).IgnoreArguments().WhenCalled(x => - { - var insertedDikeAssessmentSectionEntity = x.Arguments.GetValue(0); - Assert.IsInstanceOf(insertedDikeAssessmentSectionEntity); - insertedHydraulicLocationEntities.Add((HydraulicLocationEntity) insertedDikeAssessmentSectionEntity); - }).Repeat.Times(numberOfInserts); + var ringtoetsEntitiesMock = RingtoetsEntitiesHelper.Create(mockRepository); + mockRepository.ReplayAll(); + var parentNavigationProperty = new List(); + IList hydraulicLocations = new List(); for (var i = 0; i < numberOfInserts; i++) { @@ -656,29 +567,27 @@ HydraulicBoundaryDatabase hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.AddRange(hydraulicLocations); - var ringtoetsEntitiesMock = mockRepository.StrictMock(); HydraulicLocationEntityPersistor persistor = new HydraulicLocationEntityPersistor(ringtoetsEntitiesMock); - mockRepository.ReplayAll(); try { - persistor.UpdateModel(parentNavigationPropertyMock, hydraulicBoundaryDatabase); + persistor.UpdateModel(parentNavigationProperty, hydraulicBoundaryDatabase); } catch (Exception) { Assert.Fail("Precondition failed: persistor.UpdateModel"); } // Call - for (var i = 0; i < insertedHydraulicLocationEntities.Count; i++) + for (var i = 0; i < parentNavigationProperty.Count; i++) { - insertedHydraulicLocationEntities[i].HydraulicLocationEntityId = 1L + i; + parentNavigationProperty[i].HydraulicLocationEntityId = 1L + i; } persistor.PerformPostSaveActions(); // Assert - Assert.AreEqual(hydraulicLocations.Count, insertedHydraulicLocationEntities.Count); - foreach (var entity in insertedHydraulicLocationEntities) + Assert.AreEqual(hydraulicLocations.Count, parentNavigationProperty.Count); + foreach (var entity in parentNavigationProperty) { HydraulicBoundaryLocation insertedModel = hydraulicLocations.SingleOrDefault(x => x.StorageId == entity.HydraulicLocationEntityId); Assert.IsNotNull(insertedModel); Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/ReferenceLinePersistorTest.cs =================================================================== diff -u -r1d52c0ffc913d7803070bd9797d811a991b5c365 -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/ReferenceLinePersistorTest.cs (.../ReferenceLinePersistorTest.cs) (revision 1d52c0ffc913d7803070bd9797d811a991b5c365) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/ReferenceLinePersistorTest.cs (.../ReferenceLinePersistorTest.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -5,6 +5,7 @@ using System.Linq; using Application.Ringtoets.Storage.DbContext; using Application.Ringtoets.Storage.Persistors; +using Application.Ringtoets.Storage.TestUtil; using Core.Common.Base.Geometry; using NUnit.Framework; using Rhino.Mocks; @@ -23,15 +24,15 @@ // Assert var parameter = Assert.Throws(call).ParamName; - Assert.AreEqual("ringtoetsContext", parameter); + Assert.AreEqual("ringtoetsEntities", parameter); } [Test] public void Constructor_WithContext_DoesNotThrow() { // Setup var mocks = new MockRepository(); - var context = mocks.StrictMock(); + var context = RingtoetsEntitiesHelper.Create(mocks); mocks.ReplayAll(); // Call @@ -47,7 +48,7 @@ { // Setup var mocks = new MockRepository(); - var context = mocks.StrictMock(); + var context = RingtoetsEntitiesHelper.Create(mocks); mocks.ReplayAll(); var persistor = new ReferenceLinePersistor(context); @@ -66,7 +67,7 @@ { // Setup var mocks = new MockRepository(); - var context = mocks.StrictMock(); + var context = RingtoetsEntitiesHelper.Create(mocks); var entities = new List(); mocks.ReplayAll(); @@ -84,7 +85,7 @@ { // Setup var mocks = new MockRepository(); - var context = mocks.StrictMock(); + var context = RingtoetsEntitiesHelper.Create(mocks); var entities = new List(); mocks.ReplayAll(); @@ -109,6 +110,10 @@ public void InsertModel_WithNonEmptyEntityCollectionWithReferenceLine_EntityCollectionClearedAddsNewEntitiesToContext() { // Setup + var mocks = new MockRepository(); + var context = RingtoetsEntitiesHelper.Create(mocks); + mocks.ReplayAll(); + var entities = new List(); for (int i = 0; i < 3; i++) { @@ -118,14 +123,10 @@ }); } - var mocks = new MockRepository(); - var context = mocks.StrictMock(); - var set = mocks.StrictMock>(); - context.Expect(c => c.Set()).Return(set); - set.Expect(s => s.RemoveRange(entities)).WhenCalled(z => entities.Clear()); + context.ReferenceLinePointEntities.Add(entities[0]); + context.ReferenceLinePointEntities.Add(entities[1]); + context.ReferenceLinePointEntities.Add(new ReferenceLinePointEntity()); - mocks.ReplayAll(); - var persistor = new ReferenceLinePersistor(context); var referenceLine = new ReferenceLine(); referenceLine.SetGeometry(new[] @@ -140,6 +141,7 @@ // Assert AssertCreatedEntities(entities, referenceLine); + Assert.AreEqual(1, context.ReferenceLinePointEntities.Count()); mocks.VerifyAll(); } @@ -148,7 +150,7 @@ { // Setup var mocks = new MockRepository(); - var context = mocks.StrictMock(); + var context = RingtoetsEntitiesHelper.Create(mocks); mocks.ReplayAll(); var persistor = new ReferenceLinePersistor(context); @@ -167,7 +169,7 @@ { // Setup var mocks = new MockRepository(); - var context = mocks.StrictMock(); + var context = RingtoetsEntitiesHelper.Create(mocks); mocks.ReplayAll(); var entities = new List(); @@ -186,7 +188,7 @@ { // Setup var mocks = new MockRepository(); - var context = mocks.StrictMock(); + var context = RingtoetsEntitiesHelper.Create(mocks); mocks.ReplayAll(); var entities = new List @@ -225,7 +227,7 @@ { // Setup var mocks = new MockRepository(); - var context = mocks.StrictMock(); + var context = RingtoetsEntitiesHelper.Create(mocks); mocks.ReplayAll(); var entities = new List @@ -259,7 +261,7 @@ mocks.VerifyAll(); } - private void AssertCreatedEntities(List entities, ReferenceLine referenceLine) + private void AssertCreatedEntities(IList entities, ReferenceLine referenceLine) { Assert.AreEqual(entities.Count, referenceLine.Points.Count()); for (int i = 0; i < entities.Count; i++) Index: Application/Ringtoets/test/Application.Ringtoets.Storage.TestUtil/Application.Ringtoets.Storage.TestUtil.csproj =================================================================== diff -u -ra6371ac68897b69e2efd537fa29bb6564f50fdcf -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/test/Application.Ringtoets.Storage.TestUtil/Application.Ringtoets.Storage.TestUtil.csproj (.../Application.Ringtoets.Storage.TestUtil.csproj) (revision a6371ac68897b69e2efd537fa29bb6564f50fdcf) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.TestUtil/Application.Ringtoets.Storage.TestUtil.csproj (.../Application.Ringtoets.Storage.TestUtil.csproj) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -61,7 +61,6 @@ - Fisheye: Tag 98df6e59fb589e5326b8f904dac98d402cb35b9c refers to a dead (removed) revision in file `Application/Ringtoets/test/Application.Ringtoets.Storage.TestUtil/DatabaseSetHelper.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Application/Ringtoets/test/Application.Ringtoets.Storage.TestUtil/RingtoetsEntitiesHelper.cs =================================================================== diff -u -ra6371ac68897b69e2efd537fa29bb6564f50fdcf -r98df6e59fb589e5326b8f904dac98d402cb35b9c --- Application/Ringtoets/test/Application.Ringtoets.Storage.TestUtil/RingtoetsEntitiesHelper.cs (.../RingtoetsEntitiesHelper.cs) (revision a6371ac68897b69e2efd537fa29bb6564f50fdcf) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.TestUtil/RingtoetsEntitiesHelper.cs (.../RingtoetsEntitiesHelper.cs) (revision 98df6e59fb589e5326b8f904dac98d402cb35b9c) @@ -4,19 +4,21 @@ namespace Application.Ringtoets.Storage.TestUtil { - static public class RingtoetsEntitiesHelper { + static public class RingtoetsEntitiesHelper + { public static IRingtoetsEntities Create(MockRepository mockRepository) { var ringtoetsEntities = mockRepository.Stub(); var pSet = DbTestSet.GetDbTestSet(new ObservableCollection()); var hlSet = DbTestSet.GetDbTestSet(new ObservableCollection()); var fmSet = DbTestSet.GetDbTestSet(new ObservableCollection()); var dasSet = DbTestSet.GetDbTestSet(new ObservableCollection()); + var rlpSet = DbTestSet.GetDbTestSet(new ObservableCollection()); ringtoetsEntities.Stub(r => r.ProjectEntities).Return(pSet); - ringtoetsEntities.Stub(r => r.Set()).Return(hlSet); + ringtoetsEntities.Stub(r => r.HydraulicLocationEntities).Return(hlSet); ringtoetsEntities.Stub(r => r.FailureMechanismEntities).Return(fmSet); - ringtoetsEntities.Stub(r => r.Set()).Return(dasSet); ringtoetsEntities.Stub(r => r.DikeAssessmentSectionEntities).Return(dasSet); + ringtoetsEntities.Stub(r => r.ReferenceLinePointEntities).Return(rlpSet); return ringtoetsEntities; } }