Index: Ringtoets/Common/src/Ringtoets.Common.Data/Contribution/FailureMechanismContribution.cs =================================================================== diff -u -r2e265dc8a3c902ebdfdcdf0f1071f9c3c872d822 -r2c06b27dabc83beee23288eb5c6268847afa0a19 --- Ringtoets/Common/src/Ringtoets.Common.Data/Contribution/FailureMechanismContribution.cs (.../FailureMechanismContribution.cs) (revision 2e265dc8a3c902ebdfdcdf0f1071f9c3c872d822) +++ Ringtoets/Common/src/Ringtoets.Common.Data/Contribution/FailureMechanismContribution.cs (.../FailureMechanismContribution.cs) (revision 2c06b27dabc83beee23288eb5c6268847afa0a19) @@ -40,9 +40,9 @@ private readonly ICollection distribution = new List(); private readonly OtherFailureMechanism otherFailureMechanism = new OtherFailureMechanism(); - private double norm; private double lowerLimitNorm; private double signalingNorm; + private NormType normativeNorm; /// /// Creates a new instance of . Values are taken from the @@ -62,7 +62,6 @@ /// public FailureMechanismContribution(IEnumerable failureMechanisms, double otherContribution) { - Norm = defaultNorm; signalingNorm = defaultNorm; lowerLimitNorm = defaultNorm; NormativeNorm = NormType.LowerLimit; @@ -94,6 +93,7 @@ } signalingNorm = value; + SetDistribution(); } } @@ -121,6 +121,7 @@ } lowerLimitNorm = value; + SetDistribution(); } } @@ -133,23 +134,27 @@ { get { - return NormativeNorm == NormType.LowerLimit + return normativeNorm == NormType.LowerLimit ? LowerLimitNorm : SignalingNorm; } - set - { - ValidateNorm(value); - - norm = value; - distribution.ForEachElementDo(d => d.Norm = norm); - } } /// /// Gets or sets the norm type which has been defined on the assessment section. /// - public NormType NormativeNorm { get; set; } + public NormType NormativeNorm + { + get + { + return normativeNorm; + } + set + { + normativeNorm = value; + SetDistribution(); + } + } /// /// Gets the distribution of failure mechanism contributions. @@ -189,6 +194,11 @@ AddOtherContributionItem(otherContribution); } + private void SetDistribution() + { + distribution.ForEachElementDo(d => d.Norm = Norm); + } + /// /// Validates the norm value; /// @@ -212,7 +222,7 @@ /// Thrown when is null. private void AddContributionItem(IFailureMechanism failureMechanism) { - distribution.Add(new FailureMechanismContributionItem(failureMechanism, norm)); + distribution.Add(new FailureMechanismContributionItem(failureMechanism, Norm)); } /// @@ -224,7 +234,7 @@ private void AddOtherContributionItem(double otherContribution) { otherFailureMechanism.Contribution = otherContribution; - var otherContributionItem = new FailureMechanismContributionItem(otherFailureMechanism, norm, true); + var otherContributionItem = new FailureMechanismContributionItem(otherFailureMechanism, Norm, true); distribution.Add(otherContributionItem); } } Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs =================================================================== diff -u -r2e265dc8a3c902ebdfdcdf0f1071f9c3c872d822 -r2c06b27dabc83beee23288eb5c6268847afa0a19 --- Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs (.../FailureMechanismContributionTest.cs) (revision 2e265dc8a3c902ebdfdcdf0f1071f9c3c872d822) +++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/Contribution/FailureMechanismContributionTest.cs (.../FailureMechanismContributionTest.cs) (revision 2c06b27dabc83beee23288eb5c6268847afa0a19) @@ -314,55 +314,148 @@ } [Test] - [TestCaseSource(nameof(GetInvalidValues), - new object[] - { - "Norm_InvalidNewNorm_ThrowsArgumentOutOfRangeException" - })] - [SetCulture("nl-NL")] - public void Norm_InvalidNewNorm_ThrowsArgumentOutOfRangeException(double newNorm) + public void LowerLimitNorm_WhenUpdatedAndNormativeNormLowerLimit_NormUpdatedForEachFailureMechanismContributionItem() { // Setup + const double newNorm = 0.1; + + var failureMechanism = mocks.Stub(); + mocks.ReplayAll(); + var random = new Random(21); - int contribution = random.Next(1, 100); - var failureMechanismContribution = new FailureMechanismContribution(Enumerable.Empty(), contribution); + int otherContribution = random.Next(1, 100); + var failureMechanismContribution = new FailureMechanismContribution(new[] + { + failureMechanism + }, otherContribution); + // Call - TestDelegate test = () => failureMechanismContribution.Norm = newNorm; + failureMechanismContribution.LowerLimitNorm = newNorm; // Assert - const string expectedMessage = "De waarde van de norm moet in het bereik [0,000001, 0,1] liggen."; - TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage); + CollectionAssert.AreEqual(Enumerable.Repeat(newNorm, 2), + failureMechanismContribution.Distribution.Select(d => d.Norm)); + mocks.VerifyAll(); } [Test] - [TestCase(0.000001)] - [TestCase(0.1)] - [TestCase(1.0 / 30000)] - public void Norm_WhenUpdated_NormUpdatedForEachFailureMechanismContributionItem(double newNorm) + public void LowerLimitNorm_WhenUpdatedAndNormativeNormNotLowerLimit_NormNotUpdatedForEachFailureMechanismContributionItem() { // Setup + var failureMechanism = mocks.Stub(); + mocks.ReplayAll(); + var random = new Random(21); int otherContribution = random.Next(1, 100); + var failureMechanismContribution = new FailureMechanismContribution(new[] + { + failureMechanism + }, otherContribution) + { + NormativeNorm = NormType.Signaling + }; + + double originalNorm = failureMechanismContribution.Norm; + + // Call + failureMechanismContribution.LowerLimitNorm = 0.1; + + // Assert + CollectionAssert.AreEqual(Enumerable.Repeat(originalNorm, 2), + failureMechanismContribution.Distribution.Select(d => d.Norm)); + mocks.VerifyAll(); + } + + [Test] + public void SignalingNorm_WhenUpdatedAndNormativeNormSignaling_NormUpdatedForEachFailureMechanismContributionItem() + { + // Setup + const double newNorm = 0.000001; var failureMechanism = mocks.Stub(); + mocks.ReplayAll(); + var random = new Random(21); + int otherContribution = random.Next(1, 100); + + var failureMechanismContribution = new FailureMechanismContribution(new[] + { + failureMechanism + }, otherContribution) + { + NormativeNorm = NormType.Signaling + }; + + // Call + failureMechanismContribution.SignalingNorm = newNorm; + + // Assert + CollectionAssert.AreEqual(Enumerable.Repeat(newNorm, 2), + failureMechanismContribution.Distribution.Select(d => d.Norm)); + mocks.VerifyAll(); + } + + + [Test] + public void SignalingNorm_WhenUpdatedAndNormativeNormNotSignaling_NormNotUpdatedForEachFailureMechanismContributionItem() + { + // Setup + var failureMechanism = mocks.Stub(); mocks.ReplayAll(); + var random = new Random(21); + int otherContribution = random.Next(1, 100); + var failureMechanismContribution = new FailureMechanismContribution(new[] { failureMechanism }, otherContribution); + double originalNorm = failureMechanismContribution.Norm; + // Call - failureMechanismContribution.Norm = newNorm; + failureMechanismContribution.SignalingNorm = 0.000001; // Assert - Assert.AreEqual(Enumerable.Repeat(newNorm, 2), failureMechanismContribution.Distribution.Select(d => d.Norm)); + CollectionAssert.AreEqual(Enumerable.Repeat(originalNorm, 2), + failureMechanismContribution.Distribution.Select(d => d.Norm)); mocks.VerifyAll(); } [Test] + public void NormativeNorm_WhenUpdated_NormUpdatedForEachFailureMechanismContributionItem() + { + // Setup + var failureMechanism = mocks.Stub(); + mocks.ReplayAll(); + + var random = new Random(21); + int otherContribution = random.Next(1, 100); + + var failureMechanismContribution = new FailureMechanismContribution(new[] + { + failureMechanism + }, otherContribution) + { + LowerLimitNorm = 0.1, + SignalingNorm = 0.001 + }; + + // Precondition + CollectionAssert.AreEqual(Enumerable.Repeat(0.1, 2), + failureMechanismContribution.Distribution.Select(d => d.Norm)); + + // Call + failureMechanismContribution.NormativeNorm = NormType.Signaling; + + // Assert + CollectionAssert.AreEqual(Enumerable.Repeat(0.001, 2), + failureMechanismContribution.Distribution.Select(d => d.Norm)); + mocks.VerifyAll(); + } + + [Test] [TestCaseSource(nameof(GetInvalidValues), new object[] { Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Integration.Test/GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs =================================================================== diff -u -r7a9c98886fd29efbea53f5be1b0be96c70ffa106 -r2c06b27dabc83beee23288eb5c6268847afa0a19 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Integration.Test/GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs (.../GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs) (revision 7a9c98886fd29efbea53f5be1b0be96c70ffa106) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Integration.Test/GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs (.../GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs) (revision 2c06b27dabc83beee23288eb5c6268847afa0a19) @@ -777,13 +777,7 @@ calculatorFactory.Expect(cf => cf.CreateDikeHeightCalculator(testDataPath)).Return(dikeHeightCalculator); mockRepository.ReplayAll(); - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) - { - FailureMechanismContribution = - { - Norm = 0.1 - } - }; + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); ImportHydraulicBoundaryDatabase(assessmentSection); AddSectionToAssessmentSection(assessmentSection); @@ -1212,13 +1206,7 @@ calculatorFactory.Expect(cf => cf.CreateOvertoppingRateCalculator(testDataPath)).Return(overtoppingRateCalculator); mockRepository.ReplayAll(); - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) - { - FailureMechanismContribution = - { - Norm = 0.1 - } - }; + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); ImportHydraulicBoundaryDatabase(assessmentSection); AddSectionToAssessmentSection(assessmentSection); Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs =================================================================== diff -u -r2e265dc8a3c902ebdfdcdf0f1071f9c3c872d822 -r2c06b27dabc83beee23288eb5c6268847afa0a19 --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision 2e265dc8a3c902ebdfdcdf0f1071f9c3c872d822) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/FailureMechanismContributionViewTest.cs (.../FailureMechanismContributionViewTest.cs) (revision 2c06b27dabc83beee23288eb5c6268847afa0a19) @@ -415,7 +415,7 @@ { // Given const double contribution = 25.0; - const double norm = 1.0 / 500; + const double norm = 1.0 / 30000; var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); @@ -433,10 +433,7 @@ var contributionData = new FailureMechanismContribution(new[] { failureMechanism - }, 100.0 - contribution) - { - Norm = norm - }; + }, 100.0 - contribution); view.Data = contributionData; view.AssessmentSection = assessmentSection; Index: Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Handlers/FailureMechanismContributionNormChangeHandlerTest.cs =================================================================== diff -u -r2e265dc8a3c902ebdfdcdf0f1071f9c3c872d822 -r2c06b27dabc83beee23288eb5c6268847afa0a19 --- Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Handlers/FailureMechanismContributionNormChangeHandlerTest.cs (.../FailureMechanismContributionNormChangeHandlerTest.cs) (revision 2e265dc8a3c902ebdfdcdf0f1071f9c3c872d822) +++ Ringtoets/Integration/test/Ringtoets.Integration.Plugin.Test/Handlers/FailureMechanismContributionNormChangeHandlerTest.cs (.../FailureMechanismContributionNormChangeHandlerTest.cs) (revision 2c06b27dabc83beee23288eb5c6268847afa0a19) @@ -102,7 +102,7 @@ var handler = new FailureMechanismContributionNormChangeHandler(assessmentSection); // Call - handler.SetPropertyValueAfterConfirmation(() => assessmentSection.FailureMechanismContribution.Norm = 0.1); + handler.SetPropertyValueAfterConfirmation(() => { }); // Assert Assert.AreEqual("Bevestigen", title);