Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Integration.Test/GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs =================================================================== diff -u -r438c91039ce53124dd58150090f858d0d21e72dd -rfbb5151e17328fe78696f78c8e71d1a2d513d655 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Integration.Test/GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs (.../GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs) (revision 438c91039ce53124dd58150090f858d0d21e72dd) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Integration.Test/GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs (.../GrassCoverErosionInwardsCalculationActivityIntegrationTest.cs) (revision fbb5151e17328fe78696f78c8e71d1a2d513d655) @@ -183,6 +183,47 @@ } [Test] + public void Finish_InvalidOvertoppingCalculation_DoesNotSetOutputAndNotifyObservers() + { + // Setup + var mocks = new MockRepository(); + var observerMock = mocks.StrictMock(); + observerMock.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); + ImportHydraulicBoundaryDatabase(assessmentSection); + AddSectionToAssessmentSection(assessmentSection); + + var calculation = new GrassCoverErosionInwardsCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test", 1, 1) + } + }; + + calculation.Attach(observerMock); + + var activity = new GrassCoverErosionInwardsCalculationActivity(calculation, validFile, assessmentSection.GrassCoverErosionInwards, assessmentSection); + + using (new HydraRingCalculatorFactoryConfig()) + { + TestOvertoppingCalculator calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).OvertoppingCalculator; + calculator.EndInFailure = true; + + activity.Run(); + } + + // Call + activity.Finish(); + + // Assert + Assert.IsNull(calculation.Output); + mocks.VerifyAll(); + } + + [Test] public void Finish_ValidOvertoppingCalculation_SetsOutputAndNotifyObserversOfCalculation() { // Setup @@ -341,6 +382,100 @@ } [Test] + [TestCase(DikeHeightCalculationType.CalculateByAssessmentSectionNorm)] + [TestCase(DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability)] + public void Finish_InvalidDikeHeightCalculation_OutputSetAndObserversNotified(DikeHeightCalculationType dikeHeightCalculationType) + { + // Setup + var mocks = new MockRepository(); + var observerMock = mocks.StrictMock(); + observerMock.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); + ImportHydraulicBoundaryDatabase(assessmentSection); + AddSectionToAssessmentSection(assessmentSection); + + var calculation = new GrassCoverErosionInwardsCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), + DikeProfile = CreateDikeProfile(), + DikeHeightCalculationType = dikeHeightCalculationType + } + }; + + calculation.Attach(observerMock); + + var activity = new GrassCoverErosionInwardsCalculationActivity(calculation, validFile, assessmentSection.GrassCoverErosionInwards, assessmentSection); + + using (new HydraRingCalculatorFactoryConfig()) + { + TestHydraulicLoadsCalculator calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).DikeHeightCalculator; + calculator.Value = double.NaN; + calculator.EndInFailure = true; + + activity.Run(); + } + + // Call + activity.Finish(); + + // Assert + Assert.IsNotNull(calculation.Output); + Assert.IsNull(calculation.Output.DikeHeightOutput); + mocks.VerifyAll(); + } + + [Test] + [TestCase(DikeHeightCalculationType.CalculateByAssessmentSectionNorm)] + [TestCase(DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability)] + public void Finish_ValidDikeHeightCalculation_OutputSetAndObserversNotified(DikeHeightCalculationType dikeHeightCalculationType) + { + // Setup + var mocks = new MockRepository(); + var observerMock = mocks.StrictMock(); + observerMock.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); + ImportHydraulicBoundaryDatabase(assessmentSection); + AddSectionToAssessmentSection(assessmentSection); + + var calculation = new GrassCoverErosionInwardsCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), + DikeProfile = CreateDikeProfile(), + DikeHeightCalculationType = dikeHeightCalculationType + } + }; + + calculation.Attach(observerMock); + + var activity = new GrassCoverErosionInwardsCalculationActivity(calculation, validFile, assessmentSection.GrassCoverErosionInwards, assessmentSection); + + using (new HydraRingCalculatorFactoryConfig()) + { + activity.Run(); + } + + // Call + activity.Finish(); + + // Assert + Assert.IsNotNull(calculation.Output); + ProbabilityAssessmentOutput probabilisticAssessmentOutput = calculation.Output.ProbabilityAssessmentOutput; + Assert.IsFalse(double.IsNaN(probabilisticAssessmentOutput.Reliability)); + HydraulicLoadsOutput dikeHeightOutput = calculation.Output.DikeHeightOutput; + Assert.IsNotNull(dikeHeightOutput); + Assert.IsFalse(double.IsNaN(dikeHeightOutput.Result)); + mocks.VerifyAll(); + } + + [Test] [TestCase(OvertoppingRateCalculationType.CalculateByAssessmentSectionNorm)] [TestCase(OvertoppingRateCalculationType.CalculateByProfileSpecificRequiredProbability)] public void Run_InvalidOvertoppingRateCalculation_PerformValidationAndCalculationAndLogStartAndEndWithError( @@ -405,7 +540,7 @@ [Test] [TestCase(OvertoppingRateCalculationType.CalculateByAssessmentSectionNorm)] [TestCase(OvertoppingRateCalculationType.CalculateByProfileSpecificRequiredProbability)] - public void Run_ValidDikeHeightCalculation_PerformValidationAndCalculationAndLogStartAndEndError(OvertoppingRateCalculationType overtoppingRateCalculationType) + public void Run_ValidOvertoppingRateCalculation_PerformValidationAndCalculationAndLogStartAndEndError(OvertoppingRateCalculationType overtoppingRateCalculationType) { // Setup var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike) @@ -457,71 +592,10 @@ } [Test] - [Combinatorial] - public void Run_CombinationOfCalculations_ProgressTextSetAccordingly([Values(DikeHeightCalculationType.CalculateByAssessmentSectionNorm, - DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability, - DikeHeightCalculationType.NoCalculation)] DikeHeightCalculationType dikeHeightCalculationType, - [Values(OvertoppingRateCalculationType.CalculateByAssessmentSectionNorm, - OvertoppingRateCalculationType.CalculateByProfileSpecificRequiredProbability, - OvertoppingRateCalculationType.NoCalculation)] OvertoppingRateCalculationType overtoppingRateCalculationType) + [TestCase(OvertoppingRateCalculationType.CalculateByAssessmentSectionNorm)] + [TestCase(OvertoppingRateCalculationType.CalculateByProfileSpecificRequiredProbability)] + public void Finish_InvalidOvertoppingRateCalculation_OutputSetAndObserversNotified(OvertoppingRateCalculationType overtoppingRateCalculationType) { - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); - ImportHydraulicBoundaryDatabase(assessmentSection); - AddSectionToAssessmentSection(assessmentSection); - - var calculation = new GrassCoverErosionInwardsCalculation - { - InputParameters = - { - HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), - DikeProfile = CreateDikeProfile(), - DikeHeightCalculationType = dikeHeightCalculationType, - OvertoppingRateCalculationType = overtoppingRateCalculationType - } - }; - - var activity = new GrassCoverErosionInwardsCalculationActivity(calculation, validFile, assessmentSection.GrassCoverErosionInwards, assessmentSection); - - var progressTexts = ""; - - activity.ProgressChanged += (s, e) => progressTexts += activity.ProgressText + Environment.NewLine; - - using (new HydraRingCalculatorFactoryConfig()) - { - // Call - activity.Run(); - } - - // Assert - int totalNumberOfCalculations = dikeHeightCalculationType != DikeHeightCalculationType.NoCalculation - ? overtoppingRateCalculationType != OvertoppingRateCalculationType.NoCalculation - ? 3 - : 2 - : overtoppingRateCalculationType != OvertoppingRateCalculationType.NoCalculation - ? 2 - : 1; - - string expectedProgressTexts = $"Stap 1 van {totalNumberOfCalculations} | Uitvoeren overloop en overslag berekening" + Environment.NewLine; - - if (dikeHeightCalculationType != DikeHeightCalculationType.NoCalculation) - { - expectedProgressTexts += $"Stap 2 van {totalNumberOfCalculations} | Uitvoeren HBN berekening" + Environment.NewLine; - } - - if (overtoppingRateCalculationType != OvertoppingRateCalculationType.NoCalculation) - { - expectedProgressTexts += $"Stap {totalNumberOfCalculations} van {totalNumberOfCalculations} | Uitvoeren overslagdebiet berekening" + Environment.NewLine; - } - - Assert.AreEqual(expectedProgressTexts, progressTexts); - } - - [Test] - [TestCase(DikeHeightCalculationType.NoCalculation, TestName = "Finish_InvalidCalculationAndRan_DoesNotSetOutputAndNotifyObservers(false)")] - [TestCase(DikeHeightCalculationType.CalculateByAssessmentSectionNorm, TestName = "Finish_InvalidCalculationAndRan_DoesNotSetOutputAndNotifyObservers(assessmentSectionNorm)")] - [TestCase(DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability, TestName = "Finish_InvalidCalculationAndRan_DoesNotSetOutputAndNotifyObservers(ProfileProbability)")] - public void Finish_InvalidGrassCoverErosionInwardsCalculationAndRan_DoesNotSetOutputAndNotifyObservers(DikeHeightCalculationType calculateDikeHeight) - { // Setup var mocks = new MockRepository(); var observerMock = mocks.StrictMock(); @@ -536,8 +610,9 @@ { InputParameters = { - HydraulicBoundaryLocation = new HydraulicBoundaryLocation(1, "test", 1, 1), - DikeHeightCalculationType = calculateDikeHeight + HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), + DikeProfile = CreateDikeProfile(), + OvertoppingRateCalculationType = overtoppingRateCalculationType } }; @@ -547,7 +622,8 @@ using (new HydraRingCalculatorFactoryConfig()) { - TestOvertoppingCalculator calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).OvertoppingCalculator; + TestHydraulicLoadsCalculator calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).OvertoppingRateCalculator; + calculator.Value = double.NaN; calculator.EndInFailure = true; activity.Run(); @@ -557,14 +633,15 @@ activity.Finish(); // Assert - Assert.IsNull(calculation.Output); + Assert.IsNotNull(calculation.Output); + Assert.IsNull(calculation.Output.DikeHeightOutput); mocks.VerifyAll(); } [Test] - [TestCase(DikeHeightCalculationType.CalculateByAssessmentSectionNorm, TestName = "Finish_CalculateDikeHeightValidCalculationsRan_OutputSetObserversNotified(AssessmentSectionNorm)")] - [TestCase(DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability, TestName = "Finish_CalculateDikeHeightValidCalculationsRan_OutputSetObserversNotified(ProfileProbability)")] - public void Finish_CalculateDikeHeightAndValidCalculationsAndRan_OutputSetAndObserversNotified(DikeHeightCalculationType dikeHeightCalculationType) + [TestCase(OvertoppingRateCalculationType.CalculateByAssessmentSectionNorm)] + [TestCase(OvertoppingRateCalculationType.CalculateByProfileSpecificRequiredProbability)] + public void Finish_ValidOvertoppingRateCalculation_OutputSetAndObserversNotified(OvertoppingRateCalculationType overtoppingRateCalculationType) { // Setup var mocks = new MockRepository(); @@ -582,7 +659,7 @@ { HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), DikeProfile = CreateDikeProfile(), - DikeHeightCalculationType = dikeHeightCalculationType + OvertoppingRateCalculationType = overtoppingRateCalculationType } }; @@ -602,23 +679,21 @@ Assert.IsNotNull(calculation.Output); ProbabilityAssessmentOutput probabilisticAssessmentOutput = calculation.Output.ProbabilityAssessmentOutput; Assert.IsFalse(double.IsNaN(probabilisticAssessmentOutput.Reliability)); - HydraulicLoadsOutput dikeHeightOutput = calculation.Output.DikeHeightOutput; - Assert.IsNotNull(dikeHeightOutput); - Assert.IsFalse(double.IsNaN(dikeHeightOutput.Result)); + HydraulicLoadsOutput overtoppingRateOutput = calculation.Output.OvertoppingRateOutput; + Assert.IsNotNull(overtoppingRateOutput); + Assert.IsFalse(double.IsNaN(overtoppingRateOutput.Result)); mocks.VerifyAll(); } [Test] - [TestCase(DikeHeightCalculationType.CalculateByAssessmentSectionNorm, TestName = "Finish_CalculateInvalidDikeHeightCalculationRan_OutputSetObserversNotified(AssessmentSectionNorm)")] - [TestCase(DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability, TestName = "Finish_CalculateInvalidDikeHeightCalculationRan_OutputSetObserversNotified(ProfileProbability)")] - public void Finish_CalculateDikeHeightAndInvalidDikeHeightCalculationAndRan_OutputSetAndObserversNotified(DikeHeightCalculationType dikeHeightCalculationType) + [Combinatorial] + public void Run_CombinationOfCalculations_ProgressTextSetAccordingly([Values(DikeHeightCalculationType.CalculateByAssessmentSectionNorm, + DikeHeightCalculationType.CalculateByProfileSpecificRequiredProbability, + DikeHeightCalculationType.NoCalculation)] DikeHeightCalculationType dikeHeightCalculationType, + [Values(OvertoppingRateCalculationType.CalculateByAssessmentSectionNorm, + OvertoppingRateCalculationType.CalculateByProfileSpecificRequiredProbability, + OvertoppingRateCalculationType.NoCalculation)] OvertoppingRateCalculationType overtoppingRateCalculationType) { - // Setup - var mocks = new MockRepository(); - var observerMock = mocks.StrictMock(); - observerMock.Expect(o => o.UpdateObserver()); - mocks.ReplayAll(); - var assessmentSection = new AssessmentSection(AssessmentSectionComposition.Dike); ImportHydraulicBoundaryDatabase(assessmentSection); AddSectionToAssessmentSection(assessmentSection); @@ -629,30 +704,45 @@ { HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), DikeProfile = CreateDikeProfile(), - DikeHeightCalculationType = dikeHeightCalculationType + DikeHeightCalculationType = dikeHeightCalculationType, + OvertoppingRateCalculationType = overtoppingRateCalculationType } }; - calculation.Attach(observerMock); - var activity = new GrassCoverErosionInwardsCalculationActivity(calculation, validFile, assessmentSection.GrassCoverErosionInwards, assessmentSection); + var progressTexts = ""; + + activity.ProgressChanged += (s, e) => progressTexts += activity.ProgressText + Environment.NewLine; + using (new HydraRingCalculatorFactoryConfig()) { - TestHydraulicLoadsCalculator calculator = ((TestHydraRingCalculatorFactory) HydraRingCalculatorFactory.Instance).DikeHeightCalculator; - calculator.Value = double.NaN; - calculator.EndInFailure = true; - + // Call activity.Run(); } - // Call - activity.Finish(); - // Assert - Assert.IsNotNull(calculation.Output); - Assert.IsNull(calculation.Output.DikeHeightOutput); - mocks.VerifyAll(); + int totalNumberOfCalculations = dikeHeightCalculationType != DikeHeightCalculationType.NoCalculation + ? overtoppingRateCalculationType != OvertoppingRateCalculationType.NoCalculation + ? 3 + : 2 + : overtoppingRateCalculationType != OvertoppingRateCalculationType.NoCalculation + ? 2 + : 1; + + string expectedProgressTexts = $"Stap 1 van {totalNumberOfCalculations} | Uitvoeren overloop en overslag berekening" + Environment.NewLine; + + if (dikeHeightCalculationType != DikeHeightCalculationType.NoCalculation) + { + expectedProgressTexts += $"Stap 2 van {totalNumberOfCalculations} | Uitvoeren HBN berekening" + Environment.NewLine; + } + + if (overtoppingRateCalculationType != OvertoppingRateCalculationType.NoCalculation) + { + expectedProgressTexts += $"Stap {totalNumberOfCalculations} van {totalNumberOfCalculations} | Uitvoeren overslagdebiet berekening" + Environment.NewLine; + } + + Assert.AreEqual(expectedProgressTexts, progressTexts); } [Test]