Index: Riskeer/Piping/src/Riskeer.Piping.Data/PipingFailureMechanismAssemblyFactory.cs =================================================================== diff -u -r4b21a1267883d333d905785f2810d1a92fd2dcfe -rb185f0fdb272fefefc09eb908a75dd1290c6a743 --- Riskeer/Piping/src/Riskeer.Piping.Data/PipingFailureMechanismAssemblyFactory.cs (.../PipingFailureMechanismAssemblyFactory.cs) (revision 4b21a1267883d333d905785f2810d1a92fd2dcfe) +++ Riskeer/Piping/src/Riskeer.Piping.Data/PipingFailureMechanismAssemblyFactory.cs (.../PipingFailureMechanismAssemblyFactory.cs) (revision b185f0fdb272fefefc09eb908a75dd1290c6a743) @@ -67,8 +67,7 @@ failureMechanism.GetScenarioConfigurationForSection(sectionResult); IFailureMechanismSectionResultCalculateProbabilityStrategy calculateProbabilityStrategy = - PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.CreateCalculateStrategy( - failureMechanism, sectionResult, scenarioConfigurationForSection, assessmentSection); + PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.CreateCalculateStrategy(sectionResult, scenarioConfigurationForSection, failureMechanism, assessmentSection); return FailureMechanismSectionResultAssemblyFactory.AssembleSection( sectionResult, assessmentSection, calculateProbabilityStrategy, Index: Riskeer/Piping/src/Riskeer.Piping.Data/PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.cs =================================================================== diff -u -r4fa486586ff8fc89759e91d6b4ca09833e5a4b94 -rb185f0fdb272fefefc09eb908a75dd1290c6a743 --- Riskeer/Piping/src/Riskeer.Piping.Data/PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.cs (.../PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.cs) (revision 4fa486586ff8fc89759e91d6b4ca09833e5a4b94) +++ Riskeer/Piping/src/Riskeer.Piping.Data/PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.cs (.../PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.cs) (revision b185f0fdb272fefefc09eb908a75dd1290c6a743) @@ -19,6 +19,7 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. +using System; using System.Linq; using Riskeer.Common.Data.AssessmentSection; using Riskeer.Common.Data.FailureMechanism; @@ -27,16 +28,42 @@ namespace Riskeer.Piping.Data { + /// + /// Factory to create instances of for section results + /// of the . + /// public static class PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory { - public static IFailureMechanismSectionResultCalculateProbabilityStrategy CreateCalculateStrategy( - PipingFailureMechanism failureMechanism, - AdoptableWithProfileProbabilityFailureMechanismSectionResult sectionResult, - PipingScenarioConfigurationPerFailureMechanismSection scenarioConfigurationForSection, - IAssessmentSection assessmentSection) + /// + /// Creates a based on the input arguments. + /// + /// The section result to create the strategy for. + /// The to create the strategy with. + /// The to create the strategy with. + /// An . + /// Thrown when any parameter is null. + public static IFailureMechanismSectionResultCalculateProbabilityStrategy CreateCalculateStrategy(AdoptableWithProfileProbabilityFailureMechanismSectionResult sectionResult, + PipingFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) { - bool scenarioConfigurationTypeIsSemiProbabilistic = failureMechanism.ScenarioConfigurationTypeIsSemiProbabilistic(scenarioConfigurationForSection); + if (sectionResult == null) + { + throw new ArgumentNullException(nameof(sectionResult)); + } + + if (failureMechanism == null) + { + throw new ArgumentNullException(nameof(failureMechanism)); + } + if (assessmentSection == null) + { + throw new ArgumentNullException(nameof(assessmentSection)); + } + + bool scenarioConfigurationTypeIsSemiProbabilistic = failureMechanism.ScenarioConfigurationTypeIsSemiProbabilistic( + failureMechanism.GetScenarioConfigurationForSection(sectionResult)); + return scenarioConfigurationTypeIsSemiProbabilistic ? (IFailureMechanismSectionResultCalculateProbabilityStrategy) CreateSemiProbabilisticCalculateStrategy(failureMechanism, sectionResult, assessmentSection) : CreateProbabilisticCalculateStrategy(failureMechanism, sectionResult); Index: Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingFailureMechanismResultView.cs =================================================================== diff -u -r1b776407263231aef850f1e5246bfbda5df23fe0 -rb185f0fdb272fefefc09eb908a75dd1290c6a743 --- Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingFailureMechanismResultView.cs (.../PipingFailureMechanismResultView.cs) (revision 1b776407263231aef850f1e5246bfbda5df23fe0) +++ Riskeer/Piping/src/Riskeer.Piping.Forms/Views/PipingFailureMechanismResultView.cs (.../PipingFailureMechanismResultView.cs) (revision b185f0fdb272fefefc09eb908a75dd1290c6a743) @@ -124,8 +124,7 @@ return new AdoptableWithProfileProbabilityFailureMechanismSectionResultRow( sectionResult, - PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.CreateCalculateStrategy( - FailureMechanism, sectionResult, scenarioConfigurationForSection, assessmentSection), + PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.CreateCalculateStrategy(sectionResult, scenarioConfigurationForSection, FailureMechanism, assessmentSection), CreateErrorProvider(sectionResult, scenarioConfigurationForSection), () => PipingFailureMechanismAssemblyFactory.AssembleSection(sectionResult, FailureMechanism, assessmentSection), new AdoptableWithProfileProbabilityFailureMechanismSectionResultRow.ConstructionProperties Index: Riskeer/Piping/test/Riskeer.Piping.Data.Test/PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactoryTest.cs =================================================================== diff -u --- Riskeer/Piping/test/Riskeer.Piping.Data.Test/PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactoryTest.cs (revision 0) +++ Riskeer/Piping/test/Riskeer.Piping.Data.Test/PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactoryTest.cs (revision b185f0fdb272fefefc09eb908a75dd1290c6a743) @@ -0,0 +1,192 @@ +// Copyright (C) Stichting Deltares 2021. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer 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.Collections.Generic; +using System.Linq; +using Core.Common.TestUtil; +using NUnit.Framework; +using Rhino.Mocks; +using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Data.TestUtil; +using Riskeer.Piping.Data.Probabilistic; +using Riskeer.Piping.Data.SemiProbabilistic; + +namespace Riskeer.Piping.Data.Test +{ + [TestFixture] + public class PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactoryTest + { + [Test] + public void CreateCalculateStrategy_SectionResultNull_ThrowsArgumentNullException() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new PipingFailureMechanism(); + + // Call + void Call() => PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.CreateCalculateStrategy( + null, failureMechanism, assessmentSection); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("sectionResult", exception.ParamName); + + mocks.VerifyAll(); + } + + [Test] + public void CreateCalculateStrategy_FailureMechanismNull_ThrowsArgumentNullException() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var sectionResult = new AdoptableWithProfileProbabilityFailureMechanismSectionResult(section); + + // Call + void Call() => PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.CreateCalculateStrategy( + sectionResult, null, assessmentSection); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("failureMechanism", exception.ParamName); + + mocks.VerifyAll(); + } + + [Test] + public void CreateCalculateStrategy_AssessmentSectionNull_ThrowsArgumentNullException() + { + // Setup + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + var sectionResult = new AdoptableWithProfileProbabilityFailureMechanismSectionResult(section); + PipingScenarioConfigurationPerFailureMechanismSection scenarioConfigurationForSection = CreateScenarioConfigurationForSection(section); + + var failureMechanism = new PipingFailureMechanism(); + + // Call + void Call() => PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.CreateCalculateStrategy( + sectionResult, failureMechanism, null); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("assessmentSection", exception.ParamName); + } + + [Test] + [TestCaseSource(nameof(GetSemiProbabilisticConfigurations))] + public void CreateCalculateStrategy_WithSemiProbabilisticConfigurations_ReturnsExpectedStrategy( + PipingFailureMechanism failureMechanism, PipingScenarioConfigurationPerFailureMechanismSectionType configurationType) + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + failureMechanism.SetSections(new[] + { + section + }, "APath"); + + PipingScenarioConfigurationPerFailureMechanismSection scenarioConfigurationPerFailureMechanismSection = + failureMechanism.ScenarioConfigurationsPerFailureMechanismSection.Single(); + scenarioConfigurationPerFailureMechanismSection.ScenarioConfigurationType = configurationType; + + // Call + IFailureMechanismSectionResultCalculateProbabilityStrategy strategy = + PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.CreateCalculateStrategy( + failureMechanism.SectionResults.Single(), failureMechanism, assessmentSection); + + // Assert + Assert.IsInstanceOf(strategy); + } + + [Test] + [TestCaseSource(nameof(GetProbabilisticConfigurations))] + public void CreateCalculateStrategy_WithProbabilisticConfigurations_ReturnsExpectedStrategy( + PipingFailureMechanism failureMechanism, PipingScenarioConfigurationPerFailureMechanismSectionType configurationType) + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + FailureMechanismSection section = FailureMechanismSectionTestFactory.CreateFailureMechanismSection(); + failureMechanism.SetSections(new[] + { + section + }, "APath"); + + PipingScenarioConfigurationPerFailureMechanismSection scenarioConfigurationPerFailureMechanismSection = + failureMechanism.ScenarioConfigurationsPerFailureMechanismSection.Single(); + scenarioConfigurationPerFailureMechanismSection.ScenarioConfigurationType = configurationType; + + // Call + IFailureMechanismSectionResultCalculateProbabilityStrategy strategy = + PipingFailureMechanismSectionResultCalculateProbabilityStrategyFactory.CreateCalculateStrategy( + failureMechanism.SectionResults.Single(), failureMechanism, assessmentSection); + + // Assert + Assert.IsInstanceOf(strategy); + } + + private static IEnumerable GetSemiProbabilisticConfigurations() + { + var random = new Random(21); + yield return new TestCaseData(new PipingFailureMechanism + { + ScenarioConfigurationType = PipingScenarioConfigurationType.SemiProbabilistic + }, random.NextEnumValue()); + + yield return new TestCaseData(new PipingFailureMechanism + { + ScenarioConfigurationType = PipingScenarioConfigurationType.PerFailureMechanismSection + }, PipingScenarioConfigurationPerFailureMechanismSectionType.SemiProbabilistic); + } + + private static IEnumerable GetProbabilisticConfigurations() + { + var random = new Random(21); + yield return new TestCaseData(new PipingFailureMechanism + { + ScenarioConfigurationType = PipingScenarioConfigurationType.Probabilistic + }, random.NextEnumValue()); + + yield return new TestCaseData(new PipingFailureMechanism + { + ScenarioConfigurationType = PipingScenarioConfigurationType.PerFailureMechanismSection + }, PipingScenarioConfigurationPerFailureMechanismSectionType.Probabilistic); + } + + private static PipingScenarioConfigurationPerFailureMechanismSection CreateScenarioConfigurationForSection(FailureMechanismSection section) + { + return new PipingScenarioConfigurationPerFailureMechanismSection(section); + } + } +} \ No newline at end of file