// Copyright (C) Stichting Deltares 2017. 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 System.Linq; using Core.Common.Base; using Core.Common.Gui.Commands; using Core.Common.TestUtil; using NUnit.Extensions.Forms; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Contribution; using Ringtoets.Common.Data.Hydraulics; using Ringtoets.Common.Data.Probability; using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Data.TestUtil; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionInwards.Data.TestUtil; using Ringtoets.HeightStructures.Data; using Ringtoets.Integration.Data; using Ringtoets.Integration.Forms.PropertyClasses; using Ringtoets.Integration.Plugin.Handlers; using Ringtoets.Piping.Data; using Ringtoets.Piping.Data.TestUtil; using Ringtoets.Piping.KernelWrapper.TestUtil; namespace Ringtoets.Integration.Forms.Test.PropertyClasses { [TestFixture] public class FailureMechanismContributionPropertiesIntegrationTest : NUnitFormTest { private const string messageAllHydraulicBoundaryLocationOutputCleared = "Alle berekende resultaten voor alle hydraulische randvoorwaardenlocaties zijn verwijderd."; private const string messageCalculationsremoved = "De resultaten van {0} berekeningen zijn verwijderd."; [Test] public void ReturnPeriodProperty_ValueChanged_ClearsDependentDataAndNotifiesObserversAndLogsMessages() { // Setup const int newReturnPeriod = 200; const int numberOfCalculations = 3; TestHydraulicBoundaryLocation hydraulicBoundaryLocation = TestHydraulicBoundaryLocation.CreateFullyCalculated(); var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase { Locations = { hydraulicBoundaryLocation } }; var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) { HydraulicBoundaryDatabase = hydraulicBoundaryDatabase }; var emptyPipingCalculation = new PipingCalculation(new GeneralPipingInput()); var pipingCalculation = new PipingCalculation(new GeneralPipingInput()) { Output = new TestPipingOutput(), SemiProbabilisticOutput = new TestPipingSemiProbabilisticOutput() }; var emptyGrassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation(); var grassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation { Output = new GrassCoverErosionInwardsOutput(new GrassCoverErosionInwardsResultOutput( 0, false, new ProbabilityAssessmentOutput(0, 0, 0, 0, 0)), new TestDikeHeightOutput(0), new TestOvertoppingRateOutput(0)) }; var emptyHeightStructuresCalculation = new StructuresCalculation(); var heightStructuresCalculation = new StructuresCalculation { Output = new ProbabilityAssessmentOutput(0, 0, 0, 0, 0) }; TestHydraulicBoundaryLocation grassCoverErosionOutwardsHydraulicBoundaryLocation = TestHydraulicBoundaryLocation.CreateFullyCalculated(); assessmentSection.GrassCoverErosionOutwards.HydraulicBoundaryLocations.Add(grassCoverErosionOutwardsHydraulicBoundaryLocation); assessmentSection.PipingFailureMechanism.CalculationsGroup.Children.Add(emptyPipingCalculation); assessmentSection.PipingFailureMechanism.CalculationsGroup.Children.Add(pipingCalculation); assessmentSection.GrassCoverErosionInwards.CalculationsGroup.Children.Add(emptyGrassCoverErosionInwardsCalculation); assessmentSection.GrassCoverErosionInwards.CalculationsGroup.Children.Add(grassCoverErosionInwardsCalculation); assessmentSection.HeightStructures.CalculationsGroup.Children.Add(emptyHeightStructuresCalculation); assessmentSection.HeightStructures.CalculationsGroup.Children.Add(heightStructuresCalculation); FailureMechanismContribution failureMechanismContribution = assessmentSection.FailureMechanismContribution; var mockRepository = new MockRepository(); var observerMock = mockRepository.StrictMock(); observerMock.Expect(o => o.UpdateObserver()); var pipingCalculationObserver = mockRepository.StrictMock(); pipingCalculationObserver.Expect(o => o.UpdateObserver()); var grassCoverErosionInwardsCalculationObserver = mockRepository.StrictMock(); grassCoverErosionInwardsCalculationObserver.Expect(o => o.UpdateObserver()); var heightStructuresCalculationObserver = mockRepository.StrictMock(); heightStructuresCalculationObserver.Expect(o => o.UpdateObserver()); var emptyPipingCalculationObserver = mockRepository.StrictMock(); var emptyGrassCoverErosionInwardsCalculationObserver = mockRepository.StrictMock(); var emptyHeightStructuresCalculationObserver = mockRepository.StrictMock(); var hydraulicBoundaryDatabaseObserver = mockRepository.StrictMock(); hydraulicBoundaryDatabaseObserver.Expect(hbdo => hbdo.UpdateObserver()); var grassCoverErosionOutwardsObserver = mockRepository.StrictMock(); grassCoverErosionOutwardsObserver.Expect(o => o.UpdateObserver()); var viewCommands = mockRepository.Stub(); mockRepository.ReplayAll(); failureMechanismContribution.Attach(observerMock); hydraulicBoundaryDatabase.Attach(hydraulicBoundaryDatabaseObserver); emptyPipingCalculation.Attach(emptyPipingCalculationObserver); emptyGrassCoverErosionInwardsCalculation.Attach(emptyGrassCoverErosionInwardsCalculationObserver); emptyHeightStructuresCalculation.Attach(emptyHeightStructuresCalculationObserver); pipingCalculation.Attach(pipingCalculationObserver); grassCoverErosionInwardsCalculation.Attach(grassCoverErosionInwardsCalculationObserver); heightStructuresCalculation.Attach(heightStructuresCalculationObserver); assessmentSection.GrassCoverErosionOutwards.HydraulicBoundaryLocations.Attach(grassCoverErosionOutwardsObserver); var properties = new FailureMechanismContributionProperties( failureMechanismContribution, assessmentSection, new FailureMechanismContributionNormChangeHandler(), new AssessmentSectionCompositionChangeHandler(viewCommands)); // Precondition int originalReturnPeriodValue = Convert.ToInt32(1.0 / failureMechanismContribution.Norm); Assert.AreEqual(originalReturnPeriodValue, properties.ReturnPeriod); Assert.IsTrue(hydraulicBoundaryLocation.WaveHeightCalculation.HasOutput); Assert.IsTrue(hydraulicBoundaryLocation.DesignWaterLevelCalculation.HasOutput); Assert.IsTrue(grassCoverErosionOutwardsHydraulicBoundaryLocation.WaveHeightCalculation.HasOutput); Assert.IsTrue(grassCoverErosionOutwardsHydraulicBoundaryLocation.DesignWaterLevelCalculation.HasOutput); Assert.IsNotNull(pipingCalculation.Output); Assert.IsNotNull(pipingCalculation.SemiProbabilisticOutput); Assert.IsNotNull(grassCoverErosionInwardsCalculation.Output); Assert.IsNotNull(heightStructuresCalculation.Output); DialogBoxHandler = (name, wnd) => { var dialogTester = new MessageBoxTester(wnd); dialogTester.ClickOk(); }; // Call Action call = () => properties.ReturnPeriod = newReturnPeriod; // Assert TestHelper.AssertLogMessages(call, msgs => { string[] messages = msgs.ToArray(); Assert.AreEqual(string.Format(messageCalculationsremoved, numberOfCalculations), messages[0]); Assert.AreEqual(messageAllHydraulicBoundaryLocationOutputCleared, messages[1]); }); Assert.AreEqual(1.0 / newReturnPeriod, failureMechanismContribution.Norm); Assert.IsFalse(hydraulicBoundaryLocation.WaveHeightCalculation.HasOutput); Assert.IsFalse(hydraulicBoundaryLocation.DesignWaterLevelCalculation.HasOutput); Assert.IsFalse(grassCoverErosionOutwardsHydraulicBoundaryLocation.WaveHeightCalculation.HasOutput); Assert.IsFalse(grassCoverErosionOutwardsHydraulicBoundaryLocation.DesignWaterLevelCalculation.HasOutput); Assert.IsNull(pipingCalculation.Output); Assert.IsNull(pipingCalculation.SemiProbabilisticOutput); Assert.IsNull(grassCoverErosionInwardsCalculation.Output); Assert.IsNull(heightStructuresCalculation.Output); mockRepository.VerifyAll(); } [Test] public void ReturnPeriodProperty_HydraulicBoundarySetAndCalculationsNoOutput_HydraulicBoundaryDatabaseObserversNotifiedAndMessagesLogged() { // Setup const int newReturnPeriod = 200; var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase { Locations = { TestHydraulicBoundaryLocation.CreateFullyCalculated() } }; var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) { HydraulicBoundaryDatabase = hydraulicBoundaryDatabase }; var emptyPipingCalculation = new PipingCalculation(new GeneralPipingInput()); var emptyGrassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation(); var emptyHeightStructuresCalculation = new StructuresCalculation(); assessmentSection.PipingFailureMechanism.CalculationsGroup.Children.Add(emptyPipingCalculation); assessmentSection.GrassCoverErosionInwards.CalculationsGroup.Children.Add(emptyGrassCoverErosionInwardsCalculation); assessmentSection.HeightStructures.CalculationsGroup.Children.Add(emptyHeightStructuresCalculation); FailureMechanismContribution failureMechanismContribution = assessmentSection.FailureMechanismContribution; var mockRepository = new MockRepository(); var observerMock = mockRepository.StrictMock(); observerMock.Expect(o => o.UpdateObserver()); var calculationObserver = mockRepository.StrictMock(); // No update observers expected. var hydraulicBoundaryDatabaseObserver = mockRepository.StrictMock(); hydraulicBoundaryDatabaseObserver.Expect(hbdo => hbdo.UpdateObserver()); var viewCommands = mockRepository.Stub(); mockRepository.ReplayAll(); failureMechanismContribution.Attach(observerMock); hydraulicBoundaryDatabase.Attach(hydraulicBoundaryDatabaseObserver); emptyPipingCalculation.Attach(calculationObserver); emptyGrassCoverErosionInwardsCalculation.Attach(calculationObserver); emptyHeightStructuresCalculation.Attach(calculationObserver); var properties = new FailureMechanismContributionProperties( failureMechanismContribution, assessmentSection, new FailureMechanismContributionNormChangeHandler(), new AssessmentSectionCompositionChangeHandler(viewCommands)); HydraulicBoundaryLocation hydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations[0]; // Precondition int originalReturnPeriodValue = Convert.ToInt32(1.0 / failureMechanismContribution.Norm); Assert.AreEqual(originalReturnPeriodValue, properties.ReturnPeriod); Assert.IsFalse(double.IsNaN(hydraulicBoundaryLocation.WaveHeight)); Assert.IsFalse(double.IsNaN(hydraulicBoundaryLocation.DesignWaterLevel)); DialogBoxHandler = (name, wnd) => { var dialogTester = new MessageBoxTester(wnd); dialogTester.ClickOk(); }; // Call Action call = () => properties.ReturnPeriod = newReturnPeriod; // Assert TestHelper.AssertLogMessageIsGenerated(call, messageAllHydraulicBoundaryLocationOutputCleared, 1); Assert.AreEqual(1.0 / newReturnPeriod, failureMechanismContribution.Norm); Assert.IsNaN(hydraulicBoundaryLocation.WaveHeight); Assert.IsNaN(hydraulicBoundaryLocation.DesignWaterLevel); mockRepository.VerifyAll(); } [Test] public void ReturnPeriodProperty_HydraulicBoundaryLocationNoOutputAndCalculationWithOutputAndValueChanged_CalculationObserverNotifiedAndMessageLogged() { // Setup const int newReturnPeriod = 200; const int numberOfCalculations = 3; var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.Add(new TestHydraulicBoundaryLocation()); var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) { HydraulicBoundaryDatabase = hydraulicBoundaryDatabase }; var emptyPipingCalculation = new PipingCalculation(new GeneralPipingInput()); var pipingCalculation = new PipingCalculation(new GeneralPipingInput()) { Output = new TestPipingOutput(), SemiProbabilisticOutput = new TestPipingSemiProbabilisticOutput() }; var emptyGrassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation(); var grassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation { Output = new GrassCoverErosionInwardsOutput(new GrassCoverErosionInwardsResultOutput( 0, false, new ProbabilityAssessmentOutput(0, 0, 0, 0, 0)), new TestDikeHeightOutput(0), new TestOvertoppingRateOutput(0)) }; var emptyHeightStructuresCalculation = new StructuresCalculation(); var heightStructuresCalculation = new StructuresCalculation { Output = new ProbabilityAssessmentOutput(0, 0, 0, 0, 0) }; assessmentSection.PipingFailureMechanism.CalculationsGroup.Children.Add(emptyPipingCalculation); assessmentSection.PipingFailureMechanism.CalculationsGroup.Children.Add(pipingCalculation); assessmentSection.GrassCoverErosionInwards.CalculationsGroup.Children.Add(emptyGrassCoverErosionInwardsCalculation); assessmentSection.GrassCoverErosionInwards.CalculationsGroup.Children.Add(grassCoverErosionInwardsCalculation); assessmentSection.HeightStructures.CalculationsGroup.Children.Add(emptyHeightStructuresCalculation); assessmentSection.HeightStructures.CalculationsGroup.Children.Add(heightStructuresCalculation); FailureMechanismContribution failureMechanismContribution = assessmentSection.FailureMechanismContribution; var mockRepository = new MockRepository(); var observerMock = mockRepository.StrictMock(); observerMock.Expect(o => o.UpdateObserver()); var pipingCalculationObserver = mockRepository.StrictMock(); pipingCalculationObserver.Expect(o => o.UpdateObserver()); var grassCoverErosionInwardsCalculationObserver = mockRepository.StrictMock(); grassCoverErosionInwardsCalculationObserver.Expect(o => o.UpdateObserver()); var heightStructuresCalculationObserver = mockRepository.StrictMock(); heightStructuresCalculationObserver.Expect(o => o.UpdateObserver()); var emptyPipingCalculationObserver = mockRepository.StrictMock(); var emptyGrassCoverErosionInwardsCalculationObserver = mockRepository.StrictMock(); var emptyHeightStructuresCalculationObserver = mockRepository.StrictMock(); var hydraulicBoundaryDatabaseObserver = mockRepository.StrictMock(); // No update observer expected. var viewCommands = mockRepository.Stub(); mockRepository.ReplayAll(); failureMechanismContribution.Attach(observerMock); hydraulicBoundaryDatabase.Attach(hydraulicBoundaryDatabaseObserver); emptyPipingCalculation.Attach(emptyPipingCalculationObserver); emptyGrassCoverErosionInwardsCalculation.Attach(emptyGrassCoverErosionInwardsCalculationObserver); emptyHeightStructuresCalculation.Attach(emptyHeightStructuresCalculationObserver); pipingCalculation.Attach(pipingCalculationObserver); grassCoverErosionInwardsCalculation.Attach(grassCoverErosionInwardsCalculationObserver); heightStructuresCalculation.Attach(heightStructuresCalculationObserver); var properties = new FailureMechanismContributionProperties( failureMechanismContribution, assessmentSection, new FailureMechanismContributionNormChangeHandler(), new AssessmentSectionCompositionChangeHandler(viewCommands)); // Precondition int originalReturnPeriodValue = Convert.ToInt32(1.0 / failureMechanismContribution.Norm); Assert.AreEqual(originalReturnPeriodValue, properties.ReturnPeriod); Assert.IsNotNull(pipingCalculation.Output); Assert.IsNotNull(pipingCalculation.SemiProbabilisticOutput); Assert.IsNotNull(grassCoverErosionInwardsCalculation.Output); Assert.IsNotNull(heightStructuresCalculation.Output); DialogBoxHandler = (name, wnd) => { var dialogTester = new MessageBoxTester(wnd); dialogTester.ClickOk(); }; // Call Action call = () => properties.ReturnPeriod = newReturnPeriod; // Assert string expectedMessage = string.Format(messageCalculationsremoved, numberOfCalculations); TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); Assert.AreEqual(1.0 / newReturnPeriod, failureMechanismContribution.Norm); Assert.IsNull(pipingCalculation.Output); Assert.IsNull(pipingCalculation.SemiProbabilisticOutput); Assert.IsNull(grassCoverErosionInwardsCalculation.Output); Assert.IsNull(heightStructuresCalculation.Output); mockRepository.VerifyAll(); } [Test] public void ReturnPeriodProperty_NoHydraulicBoundaryLocationNoOutputAndCalculationWithOutputAndValueChanged_CalculationObserverNotifiedAndMessageLogged() { // Setup const int newReturnPeriod = 200; const int numberOfCalculations = 3; var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); var emptyPipingCalculation = new PipingCalculation(new GeneralPipingInput()); var pipingCalculation = new PipingCalculation(new GeneralPipingInput()) { Output = new TestPipingOutput(), SemiProbabilisticOutput = new TestPipingSemiProbabilisticOutput() }; var emptyGrassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation(); var grassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation { Output = new GrassCoverErosionInwardsOutput(new GrassCoverErosionInwardsResultOutput( 0, false, new ProbabilityAssessmentOutput(0, 0, 0, 0, 0)), new TestDikeHeightOutput(0), new TestOvertoppingRateOutput(0)) }; var emptyHeightStructuresCalculation = new StructuresCalculation(); var heightStructuresCalculation = new StructuresCalculation { Output = new ProbabilityAssessmentOutput(0, 0, 0, 0, 0) }; assessmentSection.PipingFailureMechanism.CalculationsGroup.Children.Add(emptyPipingCalculation); assessmentSection.PipingFailureMechanism.CalculationsGroup.Children.Add(pipingCalculation); assessmentSection.GrassCoverErosionInwards.CalculationsGroup.Children.Add(emptyGrassCoverErosionInwardsCalculation); assessmentSection.GrassCoverErosionInwards.CalculationsGroup.Children.Add(grassCoverErosionInwardsCalculation); assessmentSection.HeightStructures.CalculationsGroup.Children.Add(emptyHeightStructuresCalculation); assessmentSection.HeightStructures.CalculationsGroup.Children.Add(heightStructuresCalculation); FailureMechanismContribution failureMechanismContribution = assessmentSection.FailureMechanismContribution; var mockRepository = new MockRepository(); var observerMock = mockRepository.StrictMock(); observerMock.Expect(o => o.UpdateObserver()); var pipingCalculationObserver = mockRepository.StrictMock(); pipingCalculationObserver.Expect(o => o.UpdateObserver()); var grassCoverErosionInwardsCalculationObserver = mockRepository.StrictMock(); grassCoverErosionInwardsCalculationObserver.Expect(o => o.UpdateObserver()); var heightStructuresCalculationObserver = mockRepository.StrictMock(); heightStructuresCalculationObserver.Expect(o => o.UpdateObserver()); var emptyPipingCalculationObserver = mockRepository.StrictMock(); var emptyGrassCoverErosionInwardsCalculationObserver = mockRepository.StrictMock(); var emptyHeightStructuresCalculationObserver = mockRepository.StrictMock(); var viewCommands = mockRepository.Stub(); mockRepository.ReplayAll(); failureMechanismContribution.Attach(observerMock); emptyPipingCalculation.Attach(emptyPipingCalculationObserver); emptyGrassCoverErosionInwardsCalculation.Attach(emptyGrassCoverErosionInwardsCalculationObserver); emptyHeightStructuresCalculation.Attach(emptyHeightStructuresCalculationObserver); pipingCalculation.Attach(pipingCalculationObserver); grassCoverErosionInwardsCalculation.Attach(grassCoverErosionInwardsCalculationObserver); heightStructuresCalculation.Attach(heightStructuresCalculationObserver); var properties = new FailureMechanismContributionProperties( failureMechanismContribution, assessmentSection, new FailureMechanismContributionNormChangeHandler(), new AssessmentSectionCompositionChangeHandler(viewCommands)); // Precondition int originalReturnPeriodValue = Convert.ToInt32(1.0 / failureMechanismContribution.Norm); Assert.AreEqual(originalReturnPeriodValue, properties.ReturnPeriod); Assert.IsNotNull(pipingCalculation.Output); Assert.IsNotNull(pipingCalculation.SemiProbabilisticOutput); Assert.IsNotNull(grassCoverErosionInwardsCalculation.Output); Assert.IsNotNull(heightStructuresCalculation.Output); DialogBoxHandler = (name, wnd) => { var dialogTester = new MessageBoxTester(wnd); dialogTester.ClickOk(); }; // Call Action call = () => properties.ReturnPeriod = newReturnPeriod; // Assert string expectedMessage = string.Format(messageCalculationsremoved, numberOfCalculations); TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); Assert.AreEqual(1.0 / newReturnPeriod, failureMechanismContribution.Norm); Assert.IsNull(pipingCalculation.Output); Assert.IsNull(pipingCalculation.SemiProbabilisticOutput); Assert.IsNull(grassCoverErosionInwardsCalculation.Output); Assert.IsNull(heightStructuresCalculation.Output); mockRepository.VerifyAll(); } [Test] public void ReturnPeriodProperty_HydraulicBoundaryLocationNoOutputAndNoCalculationsWithOutputAndValueChanged_NoObserversNotifiedAndMessagesLogged() { // Setup const int newReturnPeriod = 200; var hydraulicBoundaryDatabase = new HydraulicBoundaryDatabase(); hydraulicBoundaryDatabase.Locations.Add(new TestHydraulicBoundaryLocation()); var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) { HydraulicBoundaryDatabase = hydraulicBoundaryDatabase }; var emptyPipingCalculation = new PipingCalculation(new GeneralPipingInput()); var emptyGrassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation(); var emptyHeightStructuresCalculation = new StructuresCalculation(); assessmentSection.PipingFailureMechanism.CalculationsGroup.Children.Add(emptyPipingCalculation); assessmentSection.GrassCoverErosionInwards.CalculationsGroup.Children.Add(emptyGrassCoverErosionInwardsCalculation); assessmentSection.HeightStructures.CalculationsGroup.Children.Add(emptyHeightStructuresCalculation); FailureMechanismContribution failureMechanismContribution = assessmentSection.FailureMechanismContribution; var mockRepository = new MockRepository(); var observerMock = mockRepository.StrictMock(); observerMock.Expect(o => o.UpdateObserver()); var calculationObserver = mockRepository.StrictMock(); var hydraulicBoundaryDatabaseObserver = mockRepository.StrictMock(); var viewCommands = mockRepository.Stub(); mockRepository.ReplayAll(); failureMechanismContribution.Attach(observerMock); emptyPipingCalculation.Attach(calculationObserver); emptyGrassCoverErosionInwardsCalculation.Attach(calculationObserver); emptyHeightStructuresCalculation.Attach(calculationObserver); hydraulicBoundaryDatabase.Attach(hydraulicBoundaryDatabaseObserver); var properties = new FailureMechanismContributionProperties( failureMechanismContribution, assessmentSection, new FailureMechanismContributionNormChangeHandler(), new AssessmentSectionCompositionChangeHandler(viewCommands)); // Precondition int originalReturnPeriodValue = Convert.ToInt32(1.0 / failureMechanismContribution.Norm); Assert.AreEqual(originalReturnPeriodValue, properties.ReturnPeriod); DialogBoxHandler = (name, wnd) => { var dialogTester = new MessageBoxTester(wnd); dialogTester.ClickOk(); }; // Call Action call = () => properties.ReturnPeriod = newReturnPeriod; // Assert TestHelper.AssertLogMessagesCount(call, 0); Assert.AreEqual(1.0 / newReturnPeriod, failureMechanismContribution.Norm); mockRepository.VerifyAll(); // No update observer expected. } [Test] public void ReturnPeriodProperty_NoHydraulicBoundaryDatabaseAndNoCalculationsWithOutputAndValueChanged_NoObserversNotifiedAndMessagesLogged() { // Setup var mockRepository = new MockRepository(); var viewCommands = mockRepository.Stub(); mockRepository.ReplayAll(); const int newReturnPeriod = 200; var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); var emptyPipingCalculation = new PipingCalculation(new GeneralPipingInput()); var emptyGrassCoverErosionInwardsCalculation = new GrassCoverErosionInwardsCalculation(); var emptyHeightStructuresCalculation = new StructuresCalculation(); assessmentSection.PipingFailureMechanism.CalculationsGroup.Children.Add(emptyPipingCalculation); assessmentSection.GrassCoverErosionInwards.CalculationsGroup.Children.Add(emptyGrassCoverErosionInwardsCalculation); assessmentSection.HeightStructures.CalculationsGroup.Children.Add(emptyHeightStructuresCalculation); FailureMechanismContribution failureMechanismContribution = assessmentSection.FailureMechanismContribution; var properties = new FailureMechanismContributionProperties( failureMechanismContribution, assessmentSection, new FailureMechanismContributionNormChangeHandler(), new AssessmentSectionCompositionChangeHandler(viewCommands)); // Precondition int originalReturnPeriodValue = Convert.ToInt32(1.0 / failureMechanismContribution.Norm); Assert.AreEqual(originalReturnPeriodValue, properties.ReturnPeriod); // Call failureMechanismContribution.Norm = 1.0 / newReturnPeriod; Action call = () => failureMechanismContribution.NotifyObservers(); // Assert TestHelper.AssertLogMessagesCount(call, 0); Assert.AreEqual(1.0 / newReturnPeriod, failureMechanismContribution.Norm); mockRepository.VerifyAll(); } } }