Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresCalculationServiceTest.cs =================================================================== diff -u -r7371a70ed0751d341d41a7b951b780d286f83791 -ra67cd2ba1d6b4b5221732efb5203c4b6bda29e5b --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresCalculationServiceTest.cs (.../StabilityPointStructuresCalculationServiceTest.cs) (revision 7371a70ed0751d341d41a7b951b780d286f83791) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Service.Test/StabilityPointStructuresCalculationServiceTest.cs (.../StabilityPointStructuresCalculationServiceTest.cs) (revision a67cd2ba1d6b4b5221732efb5203c4b6bda29e5b) @@ -632,10 +632,9 @@ } [Test] - [TestCase(true, false)] - [TestCase(true, true)] - [TestCase(false, false)] - public void Calculate_VariousLowSillLinearCalculations_InputPropertiesCorrectlySentToCalculator(bool useForeshore, bool useBreakWater) + [TestCase(true)] + [TestCase(false)] + public void Calculate_VariousLowSillLinearCalculationsWithoutBreakWater_InputPropertiesCorrectlySentToCalculator(bool useForeshore) { // Setup var failureMechanism = new StabilityPointStructuresFailureMechanism(); @@ -661,7 +660,7 @@ if (useForeshore) { - calculation.InputParameters.ForeshoreProfile = new TestForeshoreProfile(useBreakWater); + calculation.InputParameters.ForeshoreProfile = new TestForeshoreProfile(); } using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) @@ -684,7 +683,7 @@ 1300001, input.StructureNormalOrientation, useForeshore ? input.ForeshoreGeometry.Select(c => new HydraRingForelandPoint(c.X, c.Y)) : new HydraRingForelandPoint[0], - useBreakWater ? new HydraRingBreakWater((int) input.BreakWater.Type, input.BreakWater.Height) : null, + null, input.VolumicWeightWater, generalInput.GravitationalAcceleration, input.LevelCrestStructure.Mean, @@ -753,10 +752,10 @@ } [Test] - [TestCase(true, false)] - [TestCase(true, true)] - [TestCase(false, false)] - public void Calculate_VariousLowSillQuadraticCalculations_InputPropertiesCorrectlySentToCalculator(bool useForeshore, bool useBreakWater) + [TestCase(BreakWaterType.Caisson)] + [TestCase(BreakWaterType.Wall)] + [TestCase(BreakWaterType.Dam)] + public void Calculate_VariousLowSillLinearCalculationsWithBreakWater_InputPropertiesCorrectlySentToCalculator(BreakWaterType breakWaterType) { // Setup var failureMechanism = new StabilityPointStructuresFailureMechanism(); @@ -776,13 +775,135 @@ { HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), InflowModelType = StabilityPointStructureInflowModelType.LowSill, + LoadSchematizationType = LoadSchematizationType.Linear, + ForeshoreProfile = new TestForeshoreProfile(true) + { + BreakWater = + { + Type = breakWaterType + } + } + } + }; + + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + new StabilityPointStructuresCalculationService().Calculate(calculation, + failureMechanism.GeneralInput, + failureMechanism.GeneralInput.N, + assessmentSection.FailureMechanismContribution.Norm, + failureMechanism.Contribution, + validFilePath); + + // Assert + StructuresStabilityPointCalculationInput[] calculationInputs = calculator.ReceivedInputs.ToArray(); + Assert.AreEqual(1, calculationInputs.Length); + + GeneralStabilityPointStructuresInput generalInput = failureMechanism.GeneralInput; + StabilityPointStructuresInput input = calculation.InputParameters; + var expectedInput = new StructuresStabilityPointLowSillLinearCalculationInput( + 1300001, + input.StructureNormalOrientation, + input.ForeshoreGeometry.Select(c => new HydraRingForelandPoint(c.X, c.Y)), + new HydraRingBreakWater(BreakWaterTypeHelper.GetHydraRingBreakWaterType(breakWaterType), input.BreakWater.Height), + input.VolumicWeightWater, + generalInput.GravitationalAcceleration, + input.LevelCrestStructure.Mean, + input.LevelCrestStructure.StandardDeviation, + input.StructureNormalOrientation, + input.FactorStormDurationOpenStructure, + generalInput.ModelFactorSubCriticalFlow.Mean, + generalInput.ModelFactorSubCriticalFlow.CoefficientOfVariation, + input.ThresholdHeightOpenWeir.Mean, + input.ThresholdHeightOpenWeir.StandardDeviation, + input.InsideWaterLevelFailureConstruction.Mean, + input.InsideWaterLevelFailureConstruction.StandardDeviation, + input.FailureProbabilityRepairClosure, + input.FailureCollisionEnergy.Mean, + input.FailureCollisionEnergy.CoefficientOfVariation, + generalInput.ModelFactorCollisionLoad.Mean, + generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, + input.ShipMass.Mean, + input.ShipMass.CoefficientOfVariation, + input.ShipVelocity.Mean, + input.ShipVelocity.CoefficientOfVariation, + input.LevellingCount, + input.ProbabilityCollisionSecondaryStructure, + input.FlowVelocityStructureClosable.Mean, + input.FlowVelocityStructureClosable.CoefficientOfVariation, + input.InsideWaterLevel.Mean, + input.InsideWaterLevel.StandardDeviation, + input.AllowedLevelIncreaseStorage.Mean, + input.AllowedLevelIncreaseStorage.StandardDeviation, + generalInput.ModelFactorStorageVolume.Mean, + generalInput.ModelFactorStorageVolume.StandardDeviation, + input.StorageStructureArea.Mean, + input.StorageStructureArea.CoefficientOfVariation, + generalInput.ModelFactorInflowVolume, + input.FlowWidthAtBottomProtection.Mean, + input.FlowWidthAtBottomProtection.StandardDeviation, + input.CriticalOvertoppingDischarge.Mean, + input.CriticalOvertoppingDischarge.CoefficientOfVariation, + input.FailureProbabilityStructureWithErosion, + input.StormDuration.Mean, + input.StormDuration.CoefficientOfVariation, + input.BankWidth.Mean, + input.BankWidth.StandardDeviation, + input.EvaluationLevel, + generalInput.ModelFactorLoadEffect.Mean, + generalInput.ModelFactorLoadEffect.StandardDeviation, + generalInput.WaveRatioMaxHN, + generalInput.WaveRatioMaxHStandardDeviation, + input.VerticalDistance, + generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, + generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, + input.ModelFactorSuperCriticalFlow.Mean, + input.ModelFactorSuperCriticalFlow.StandardDeviation, + input.ConstructiveStrengthLinearLoadModel.Mean, + input.ConstructiveStrengthLinearLoadModel.CoefficientOfVariation, + input.StabilityLinearLoadModel.Mean, + input.StabilityLinearLoadModel.CoefficientOfVariation, + input.WidthFlowApertures.Mean, + input.WidthFlowApertures.StandardDeviation); + + var actualInput = (StructuresStabilityPointLowSillLinearCalculationInput) calculationInputs[0]; + HydraRingDataEqualityHelper.AreEqual(expectedInput, actualInput); + Assert.IsFalse(calculator.IsCanceled); + } + mockRepository.VerifyAll(); + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void Calculate_VariousLowSillQuadraticCalculationsWithoutBreakWater_InputPropertiesCorrectlySentToCalculator(bool useForeshore) + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mockRepository); + + var calculator = new TestStructuresCalculator(); + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateStructuresCalculator(testDataPath)) + .Return(calculator); + mockRepository.ReplayAll(); + + var calculation = new TestStabilityPointStructuresCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), + InflowModelType = StabilityPointStructureInflowModelType.LowSill, LoadSchematizationType = LoadSchematizationType.Quadratic } }; if (useForeshore) { - calculation.InputParameters.ForeshoreProfile = new TestForeshoreProfile(useBreakWater); + calculation.InputParameters.ForeshoreProfile = new TestForeshoreProfile(); } using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) @@ -805,7 +926,7 @@ 1300001, input.StructureNormalOrientation, useForeshore ? input.ForeshoreGeometry.Select(c => new HydraRingForelandPoint(c.X, c.Y)) : new HydraRingForelandPoint[0], - useBreakWater ? new HydraRingBreakWater((int) input.BreakWater.Type, input.BreakWater.Height) : null, + null, input.VolumicWeightWater, generalInput.GravitationalAcceleration, input.LevelCrestStructure.Mean, @@ -874,10 +995,10 @@ } [Test] - [TestCase(true, false)] - [TestCase(true, true)] - [TestCase(false, false)] - public void Calculate_VariousFloodedCulvertLinearCalculations_InputPropertiesCorrectlySentToCalculator(bool useForeshore, bool useBreakWater) + [TestCase(BreakWaterType.Caisson)] + [TestCase(BreakWaterType.Wall)] + [TestCase(BreakWaterType.Dam)] + public void Calculate_VariousLowSillQuadraticCalculationsWithBreakWater_InputPropertiesCorrectlySentToCalculator(BreakWaterType breakWaterType) { // Setup var failureMechanism = new StabilityPointStructuresFailureMechanism(); @@ -896,14 +1017,136 @@ InputParameters = { HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), + InflowModelType = StabilityPointStructureInflowModelType.LowSill, + LoadSchematizationType = LoadSchematizationType.Quadratic, + ForeshoreProfile = new TestForeshoreProfile(true) + { + BreakWater = + { + Type = breakWaterType + } + } + } + }; + + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + new StabilityPointStructuresCalculationService().Calculate(calculation, + failureMechanism.GeneralInput, + failureMechanism.GeneralInput.N, + assessmentSection.FailureMechanismContribution.Norm, + failureMechanism.Contribution, + validFilePath); + + // Assert + StructuresStabilityPointCalculationInput[] calculationInputs = calculator.ReceivedInputs.ToArray(); + Assert.AreEqual(1, calculationInputs.Length); + + GeneralStabilityPointStructuresInput generalInput = failureMechanism.GeneralInput; + StabilityPointStructuresInput input = calculation.InputParameters; + var expectedInput = new StructuresStabilityPointLowSillQuadraticCalculationInput( + 1300001, + input.StructureNormalOrientation, + input.ForeshoreGeometry.Select(c => new HydraRingForelandPoint(c.X, c.Y)), + new HydraRingBreakWater(BreakWaterTypeHelper.GetHydraRingBreakWaterType(breakWaterType), input.BreakWater.Height), + input.VolumicWeightWater, + generalInput.GravitationalAcceleration, + input.LevelCrestStructure.Mean, + input.LevelCrestStructure.StandardDeviation, + input.StructureNormalOrientation, + input.FactorStormDurationOpenStructure, + generalInput.ModelFactorSubCriticalFlow.Mean, + generalInput.ModelFactorSubCriticalFlow.CoefficientOfVariation, + input.ThresholdHeightOpenWeir.Mean, + input.ThresholdHeightOpenWeir.StandardDeviation, + input.InsideWaterLevelFailureConstruction.Mean, + input.InsideWaterLevelFailureConstruction.StandardDeviation, + input.FailureProbabilityRepairClosure, + input.FailureCollisionEnergy.Mean, + input.FailureCollisionEnergy.CoefficientOfVariation, + generalInput.ModelFactorCollisionLoad.Mean, + generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, + input.ShipMass.Mean, + input.ShipMass.CoefficientOfVariation, + input.ShipVelocity.Mean, + input.ShipVelocity.CoefficientOfVariation, + input.LevellingCount, + input.ProbabilityCollisionSecondaryStructure, + input.FlowVelocityStructureClosable.Mean, + input.FlowVelocityStructureClosable.CoefficientOfVariation, + input.InsideWaterLevel.Mean, + input.InsideWaterLevel.StandardDeviation, + input.AllowedLevelIncreaseStorage.Mean, + input.AllowedLevelIncreaseStorage.StandardDeviation, + generalInput.ModelFactorStorageVolume.Mean, + generalInput.ModelFactorStorageVolume.StandardDeviation, + input.StorageStructureArea.Mean, + input.StorageStructureArea.CoefficientOfVariation, + generalInput.ModelFactorInflowVolume, + input.FlowWidthAtBottomProtection.Mean, + input.FlowWidthAtBottomProtection.StandardDeviation, + input.CriticalOvertoppingDischarge.Mean, + input.CriticalOvertoppingDischarge.CoefficientOfVariation, + input.FailureProbabilityStructureWithErosion, + input.StormDuration.Mean, + input.StormDuration.CoefficientOfVariation, + input.BankWidth.Mean, + input.BankWidth.StandardDeviation, + input.EvaluationLevel, + generalInput.ModelFactorLoadEffect.Mean, + generalInput.ModelFactorLoadEffect.StandardDeviation, + generalInput.WaveRatioMaxHN, + generalInput.WaveRatioMaxHStandardDeviation, + input.VerticalDistance, + generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, + generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, + input.ModelFactorSuperCriticalFlow.Mean, + input.ModelFactorSuperCriticalFlow.StandardDeviation, + input.ConstructiveStrengthQuadraticLoadModel.Mean, + input.ConstructiveStrengthQuadraticLoadModel.CoefficientOfVariation, + input.StabilityQuadraticLoadModel.Mean, + input.StabilityQuadraticLoadModel.CoefficientOfVariation, + input.WidthFlowApertures.Mean, + input.WidthFlowApertures.StandardDeviation); + + var actualInput = (StructuresStabilityPointLowSillQuadraticCalculationInput) calculationInputs[0]; + HydraRingDataEqualityHelper.AreEqual(expectedInput, actualInput); + Assert.IsFalse(calculator.IsCanceled); + } + mockRepository.VerifyAll(); + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void Calculate_VariousFloodedCulvertLinearCalculationsWithoutBreakWater_InputPropertiesCorrectlySentToCalculator(bool useForeshore) + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mockRepository); + + var calculator = new TestStructuresCalculator(); + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateStructuresCalculator(testDataPath)) + .Return(calculator); + mockRepository.ReplayAll(); + + var calculation = new TestStabilityPointStructuresCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), InflowModelType = StabilityPointStructureInflowModelType.FloodedCulvert, LoadSchematizationType = LoadSchematizationType.Linear } }; if (useForeshore) { - calculation.InputParameters.ForeshoreProfile = new TestForeshoreProfile(useBreakWater); + calculation.InputParameters.ForeshoreProfile = new TestForeshoreProfile(); } using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) @@ -926,7 +1169,7 @@ 1300001, input.StructureNormalOrientation, useForeshore ? input.ForeshoreGeometry.Select(c => new HydraRingForelandPoint(c.X, c.Y)) : new HydraRingForelandPoint[0], - useBreakWater ? new HydraRingBreakWater((int) input.BreakWater.Type, input.BreakWater.Height) : null, + null, input.VolumicWeightWater, generalInput.GravitationalAcceleration, input.LevelCrestStructure.Mean, @@ -995,10 +1238,10 @@ } [Test] - [TestCase(true, false)] - [TestCase(true, true)] - [TestCase(false, false)] - public void Calculate_VariousFloodedCulvertQuadraticCalculations_InputPropertiesCorrectlySentToCalculator(bool useForeshore, bool useBreakWater) + [TestCase(BreakWaterType.Caisson)] + [TestCase(BreakWaterType.Wall)] + [TestCase(BreakWaterType.Dam)] + public void Calculate_VariousFloodedCulvertLinearCalculationsWithBreakWater_InputPropertiesCorrectlySentToCalculator(BreakWaterType breakWaterType) { // Setup var failureMechanism = new StabilityPointStructuresFailureMechanism(); @@ -1018,13 +1261,135 @@ { HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), InflowModelType = StabilityPointStructureInflowModelType.FloodedCulvert, + LoadSchematizationType = LoadSchematizationType.Linear, + ForeshoreProfile = new TestForeshoreProfile(true) + { + BreakWater = + { + Type = breakWaterType + } + } + } + }; + + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + new StabilityPointStructuresCalculationService().Calculate(calculation, + failureMechanism.GeneralInput, + failureMechanism.GeneralInput.N, + assessmentSection.FailureMechanismContribution.Norm, + failureMechanism.Contribution, + validFilePath); + + // Assert + StructuresStabilityPointCalculationInput[] calculationInputs = calculator.ReceivedInputs.ToArray(); + Assert.AreEqual(1, calculationInputs.Length); + + GeneralStabilityPointStructuresInput generalInput = failureMechanism.GeneralInput; + StabilityPointStructuresInput input = calculation.InputParameters; + var expectedInput = new StructuresStabilityPointFloodedCulvertLinearCalculationInput( + 1300001, + input.StructureNormalOrientation, + input.ForeshoreGeometry.Select(c => new HydraRingForelandPoint(c.X, c.Y)), + new HydraRingBreakWater(BreakWaterTypeHelper.GetHydraRingBreakWaterType(breakWaterType), input.BreakWater.Height), + input.VolumicWeightWater, + generalInput.GravitationalAcceleration, + input.LevelCrestStructure.Mean, + input.LevelCrestStructure.StandardDeviation, + input.StructureNormalOrientation, + input.FactorStormDurationOpenStructure, + generalInput.ModelFactorSubCriticalFlow.Mean, + generalInput.ModelFactorSubCriticalFlow.CoefficientOfVariation, + input.ThresholdHeightOpenWeir.Mean, + input.ThresholdHeightOpenWeir.StandardDeviation, + input.InsideWaterLevelFailureConstruction.Mean, + input.InsideWaterLevelFailureConstruction.StandardDeviation, + input.FailureProbabilityRepairClosure, + input.FailureCollisionEnergy.Mean, + input.FailureCollisionEnergy.CoefficientOfVariation, + generalInput.ModelFactorCollisionLoad.Mean, + generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, + input.ShipMass.Mean, + input.ShipMass.CoefficientOfVariation, + input.ShipVelocity.Mean, + input.ShipVelocity.CoefficientOfVariation, + input.LevellingCount, + input.ProbabilityCollisionSecondaryStructure, + input.FlowVelocityStructureClosable.Mean, + input.FlowVelocityStructureClosable.CoefficientOfVariation, + input.InsideWaterLevel.Mean, + input.InsideWaterLevel.StandardDeviation, + input.AllowedLevelIncreaseStorage.Mean, + input.AllowedLevelIncreaseStorage.StandardDeviation, + generalInput.ModelFactorStorageVolume.Mean, + generalInput.ModelFactorStorageVolume.StandardDeviation, + input.StorageStructureArea.Mean, + input.StorageStructureArea.CoefficientOfVariation, + generalInput.ModelFactorInflowVolume, + input.FlowWidthAtBottomProtection.Mean, + input.FlowWidthAtBottomProtection.StandardDeviation, + input.CriticalOvertoppingDischarge.Mean, + input.CriticalOvertoppingDischarge.CoefficientOfVariation, + input.FailureProbabilityStructureWithErosion, + input.StormDuration.Mean, + input.StormDuration.CoefficientOfVariation, + input.BankWidth.Mean, + input.BankWidth.StandardDeviation, + input.EvaluationLevel, + generalInput.ModelFactorLoadEffect.Mean, + generalInput.ModelFactorLoadEffect.StandardDeviation, + generalInput.WaveRatioMaxHN, + generalInput.WaveRatioMaxHStandardDeviation, + input.VerticalDistance, + generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, + generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, + input.DrainCoefficient.Mean, + input.DrainCoefficient.StandardDeviation, + input.AreaFlowApertures.Mean, + input.AreaFlowApertures.StandardDeviation, + input.ConstructiveStrengthLinearLoadModel.Mean, + input.ConstructiveStrengthLinearLoadModel.CoefficientOfVariation, + input.StabilityLinearLoadModel.Mean, + input.StabilityLinearLoadModel.CoefficientOfVariation); + + var actualInput = (StructuresStabilityPointFloodedCulvertLinearCalculationInput) calculationInputs[0]; + HydraRingDataEqualityHelper.AreEqual(expectedInput, actualInput); + Assert.IsFalse(calculator.IsCanceled); + } + mockRepository.VerifyAll(); + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void Calculate_VariousFloodedCulvertQuadraticCalculationsWithoutBreakWater_InputPropertiesCorrectlySentToCalculator(bool useForeshore) + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mockRepository); + + var calculator = new TestStructuresCalculator(); + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateStructuresCalculator(testDataPath)) + .Return(calculator); + mockRepository.ReplayAll(); + + var calculation = new TestStabilityPointStructuresCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), + InflowModelType = StabilityPointStructureInflowModelType.FloodedCulvert, LoadSchematizationType = LoadSchematizationType.Quadratic } }; if (useForeshore) { - calculation.InputParameters.ForeshoreProfile = new TestForeshoreProfile(useBreakWater); + calculation.InputParameters.ForeshoreProfile = new TestForeshoreProfile(); } using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) @@ -1047,7 +1412,7 @@ 1300001, input.StructureNormalOrientation, useForeshore ? input.ForeshoreGeometry.Select(c => new HydraRingForelandPoint(c.X, c.Y)) : new HydraRingForelandPoint[0], - useBreakWater ? new HydraRingBreakWater((int) input.BreakWater.Type, input.BreakWater.Height) : null, + null, input.VolumicWeightWater, generalInput.GravitationalAcceleration, input.LevelCrestStructure.Mean, @@ -1116,6 +1481,129 @@ } [Test] + [TestCase(BreakWaterType.Caisson)] + [TestCase(BreakWaterType.Wall)] + [TestCase(BreakWaterType.Dam)] + public void Calculate_VariousFloodedCulvertQuadraticCalculationsWithBreakWater_InputPropertiesCorrectlySentToCalculator(BreakWaterType breakWaterType) + { + // Setup + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + var mockRepository = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionHelper.CreateAssessmentSectionStub(failureMechanism, mockRepository); + + var calculator = new TestStructuresCalculator(); + var calculatorFactory = mockRepository.StrictMock(); + calculatorFactory.Expect(cf => cf.CreateStructuresCalculator(testDataPath)) + .Return(calculator); + mockRepository.ReplayAll(); + + var calculation = new TestStabilityPointStructuresCalculation + { + InputParameters = + { + HydraulicBoundaryLocation = assessmentSection.HydraulicBoundaryDatabase.Locations.First(hl => hl.Id == 1300001), + InflowModelType = StabilityPointStructureInflowModelType.FloodedCulvert, + LoadSchematizationType = LoadSchematizationType.Quadratic, + ForeshoreProfile = new TestForeshoreProfile(true) + { + BreakWater = + { + Type = breakWaterType + } + } + } + }; + + using (new HydraRingCalculatorFactoryConfig(calculatorFactory)) + { + // Call + new StabilityPointStructuresCalculationService().Calculate(calculation, + failureMechanism.GeneralInput, + failureMechanism.GeneralInput.N, + assessmentSection.FailureMechanismContribution.Norm, + failureMechanism.Contribution, + validFilePath); + + // Assert + StructuresStabilityPointCalculationInput[] calculationInputs = calculator.ReceivedInputs.ToArray(); + Assert.AreEqual(1, calculationInputs.Length); + + GeneralStabilityPointStructuresInput generalInput = failureMechanism.GeneralInput; + StabilityPointStructuresInput input = calculation.InputParameters; + var expectedInput = new StructuresStabilityPointFloodedCulvertQuadraticCalculationInput( + 1300001, + input.StructureNormalOrientation, + input.ForeshoreGeometry.Select(c => new HydraRingForelandPoint(c.X, c.Y)), + new HydraRingBreakWater(BreakWaterTypeHelper.GetHydraRingBreakWaterType(breakWaterType), input.BreakWater.Height), + input.VolumicWeightWater, + generalInput.GravitationalAcceleration, + input.LevelCrestStructure.Mean, + input.LevelCrestStructure.StandardDeviation, + input.StructureNormalOrientation, + input.FactorStormDurationOpenStructure, + generalInput.ModelFactorSubCriticalFlow.Mean, + generalInput.ModelFactorSubCriticalFlow.CoefficientOfVariation, + input.ThresholdHeightOpenWeir.Mean, + input.ThresholdHeightOpenWeir.StandardDeviation, + input.InsideWaterLevelFailureConstruction.Mean, + input.InsideWaterLevelFailureConstruction.StandardDeviation, + input.FailureProbabilityRepairClosure, + input.FailureCollisionEnergy.Mean, + input.FailureCollisionEnergy.CoefficientOfVariation, + generalInput.ModelFactorCollisionLoad.Mean, + generalInput.ModelFactorCollisionLoad.CoefficientOfVariation, + input.ShipMass.Mean, + input.ShipMass.CoefficientOfVariation, + input.ShipVelocity.Mean, + input.ShipVelocity.CoefficientOfVariation, + input.LevellingCount, + input.ProbabilityCollisionSecondaryStructure, + input.FlowVelocityStructureClosable.Mean, + input.FlowVelocityStructureClosable.CoefficientOfVariation, + input.InsideWaterLevel.Mean, + input.InsideWaterLevel.StandardDeviation, + input.AllowedLevelIncreaseStorage.Mean, + input.AllowedLevelIncreaseStorage.StandardDeviation, + generalInput.ModelFactorStorageVolume.Mean, + generalInput.ModelFactorStorageVolume.StandardDeviation, + input.StorageStructureArea.Mean, + input.StorageStructureArea.CoefficientOfVariation, + generalInput.ModelFactorInflowVolume, + input.FlowWidthAtBottomProtection.Mean, + input.FlowWidthAtBottomProtection.StandardDeviation, + input.CriticalOvertoppingDischarge.Mean, + input.CriticalOvertoppingDischarge.CoefficientOfVariation, + input.FailureProbabilityStructureWithErosion, + input.StormDuration.Mean, + input.StormDuration.CoefficientOfVariation, + input.BankWidth.Mean, + input.BankWidth.StandardDeviation, + input.EvaluationLevel, + generalInput.ModelFactorLoadEffect.Mean, + generalInput.ModelFactorLoadEffect.StandardDeviation, + generalInput.WaveRatioMaxHN, + generalInput.WaveRatioMaxHStandardDeviation, + input.VerticalDistance, + generalInput.ModificationFactorWavesSlowlyVaryingPressureComponent, + generalInput.ModificationFactorDynamicOrImpulsivePressureComponent, + input.DrainCoefficient.Mean, + input.DrainCoefficient.StandardDeviation, + input.AreaFlowApertures.Mean, + input.AreaFlowApertures.StandardDeviation, + input.ConstructiveStrengthQuadraticLoadModel.Mean, + input.ConstructiveStrengthQuadraticLoadModel.CoefficientOfVariation, + input.StabilityQuadraticLoadModel.Mean, + input.StabilityQuadraticLoadModel.CoefficientOfVariation); + + var actualInput = (StructuresStabilityPointFloodedCulvertQuadraticCalculationInput) calculationInputs[0]; + HydraRingDataEqualityHelper.AreEqual(expectedInput, actualInput); + Assert.IsFalse(calculator.IsCanceled); + } + mockRepository.VerifyAll(); + } + + [Test] [Combinatorial] public void Calculate_ValidCalculation_LogStartAndEndAndReturnOutput( [Values(StabilityPointStructureInflowModelType.FloodedCulvert, StabilityPointStructureInflowModelType.LowSill)] StabilityPointStructureInflowModelType inflowModelType,