Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismView.cs =================================================================== diff -u -r41a0ca88d60c400e5737e952da8c3ca57dea83e7 -rdb376befd1575a80aa5f4d3e84f803e132ac1a75 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismView.cs (.../PipingFailureMechanismView.cs) (revision 41a0ca88d60c400e5737e952da8c3ca57dea83e7) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingFailureMechanismView.cs (.../PipingFailureMechanismView.cs) (revision db376befd1575a80aa5f4d3e84f803e132ac1a75) @@ -22,6 +22,7 @@ using System.Collections.Generic; using System.Linq; using System.Windows.Forms; +using Core.Common.Base; using Core.Common.Base.Geometry; using Core.Components.DotSpatial.Forms; using Core.Components.Gis; @@ -31,7 +32,7 @@ namespace Ringtoets.Piping.Forms.Views { - public partial class PipingFailureMechanismView : UserControl, IMapView + public partial class PipingFailureMechanismView : UserControl, IMapView, IObserver { private readonly BaseMap map; private PipingFailureMechanismContext data; @@ -60,7 +61,9 @@ if (data != null) { + data.Parent.Detach(this); SetDataToMap(); + data.Parent.Attach(this); } } } @@ -111,5 +114,13 @@ { return data.Parent.HydraulicBoundaryDatabase != null && data.Parent.HydraulicBoundaryDatabase.Locations.Any(); } + + public void UpdateObserver() + { + if (data != null) + { + SetDataToMap(); + } + } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingFailureMechanismViewTest.cs =================================================================== diff -u -r41a0ca88d60c400e5737e952da8c3ca57dea83e7 -rdb376befd1575a80aa5f4d3e84f803e132ac1a75 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingFailureMechanismViewTest.cs (.../PipingFailureMechanismViewTest.cs) (revision 41a0ca88d60c400e5737e952da8c3ca57dea83e7) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingFailureMechanismViewTest.cs (.../PipingFailureMechanismViewTest.cs) (revision db376befd1575a80aa5f4d3e84f803e132ac1a75) @@ -1,10 +1,13 @@ using System.Collections.Generic; +using System.Linq; using System.Windows.Forms; +using Core.Common.Base; using Core.Common.Base.Geometry; using Core.Common.Controls.Views; using Core.Components.DotSpatial.Forms; using Core.Components.Gis.Data; using NUnit.Framework; +using Rhino.Mocks; using Ringtoets.Common.Data; using Ringtoets.HydraRing.Data; using Ringtoets.Piping.Data; @@ -25,95 +28,199 @@ // Assert Assert.IsInstanceOf(view); Assert.IsInstanceOf(view); + Assert.IsInstanceOf(view); + Assert.NotNull(view.Map); + Assert.IsNull(view.Data); } [Test] - public void DefaultConstructor_Always_AddsBaseMap() + public void DefaultConstructor_Always_AddsBaseMapWithoutData() { // Call var view = new PipingFailureMechanismView(); // Assert Assert.AreEqual(1, view.Controls.Count); - object mapObject = view.Controls[0]; - Assert.IsInstanceOf(mapObject); - - var map = (BaseMap)mapObject; - Assert.AreEqual(DockStyle.Fill, map.Dock); - Assert.NotNull(view.Map); + var mapObject = view.Controls[0] as BaseMap; + Assert.NotNull(mapObject); + Assert.AreEqual(DockStyle.Fill, mapObject.Dock); + Assert.IsNull(mapObject.Data); } [Test] - public void Data_ReferenceLineNull_NoLineDataSet() + public void Data_EmptyAssessmentSection_NoMapDataSet() { // Setup var view = new PipingFailureMechanismView(); var map = (BaseMap)view.Controls[0]; + var assessmentSectionBase = new AssessmentSectionBaseTestClass(); + + var pipingFailureMechanism = new PipingFailureMechanism(); + + var pipingContext = new PipingFailureMechanismContext(pipingFailureMechanism, assessmentSectionBase); + + // Call + view.Data = pipingContext; + + // Assert + var mapData = (MapDataCollection)map.Data; + + Assert.AreEqual(0, mapData.List.Count); + } + + [Test] + public void Data_SetToMapPointData_MapDataSet() + { + // Setup + var view = new PipingFailureMechanismView(); + var map = (BaseMap)view.Controls[0]; var assessmentSectionBase = new AssessmentSectionBaseTestClass { HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase() }; assessmentSectionBase.HydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(1, "test", 1.0, 2.0)); var pipingFailureMechanism = new PipingFailureMechanism(); - var pipingContext = new PipingFailureMechanismContext(pipingFailureMechanism, assessmentSectionBase); // Call view.Data = pipingContext; // Assert - var mapData = (MapDataCollection)map.Data; - - Assert.AreEqual(1, mapData.List.Count); - Assert.IsNotInstanceOf(mapData.List[0]); + Assert.AreSame(pipingContext, view.Data); + Assert.IsInstanceOf(map.Data); + var mapData = map.Data as MapDataCollection; + Assert.IsNotNull(mapData); + Assert.IsTrue(mapData.List.Any(md => md is MapPointData)); } [Test] - public void Data_HydraulicBoundaryDatabaseNull_NoPointDataSet() + public void UpdateObserver_HydraulicBoundaryDatabaseUpdated_SetNewMapDataData() { // Setup var view = new PipingFailureMechanismView(); var map = (BaseMap)view.Controls[0]; + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + + mocks.ReplayAll(); + var assessmentSectionBase = new AssessmentSectionBaseTestClass { - ReferenceLine = new ReferenceLine() + HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase() }; - assessmentSectionBase.ReferenceLine.SetGeometry(new List - { - new Point2D(1.0, 2.0), - new Point2D(2.0, 1.0) - }); + assessmentSectionBase.HydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(1, "test", 1.0, 2.0)); + assessmentSectionBase.Attach(observer); var pipingFailureMechanism = new PipingFailureMechanism(); - var pipingContext = new PipingFailureMechanismContext(pipingFailureMechanism, assessmentSectionBase); - // Call view.Data = pipingContext; + var mapData = map.Data; + assessmentSectionBase.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); + assessmentSectionBase.HydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(2, "test2", 2.0, 3.0)); + + // Call + assessmentSectionBase.NotifyObservers(); + // Assert - var mapData = (MapDataCollection)map.Data; + Assert.AreNotEqual(mapData, map.Data); + Assert.IsInstanceOf(map.Data); + mocks.VerifyAll(); + } - Assert.AreEqual(1, mapData.List.Count); - Assert.IsNotInstanceOf(mapData.List[0]); + [Test] + public void UpdateObserver_OtherAssessmentSectionUpdated_MapDataNotUpdated() + { + // Setup + var view = new PipingFailureMechanismView(); + var map = (BaseMap)view.Controls[0]; + + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + + mocks.ReplayAll(); + + var assessmentSectionBase = new AssessmentSectionBaseTestClass + { + HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase() + }; + assessmentSectionBase.HydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(1, "test", 1.0, 2.0)); + assessmentSectionBase.Attach(observer); + + var pipingFailureMechanism = new PipingFailureMechanism(); + var pipingContext = new PipingFailureMechanismContext(pipingFailureMechanism, assessmentSectionBase); + + view.Data = pipingContext; + + var assessmentSectionBase2 = new AssessmentSectionBaseTestClass + { + HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase() + }; + assessmentSectionBase2.HydraulicBoundaryDatabase.Locations.Add(new HydraulicBoundaryLocation(2, "test2", 2.0, 3.0)); + assessmentSectionBase2.Attach(observer); + + // Call + assessmentSectionBase2.NotifyObservers(); + + // Assert + Assert.AreEqual(pipingContext, view.Data); + Assert.IsInstanceOf(map.Data); + mocks.VerifyAll(); } [Test] - public void Data_SetToNull_BaseMapNoFeatures() + public void UpdateObserver_DataNull_MapDataNotUpdated() { // Setup var view = new PipingFailureMechanismView(); var map = (BaseMap)view.Controls[0]; + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + + mocks.ReplayAll(); + + var assessmentSectionBase = new AssessmentSectionBaseTestClass + { + ReferenceLine = new ReferenceLine() + }; + assessmentSectionBase.ReferenceLine.SetGeometry(new List + { + new Point2D(1.0, 2.0), + new Point2D(2.0, 1.0) + }); + + var pipingFailureMechanism = new PipingFailureMechanism(); + var pipingContext = new PipingFailureMechanismContext(pipingFailureMechanism, assessmentSectionBase); + + view.Data = pipingContext; + + assessmentSectionBase.Attach(observer); + + MapData dataBeforeUpdate = map.Data; + view.Data = null; + + assessmentSectionBase.ReferenceLine = new ReferenceLine(); + assessmentSectionBase.ReferenceLine.SetGeometry(new List + { + new Point2D(2.0, 5.0), + new Point2D(34.0, 2.0) + }); + // Call - TestDelegate testDelegate = () => view.Data = null; + assessmentSectionBase.NotifyObservers(); // Assert - Assert.DoesNotThrow(testDelegate); - Assert.IsNull(map.Data); + Assert.IsNull(view.Data); + Assert.AreEqual(dataBeforeUpdate, map.Data); + mocks.VerifyAll(); } private class AssessmentSectionBaseTestClass : AssessmentSectionBase