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