Index: Riskeer/HeightStructures/src/Riskeer.HeightStructures.Forms/Views/HeightStructuresFailureMechanismSectionResultRow.cs =================================================================== diff -u -rb0d25d2dab3c6ba9b1aff684a0cf41f842e0ec29 -r93a989c300f9bb0738e712ef4941cec4ce0c2662 --- Riskeer/HeightStructures/src/Riskeer.HeightStructures.Forms/Views/HeightStructuresFailureMechanismSectionResultRow.cs (.../HeightStructuresFailureMechanismSectionResultRow.cs) (revision b0d25d2dab3c6ba9b1aff684a0cf41f842e0ec29) +++ Riskeer/HeightStructures/src/Riskeer.HeightStructures.Forms/Views/HeightStructuresFailureMechanismSectionResultRow.cs (.../HeightStructuresFailureMechanismSectionResultRow.cs) (revision 93a989c300f9bb0738e712ef4941cec4ce0c2662) @@ -52,10 +52,10 @@ private readonly int combinedAssemblyCategoryGroupIndex; private readonly int combinedAssemblyProbabilityIndex; private readonly int manualAssemblyProbabilityIndex; - - private IEnumerable> calculationScenarios; private readonly HeightStructuresFailureMechanism failureMechanism; private readonly IAssessmentSection assessmentSection; + + private readonly IEnumerable> calculationScenarios; private FailureMechanismSectionAssemblyCategoryGroup simpleAssemblyCategoryGroup; private FailureMechanismSectionAssemblyCategoryGroup detailedAssemblyCategoryGroup; private FailureMechanismSectionAssemblyCategoryGroup tailorMadeAssemblyCategoryGroup; @@ -267,9 +267,10 @@ } else { - ColumnStateDefinitions[detailedAssessmentProbabilityIndex].ErrorText = FailureMechanismSectionResultRowHelper.GetDetailedAssessmentError( - DetailedAssessmentProbability, - SectionResult.Calculation); + ColumnStateDefinitions[detailedAssessmentProbabilityIndex].ErrorText = FailureMechanismSectionResultRowHelper.GetDetailedAssessmentProbabilityError( + SectionResult.GetCalculationScenarios(calculationScenarios).ToArray(), + scenarios => SectionResult.GetTotalContribution(scenarios), + scenarios => SectionResult.GetDetailedAssessmentProbability(scenarios, failureMechanism, assessmentSection)); } } Index: Riskeer/HeightStructures/test/Riskeer.HeightStructures.Forms.Test/Views/HeightStructuresFailureMechanismSectionResultRowTest.cs =================================================================== diff -u -rb0d25d2dab3c6ba9b1aff684a0cf41f842e0ec29 -r93a989c300f9bb0738e712ef4941cec4ce0c2662 --- Riskeer/HeightStructures/test/Riskeer.HeightStructures.Forms.Test/Views/HeightStructuresFailureMechanismSectionResultRowTest.cs (.../HeightStructuresFailureMechanismSectionResultRowTest.cs) (revision b0d25d2dab3c6ba9b1aff684a0cf41f842e0ec29) +++ Riskeer/HeightStructures/test/Riskeer.HeightStructures.Forms.Test/Views/HeightStructuresFailureMechanismSectionResultRowTest.cs (.../HeightStructuresFailureMechanismSectionResultRowTest.cs) (revision 93a989c300f9bb0738e712ef4941cec4ce0c2662) @@ -24,6 +24,7 @@ using System.Drawing; using System.Linq; using Core.Common.Base; +using Core.Common.Base.Data; using Core.Common.Controls.DataGrid; using Core.Common.TestUtil; using NUnit.Framework; @@ -686,7 +687,7 @@ [Test] [TestCase(SimpleAssessmentResultType.None)] [TestCase(SimpleAssessmentResultType.AssessFurther)] - public void Constructor_SectionResultWithoutCalculation_DetailedAssessmentProbabilityHasErrorText( + public void Constructor_TotalContributionNotHundred_DetailedAssessmentProbabilityHasErrorText( SimpleAssessmentResultType simpleAssessmentResult) { // Setup @@ -696,21 +697,31 @@ IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(failureMechanism, mocks); mocks.ReplayAll(); - var sectionResult = new HeightStructuresFailureMechanismSectionResult(FailureMechanismSectionTestFactory.CreateFailureMechanismSection()) + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var sectionResult = new HeightStructuresFailureMechanismSectionResult(section) { SimpleAssessmentResult = simpleAssessmentResult }; + StructuresCalculationScenario calculation = HeightStructuresCalculationScenarioTestFactory.CreateHeightStructuresCalculationScenario(section); + calculation.Contribution = (RoundedDouble) 0.3; + using (new AssemblyToolCalculatorFactoryConfig()) { // Call var resultRow = new HeightStructuresFailureMechanismSectionResultRow( - sectionResult, Enumerable.Empty>(), - failureMechanism, assessmentSection, ConstructionProperties); + sectionResult, + new[] + { + calculation + }, + failureMechanism, + assessmentSection, + ConstructionProperties); // Assert Assert.IsNaN(resultRow.DetailedAssessmentProbability); - Assert.AreEqual("Er moet een maatgevende berekening voor dit vak worden geselecteerd.", + Assert.AreEqual("Bijdrage van de geselecteerde scenario's voor dit vak moet opgeteld gelijk zijn aan 100%.", resultRow.ColumnStateDefinitions[ConstructionProperties.DetailedAssessmentProbabilityIndex].ErrorText); mocks.VerifyAll(); } @@ -719,7 +730,7 @@ [Test] [TestCase(SimpleAssessmentResultType.None)] [TestCase(SimpleAssessmentResultType.AssessFurther)] - public void Constructor_SectionResultAndCalculationNotCalculated_DetailedAssessmentProbabilityHasErrorText( + public void Constructor_NoCalculatedScenario_DetailedAssessmentProbabilityHasErrorText( SimpleAssessmentResultType simpleAssessmentResult) { // Setup @@ -732,24 +743,69 @@ FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); var sectionResult = new HeightStructuresFailureMechanismSectionResult(section) { - Calculation = new TestHeightStructuresCalculationScenario(), SimpleAssessmentResult = simpleAssessmentResult }; - StructuresCalculationScenario[] calculationScenarios = + using (new AssemblyToolCalculatorFactoryConfig()) { - HeightStructuresCalculationScenarioTestFactory.CreateNotCalculatedHeightStructuresCalculationScenario(section) + // Call + var resultRow = new HeightStructuresFailureMechanismSectionResultRow( + sectionResult, + new[] + { + HeightStructuresCalculationScenarioTestFactory.CreateNotCalculatedHeightStructuresCalculationScenario(section) + }, + failureMechanism, + assessmentSection, + ConstructionProperties); + + // Assert + Assert.IsNaN(resultRow.DetailedAssessmentProbability); + Assert.AreEqual("Alle berekeningen voor dit vak moeten uitgevoerd zijn.", + resultRow.ColumnStateDefinitions[ConstructionProperties.DetailedAssessmentProbabilityIndex].ErrorText); + mocks.VerifyAll(); + } + } + + [Test] + [TestCase(SimpleAssessmentResultType.None)] + [TestCase(SimpleAssessmentResultType.AssessFurther)] + public void Constructor_DetailedAssessmentProbabilityNaN_DetailedAssessmentProbabilityHasErrorText( + SimpleAssessmentResultType simpleAssessmentResult) + { + // Setup + var failureMechanism = new HeightStructuresFailureMechanism(); + + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var sectionResult = new HeightStructuresFailureMechanismSectionResult(section) + { + SimpleAssessmentResult = simpleAssessmentResult }; + StructuresCalculationScenario calculationScenario = + HeightStructuresCalculationScenarioTestFactory.CreateNotCalculatedHeightStructuresCalculationScenario(section); + calculationScenario.Output = new TestStructuresOutput(double.NaN); + using (new AssemblyToolCalculatorFactoryConfig()) { // Call var resultRow = new HeightStructuresFailureMechanismSectionResultRow( - sectionResult, calculationScenarios, failureMechanism, assessmentSection, ConstructionProperties); + sectionResult, + new[] + { + calculationScenario + }, + failureMechanism, + assessmentSection, + ConstructionProperties); // Assert Assert.IsNaN(resultRow.DetailedAssessmentProbability); - Assert.AreEqual("De maatgevende berekening voor dit vak moet nog worden uitgevoerd.", + Assert.AreEqual("Alle berekeningen voor dit vak moeten een geldige uitkomst hebben.", resultRow.ColumnStateDefinitions[ConstructionProperties.DetailedAssessmentProbabilityIndex].ErrorText); mocks.VerifyAll(); } @@ -758,7 +814,7 @@ [Test] [TestCase(SimpleAssessmentResultType.None)] [TestCase(SimpleAssessmentResultType.AssessFurther)] - public void Constructor_SectionResultAndFailedCalculation_DetailedAssessmentProbabilityHasErrorText( + public void Constructor_NoCalculationScenarios_DetailedAssessmentProbabilityHasErrorText( SimpleAssessmentResultType simpleAssessmentResult) { // Setup @@ -768,19 +824,52 @@ IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(failureMechanism, mocks); mocks.ReplayAll(); - var calculation = new TestHeightStructuresCalculationScenario + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var sectionResult = new HeightStructuresFailureMechanismSectionResult(section) { - Output = new TestStructuresOutput(double.NaN) + SimpleAssessmentResult = simpleAssessmentResult }; + + using (new AssemblyToolCalculatorFactoryConfig()) + { + // Call + var resultRow = new HeightStructuresFailureMechanismSectionResultRow( + sectionResult, + Enumerable.Empty>(), + failureMechanism, + assessmentSection, + ConstructionProperties); + + // Assert + Assert.IsNaN(resultRow.DetailedAssessmentProbability); + Assert.AreEqual("Er moet minimaal één maatgevende berekening voor dit vak worden geselecteerd.", + resultRow.ColumnStateDefinitions[ConstructionProperties.DetailedAssessmentProbabilityIndex].ErrorText); + mocks.VerifyAll(); + } + } + + [Test] + [TestCase(SimpleAssessmentResultType.None)] + [TestCase(SimpleAssessmentResultType.AssessFurther)] + public void Constructor_NoCalculationScenariosRelevant_DetailedAssessmentProbabilityHasErrorText( + SimpleAssessmentResultType simpleAssessmentResult) + { + // Setup + var failureMechanism = new HeightStructuresFailureMechanism(); + + var mocks = new MockRepository(); + IAssessmentSection assessmentSection = AssessmentSectionTestHelper.CreateAssessmentSectionStub(failureMechanism, mocks); + mocks.ReplayAll(); + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); var sectionResult = new HeightStructuresFailureMechanismSectionResult(section) { - Calculation = calculation, SimpleAssessmentResult = simpleAssessmentResult }; - StructuresCalculationScenario calculationScenario = HeightStructuresCalculationScenarioTestFactory.CreateHeightStructuresCalculationScenario(section); - calculationScenario.Output = new TestStructuresOutput(double.NaN); + StructuresCalculationScenario calculationScenario = + HeightStructuresCalculationScenarioTestFactory.CreateNotCalculatedHeightStructuresCalculationScenario(section); + calculationScenario.IsRelevant = false; using (new AssemblyToolCalculatorFactoryConfig()) { @@ -797,7 +886,7 @@ // Assert Assert.IsNaN(resultRow.DetailedAssessmentProbability); - Assert.AreEqual("De maatgevende berekening voor dit vak moet een geldige uitkomst hebben.", + Assert.AreEqual("Er moet minimaal één maatgevende berekening voor dit vak worden geselecteerd.", resultRow.ColumnStateDefinitions[ConstructionProperties.DetailedAssessmentProbabilityIndex].ErrorText); mocks.VerifyAll(); } @@ -814,10 +903,7 @@ mocks.ReplayAll(); FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); - var sectionResult = new HeightStructuresFailureMechanismSectionResult(section) - { - Calculation = CreateCalculationWithOutput() - }; + var sectionResult = new HeightStructuresFailureMechanismSectionResult(section); StructuresCalculationScenario[] calculationScenarios = { @@ -850,7 +936,6 @@ FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); var sectionResult = new HeightStructuresFailureMechanismSectionResult(section) { - Calculation = new TestHeightStructuresCalculationScenario(), UseManualAssembly = true }; @@ -885,7 +970,6 @@ FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); var sectionResult = new HeightStructuresFailureMechanismSectionResult(section) { - Calculation = new TestHeightStructuresCalculationScenario(), DetailedAssessmentResult = DetailedAssessmentProbabilityOnlyResultType.NotAssessed };