Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/GrassCoverErosionInwardsInputContextProperties.cs =================================================================== diff -u -rf18ccfb35619abc909207957f0d62cca17013e5d -rc2d4ac4a0d7737fae7a2b9ddd30d6d67d016db15 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/GrassCoverErosionInwardsInputContextProperties.cs (.../GrassCoverErosionInwardsInputContextProperties.cs) (revision f18ccfb35619abc909207957f0d62cca17013e5d) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/PropertyClasses/GrassCoverErosionInwardsInputContextProperties.cs (.../GrassCoverErosionInwardsInputContextProperties.cs) (revision c2d4ac4a0d7737fae7a2b9ddd30d6d67d016db15) @@ -78,7 +78,7 @@ { data.WrappedData.DikeProfile = value; GrassCoverErosionInwardsHelper.UpdateCalculationToSectionResultAssignments( - data.FailureMechanism.SectionResults, + data.FailureMechanism.SectionResults, data.FailureMechanism.Calculations.Cast()); ClearOutputAndNotifyPropertyChanged(); } @@ -222,8 +222,9 @@ { get { + Point2D referencePoint = data.WrappedData.DikeProfile?.WorldReferencePoint; return data.WrappedData.HydraulicBoundaryLocation != null - ? new SelectableHydraulicBoundaryLocation(data.WrappedData.HydraulicBoundaryLocation, WorldReferencePoint) + ? new SelectableHydraulicBoundaryLocation(data.WrappedData.HydraulicBoundaryLocation, referencePoint) : null; } set @@ -250,7 +251,7 @@ public IEnumerable GetSelectableHydraulicBoundaryLocations() { - var calculationLocation = data.WrappedData.DikeProfile != null ? data.WrappedData.DikeProfile.WorldReferencePoint : null; + Point2D calculationLocation = data.WrappedData.DikeProfile?.WorldReferencePoint; return SelectableHydraulicBoundaryLocationHelper.GetSortedSelectableHydraulicBoundaryLocations( data.AvailableHydraulicBoundaryLocations, calculationLocation); Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PropertyClasses/GrassCoverErosionInwardsInputContextPropertiesTest.cs =================================================================== diff -u -rf18ccfb35619abc909207957f0d62cca17013e5d -rc2d4ac4a0d7737fae7a2b9ddd30d6d67d016db15 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PropertyClasses/GrassCoverErosionInwardsInputContextPropertiesTest.cs (.../GrassCoverErosionInwardsInputContextPropertiesTest.cs) (revision f18ccfb35619abc909207957f0d62cca17013e5d) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/PropertyClasses/GrassCoverErosionInwardsInputContextPropertiesTest.cs (.../GrassCoverErosionInwardsInputContextPropertiesTest.cs) (revision c2d4ac4a0d7737fae7a2b9ddd30d6d67d016db15) @@ -302,6 +302,126 @@ } [Test] + public void GetSelectableLocations_InputWithLocationsDikeProfile_CalculatesDistanceWithCorrectReferencePoint() + { + // Setup + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "A", 200643.312, 503347.25); + var assessmentSection = mockRepository.Stub(); + assessmentSection.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase + { + Locations = + { + hydraulicBoundaryLocation + } + }; + mockRepository.ReplayAll(); + + var input = new GrassCoverErosionInwardsInput + { + DikeProfile = new TestDikeProfile(new Point2D(200620.173572981, 503401.652985217)) + }; + var calculation = new GrassCoverErosionInwardsCalculation(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var properties = new GrassCoverErosionInwardsInputContextProperties + { + Data = new GrassCoverErosionInwardsInputContext(input, calculation, failureMechanism, assessmentSection) + }; + + var distanceToPropertiesWorldReferencePoint = + new RoundedDouble(0, hydraulicBoundaryLocation.Location.GetEuclideanDistanceTo(properties.WorldReferencePoint)); + var distanceToDikeProfileWorldReferencePoint = + new RoundedDouble(0, hydraulicBoundaryLocation.Location.GetEuclideanDistanceTo(input.DikeProfile.WorldReferencePoint)); + + // Pre-condition + Assert.AreNotEqual(distanceToPropertiesWorldReferencePoint, distanceToDikeProfileWorldReferencePoint); + + // Call + IEnumerable availableHydraulicBoundaryLocations = + properties.GetSelectableHydraulicBoundaryLocations(); + + // Assert + var hydraulicBoundaryLocationItem = availableHydraulicBoundaryLocations.ToArray()[0]; + RoundedDouble itemDistance = hydraulicBoundaryLocationItem.Distance; + Assert.AreEqual(distanceToDikeProfileWorldReferencePoint, itemDistance, itemDistance.GetAccuracy()); + } + + [Test] + public void SelectedLocation_InputWithLocationsDikeProfile_CalculatesDistanceWithCorrectReferencePoint() + { + // Setup + var assessmentSection = mockRepository.Stub(); + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "A", 200643.312, 503347.25); + + mockRepository.ReplayAll(); + + var input = new GrassCoverErosionInwardsInput + { + HydraulicBoundaryLocation = hydraulicBoundaryLocation, + DikeProfile = new TestDikeProfile(new Point2D(200620.173572981, 503401.652985217)) + }; + var calculation = new GrassCoverErosionInwardsCalculation(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var properties = new GrassCoverErosionInwardsInputContextProperties + { + Data = new GrassCoverErosionInwardsInputContext(input, calculation, failureMechanism, assessmentSection) + }; + + var distanceToPropertiesWorldReferencePoint = + new RoundedDouble(0, hydraulicBoundaryLocation.Location.GetEuclideanDistanceTo(properties.WorldReferencePoint)); + var distanceToDikeProfileWorldReferencePoint = + new RoundedDouble(0, hydraulicBoundaryLocation.Location.GetEuclideanDistanceTo(input.DikeProfile.WorldReferencePoint)); + + // Pre-condition + Assert.AreNotEqual(distanceToPropertiesWorldReferencePoint, distanceToDikeProfileWorldReferencePoint); + + // Call + var selectedHydraulicBoundaryLocation = properties.SelectedHydraulicBoundaryLocation; + + // Assert + RoundedDouble selectedLocationDistance = selectedHydraulicBoundaryLocation.Distance; + Assert.AreEqual(distanceToDikeProfileWorldReferencePoint, selectedLocationDistance, selectedLocationDistance.GetAccuracy()); + } + + [Test] + public void SelectedLocation_InputWithLocationsDikeProfile_HasSameDistanceAsSelectableBoundaryLocationsItem() + { + // Setup + var assessmentSection = mockRepository.Stub(); + var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "A", 200643.312, 503347.25); + assessmentSection.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase + { + Locations = + { + hydraulicBoundaryLocation + } + }; + mockRepository.ReplayAll(); + + var input = new GrassCoverErosionInwardsInput + { + HydraulicBoundaryLocation = hydraulicBoundaryLocation, + DikeProfile = new TestDikeProfile(new Point2D(200620.173572981, 503401.652985217)) + }; + var calculation = new GrassCoverErosionInwardsCalculation(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var properties = new GrassCoverErosionInwardsInputContextProperties + { + Data = new GrassCoverErosionInwardsInputContext(input, calculation, failureMechanism, assessmentSection) + }; + + // Call + IEnumerable availableHydraulicBoundaryLocations = + properties.GetSelectableHydraulicBoundaryLocations(); + SelectableHydraulicBoundaryLocation selectedLocation = properties.SelectedHydraulicBoundaryLocation; + + // Assert + var hydraulicBoundaryLocationItem = availableHydraulicBoundaryLocations.ToArray()[0]; + + Assert.AreEqual(selectedLocation.Distance, hydraulicBoundaryLocationItem.Distance, + hydraulicBoundaryLocationItem.Distance.GetAccuracy()); + } + + [Test] public void GetSelectableLocations_InputWithLocationsNoDikeProfile_ReturnsLocationsSortedById() { // Setup