using System; using Core.Common.Base; using Core.Common.Base.Data; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.HydraRing.Data; using Ringtoets.Piping.KernelWrapper.TestUtil; namespace Ringtoets.Piping.Data.Test { public class PipingCalculationTest { private MockRepository mockRepository; [SetUp] public void SetUp() { mockRepository = new MockRepository(); } [Test] public void Constructor_DefaultPropertyValuesAreSet() { // Setup var generalInputParameters = new GeneralPipingInput(); var semiProbabilisticInputParameters = new SemiProbabilisticPipingInput(); // Call var calculation = new PipingCalculation(generalInputParameters, semiProbabilisticInputParameters); // Assert Assert.IsInstanceOf(calculation); Assert.AreEqual("Nieuwe berekening", calculation.Name); Assert.AreEqual("Commentaar", calculation.Comments.Name); Assert.IsInstanceOf(calculation.InputParameters); Assert.IsFalse(calculation.HasOutput); Assert.IsNull(calculation.Output); Assert.IsNull(calculation.SemiProbabilisticOutput); } [Test] public void Constructor_GeneralPipingInputIsNull_ThrowArgumentNullException() { // Call TestDelegate call = () => new PipingCalculation(null, new SemiProbabilisticPipingInput()); // Assert Assert.Throws(call); } [Test] public void Constructor_SemiProbabilisticPipingInputIsNull_ThrowArgumentNullException() { // Call TestDelegate call = () => new PipingCalculation(new GeneralPipingInput(), null); // Assert Assert.Throws(call); } [Test] public void Notify_SingleListenerAttached_ListenerIsNotified() { // Setup var observer = mockRepository.StrictMock(); observer.Expect(o => o.UpdateObserver()); mockRepository.ReplayAll(); var calculation = new PipingCalculation(new GeneralPipingInput(), new SemiProbabilisticPipingInput()); calculation.Attach(observer); // Call & Assert calculation.NotifyObservers(); } [Test] public void Notify_SingleListenerAttachedAndDeattached_ListenerIsNotNotified() { // Setup var observer = mockRepository.StrictMock(); observer.Expect(o => o.UpdateObserver()).Repeat.Never(); mockRepository.ReplayAll(); var calculation = new PipingCalculation(new GeneralPipingInput(), new SemiProbabilisticPipingInput()); calculation.Attach(observer); calculation.Detach(observer); // Call & Assert calculation.NotifyObservers(); } [Test] public void Notify_TwoListenersAttached_BothAreNotified() { // Setup var observerA = mockRepository.StrictMock(); observerA.Expect(o => o.UpdateObserver()); var observerB = mockRepository.StrictMock(); observerB.Expect(o => o.UpdateObserver()); mockRepository.ReplayAll(); var calculation = new PipingCalculation(new GeneralPipingInput(), new SemiProbabilisticPipingInput()); calculation.Attach(observerA); calculation.Attach(observerB); // Call & Assert calculation.NotifyObservers(); } [Test] public void Notify_TwoListenersAttachedOneDetached_InvokedOnce() { // Setup var observerA = mockRepository.StrictMock(); observerA.Expect(o => o.UpdateObserver()).Repeat.Never(); var observerB = mockRepository.StrictMock(); observerB.Expect(o => o.UpdateObserver()); mockRepository.ReplayAll(); var calculation = new PipingCalculation(new GeneralPipingInput(), new SemiProbabilisticPipingInput()); calculation.Attach(observerA); calculation.Attach(observerB); calculation.Detach(observerA); // Call & Assert calculation.NotifyObservers(); } [Test] public void Detach_DetachNonAttachedObserver_ThrowsNoException() { // Setup var observer = mockRepository.StrictMock(); var calculation = new PipingCalculation(new GeneralPipingInput(), new SemiProbabilisticPipingInput()); // Call & Assert calculation.Detach(observer); } [Test] public void ClearOutput_Always_SetsOutputToNull() { // Setup var calculation = new PipingCalculation(new GeneralPipingInput(), new SemiProbabilisticPipingInput()) { Output = new TestPipingOutput() }; // Call calculation.ClearOutput(); // Assert Assert.IsNull(calculation.Output); } [Test] public void HasOutput_OutputNull_ReturnsFalse() { // Setup var calculation = new PipingCalculation(new GeneralPipingInput(), new SemiProbabilisticPipingInput()) { Output = null }; // Call & Assert Assert.IsFalse(calculation.HasOutput); } [Test] public void HasOutput_OutputSet_ReturnsTrue() { // Setup var calculation = new PipingCalculation(new GeneralPipingInput(), new SemiProbabilisticPipingInput()) { Output = new TestPipingOutput() }; // Call & Assert Assert.IsTrue(calculation.HasOutput); } [Test] public void ClearHydraulicBoundaryLocation_Always_SetHydraulicBoundaryLocationToNull() { // Setup var calculation = new PipingCalculation(new GeneralPipingInput(), new SemiProbabilisticPipingInput()); var hydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test", 1.0, 2.0); calculation.InputParameters.HydraulicBoundaryLocation = hydraulicBoundaryLocation; // Precondition Assert.AreSame(hydraulicBoundaryLocation, calculation.InputParameters.HydraulicBoundaryLocation); // Call calculation.ClearHydraulicBoundaryLocation(); // Assert Assert.IsNull(calculation.InputParameters.HydraulicBoundaryLocation); } [Test] public void ClearHydraulicBoundaryLocation_Always_SetAssessmentLevelToNaN() { // Setup var calculation = new PipingCalculation(new GeneralPipingInput(), new SemiProbabilisticPipingInput()); var assessmentLevel = new RoundedDouble(2, 7.60); calculation.InputParameters.AssessmentLevel = assessmentLevel; // Precondition Assert.AreEqual(assessmentLevel, calculation.InputParameters.AssessmentLevel); // Call calculation.ClearHydraulicBoundaryLocation(); // Assert Assert.IsNaN(calculation.InputParameters.AssessmentLevel); } } }